"use client"; import { Avatar, Badge, Card, Group, ScrollArea, SimpleGrid, Stack, Text } from "@mantine/core"; import { clientApi } from "@homarr/api/client"; import { formatByteRate } from "@homarr/common"; import { getIconUrl } from "@homarr/definitions"; import { useCurrentLocale, useScopedI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; export default function ArchiveTeamWarriorWidget({ integrationIds, options, width, height, displayMode, }: WidgetComponentProps<"archiveTeamWarrior">) { const integrationId = integrationIds[0]; if (!integrationId) { return null; } return ( ); } const ArchiveTeamWarriorWidgetContent = ({ integrationId, options, width, height, isAdvanced, }: { integrationId: string; options: WidgetComponentProps<"archiveTeamWarrior">["options"]; width: number; height: number; isAdvanced: boolean; }) => { const t = useScopedI18n("widget.archiveTeamWarrior"); const locale = useCurrentLocale(); const [data] = clientApi.widget.archiveTeamWarrior.getStatus.useSuspenseQuery({ integrationId }); const status = data.status; const projectName = status.project?.title ?? status.selectedProject ?? t("noProjectSelected"); const statusKey = getStatusKey(status.status); return ( {projectName} {t(`status.${statusKey}`)} {options.showBroadcastMessage && status.broadcastMessage && (isAdvanced || height >= 160) && ( {status.broadcastMessage} )} {status.bandwidth && ( )} {isAdvanced && ( <> {t("runnerStatus", { status: t(`status.${getStatusKey(status.runnerStatus ?? status.status)}`) })} {t("updatedAt", { date: new Date(status.updatedAt).toLocaleString(locale) })} {status.items.map((item) => ( {item.name} {item.project ?? projectName} {t(`status.${item.status}`)} ))} )} ); }; const Metric = ({ label, value }: { label: string; value: number | string }) => ( {value} {label} ); const formatBandwidth = (value?: number) => formatByteRate(Math.round(value ?? 0)); type WarriorStatusKey = "running" | "completed" | "failed" | "canceled" | "stopped" | "idle" | "unknown"; const getStatusKey = (status?: string | null): WarriorStatusKey => { switch (status?.trim().toLowerCase()) { case "running": return "running"; case "done": case "completed": return "completed"; case "failed": return "failed"; case "canceled": case "cancelled": return "canceled"; case "stopped": return "stopped"; case "idle": return "idle"; default: return "unknown"; } }; const getStatusColor = (status: WarriorStatusKey): string => { if (status === "running") return "green"; if (status === "failed") return "red"; if (status === "canceled" || status === "stopped") return "yellow"; return "gray"; };