@coin-voyage/paykit
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
32 lines (31 loc) • 1.51 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { fetchTokenList, getChains } from "@coin-voyage/shared/common";
import { ChainId } from "@coin-voyage/shared/types";
import { useQuery } from "@tanstack/react-query";
import { useMemo } from "react";
import usePayContext from "../components/contexts/pay";
import { SquircleIcon } from "../components/ui/Icon";
import { ROUTES } from "../types/routes";
const BTC_MIN_USD_AMOUNT = 15;
const TOKEN_LIST_QUERY_KEY = ["token-list"];
export function usePayToAddressChainOptions({ fiatAmount }) {
const { setRoute, paymentState } = usePayContext();
const { setPayToAddressChainId: setPayToAddressChain } = paymentState;
const { data: tokenList, isLoading } = useQuery({
queryKey: TOKEN_LIST_QUERY_KEY,
queryFn: fetchTokenList,
staleTime: 1000 * 60 * 5,
});
const chains = useMemo(() => getChains(tokenList?.chains ?? []), [tokenList]);
const options = useMemo(() => chains.map((chain) => ({
id: chain.chainId.toString(),
title: chain.name,
icons: [_jsx(SquircleIcon, { icon: chain.logoURI, alt: chain.name }, chain.chainId)],
onClick: () => {
setPayToAddressChain(chain.chainId);
setRoute(ROUTES.SELECT_PAY_TO_ADDRESS_TOKEN);
},
disabled: chain.chainId === ChainId.BTC && typeof fiatAmount === "number" && fiatAmount < BTC_MIN_USD_AMOUNT,
})), [chains, fiatAmount, setPayToAddressChain, setRoute]);
return { options, isLoading };
}