import { type ServerProvider } from "@t3tools/contracts"; import { memo } from "react"; import { InfoIcon, XIcon } from "lucide-react"; import { cn } from "~/lib/utils"; import { formatProviderDriverKindLabel } from "../../providerModels"; import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; export function getProviderStatusBannerKey(status: ServerProvider | null): string | null { return !status || status.status === "ready" || status.status === "disabled" ? null : [status.instanceId, status.status, status.auth.status, status.message ?? ""].join("\u0000"); } export function shouldShowProviderStatusBanner( status: ServerProvider | null, dismissedBannerKey: string | null, ): boolean { const bannerKey = getProviderStatusBannerKey(status); return bannerKey !== null && bannerKey !== dismissedBannerKey; } export const ProviderStatusBanner = memo(function ProviderStatusBanner({ onDismiss, status, }: { onDismiss: () => void; status: ServerProvider | null; }) { if (!status || status.status === "ready" || status.status === "disabled") { return null; } const providerName = status.displayName?.trim() || formatProviderDriverKindLabel(status.driver); const isUnauthenticated = status.status === "error" && status.auth.status === "unauthenticated"; const title = isUnauthenticated ? `${providerName} is unauthenticated` : `${providerName} provider status`; const message = isUnauthenticated ? "Sign in via the CLI to authenticate again." : (status.message ?? (status.status === "error" ? `${providerName} provider is unavailable.` : `${providerName} provider has limited availability.`)); return (
{title}
{message}
} /> {message}
); });