"use client"; import React, { useState } from "react"; import { useSelector, useDispatch } from "react-redux"; import { RootState } from "../../../../../../redux/store"; import { setVonDatum, setBisDatum, } from "../../../../../../redux/slices/kabelueberwachungChartSlice"; import { ComposedChart, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Line, Brush, Area, } from "recharts"; // Benutzerdefinierter Tooltip für die richtige Anordnung der Werte const CustomTooltip = ({ active, payload, label }: any) => { if (active && payload && payload.length) { const messwertMax = payload.find( (p: any) => p.dataKey === "messwertMaximum" ); const messwert = payload.find((p: any) => p.dataKey === "messwert"); const messwertMin = payload.find( (p: any) => p.dataKey === "messwertMinimum" ); const messwertDurchschnitt = payload.find( (p: any) => p.dataKey === "messwertDurchschnitt" ); return (
{new Date(label).toLocaleString()}
{messwertMax ? `Messwert Maximum: ${messwertMax.value.toFixed(2)} kOhm` : ""}
{messwert ? `Messwert: ${messwert.value.toFixed(2)} kOhm` : ""} {messwertDurchschnitt ? `Messwert Durchschnitt: ${messwertDurchschnitt.value.toFixed( 2 )} kOhm` : ""}
{messwertMin ? `Messwert Minimum: ${messwertMin.value.toFixed(2)} kOhm` : ""}
); } return null; }; const LoopMeasurementChart = () => { const littwinBlue = getComputedStyle( document.documentElement ).getPropertyValue("--littwin-blue"); const dispatch = useDispatch(); const istVollbild = useSelector( (state: RootState) => state.kabelueberwachungChart.isFullScreen ); const { loopMeasurementCurveChartData, vonDatum, bisDatum } = useSelector( (state: RootState) => state.kabelueberwachungChart ); const ausgewaehlterModus = useSelector( (state: RootState) => state.kabelueberwachungChart.selectedMode ); // Konvertiere Daten für den Chart & kehre Reihenfolge um const formatierteDaten = loopMeasurementCurveChartData .map((eintrag) => ({ zeit: new Date(eintrag.t).getTime(), // Zeitstempel messwertMinimum: eintrag.i, // Minimum (Tiefstwert) messwertMaximum: eintrag.a, // Maximum (Höchstwert) messwert: eintrag.m ?? null, // Aktueller Messwert messwertDurchschnitt: ausgewaehlterModus === "DIA1" || ausgewaehlterModus === "DIA2" ? eintrag.g ?? null : null, // Durchschnittswert nur in DIA1 & DIA2 })) .reverse(); // Hier wird die Reihenfolge umgekehrt // Berechnung des minimalen Werts für Y-Achse const minMesswert = Math.min( ...loopMeasurementCurveChartData.map((entry) => entry.i) ); const [zoomedXDomain, setZoomedXDomain] = useState([ new Date(vonDatum).getTime(), new Date(bisDatum).getTime(), ]); const handleZoom = (domain: any) => { setZoomedXDomain(domain); }; return (
new Date(zeit).toLocaleDateString()} /> `${wert.toFixed(2)} kOhm`} /> } /> {/* Manuell definierte Legende mit der richtigen Reihenfolge */} {/* Messwert Minimum als Linie */} {/* Messwert Maximum als Linie */} {/* Messwert Durchschnitt (nur in DIA1 & DIA2) */} {(ausgewaehlterModus === "DIA1" || ausgewaehlterModus === "DIA2") && ( )} {/* Messwert als Punktdiagramm */} {ausgewaehlterModus === "DIA0" && ( )}
); }; export default LoopMeasurementChart;