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 (
);
};