import { Alert, Center, Code, Group, Pagination, Skeleton, Stack, Table, Text, Title, Tooltip, } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconAlertCircle } from '@tabler/icons'; import { AxiosError } from 'axios'; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import { useTranslation } from 'next-i18next'; import { FunctionComponent, useState } from 'react'; import { useGetUsenetHistory } from '../../hooks/widgets/dashDot/api'; import { humanFileSize } from '../../tools/humanFileSize'; import { parseDuration } from '../../tools/client/parseDuration'; dayjs.extend(duration); interface UsenetHistoryListProps { appId: string; } const PAGE_SIZE = 13; export const UsenetHistoryList: FunctionComponent = ({ appId }) => { const [page, setPage] = useState(1); const { t } = useTranslation(['modules/usenet', 'common']); const { ref, width, height } = useElementSize(); const durationBreakpoint = 400; const { data, isLoading, isError, error } = useGetUsenetHistory({ limit: PAGE_SIZE, offset: (page - 1) * PAGE_SIZE, appId, }); const totalPages = Math.ceil((data?.total || 1) / PAGE_SIZE); if (isLoading) { return ( <> ); } if (isError) { return ( } my="lg" title={t('modules/usenet:history.error.title')} color="red" radius="md" > {t('modules/usenet:history.error.message')} {(error as AxiosError)?.response?.data as string} ); } if (!data || data.items.length <= 0) { return (
{t('modules/usenet:history.empty')}
); } return ( {durationBreakpoint < width ? ( ) : null} {data.items.map((history) => ( {durationBreakpoint < width ? ( ) : null} ))}
{t('modules/usenet:history.header.name')} {t('modules/usenet:history.header.size')}{t('modules/usenet:history.header.duration')}
{history.name} {humanFileSize(history.size)} {parseDuration(history.time, t)}
{totalPages > 1 && ( )}
); };