"use client"; import { Anchor, Button, Card, Container, Flex, Group, ScrollArea, Text } from "@mantine/core"; import { IconCircleCheck, IconCircleX, IconReportSearch, IconTestPipe } from "@tabler/icons-react"; import { clientApi } from "@homarr/api/client"; import { useI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; export default function IndexerManagerWidget({ options, integrationIds }: WidgetComponentProps<"indexerManager">) { const t = useI18n(); const [indexersData] = clientApi.widget.indexerManager.getIndexersStatus.useSuspenseQuery( { integrationIds }, { refetchOnMount: false, refetchOnWindowFocus: false, refetchOnReconnect: false, retry: false, }, ); const utils = clientApi.useUtils(); const { mutate: testAll, isPending } = clientApi.widget.indexerManager.testAllIndexers.useMutation(); clientApi.widget.indexerManager.subscribeIndexersStatus.useSubscription( { integrationIds }, { onData(newData) { utils.widget.indexerManager.getIndexersStatus.setData({ integrationIds }, (previousData) => previousData?.map((item) => item.integrationId === newData.integrationId ? { ...item, indexers: newData.indexers } : item, ), ); }, }, ); const iconStyle = { height: "7.5cqmin", width: "7.5cqmin" }; return ( {t("widget.indexerManager.title")} {indexersData.map(({ integrationId, indexers }) => ( {indexers.map((indexer) => ( {indexer.name} {indexer.status === false || indexer.enabled === false ? ( ) : ( )} ))} ))} ); }