UNPKG

@coin-voyage/paykit

Version:

Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.

37 lines (36 loc) 1.56 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { fetchTokenList, tokensByChainId, tokenToCurrency } from "@coin-voyage/shared/common"; 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 TOKEN_LIST_QUERY_KEY = ["token-list"]; export function usePayToAddressTokens() { const { paymentState, setRoute } = usePayContext(); const { payToAddressChainId: payToAddressChain, setPayToAddressCurrency } = paymentState; const chainId = payToAddressChain; const { data: tokenList, isLoading } = useQuery({ queryKey: TOKEN_LIST_QUERY_KEY, queryFn: fetchTokenList, staleTime: 1000 * 60 * 5, }); const tokens = useMemo(() => { if (!tokenList || !chainId) return []; return tokensByChainId(tokenList.chains, chainId); }, [tokenList, chainId]); const options = useMemo(() => tokens.map((token) => ({ id: token.address ?? token.ticker, title: token.name, icons: token.logoURI ? [_jsx(SquircleIcon, { icon: token.logoURI, alt: token.name }, token.address ?? token.ticker)] : [], onClick: () => { const currency = tokenToCurrency(token); setPayToAddressCurrency(currency); setRoute(ROUTES.PAY_TO_ADDRESS); }, })), [tokens, setPayToAddressCurrency, setRoute]); return { options, isLoading }; }