import React, { useEffect, useRef } from "react"; import { useSelector } from "react-redux"; import Chart from "chart.js/auto"; import "chartjs-adapter-moment"; const LoopMeasurementChart = () => { const chartRef = useRef(null); const chartInstance = useRef(null); // Daten aus dem Redux-Store abrufen const chartData = useSelector( (state: { chartData: { data: any[] } }) => state.chartData.data ) ?? []; useEffect(() => { if (chartRef.current) { if (chartInstance.current) { chartInstance.current.destroy(); } // Datenvorbereitung: Konvertieren der Zeitstempel in Millisekunden const processedData = chartData.map((entry) => ({ ...entry, timestampMs: new Date( entry.t.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") ).getTime(), })); const ctx = chartRef.current.getContext("2d"); if (ctx) { chartInstance.current = new Chart(ctx, { type: "line", data: { datasets: [ { label: "Messwert Minimum (kOhm)", // Messwert i (kOhm) data: processedData.map((entry) => ({ x: entry.timestampMs, y: entry.i, })), borderColor: "rgba(75, 192, 192, 1)", backgroundColor: "rgba(75, 192, 192, 0.2)", fill: true, }, { label: "Messwert Maximum (kOhm)", // Messwert a (kOhm) data: processedData.map((entry) => ({ x: entry.timestampMs, y: entry.a, })), borderColor: "rgba(192, 75, 75, 1)", backgroundColor: "rgba(192, 75, 75, 0.2)", fill: true, }, { label: "Messwert Durchschnitt (kOhm)", // Messwert g (kOhm) data: processedData.map((entry) => ({ x: entry.timestampMs, y: entry.g, })), borderColor: "rgba(75, 75, 192, 1)", backgroundColor: "rgba(75, 75, 192, 0.2)", fill: true, }, ], }, options: { responsive: true, maintainAspectRatio: false, scales: { x: { type: "time", time: { unit: "day", tooltipFormat: "dd.MM.yyyy HH:mm", displayFormats: { day: "dd.MM.yyyy", }, }, title: { display: true, text: "Zeit", }, }, y: { title: { display: true, text: "kOhm", }, min: 0, max: 80, }, }, }, }); } } return () => { if (chartInstance.current) { chartInstance.current.destroy(); chartInstance.current = null; } }; }, [chartData]); return (
); }; export default LoopMeasurementChart;