"use client"; import { useState } from "react"; import { Center, Divider, Group, Pagination, SegmentedControl, Stack, Text } from "@mantine/core"; import { IconClipboardList, IconCpu2, IconReportAnalytics } from "@tabler/icons-react"; import { clientApi } from "@homarr/api/client"; import { useI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; import { HealthCheckStatus } from "./health-check-status"; import { QueuePanel } from "./panels/queue.panel"; import { StatisticsPanel } from "./panels/statistics.panel"; import { WorkersPanel } from "./panels/workers.panel"; type Views = "workers" | "queue" | "statistics"; export default function MediaTranscodingWidget({ integrationIds, options }: WidgetComponentProps<"mediaTranscoding">) { const [queuePage, setQueuePage] = useState(1); const queuePageSize = 10; const [transcodingData] = clientApi.widget.mediaTranscoding.getDataAsync.useSuspenseQuery( { integrationId: integrationIds[0] ?? "", pageSize: queuePageSize, page: queuePage, }, { refetchOnMount: false, refetchOnWindowFocus: false, refetchOnReconnect: false, }, ); const [view, setView] = useState(options.defaultView); const totalQueuePages = Math.ceil((transcodingData.data.queue.totalCount || 1) / queuePageSize); const t = useI18n("widget.mediaTranscoding"); return ( {view === "workers" ? ( ) : view === "queue" ? ( ) : ( )} {t("tab.workers")} ), value: "workers", }, { label: (
{t("tab.queue")}
), value: "queue", }, { label: (
{t("tab.statistics")}
), value: "statistics", }, ]} value={view} onChange={(value) => setView(value as Views)} size="xs" /> {view === "queue" && ( <> {t("currentIndex", { start: transcodingData.data.queue.startIndex + 1, end: transcodingData.data.queue.endIndex + 1, total: transcodingData.data.queue.totalCount, })} )}
); }