import { Box, Flex } from '@chakra-ui/react'; import { useQueryClient, useIsFetching } from '@tanstack/react-query'; import { sumBy } from 'es-toolkit'; import { useRouter } from 'next/router'; import React from 'react'; import type { Address } from 'types/api/address'; import { route } from 'nextjs/routes'; import { getResourceKey } from 'lib/api/useApiQuery'; import { useMultichainContext } from 'lib/contexts/multichain'; import useIsMobile from 'lib/hooks/useIsMobile'; import * as mixpanel from 'lib/mixpanel/index'; import getQueryParamString from 'lib/router/getQueryParamString'; import { IconButton } from 'toolkit/chakra/icon-button'; import { Link } from 'toolkit/chakra/link'; import { Skeleton } from 'toolkit/chakra/skeleton'; import { Tooltip } from 'toolkit/chakra/tooltip'; import IconSvg from 'ui/shared/IconSvg'; import useFetchTokens from '../utils/useFetchTokens'; import TokenSelectDesktop from './TokenSelectDesktop'; import TokenSelectMobile from './TokenSelectMobile'; const TokenSelect = () => { const router = useRouter(); const isMobile = useIsMobile(); const queryClient = useQueryClient(); const multichainContext = useMultichainContext(); const addressHash = getQueryParamString(router.query.hash); const addressResourceKey = getResourceKey('general:address', { pathParams: { hash: addressHash }, chainId: multichainContext?.chain?.id }); const addressQueryData = queryClient.getQueryData
(addressResourceKey); const { data, isError, isPending } = useFetchTokens({ hash: addressQueryData?.hash }); const tokensResourceKey = getResourceKey('general:address_tokens', { pathParams: { hash: addressQueryData?.hash }, queryParams: { type: 'ERC-20' }, chainId: multichainContext?.chain?.id, }); const tokensIsFetching = useIsFetching({ queryKey: tokensResourceKey }); const handleIconButtonClick = React.useCallback(() => { mixpanel.logEvent(mixpanel.EventTypes.PAGE_WIDGET, { Type: 'Tokens show all (icon)' }); window.scrollTo({ top: 0, behavior: 'smooth' }); }, [ ]); if (isPending) { return ( ); } const hasTokens = sumBy(Object.values(data), ({ items }) => items.length) > 0; if (isError || !hasTokens) { return 0; } return ( { isMobile ? : } ); }; export default React.memo(TokenSelect);