@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
64 lines • 2.76 kB
JavaScript
;
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