"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;