import { Flex } from '@chakra-ui/react';
import { useRouter } from 'next/router';
import React from 'react';
import config from 'configs/app';
import useApiQuery from 'lib/api/useApiQuery';
import throwOnResourceLoadError from 'lib/errors/throwOnResourceLoadError';
import getPoolLinks from 'lib/pools/getPoolLinks';
import { getPoolTitle } from 'lib/pools/getPoolTitle';
import getQueryParamString from 'lib/router/getQueryParamString';
import * as addressStubs from 'stubs/address';
import { POOL } from 'stubs/pools';
import { Image } from 'toolkit/chakra/image';
import { Link } from 'toolkit/chakra/link';
import { Skeleton } from 'toolkit/chakra/skeleton';
import { Tag } from 'toolkit/chakra/tag';
import PoolInfo from 'ui/pool/PoolInfo';
import isCustomAppError from 'ui/shared/AppError/isCustomAppError';
import CopyToClipboard from 'ui/shared/CopyToClipboard';
import DataFetchAlert from 'ui/shared/DataFetchAlert';
import AddressEntity from 'ui/shared/entities/address/AddressEntity';
import * as PoolEntity from 'ui/shared/entities/pool/PoolEntity';
import HashStringShortenDynamic from 'ui/shared/HashStringShortenDynamic';
import InfoButton from 'ui/shared/InfoButton';
import PageTitle from 'ui/shared/Page/PageTitle';
import VerifyWith from 'ui/shared/VerifyWith';
const Pool = () => {
const router = useRouter();
const hash = getQueryParamString(router.query.hash);
const { data, isPlaceholderData, isError, error } = useApiQuery('contractInfo:pool', {
pathParams: { hash, chainId: config.chain.id },
queryOptions: {
placeholderData: POOL,
refetchOnMount: false,
},
});
const addressQuery = useApiQuery('general:address', {
pathParams: { hash: data?.pool_id },
queryOptions: {
enabled: Boolean(data?.is_contract),
placeholderData: addressStubs.ADDRESS_INFO,
},
});
const content = (() => {
if (isError) {
if (isCustomAppError(error)) {
throwOnResourceLoadError({ resource: 'contractInfo:pool', error, isError: true });
}
return ;
}
if (!data) {
return null;
}
return (
);
})();
const externalLinks = getPoolLinks(data);
const hasLinks = externalLinks.length > 0;
const externalLinksComponents = React.useMemo(() => {
return externalLinks
.map((link) => {
return (
{ link.title }
);
});
}, [ externalLinks ]);
const poolIdOrContract = React.useMemo(() => {
if (data?.is_contract && addressQuery.data) {
return ;
} else if (data?.pool_id) {
return (
);
}
return null;
}, [ data, isPlaceholderData, addressQuery.isPlaceholderData, addressQuery.data ]);
const titleSecondRow = (
{ poolIdOrContract }
{ `This Liquidity Provider (LP) token represents ${ data?.base_token_symbol }/${ data?.quote_token_symbol } pairing.` }
{ hasLinks && (
) }
);
const poolTitle = data ? getPoolTitle(data) : '';
return (
<>
) : null }
contentAfter={ Pool }
secondRow={ titleSecondRow }
isLoading={ isPlaceholderData }
withTextAd
/>
{ content }
>
);
};
export default Pool;