@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
37 lines • 1.91 kB
JavaScript
import { LoadingStatus } from "./type";
import { useEffect, useMemo, useState } from "react";
import { isCurrencySupported, listSupportedCurrencies, listTokens } from "../currencies";
import { loadCurrenciesByProvider } from "./helper";
import { useCurrenciesUnderFeatureFlag } from "../modularDrawer/hooks/useCurrenciesUnderFeatureFlag";
// FIXME(LIVE-10505): bad performane & shared utility to move to coin-framework
const listSupportedTokens = () => listTokens().filter(t => isCurrencySupported(t.parentCurrency));
const initialResult = {
sortedCryptoCurrencies: [],
currenciesByProvider: [],
};
export const useGroupedCurrenciesByProvider = (withLoading) => {
const [result, setResult] = useState(initialResult);
// the import is from MAD but as this hook will be removed, it's fine to keep it here
const { deactivatedCurrencyIds } = useCurrenciesUnderFeatureFlag();
const [loadingStatus, setLoadingStatus] = useState(LoadingStatus.Idle);
const coinsAndTokensSupported = useMemo(() => listSupportedCurrencies()
.concat(listSupportedTokens())
.filter(c => !deactivatedCurrencyIds.has(c.id)), [deactivatedCurrencyIds]);
// Get mapped assets filtered by supported & sorted currencies, grouped by provider id
useEffect(() => {
if (withLoading) {
setLoadingStatus(LoadingStatus.Idle);
loadCurrenciesByProvider(coinsAndTokensSupported)
.then(data => {
setResult(data);
setLoadingStatus(LoadingStatus.Success);
})
.catch(() => setLoadingStatus(LoadingStatus.Error));
}
else {
loadCurrenciesByProvider(coinsAndTokensSupported).then(setResult);
}
}, [coinsAndTokensSupported, withLoading]);
return withLoading ? { result, loadingStatus } : result;
};
//# sourceMappingURL=useGroupedCurrenciesByProvider.hook.js.map