import AutoAwesomeIcon from "@mui/icons-material/AutoAwesome";
import RefreshIcon from "@mui/icons-material/Refresh";
import {
Alert,
Box,
Button,
Chip,
Paper,
Table,
TableBody,
TableCell,
TableHead,
TableRow,
Typography
} from "@mui/material";
import { useQuery } from "@tanstack/react-query";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import { fetchAiReviews } from "../api/aiReviews";
import { fetchServerConfig } from "../api/config";
import PageHeader from "../components/PageHeader";
import { formatDate } from "../utils/date";
function statusColor(status: string): "default" | "primary" | "success" | "warning" | "error" {
if (status === "approved") return "success";
if (status === "needs_review") return "primary";
if (status === "failed") return "error";
if (status === "analyzing" || status === "pending") return "warning";
return "default";
}
export default function AiReviewList() {
const { t } = useTranslation();
const navigate = useNavigate();
const {
data: reviews,
isLoading,
isError,
refetch,
isFetching
} = useQuery({
queryKey: ["ai-reviews"],
queryFn: () => fetchAiReviews()
});
const { data: serverConfig } = useQuery({
queryKey: ["server-config"],
queryFn: fetchServerConfig
});
return (
<>
}
onClick={() => refetch()}
disabled={isFetching}
>
{t("aiReviews.refresh")}
}
/>
{!serverConfig?.aiConfigured && (
{t("aiReviews.aiNotConfigured")}
)}
{!serverConfig?.paperlessWebhookConfigured && (
{t("aiReviews.webhookNotConfigured")}
)}
{t("aiReviews.columns.document")}
{t("aiReviews.columns.status")}
{t("aiReviews.columns.confidence")}
{t("aiReviews.columns.updated")}
{t("aiReviews.columns.action")}
{isLoading && (
{t("messages.loading")}
)}
{isError && (
{t("aiReviews.loadError")}
)}
{!isLoading && !isError && (reviews ?? []).length === 0 && (
{t("aiReviews.empty")}
)}
{(reviews ?? []).map((review) => (
navigate(`/ai-reviews/${review.id}`)}
>
{review.documentTitle ?? `${t("aiReviews.document")} #${review.paperlessDocumentId}`}
Paperless #{review.paperlessDocumentId}
{review.confidence !== null ? `${Math.round(review.confidence * 100)}%` : "-"}
{formatDate(review.updatedAt, "dd.MM.yyyy HH:mm")}
))}
>
);
}