import { Button, Card, Flex, Group, ScrollArea, Text } from '@mantine/core'; import { IconCircleCheck, IconCircleX, IconReportSearch, IconTestPipe } from '@tabler/icons-react'; import { useSession } from 'next-auth/react'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '~/config/provider'; import { api } from '~/utils/api'; import { defineWidget } from '../helper'; import { WidgetLoading } from '../loading'; import { IWidget } from '../widgets'; const definition = defineWidget({ id: 'indexer-manager', icon: IconReportSearch, options: {}, gridstack: { minWidth: 1, minHeight: 1, maxWidth: 3, maxHeight: 3, }, component: IndexerManagerWidgetTile, }); export type IIndexerManagerWidget = IWidget<(typeof definition)['id'], typeof definition>; interface IndexerManagerWidgetProps { widget: IIndexerManagerWidget; } function IndexerManagerWidgetTile({ widget }: IndexerManagerWidgetProps) { const { t } = useTranslation('modules/indexer-manager'); const { data: sessionData } = useSession(); const { name: configName } = useConfigContext(); const utils = api.useUtils(); const { isLoading: testAllLoading, mutateAsync: testAllAsync } = api.indexerManager.testAllIndexers.useMutation({ onSuccess: async () => { await utils.indexerManager.invalidate(); }, }); const { isInitialLoading: indexersLoading, data: indexersData } = api.indexerManager.indexers.useQuery({ configName: configName!, }); const { isInitialLoading: statusesLoading, data: statusesData } = api.indexerManager.statuses.useQuery( { configName: configName!, }, { staleTime: 1000 * 60 * 2, } ); if (indexersLoading || !indexersData || statusesLoading) { return ; } return ( {t('indexersStatus.title')} {indexersData.map((indexer: any) => ( {indexer.name} {!statusesData.find((status: any) => indexer.id === status.indexerId) && indexer.enable ? ( ) : ( )} ))} {sessionData && ( )} ); } export default definition;