import { Box, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography, CircularProgress, Chip } from "@mui/material"; import { useSuspenseQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; import { pitchBooksQueryOptions } from "../util/query"; import PictureAsPdfIcon from '@mui/icons-material/PictureAsPdf'; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; import HourglassEmptyIcon from '@mui/icons-material/HourglassEmpty'; interface PitchBook { id: number; filename: string; created_at: string; kpi?: string | { [key: string]: { label: string; entity: string; page: number; status: string; source: string; }[]; }; status?: 'processing' | 'completed'; } export function PitchBooksTable() { const navigate = useNavigate(); const { data: pitchBooks, isLoading } = useSuspenseQuery(pitchBooksQueryOptions()); const handleRowClick = (pitchBookId: number) => { navigate({ to: "/extractedResult/$pitchBook", params: { pitchBook: pitchBookId.toString() }, search: { from: "overview" } }); }; const getKPIValue = (pitchBook: PitchBook, fieldName: string): string => { if (!pitchBook.kpi || typeof pitchBook.kpi === 'string') { try { const parsedKPI = JSON.parse(pitchBook.kpi as string); // Convert array to object format if needed const kpiObj = Array.isArray(parsedKPI) ? parsedKPI.reduce((acc: any, item: any) => { if (!acc[item.label]) acc[item.label] = []; acc[item.label].push(item); return acc; }, {}) : parsedKPI; return kpiObj[fieldName]?.[0]?.entity || 'N/A'; } catch { return 'N/A'; } } return (pitchBook.kpi as any)[fieldName]?.[0]?.entity || 'N/A'; }; const getStatus = (pitchBook: PitchBook) => { if (pitchBook.kpi && ((typeof pitchBook.kpi === 'string' && pitchBook.kpi !== '{}') || (typeof pitchBook.kpi === 'object' && Object.keys(pitchBook.kpi).length > 0))) { return 'completed'; } return 'processing'; }; if (isLoading) { return ( ); } return ( Fondsname Fondsmanager Dateiname Status {pitchBooks.map((pitchBook: PitchBook) => { const status = getStatus(pitchBook); const fundName = getKPIValue(pitchBook, 'FONDSNAME') || getKPIValue(pitchBook, 'FUND_NAME') || getKPIValue(pitchBook, 'NAME'); const manager = getKPIValue(pitchBook, 'FONDSMANAGER') || getKPIValue(pitchBook, 'MANAGER') || getKPIValue(pitchBook, 'PORTFOLIO_MANAGER'); return ( handleRowClick(pitchBook.id)} sx={{ cursor: "pointer", "&:hover": { backgroundColor: "#f9f9f9", }, }} > {fundName} {manager} {pitchBook.filename} {status === 'completed' ? ( } label="Abgeschlossen" size="small" sx={{ backgroundColor: "#e8f5e9", color: "#2e7d32", "& .MuiChip-icon": { color: "#2e7d32", }, }} /> ) : ( } label="In Bearbeitung" size="small" sx={{ backgroundColor: "#fff3e0", color: "#e65100", "& .MuiChip-icon": { color: "#e65100", }, }} /> )} ); })}
{pitchBooks.length === 0 && ( Keine Pitch Books vorhanden )}
); }