From 6f905970cd07c562a530c01c45a6a9f3d23c3a2f Mon Sep 17 00:00:00 2001 From: Zainab2604 Date: Sun, 15 Jun 2025 22:17:09 +0200 Subject: [PATCH] =?UTF-8?q?Hinzuf=C3=BCgen=20der=20Ampelsystem=20Logik?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/routes/extractedResult.$pitchBook.tsx | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/project/frontend/src/routes/extractedResult.$pitchBook.tsx b/project/frontend/src/routes/extractedResult.$pitchBook.tsx index bee005d..ef01d71 100644 --- a/project/frontend/src/routes/extractedResult.$pitchBook.tsx +++ b/project/frontend/src/routes/extractedResult.$pitchBook.tsx @@ -2,7 +2,7 @@ import ContentPasteIcon from "@mui/icons-material/ContentPaste"; import { Box, Button, Paper, Typography } from "@mui/material"; import { useSuspenseQuery } from "@tanstack/react-query"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; -import { useCallback, useState } from "react"; +import { useCallback, useState, useMemo } from "react"; import KennzahlenTable from "../components/KennzahlenTable"; import PDFViewer from "../components/pdfViewer"; import { kpiQueryOptions, settingsQueryOptions } from "../util/query"; @@ -19,7 +19,6 @@ export const Route = createFileRoute("/extractedResult/$pitchBook")({ function ExtractedResultsPage() { const { pitchBook } = Route.useParams(); const navigate = useNavigate(); - const status: "green" | "yellow" | "red" = "red"; const [currentPage, setCurrentPage] = useState(1); const [focusHighlight, setFocusHighlight] = useState({ page: 5, @@ -31,15 +30,38 @@ function ExtractedResultsPage() { 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 = { red: "#f43131", yellow: "#f6ed48", green: "#3fd942", }[status]; - const { data: kpi } = useSuspenseQuery(kpiQueryOptions(pitchBook)); - const { data: settings } = useSuspenseQuery(settingsQueryOptions()); - return (