Hinzufügen der Ampelsystem Logik #75

Merged
3019483 merged 1 commits from #33-Ampelsystem into main 2025-06-16 18:45:04 +02:00
1 changed files with 27 additions and 5 deletions

View File

@ -2,7 +2,7 @@ import ContentPasteIcon from "@mui/icons-material/ContentPaste";
import { Box, Button, Paper, Typography } from "@mui/material"; import { Box, Button, Paper, Typography } from "@mui/material";
import { useSuspenseQuery } from "@tanstack/react-query"; import { useSuspenseQuery } from "@tanstack/react-query";
import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { useCallback, useState } from "react"; import { useCallback, useState, useMemo } from "react";
import KennzahlenTable from "../components/KennzahlenTable"; import KennzahlenTable from "../components/KennzahlenTable";
import PDFViewer from "../components/pdfViewer"; import PDFViewer from "../components/pdfViewer";
import { kpiQueryOptions, settingsQueryOptions } from "../util/query"; import { kpiQueryOptions, settingsQueryOptions } from "../util/query";
@ -19,7 +19,6 @@ export const Route = createFileRoute("/extractedResult/$pitchBook")({
function ExtractedResultsPage() { function ExtractedResultsPage() {
const { pitchBook } = Route.useParams(); const { pitchBook } = Route.useParams();
const navigate = useNavigate(); const navigate = useNavigate();
const status: "green" | "yellow" | "red" = "red";
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const [focusHighlight, setFocusHighlight] = useState({ const [focusHighlight, setFocusHighlight] = useState({
page: 5, page: 5,
@ -31,15 +30,38 @@ function ExtractedResultsPage() {
setFocusHighlight({ page, text: entity }); setFocusHighlight({ page, text: entity });
}, []); }, []);
const { data: kpi } = useSuspenseQuery(kpiQueryOptions(pitchBook));
const { data: settings } = useSuspenseQuery(settingsQueryOptions());
const status = useMemo(() => {
let hasRedBorders = false;
let hasYellowBorders = false;
settings
.filter((setting) => setting.active)
.forEach((setting) => {
const values = kpi[setting.name.toUpperCase()] || [];
const hasNoValue = setting.mandatory && (values.length === 0 || values[0]?.entity === "");
const hasMultipleValues = values.length > 1;
if (hasNoValue) {
hasRedBorders = true;
} else if (hasMultipleValues) {
hasYellowBorders = true;
}
});
if (hasRedBorders) return "red";
if (hasYellowBorders) return "yellow";
return "green";
}, [kpi, settings]);
const statusColor = { const statusColor = {
red: "#f43131", red: "#f43131",
yellow: "#f6ed48", yellow: "#f6ed48",
green: "#3fd942", green: "#3fd942",
}[status]; }[status];
const { data: kpi } = useSuspenseQuery(kpiQueryOptions(pitchBook));
const { data: settings } = useSuspenseQuery(settingsQueryOptions());
return ( return (
<Box p={4}> <Box p={4}>
<Box display="flex" alignItems="center" gap={3}> <Box display="flex" alignItems="center" gap={3}>