"use client"; import { Button } from "@/components/ui/button"; import { RotateCw } from "lucide-react"; import { useCertificate } from "@app/hooks/useCertificate"; import { useTranslations } from "next-intl"; type CertificateStatusProps = { orgId: string; domainId: string; fullDomain: string; autoFetch?: boolean; showLabel?: boolean; className?: string; onRefresh?: () => void; polling?: boolean; pollingInterval?: number; }; export default function CertificateStatus({ orgId, domainId, fullDomain, autoFetch = true, showLabel = true, className = "", onRefresh, polling = false, pollingInterval = 5000 }: CertificateStatusProps) { const t = useTranslations(); const { cert, certLoading, certError, refreshing, refreshCert } = useCertificate({ orgId, domainId, fullDomain, autoFetch, polling, pollingInterval }); const handleRefresh = async () => { await refreshCert(); onRefresh?.(); }; const getStatusColor = (status: string) => { switch (status) { case "valid": return "text-green-500"; case "pending": case "requested": return "text-yellow-500"; case "expired": case "failed": return "text-red-500"; default: return "text-muted-foreground"; } }; const shouldShowRefreshButton = (status: string, updatedAt: number) => { return ( status === "failed" || status === "expired" || (status === "requested" && updatedAt && new Date(updatedAt * 1000).getTime() < Date.now() - 5 * 60 * 1000) ); }; if (certLoading) { return (
{showLabel && ( {t("certificateStatus")}: )} {t("loading")}
); } if (certError) { return (
{showLabel && ( {t("certificateStatus")}: )} {certError}
); } if (!cert) { return (
{showLabel && ( {t("certificateStatus")}: )} {t("none", { defaultValue: "None" })}
); } return (
{showLabel && ( {t("certificateStatus")}: )} {cert.status.charAt(0).toUpperCase() + cert.status.slice(1)} {shouldShowRefreshButton(cert.status, cert.updatedAt) && ( )}
); }