import { CircleArrowUp, CircleCheck, Eye, HelpCircle } from "lucide-react"; import { theme } from "../theme"; import { Data } from "../types"; const metricsToShow = [ "monitored_images", "up_to_date", "updates_available", "unknown", ]; export default function Statistic({ name, metrics, }: { name: keyof Data["metrics"]; metrics: Data["metrics"]; }) { if (!metricsToShow.includes(name)) return null; const displayName = name.replaceAll("_", " "); return (
{displayName}
{metrics[name]}
{name === "monitored_images" && ( )} {name === "up_to_date" && ( )} {name === "updates_available" && getUpdatesAvailableIcon(metrics)} {name === "unknown" && ( )}
); } function getUpdatesAvailableIcon(metrics: Data["metrics"]) { const filteredMetrics = Object.entries(metrics).filter( ([key]) => !metricsToShow.includes(key), ); const maxMetric = filteredMetrics.reduce((max, current) => { if (Number(current[1]) > Number(max[1])) { return current; } return max; }, filteredMetrics[0])[0]; let color = ""; switch (maxMetric) { case "major_updates": color = "text-red-500"; break; case "minor_updates": color = "text-yellow-500"; break; default: color = "text-blue-500"; } return ; }