UNPKG

@ledgerhq/live-common

Version:
64 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCurrencyData = void 0; exports.useMarketData = useMarketData; const react_query_1 = require("@tanstack/react-query"); const api_1 = require("../api"); const api_2 = require("../state-manager/api"); const currencyFormatter_1 = require("../utils/currencyFormatter"); const queryKeys_1 = require("../utils/queryKeys"); const timers_1 = require("../utils/timers"); const types_1 = require("../utils/types"); const useCurrencyData = ({ id, counterCurrency }) => (0, api_2.useGetCurrencyDataQuery)({ id, counterCurrency }, { pollingInterval: timers_1.REFETCH_TIME_ONE_MINUTE * timers_1.BASIC_REFETCH, }); exports.useCurrencyData = useCurrencyData; function useMarketData(props) { const search = props.search?.toLowerCase() ?? ""; return (0, react_query_1.useQueries)({ queries: Array.from({ length: props.page ?? 1 }, (_, i) => i).map(page => ({ queryKey: [ queryKeys_1.QUERY_KEY.MarketData, page, props.order, { counterCurrency: props.counterCurrency, ...(props.search && props.search?.length >= 2 && { search: search }), ...(props.starred && props.starred?.length >= 1 && { starred: props.starred }), ...(props.liveCompatible && { liveCompatible: props.liveCompatible }), ...(props.order && [types_1.Order.topLosers, types_1.Order.topGainers].includes(props.order) && { range: props.range }), }, ], queryFn: () => (0, api_1.fetchList)({ ...props, page, search }), select: (data) => ({ formattedData: (0, currencyFormatter_1.currencyFormatter)(data), page, }), refetchOnMount: false, refetchOnReconnect: true, refetchOnWindowFocus: false, })), combine: combineMarketData, }); } function combineMarketData(results) { const hashMap = new Map(); results.forEach(result => { if (result.data) { hashMap.set(String(result.data.page), { updatedAt: result.dataUpdatedAt, refetch: result.refetch, }); } }); return { data: results.flatMap(result => result.data?.formattedData ?? []), isPending: results.some(result => result.isPending), isFetching: results.some(result => result.isFetching), isLoading: results.some(result => result.isLoading), isError: results.some(result => result.isError), cachedMetadataMap: hashMap, }; } //# sourceMappingURL=useMarketDataProvider.js.map