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
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
242269// [x] График сломан если везде одинаковые значения
243270// [x] При удалении тикера остается выбор
244271
245- import { subscribeToTicker , unsubscribeFromTicker } from " ./api"
272+ import { subscribeToTicker , unsubscribeFromTicker , coinListCrypto } from " ./api"
246273
247274export 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: {
0 commit comments