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