import { Thermometer } from "lucide-react"; import { useTranslation } from "react-i18next"; import type { ServerMetrics } from "@/main-axios"; import { StatRow } from "@/components/charts"; import { MetricCard } from "@/components/metric-card"; import { useEffect, useState } from "react"; import { selectTemperatureSensor, temperaturePreferenceKey, } from "../temperature-preference"; function formatTemperature(value: number | null | undefined): string { return typeof value === "number" && Number.isFinite(value) ? `${value.toFixed(1)}°C` : "N/A"; } export function TemperatureCard({ metrics, hostId, }: { metrics: ServerMetrics | null; hostId: number | null; }) { const { t } = useTranslation(); const temperature = metrics?.temperature; const sensors = temperature?.sensors ?? []; const [preferredLabel, setPreferredLabel] = useState(""); useEffect(() => { setPreferredLabel( hostId === null ? "" : (localStorage.getItem(temperaturePreferenceKey(hostId)) ?? ""), ); }, [hostId]); const preferredSensor = selectTemperatureSensor(sensors, preferredLabel); const displayedTemperature = preferredSensor?.celsius ?? temperature?.highestCelsius; const displayedLabel = preferredSensor?.label ?? t("hostMetrics.highestTemperature"); const chooseSensor = (label: string) => { setPreferredLabel(label); if (hostId === null) return; const key = temperaturePreferenceKey(hostId); if (label) localStorage.setItem(key, label); else localStorage.removeItem(key); }; return ( } scroll={sensors.length > 4} scrollMax={220} >
{formatTemperature(displayedTemperature)}
{displayedLabel}
{sensors.length > 1 && ( )} {sensors.length === 0 ? ( N/A ) : (
{sensors.map((sensor) => ( ))}
)}
); }