import type { LivestreamStore } from "@streamplace/core";
import { AlertCircle, AlertTriangle, Info, X } from "lucide-react";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useStore } from "zustand";
interface Problem {
code: string;
severity: string;
message: string;
link?: string;
}
function ProblemIcon({ severity }: { severity: string }) {
switch (severity) {
case "error":
return ;
case "warning":
return ;
case "info":
return ;
default:
return ;
}
}
function severityBg(severity: string): string {
switch (severity) {
case "error":
return "bg-red-500/10 border-red-500/20";
case "warning":
return "bg-amber-500/10 border-amber-500/20";
case "info":
return "bg-blue-500/10 border-blue-500/20";
default:
return "bg-(--color-bg-elevated) border-(--color-border)";
}
}
/**
* Displays stream optimization warnings from the LivestreamStore.
* Renders as a card widget for the dashboard control panel.
*/
export function ProblemsWidget({ store }: { store: LivestreamStore }) {
const { t } = useTranslation("common");
const problems = useStore(store, (s) => s.problems);
const [dismissed, setDismissed] = useState(false);
if (problems.length === 0 || dismissed) {
return null;
}
return (
{t("stream-optimization", { defaultValue: "Stream Optimization" })}
{problems.length > 0 && (
{problems.length}
)}
{problems.map((problem: Problem) => (
{problem.code}
{problem.message}
{problem.link && (
Learn more
)}
))}
);
}