"use client"; import { ActionIcon, Anchor, Button, Card, Flex, Group, ScrollArea, Stack, Text } from "@mantine/core"; import { IconCircleCheck, IconCircleX, IconReportSearch, IconTestPipe } from "@tabler/icons-react"; import combineClasses from "clsx"; import { clientApi } from "@homarr/api/client"; import { useRequiredBoard } from "@homarr/boards/context"; import { useI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; import classes from "./component.module.css"; export default function IndexerManagerWidget({ options, integrationIds, width, height, }: 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(); const board = useRequiredBoard(); 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 hasSmallWidth = width < 256; const hasSmallHeight = height < 256; return ( {t("widget.indexerManager.title")} {hasSmallHeight && ( { testAll({ integrationIds }); }} > )} {indexersData.map(({ integrationId, indexers }) => ( {indexers.map((indexer) => ( {indexer.name} {indexer.status === false || indexer.enabled === false ? ( ) : ( )} ))} ))} {!hasSmallHeight && ( )} ); }