@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
55 lines (48 loc) • 1.62 kB
text/typescript
import type { Account } from "@ledgerhq/types-live";
import { useCallback, useMemo } from "react";
import { SwapDataType, SwapSelectorStateType, SwapTransactionType } from "../types";
import { flattenAccounts } from "../../../account";
export const useReverseAccounts = ({
accounts,
toAccount,
fromAccount,
fromParentAccount,
fromCurrency,
setFromAccount,
setToAccount,
}: {
accounts: Account[] | undefined;
toAccount: SwapSelectorStateType["account"];
fromAccount: SwapSelectorStateType["account"];
fromParentAccount: SwapSelectorStateType["parentAccount"];
fromCurrency: SwapSelectorStateType["currency"];
setFromAccount: SwapTransactionType["setFromAccount"];
setToAccount: SwapTransactionType["setToAccount"];
}): {
isSwapReversable: SwapDataType["isSwapReversable"];
reverseSwap: SwapTransactionType["reverseSwap"];
} => {
const isSwapReversable = useMemo(() => {
if (!toAccount || !fromCurrency) return false;
const allAccounstWithSub = accounts ? flattenAccounts(accounts) : [];
const isToSwappable = !!allAccounstWithSub.find(account => account.id === toAccount?.id);
return isToSwappable;
}, [toAccount, fromCurrency, accounts]);
const reverseSwap: SwapTransactionType["reverseSwap"] = useCallback(() => {
if (isSwapReversable === false) return;
setFromAccount(toAccount);
setToAccount(fromCurrency, fromAccount, fromParentAccount);
}, [
toAccount,
fromCurrency,
fromAccount,
fromParentAccount,
setFromAccount,
setToAccount,
isSwapReversable,
]);
return {
isSwapReversable,
reverseSwap,
};
};