Skip to content

Commit

Permalink
chore(prices): add types to multi-index api
Browse files Browse the repository at this point in the history
  • Loading branch information
schnogz committed May 18, 2022
1 parent ba4197d commit c5bd0c0
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { call, put, select } from 'redux-saga/effects'

import { APIType } from '@core/network/api'
import { selectors } from 'data'
import { IndexMultiResponseType } from '@core/network/api/coin/types'

import { actions as A } from './slice'
import { CoinPricesRequestType } from './types'
Expand All @@ -23,7 +24,7 @@ export default ({ api }: { api: APIType }) => {
base: coin,
quote: fiatCurrency || defaultFiat
}))
const data = yield call(api.getCoinPrices, request, timestamp)
const data: IndexMultiResponseType = yield call(api.getCoinPrices, request, timestamp)
yield put(A.fetchCoinPricesSuccess(data))
} catch (e) {
yield put(A.fetchCoinPricesFailure(e.message))
Expand Down
21 changes: 12 additions & 9 deletions packages/blockchain-wallet-v4-frontend/src/data/prices/slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@ import Remote from '@core/remote'
import { CoinPricesRequestType, PricesStateType } from './types'

const createPricesKvPairs = (prices) => {
return mergeAll(
map(
(x) => ({
// @ts-ignore
[x.split('-')[0]]: prices[x] ? prices[x] : null
}),
keys(prices)
)
)
return Object.keys(prices).reduce((pricesMap, priceKey) => {
const coinPrice = prices[priceKey]

if (!coinPrice) return pricesMap

const coinCode = priceKey.split('-')[0]

return {
...pricesMap,
[coinCode]: coinPrice
}
}, {})
}

const initialState: PricesStateType = {
Expand Down
22 changes: 19 additions & 3 deletions packages/blockchain-wallet-v4-frontend/src/data/prices/types.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
import { CoinType, RemoteDataType, WalletFiatType } from '@core/types'

// TODO: type this!
type CoinPrice = {
marketCap: number
price: number
timestamp: number
volume24h: number
}

export type PricesStateType = {
current: RemoteDataType<any, any>
previousDay: RemoteDataType<any, any>
current: RemoteDataType<
any,
{
[key: string]: CoinPrice
}
>
previousDay: RemoteDataType<
any,
{
[key: string]: CoinPrice
}
>
}

export type CoinPricesRequestType = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ export const getData = createDeepEqualSelector(
coinPrices: ExtractSuccess<typeof coinPricesR>,
previousCoinPrices: ExtractSuccess<typeof coinPricesR>
) => {
const currentPrice = coinPrices[coin]
const yesterdayPrice = previousCoinPrices[coin]
const currentPrice = coinPrices[coin]?.price || 0
const yesterdayPrice = previousCoinPrices[coin]?.price || 0
const priceChangeNum = Number(((currentPrice - yesterdayPrice) / yesterdayPrice) * 100)
return Number.isNaN(priceChangeNum) ? '0' : priceChangeNum.toFixed(2)
}
Expand Down

0 comments on commit c5bd0c0

Please sign in to comment.