"use client"; import React, { useEffect, useRef, useState } from "react"; import { useSelector, useDispatch } from "react-redux"; import { RootState } from "../../../../../../redux/store"; import Chart from "chart.js/auto"; import "chartjs-adapter-moment"; import { setVonDatum, setBisDatum, } from "../../../../../../redux/slices/kabelueberwachungChartSlice"; const LoopMeasurementChart = () => { const dispatch = useDispatch(); const isFullScreen = useSelector( (state: RootState) => state.kabelueberwachungChart.isFullScreen ); const { loopMeasurementCurveChartData, vonDatum, bisDatum } = useSelector( (state: RootState) => state.kabelueberwachungChart ); const selectedMode = useSelector( (state: RootState) => state.kabelueberwachungChart.selectedMode ); const chartRef = useRef(null); const chartInstance = useRef(null); useEffect(() => { if (chartRef.current) { if (chartInstance.current) { chartInstance.current.destroy(); } console.log("Chart Data:", loopMeasurementCurveChartData); console.log("Von Datum:", vonDatum, "Bis Datum:", bisDatum); console.log("Selected Mode:", selectedMode); // Basis-Datasets für alle drei Linien const datasets = [ { label: "Messwert Minimum (kOhm)", data: loopMeasurementCurveChartData.map((entry) => ({ x: new Date(entry.t).getTime(), y: entry.i, })), borderColor: "rgba(75, 192, 192, 1)", // Türkis backgroundColor: "rgba(75, 192, 192, 0.2)", fill: false, }, { label: "Messwert Maximum (kOhm)", data: loopMeasurementCurveChartData.map((entry) => ({ x: new Date(entry.t).getTime(), y: entry.a, })), borderColor: "rgba(192, 75, 75, 1)", // Rot backgroundColor: "rgba(192, 75, 75, 0.2)", fill: false, }, { label: "Messwert Aktuell (m) - Orange", data: loopMeasurementCurveChartData.map((entry) => ({ x: new Date(entry.t).getTime(), y: entry.m ?? NaN, // Falls `m` fehlt, bleibt die Stelle leer })), borderColor: "rgba(255, 165, 0, 1)", // Orange backgroundColor: "rgba(255, 165, 0, 0.2)", fill: false, }, ]; const ctx = chartRef.current.getContext("2d"); if (ctx) { chartInstance.current = new Chart(ctx, { type: "line", data: { datasets }, options: { responsive: true, maintainAspectRatio: false, elements: { line: { spanGaps: true }, }, scales: { x: { type: "time", time: { unit: "day", tooltipFormat: "dd.MM.yyyy HH:mm", displayFormats: { day: "dd.MM.yyyy" }, }, title: { display: true, text: "Zeit (Datum)" }, min: new Date(vonDatum).getTime(), max: new Date(bisDatum).getTime(), }, y: { title: { display: true, text: "Messwert (kOhm)" }, }, }, plugins: { tooltip: { callbacks: { label: (tooltipItem) => { const rawItem = tooltipItem.raw as { x: number; y: number }; return `${tooltipItem.dataset.label}: ${rawItem.y.toFixed( 2 )} kOhm`; }, }, }, zoom: { pan: { enabled: true, mode: "xy", }, zoom: { wheel: { enabled: true }, pinch: { enabled: true }, mode: "xy", onZoom: ({ chart }) => { const xScale = chart.scales.x; if (xScale.min && xScale.max) { const newVonDatum = new Date(xScale.min) .toISOString() .split("T")[0]; const newBisDatum = new Date(xScale.max) .toISOString() .split("T")[0]; if (newVonDatum !== vonDatum) dispatch(setVonDatum(newVonDatum)); if (newBisDatum !== bisDatum) dispatch(setBisDatum(newBisDatum)); console.log( "🔄 Redux Update nach Zoom:", newVonDatum, newBisDatum ); } }, }, }, }, }, }); } } }, [loopMeasurementCurveChartData, vonDatum, bisDatum, selectedMode]); return (
); }; export default LoopMeasurementChart;