"use client"; import { useState, useMemo } from "react"; import { RefreshCw, AlertCircle } from "lucide-react"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { Badge } from "@/components/ui/badge"; import { useMcpEnv, useMcpRedeploy, type McpEnvVar, type EnvCategory, } from "@/lib/api/settings"; import { toast } from "sonner"; import { EnvVarRow } from "./env-var-row"; const CATEGORY_LABELS: Record = { multimodal: "Multimodal", rerank: "Rerank", halacha: "Halacha", general: "כללי", credentials: "אישורים", connection: "חיבורים", }; const CATEGORY_ORDER: EnvCategory[] = [ "multimodal", "rerank", "halacha", "general", "credentials", "connection", ]; export function EnvironmentTab() { const { data, isPending, error } = useMcpEnv(); const redeploy = useMcpRedeploy(); const [pendingRedeploy, setPendingRedeploy] = useState(false); const grouped = useMemo(() => { if (!data?.vars) return new Map(); const m = new Map(); for (const v of data.vars) { const arr = m.get(v.category) ?? []; arr.push(v); m.set(v.category, arr); } return m; }, [data]); function handleRedeploy() { redeploy.mutate(undefined, { onSuccess: (res) => { toast.success(res.message); setPendingRedeploy(false); }, onError: (err) => toast.error(`Redeploy נכשל: ${err.message}`), }); } if (isPending) return ; if (error) { return ( שגיאה בטעינת env vars: {error.message} ); } if (!data) return null; const coolifyAvailable = data.errors.length === 0; const driftCount = data.vars.filter((v) => v.drift).length; const duplicatesCount = data.vars.filter((v) => v.has_duplicates).length; return (
Coolify app: {data.coolify_app_uuid.slice(0, 8)}… {driftCount > 0 && ( {driftCount} drift )} {duplicatesCount > 0 && ( {duplicatesCount} duplicates )} {data.errors.length > 0 && ( {data.errors.join(", ")} )}
{CATEGORY_ORDER.map((cat) => { const vars = grouped.get(cat); if (!vars || vars.length === 0) return null; return (

{CATEGORY_LABELS[cat]} {vars.length}

{vars.map((v) => ( setPendingRedeploy(true)} /> ))}
); })}
); }