@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
59 lines • 2.65 kB
JavaScript
import { createUseLeftAccountsModule } from "../hooks/useLeftAccounts";
import { useLeftAccountsApyModule } from "../hooks/useLeftAccountsApy";
import { createUseRightBalanceNetwork } from "../hooks/useRightBalanceNetwork";
import { composeHooks } from "../../utils/composeHooks";
import { compareByBalanceThenFiat } from "../utils/sortByBalance";
export const getLeftElement = (NetworkConfigurationDeps) => (leftElement) => {
switch (leftElement) {
case "undefined":
return undefined;
case "numberOfAccountsAndApy":
return (params) => useLeftAccountsApyModule(params, NetworkConfigurationDeps.useAccountData, NetworkConfigurationDeps.accountsCountAndApy, params.networks);
case "numberOfAccounts":
default:
return createUseLeftAccountsModule({
useAccountData: NetworkConfigurationDeps.useAccountData,
accountsCount: NetworkConfigurationDeps.accountsCount,
});
}
};
export const getRightElement = (NetworkConfigurationDeps) => (rightElement) => {
switch (rightElement) {
case "undefined":
return undefined;
case "balance":
default:
return createUseRightBalanceNetwork({
useBalanceDeps: NetworkConfigurationDeps.useBalanceDeps,
balanceItem: NetworkConfigurationDeps.balanceItem,
});
}
};
export const createNetworkConfigurationHook = (NetworkConfigurationDeps) => ({ networksConfig, accounts$ }) => {
const { leftElement, rightElement } = networksConfig ?? {};
const leftHook = getLeftElement(NetworkConfigurationDeps)(leftElement);
const rightHook = getRightElement(NetworkConfigurationDeps)(rightElement);
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const hooks = [rightHook, leftHook].filter(Boolean);
return (assets, networks) => {
const composedHook = composeHooks(...hooks.map(hook => () => hook({
assets,
accounts$,
networks,
})));
const result = composedHook(assets);
if (leftElement === "numberOfAccounts" ||
leftElement === "numberOfAccountsAndApy" ||
leftElement === undefined // default
) {
result.sort((a, b) => (b?.count || 0) - (a?.count || 0));
}
if (rightElement === "balance" ||
rightElement === undefined // default
) {
result.sort((a, b) => compareByBalanceThenFiat(a?.balanceData, b?.balanceData));
}
return result;
};
};
//# sourceMappingURL=createNetworkConfiguration.js.map