e4dcfc49aa
Tests / Import Check (Python 3.13) (push) Has been cancelled
Tests / Import Check (Python 3.14) (push) Has been cancelled
Tests / Python Tests (Python 3.11) (push) Has been cancelled
Tests / Python Tests (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.14) (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Tests / Lint and Format (push) Has been cancelled
Tests / Web Node Tests (push) Has been cancelled
Tests / Import Check (Python 3.11) (push) Has been cancelled
Tests / Import Check (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.13) (push) Has been cancelled
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import { useTranslation } from "react-i18next";
|
|
import { AlertTriangle, CheckCircle2, Clock3 } from "lucide-react";
|
|
import {
|
|
kbHasLiveProgress,
|
|
kbNeedsReindex,
|
|
resolveKbStatus,
|
|
type KnowledgeBase,
|
|
} from "@/lib/knowledge-helpers";
|
|
|
|
interface KbStatusBadgeProps {
|
|
kb: KnowledgeBase;
|
|
isReindexingLocally?: boolean;
|
|
}
|
|
|
|
export default function KbStatusBadge({
|
|
kb,
|
|
isReindexingLocally = false,
|
|
}: KbStatusBadgeProps) {
|
|
const { t } = useTranslation();
|
|
const status = resolveKbStatus(kb);
|
|
const needsReindex = kbNeedsReindex(kb);
|
|
const isLive = kbHasLiveProgress(kb) || isReindexingLocally;
|
|
const isError = status === "error";
|
|
const isReady = status === "ready" && !needsReindex;
|
|
|
|
const tone = needsReindex
|
|
? "bg-amber-100 text-amber-700 dark:bg-amber-950/30 dark:text-amber-300"
|
|
: isError
|
|
? "bg-red-100 text-red-700 dark:bg-red-950/30 dark:text-red-300"
|
|
: isLive
|
|
? "bg-sky-100 text-sky-700 dark:bg-sky-950/30 dark:text-sky-300"
|
|
: "bg-emerald-100 text-emerald-700 dark:bg-emerald-950/30 dark:text-emerald-300";
|
|
|
|
const Icon = isLive ? Clock3 : isReady ? CheckCircle2 : AlertTriangle;
|
|
|
|
const label = needsReindex
|
|
? t("Needs reindex")
|
|
: isError
|
|
? t("Error")
|
|
: isLive
|
|
? t("Processing live")
|
|
: isReady
|
|
? t("Ready")
|
|
: status.replaceAll("_", " ");
|
|
|
|
return (
|
|
<span
|
|
className={`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${tone}`}
|
|
>
|
|
<Icon className="h-3 w-3" />
|
|
{label}
|
|
</span>
|
|
);
|
|
}
|