TDR Chart Implementierung der Zoom- und Pan-Funktionalität

This commit is contained in:
Ismail Ali
2025-02-22 11:40:57 +01:00
parent e6bac2d4ba
commit 9b93771047
4 changed files with 76 additions and 54 deletions

View File

@@ -1,7 +1,7 @@
// components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart.tsx
import React, { useEffect, useRef } from "react";
import { useSelector } from "react-redux";
import Chart from "chart.js/auto";
import { Chart, registerables } from "chart.js";
import "chartjs-adapter-date-fns";
const TDRChart: React.FC = () => {
@@ -12,58 +12,80 @@ const TDRChart: React.FC = () => {
const chartData = useSelector((state: any) => state.tdrData.data);
useEffect(() => {
if (chartRef.current && chartData.length > 0) {
if (chartInstance.current) {
chartInstance.current.destroy();
}
// Importiere und registriere das Zoom-Plugin innerhalb des useEffect-Hooks
import("chartjs-plugin-zoom").then((zoomPlugin) => {
Chart.register(...registerables, zoomPlugin.default);
const ctx = chartRef.current.getContext("2d");
if (ctx) {
chartInstance.current = new Chart(ctx, {
type: "line",
data: {
datasets: [
{
label: "TDR Entfernung (km)",
data: chartData,
borderColor: "rgba(255, 99, 132, 1)",
backgroundColor: "rgba(255, 99, 132, 0.2)",
tension: 0.1,
parsing: {
xAxisKey: "t", // Schlüssel für den Zeitstempel
yAxisKey: "m", // Schlüssel für den Messwert
if (chartRef.current && chartData.length > 0) {
if (chartInstance.current) {
chartInstance.current.destroy();
}
const ctx = chartRef.current.getContext("2d");
if (ctx) {
chartInstance.current = new Chart(ctx, {
type: "line",
data: {
datasets: [
{
label: "TDR Entfernung (km)",
data: chartData,
borderColor: "rgba(255, 99, 132, 1)",
backgroundColor: "rgba(255, 99, 132, 0.2)",
tension: 0.1,
parsing: {
xAxisKey: "t", // Schlüssel für den Zeitstempel
yAxisKey: "m", // Schlüssel für den Messwert
},
},
],
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
type: "time",
time: {
unit: "minute",
tooltipFormat: "dd.MM.yyyy HH:mm",
},
title: {
display: true,
text: "Zeit",
},
},
y: {
title: {
display: true,
text: "km",
},
min: 0,
max: 3,
},
},
],
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
type: "time",
time: {
unit: "minute",
tooltipFormat: "dd.MM.yyyy HH:mm",
plugins: {
zoom: {
pan: {
enabled: true,
mode: "xy",
},
zoom: {
wheel: {
enabled: true,
},
pinch: {
enabled: true,
},
mode: "xy",
},
},
title: {
display: true,
text: "Zeit",
},
},
y: {
title: {
display: true,
text: "km",
},
min: 0,
max: 3,
},
},
},
});
});
}
}
}
});
}, [chartData]);
return (

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/
const webVersion = "1.6.86";
const webVersion = "1.6.87";
export default webVersion;

10
package-lock.json generated
View File

@@ -16,10 +16,10 @@
"autoprefixer": "^10.4.20",
"bcryptjs": "^2.4.3",
"bootstrap-icons": "^1.11.3",
"chart.js": "^4.4.5",
"chart.js": "^4.4.8",
"chartjs-adapter-date-fns": "^3.0.0",
"chartjs-adapter-moment": "^1.0.1",
"chartjs-plugin-zoom": "^2.0.1",
"chartjs-plugin-zoom": "^2.2.0",
"crypto-js": "^4.2.0",
"date-fns": "^4.1.0",
"idb": "^8.0.0",
@@ -2646,9 +2646,9 @@
}
},
"node_modules/chart.js": {
"version": "4.4.7",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
"integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
"version": "4.4.8",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz",
"integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==",
"dependencies": {
"@kurkle/color": "^0.3.0"
},

View File

@@ -21,10 +21,10 @@
"autoprefixer": "^10.4.20",
"bcryptjs": "^2.4.3",
"bootstrap-icons": "^1.11.3",
"chart.js": "^4.4.5",
"chart.js": "^4.4.8",
"chartjs-adapter-date-fns": "^3.0.0",
"chartjs-adapter-moment": "^1.0.1",
"chartjs-plugin-zoom": "^2.0.1",
"chartjs-plugin-zoom": "^2.2.0",
"crypto-js": "^4.2.0",
"date-fns": "^4.1.0",
"idb": "^8.0.0",