"use client"; import { Badge } from "@/components/ui/badge"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import type { AdminDashboardData, ProviderStatus } from "./types"; interface ProviderStatusProps { data: AdminDashboardData | null; isLoading: boolean; } const PROVIDER_LABELS: Record = { google: "Google Translate", google_cloud: "Google Cloud", deepl: "DeepL", ollama: "Ollama (Local)", openai: "OpenAI", openrouter: "IA Essentielle", openrouter_premium: "IA Premium", deepseek: "IA Express", minimax: "IA Avancée", zai: "Grok (xAI)", }; const STATUS_CONFIG = { online: { dotClass: "bg-green-500", label: "Online", badgeClass: "border-green-200/30 bg-green-500/10 text-green-600", }, degraded: { dotClass: "bg-yellow-500", label: "Degraded", badgeClass: "border-yellow-200/30 bg-yellow-500/10 text-yellow-600", }, offline: { dotClass: "bg-red-500", label: "Offline", badgeClass: "border-red-200/30 bg-red-500/10 text-red-500", }, }; function getProviderStatus( provider: ProviderStatus ): "online" | "degraded" | "offline" { if (provider.available) return "online"; if (provider.error) return "offline"; return "degraded"; } export function ProviderStatus({ data, isLoading }: ProviderStatusProps) { const providers = Object.entries(data?.providers || {}); if (isLoading && !data) { return (
{[1, 2, 3, 4].map((i) => (
))}
); } if (providers.length === 0) { return (
Translation API Providers No provider data available
); } return (
Translation API Providers {providers.length} provider{providers.length !== 1 ? "s" : ""}
{providers.map(([key, provider]) => { const status = getProviderStatus(provider); const config = STATUS_CONFIG[status]; const label = PROVIDER_LABELS[key] || provider.name || key; return ( {label}
{config.label} {provider.latency_ms !== undefined && ( Latency: {provider.latency_ms}ms )} {provider.last_check && ( Last check:{" "} {new Date(provider.last_check).toLocaleTimeString()} )} {provider.error && ( {provider.error} )}
); })}
); }