|
2 | 2 | import { getContext } from 'svelte'; |
3 | 3 | import { Asset } from '@wharfkit/antelope'; |
4 | 4 | import ChartContainer from './chart-container.svelte'; |
5 | | - import type { UnicoveContext } from '$lib/state/client.svelte'; |
| 5 | + import type { MarketContext, UnicoveContext } from '$lib/state/client.svelte'; |
6 | 6 | import type { HistoricalPrice } from '$lib/types'; |
7 | 7 | import Loading from './loading.svelte'; |
| 8 | + import { Currencies } from '$lib/types/currencies'; |
| 9 | + import { calculateValue } from '$lib/utils'; |
8 | 10 |
|
9 | | - const { network } = getContext<UnicoveContext>('state'); |
| 11 | + const context = getContext<UnicoveContext>('state'); |
| 12 | + const market = getContext<MarketContext>('market'); |
10 | 13 |
|
11 | 14 | type Price = { date: string; value: number }; |
12 | 15 | type APIResponse = Price[] | { error: string }; |
13 | 16 |
|
14 | 17 | const fetchTokenPrices = async () => { |
15 | | - if (network.supports('timeseries')) { |
| 18 | + if (context.network.supports('timeseries')) { |
16 | 19 | try { |
17 | | - const response = await network.fetch(`/${network}/api/metrics/marketprice/token`); |
| 20 | + const response = await context.network.fetch( |
| 21 | + `/${context.network}/api/metrics/marketprice/token` |
| 22 | + ); |
18 | 23 | const parsedTokenResponse: APIResponse = await response.json(); |
19 | 24 |
|
20 | 25 | if (Array.isArray(parsedTokenResponse) && parsedTokenResponse.length) { |
21 | | - return parsedTokenResponse.map( |
22 | | - (price: Price) => |
23 | | - ({ |
24 | | - date: new Date(price.date), |
25 | | - value: Asset.from(price.value / 10000, '4,USD') |
26 | | - }) as HistoricalPrice |
27 | | - ); |
| 26 | + const currency = Currencies[context.settings.data.displayCurrency]; |
| 27 | + const pair = market.market.getPair(Currencies.USD, currency); |
| 28 | + const converted = parsedTokenResponse.map((price: Price): HistoricalPrice => { |
| 29 | + let value = Asset.from(price.value / 10000, '4,USD'); |
| 30 | + if (pair) { |
| 31 | + value = calculateValue(value, pair.price); |
| 32 | + } |
| 33 | + return { |
| 34 | + date: new Date(price.date), |
| 35 | + value |
| 36 | + }; |
| 37 | + }); |
| 38 | + const tokenpair = market.market.getPair(context.network.token.id, currency); |
| 39 | + if (tokenpair) { |
| 40 | + converted.unshift({ |
| 41 | + date: new Date(), |
| 42 | + value: tokenpair.price |
| 43 | + }); |
| 44 | + } |
| 45 | + return converted; |
28 | 46 | } else if ('error' in parsedTokenResponse && parsedTokenResponse.error) { |
29 | 47 | throw new Error(String(parsedTokenResponse.error)); |
30 | 48 | } else { |
|
38 | 56 | } |
39 | 57 | }; |
40 | 58 |
|
41 | | - let systemtoken = Asset.Symbol.from(network.config.systemtoken.symbol); |
42 | | - let pair = $derived(String(systemtoken.name) + '/USD'); |
| 59 | + let systemtoken = Asset.Symbol.from(context.network.config.systemtoken.symbol); |
| 60 | + let currency = $derived(Currencies[context.settings.data.displayCurrency]); |
| 61 | + let pair = $derived(String(systemtoken.name) + '/' + currency.symbol.name); |
43 | 62 | </script> |
44 | 63 |
|
45 | 64 | {#await fetchTokenPrices()} |
|
0 commit comments