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")} ))}
); }