/* @flow */ import { httpRequest } from 'utils/networkUtils'; import { resolveAfter } from 'utils/promiseUtils'; import { READY } from 'actions/constants/localStorage'; import type { Middleware, MiddlewareAPI, MiddlewareDispatch, Dispatch, Action, AsyncAction, GetState, } from 'flowtype'; export const RATE_UPDATE: 'rate__update' = 'rate__update'; export type FiatRateAction = { type: typeof RATE_UPDATE, network: string, rate: number, }; const loadRateAction = (): AsyncAction => async ( dispatch: Dispatch, getState: GetState ): Promise => { const { config } = getState().localStorage; if (!config) return; try { config.fiatValueTickers.forEach(async ticker => { const response = await httpRequest( `${ ticker.url }?tickers=false&market_data=true&community_data=false&developer_data=false&sparkline=false`, 'json' ); if (response) { dispatch({ type: RATE_UPDATE, network: response.symbol, rate: response.market_data.current_price.usd, }); } }); } catch (error) { // ignore error } await resolveAfter(50000); }; /** * Middleware */ const CoingeckoService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispatch) => ( action: Action ): Action => { next(action); if (action.type === READY) { api.dispatch(loadRateAction()); } return action; }; export default CoingeckoService;