Skip to content

Commit f145e08

Browse files
committed
Auto hint cryptocurrencies
1 parent 8056613 commit f145e08

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

src/App.vue

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
<div class="mt-1 relative rounded-md shadow-md">
1010
<input
1111
v-model="ticker"
12+
@input="searchHandler"
1213
@keydown.enter="add"
1314
type="text"
1415
name="wallet"
1516
id="wallet"
1617
class="
18+
p-1
1719
block
1820
w-full
1921
pr-10
@@ -26,6 +28,31 @@
2628
placeholder="Например DOGE"
2729
/>
2830
</div>
31+
<div
32+
v-if="makeSuggestions().length"
33+
class="flex bg-white shadow-md p-1 render-md shadow-md flex-wrap rounded-md"
34+
>
35+
<span
36+
v-for="coinSuggest of makeSuggestions()"
37+
:key="coinSuggest.id"
38+
@click="addSuggest(coinSuggest)"
39+
class="
40+
inline-flex
41+
items-center
42+
px-2
43+
m-1
44+
rounded-md
45+
text-xs
46+
font-medium
47+
bg-gray-300
48+
text-gray-800
49+
cursor-pointer
50+
"
51+
>
52+
{{ coinSuggest.Symbol }}
53+
</span>
54+
</div>
55+
<div v-if="tickerError" class="text-sm text-red-600">Такой тикер уже добавлен</div>
2956
</div>
3057
</div>
3158
<button
@@ -242,7 +269,7 @@
242269
// [x] График сломан если везде одинаковые значения
243270
// [x] При удалении тикера остается выбор
244271
245-
import { subscribeToTicker, unsubscribeFromTicker } from "./api"
272+
import { subscribeToTicker, unsubscribeFromTicker, coinListCrypto } from "./api"
246273
247274
export default {
248275
name: "App",
@@ -256,6 +283,7 @@ export default {
256283
selectedTicker: null,
257284
258285
graph: [],
286+
tickerError: false,
259287
260288
page: 1,
261289
}
@@ -282,7 +310,7 @@ export default {
282310
})
283311
})
284312
}
285-
setInterval(this.updateTickers, 5000)
313+
this.saveCoinList()
286314
},
287315
288316
computed: {
@@ -326,6 +354,13 @@ export default {
326354
},
327355
328356
methods: {
357+
async saveCoinList() {
358+
const coinList = JSON.parse(sessionStorage.getItem("coinList"))
359+
if (!coinList) {
360+
sessionStorage.setItem("coinList", JSON.stringify(await coinListCrypto()))
361+
}
362+
},
363+
329364
updateTicker(tickerName, price) {
330365
this.tickers
331366
.filter(ticker => ticker.name === tickerName)
@@ -359,7 +394,6 @@ export default {
359394
},
360395
361396
select(ticker) {
362-
console.log(ticker)
363397
this.selectedTicker = ticker
364398
},
365399
@@ -370,6 +404,31 @@ export default {
370404
}
371405
unsubscribeFromTicker(tickerToRemove.name)
372406
},
407+
408+
searchHandler() {
409+
if (this.tickerError) {
410+
this.tickerError = false
411+
}
412+
this.makeSuggestions()
413+
},
414+
415+
addSuggest(coinSuggest) {
416+
this.ticker = coinSuggest.Symbol
417+
this.add()
418+
},
419+
420+
makeSuggestions() {
421+
if (!this.ticker.trim()) return []
422+
423+
let coinList = JSON.parse(sessionStorage.getItem("coinList")) || []
424+
coinList = Object.values(coinList.Data)
425+
coinList = coinList.filter(item =>
426+
item.FullName.toLowerCase().includes(this.ticker.trim().toLowerCase())
427+
)
428+
coinList.splice(4)
429+
430+
return coinList
431+
},
373432
},
374433
375434
watch: {

src/api.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ export const unsubscribeFromTicker = ticker => {
5656
tickersHandlers.delete(ticker)
5757
unsubscribeFromTickerOnWs(ticker)
5858
}
59+
60+
export const coinListCrypto = async () =>
61+
await fetch("https://min-api.cryptocompare.com/data/all/coinlist?summary=true").then(r =>
62+
r.json()
63+
)

0 commit comments

Comments
 (0)