import { Badge, Button, Group, Select, Stack, Tabs, Text, Title, useMantineTheme, } from '@mantine/core'; import { IconPlayerPause, IconPlayerPlay } from '@tabler/icons'; import { useEffect, useState } from 'react'; import { useElementSize } from '@mantine/hooks'; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import { useTranslation } from 'next-i18next'; import { UsenetQueueList } from './UsenetQueueList'; import { UsenetHistoryList } from './UsenetHistoryList'; import { BaseTileProps } from '../../components/Dashboard/Tiles/type'; import { AppIntegrationType } from '../../types/app'; import { useConfigContext } from '../../config/provider'; import { useGetUsenetInfo, usePauseUsenetQueue, useResumeUsenetQueue } from '../../tools/hooks/api'; import { HomarrCardWrapper } from '../../components/Dashboard/Tiles/HomarrCardWrapper'; import { humanFileSize } from '../../tools/humanFileSize'; dayjs.extend(duration); const downloadAppTypes: AppIntegrationType['type'][] = ['sabnzbd', 'nzbGet']; interface UseNetTileProps extends BaseTileProps {} export const UseNetTile = ({ className }: UseNetTileProps) => { const { t } = useTranslation('modules/usenet'); const { config } = useConfigContext(); const downloadApps = config?.apps.filter( (x) => x.integration && downloadAppTypes.includes(x.integration.type) ) ?? []; const [selectedAppId, setSelectedApp] = useState(downloadApps[0]?.id); const { data } = useGetUsenetInfo({ appId: selectedAppId! }); useEffect(() => { if (!selectedAppId && downloadApps.length) { setSelectedApp(downloadApps[0].id); } }, [downloadApps, selectedAppId]); const { mutate: pause } = usePauseUsenetQueue({ appId: selectedAppId! }); const { mutate: resume } = useResumeUsenetQueue({ appId: selectedAppId! }); if (downloadApps.length === 0) { return ( {t('card.errors.noDownloadClients.title')} {t('card.errors.noDownloadClients.text')} ); } if (!selectedAppId) { return null; } const { ref, width, height } = useElementSize(); const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; return ( {t('tabs.queue')} {t('tabs.history')} {data && ( {width > MIN_WIDTH_MOBILE && ( <> {humanFileSize(data?.speed)}/s {t('info.sizeLeft')}: {humanFileSize(data?.sizeLeft)} )} )} {downloadApps.length > 1 && (