"use client"; import React, { useCallback, useEffect, useMemo } from "react"; import { useSelector, useDispatch } from "react-redux"; import { RootState } from "../../../../../../redux/store"; import { ComposedChart, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Line, Brush, } from "recharts"; import { setBrushRange } from "../../../../../../redux/slices/brushSlice"; 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 dispatch = useDispatch(); const brushRange = useSelector((state: RootState) => state.brush); const { loopMeasurementCurveChartData, selectedMode, vonDatum, bisDatum, isFullScreen, } = useSelector((state: RootState) => state.kabelueberwachungChart); const formatierteDaten = useMemo( () => loopMeasurementCurveChartData .map((eintrag) => ({ zeit: new Date(eintrag.t).getTime(), messwertMinimum: eintrag.i, messwertMaximum: eintrag.a, messwert: eintrag.m ?? null, messwertDurchschnitt: ["DIA1", "DIA2"].includes(selectedMode) ? eintrag.g ?? null : null, })) .reverse(), [loopMeasurementCurveChartData, selectedMode] ); // Initialisierung des Brush-Bereichs nur beim ersten Laden der Daten useEffect(() => { if (brushRange.endIndex === 0 && formatierteDaten.length) { dispatch( setBrushRange({ startIndex: 0, endIndex: formatierteDaten.length - 1, }) ); } }, [formatierteDaten, brushRange.endIndex, dispatch]); const handleBrushChange = useCallback( ({ startIndex, endIndex }) => { dispatch( setBrushRange({ startIndex, endIndex, startDate: new Date(formatierteDaten[startIndex].zeit) .toISOString() .split("T")[0], endDate: new Date(formatierteDaten[endIndex].zeit) .toISOString() .split("T")[0], }) ); }, [dispatch, formatierteDaten] ); return (
new Date(zeit).toLocaleDateString()} /> `${wert.toFixed(2)} kOhm`} /> } /> {["DIA1", "DIA2"].includes(selectedMode) && ( )} {selectedMode === "DIA0" && ( )} new Date(zeit).toLocaleDateString()} // Datum statt Zahl />
); }; export default LoopMeasurementChart;