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;