import { Text, chakra } from '@chakra-ui/react'; import React from 'react'; import config from 'configs/app'; import { Alert } from 'toolkit/chakra/alert'; import { Link } from 'toolkit/chakra/link'; import { Skeleton } from 'toolkit/chakra/skeleton'; import { TableCell, TableRow } from 'toolkit/chakra/table'; const flashblocksFeature = config.features.flashblocks; interface InjectedProps { content: React.ReactNode; } interface Props { type?: 'transaction' | 'token_transfer' | 'deposit' | 'block' | 'flashblock' | 'cross_chain_transaction'; children?: (props: InjectedProps) => React.JSX.Element; className?: string; url?: string; showErrorAlert?: boolean; num?: number; isLoading?: boolean; onLinkClick?: () => void; } const SocketNewItemsNotice = chakra(({ children, className, url, num, showErrorAlert, type = 'transaction', isLoading, onLinkClick }: Props) => { const handleLinkClick = React.useCallback(() => { onLinkClick ? onLinkClick() : window.location.reload(); }, [ onLinkClick ]); const alertContent = (() => { if (showErrorAlert) { return 'Live updates temporarily delayed'; } let name; switch (type) { case 'token_transfer': name = 'token transfer'; break; case 'deposit': name = 'deposit'; break; case 'block': name = 'block'; break; case 'flashblock': { if (flashblocksFeature.isEnabled) { name = flashblocksFeature.name; } break; } case 'cross_chain_transaction': name = 'cross chain transaction'; break; default: name = 'transaction'; break; } if (!num) { return `scanning new ${ name }s...`; } if (type === 'cross_chain_transaction') { return ( More { name }s available ); } return ( <> { num.toLocaleString() } more { name }{ num > 1 ? 's' : '' } ha{ num > 1 ? 've' : 's' } come in ); })(); const content = !isLoading ? ( { alertContent } ) : ; return children ? children({ content }) : content; }); export default SocketNewItemsNotice; export const Desktop = ({ ...props }: Props) => { return ( { ({ content }) => { content } } ); }; export const Mobile = ({ ...props }: Props) => { return ( ); };