"use client"; // components/main/analogeEingaenge/AnalogInputsChart.tsx import React, { useEffect } from "react"; import { Line } from "react-chartjs-2"; import { Chart as ChartJS, LineElement, PointElement, CategoryScale, LinearScale, Tooltip, Legend, Filler, TimeScale, } from "chart.js"; import "chartjs-adapter-date-fns"; import { useSelector, useDispatch } from "react-redux"; import type { RootState, AppDispatch } from "../../../redux/store"; import { fetchAnalogInputsHistoryThunk } from "../../../redux/thunks/fetchAnalogInputsHistoryThunk"; ChartJS.register( LineElement, PointElement, CategoryScale, LinearScale, Tooltip, Legend, Filler, TimeScale ); const colors = [ "#007bff", "#28a745", "#dc3545", "#ffc107", "#17a2b8", "#6f42c1", "#fd7e14", "#20c997", ]; export default function AnalogInputsChart() { const dispatch = useDispatch(); const { data, isLoading, error } = useSelector( (state: RootState) => state.analogInputsHistory ); useEffect(() => { dispatch(fetchAnalogInputsHistoryThunk()); }, [dispatch]); const datasets = Object.entries(data).map(([key, inputData], index) => ({ label: `Eingang ${Number(key) - 99}`, data: inputData.map((point: any) => ({ x: point.t, y: point.m, })), fill: false, borderColor: colors[index % colors.length], backgroundColor: colors[index % colors.length], tension: 0.3, })); const chartData = { datasets, }; const chartOptions = { responsive: true, plugins: { legend: { position: "top" as const, labels: { usePointStyle: true, }, }, tooltip: { mode: "index" as const, intersect: false, }, }, scales: { x: { type: "time" as const, time: { unit: "hour", tooltipFormat: "HH:mm", displayFormats: { hour: "HH:mm", }, }, title: { display: true, text: "Zeit", }, }, y: { title: { display: true, text: "Messwert", }, }, }, }; return (

Alle analogen Eingänge – Verlauf der letzten 24 Stunden

{isLoading ? (
Lade Daten...
) : error ? (
Fehler: {error}
) : (
)}
); }