feat: Implementiere dynamischen Import für chartjs-plugin-zoom im Frontend

- Dynamischer Import von chartjs-plugin-zoom im `useEffect` hinzugefügt, um Zugriff auf `window` im Server-Side-Build zu vermeiden.
- Zustandsvariable `zoomPluginLoaded` eingeführt, um sicherzustellen, dass das Plugin nur im Client geladen wird.
- Verwende `useRef` für Canvas-Referenz, um direkten Zugriff auf das Chart-Element zu ermöglichen.
- Optimierung der Chart-Erstellung, um Build-Fehler aufgrund fehlender `window`-Objekte zu verhindern.
This commit is contained in:
ISA
2024-11-06 07:00:06 +01:00
parent 61a445edd0
commit 7eca4204bd

View File

@@ -1,11 +1,10 @@
"use client"; // components/modules/Kue705FO.jsx
import React, { useState, useEffect } from "react";
import React, { useState, useEffect, useRef } from "react";
import ReactModal from "react-modal";
import Chart from "chart.js/auto";
import { useSelector } from "react-redux";
import KueModal from "../modales/KueModal";
import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons
import zoomPlugin from "chartjs-plugin-zoom";
function Kue705FO({
isolationswert,
@@ -16,6 +15,8 @@ function Kue705FO({
tdrLocation,
alarmStatus,
}) {
const chartRef = useRef(null);
const [zoomPlugin, setZoomPlugin] = useState(null); // Plugin-Status für Chart.js
const [kueVersion, setKueVersion] = useState("V4.19");
const [currentAlarmStatus, setCurrentAlarmStatus] = useState(false);
const [currentModulName, setCurrentModulName] = useState(modulName);
@@ -191,7 +192,15 @@ function Kue705FO({
};
// Füge das Plugin zu Chart.js hinzu
Chart.register(zoomPlugin);
useEffect(() => {
// Lade das Plugin nur, wenn `window` verfügbar ist
if (typeof window !== "undefined") {
import("chartjs-plugin-zoom").then((mod) => {
setZoomPlugin(mod.default); // Setze das Plugin
Chart.register(mod.default); // Plugin zur Chart.js-Instanz registrieren
});
}
}, []);
const createChart = (data) => {
const ctx = document.getElementById("myChart").getContext("2d");
@@ -206,7 +215,7 @@ function Kue705FO({
label: "Isolationswiderstand (MOhm)",
data: data.map((row) => row.m).reverse(),
borderColor: "#00AEEF",
borderWidth: 0.5,
borderWidth: 2,
fill: false,
yAxisID: "y",
},
@@ -214,7 +223,7 @@ function Kue705FO({
label: "Schleifenwiderstand (kOhm)",
data: data.map((row) => row.n).reverse(),
borderColor: "black",
borderWidth: 0.5,
borderWidth: 2,
fill: false,
yAxisID: "y1",
},
@@ -500,6 +509,7 @@ function Kue705FO({
<h2>Messkurve Slot {slotIndex + 1}</h2>
<canvas
id="myChart"
ref={chartRef}
style={{ width: "100%", height: "600px" }}
></canvas>
</ReactModal>