"use client"; // components/modules/kue705FO/Kue705FO.tsx import React, { useState, useEffect, useRef } from "react"; import Chart from "chart.js/auto"; import { useSelector } from "react-redux"; import KueModal from "./KueModal"; import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons import { RootState } from "../../../../redux/store"; import { useDispatch } from "react-redux"; import { setSelectedChartData } from "../../../../redux/slices/variablesSlice"; import { goLoop } from "../../../../utils/goLoop"; import { goTDR } from "../../../../utils/goTDR"; import { Kue705FOProps } from "../../../../types/components/Kue705FOProps"; import ChartSwitcher from "./Charts/ChartSwitcher"; import { setActiveMode } from "../../../../redux/slices/kueChartModeSlice"; import handleButtonClick from "./kue705FO-Funktionen/handleButtonClick"; import { setChartOpen } from "../../../../redux/slices/kabelueberwachungChartSlice"; import { setSlotNumber } from "../../../../redux/slices/kabelueberwachungChartSlice"; //-------hooks---------------- import useChartPlugin from "./hooks/useChartPlugin"; import useAlarmStatus from "./hooks/useAlarmStatus"; import useKueVersion from "./hooks/useKueVersion"; import useIsoDisplay from "./hooks/useIsoDisplay"; import useLoopDisplay from "./hooks/useLoopDisplay"; import useModulName from "./hooks/useModulName"; import useChartData from "./hooks/useChartData"; const Kue705FO: React.FC = ({ isolationswert, schleifenwiderstand, modulName, kueOnline, slotIndex, tdrLocation, alarmStatus, }) => { /* console.log( `Rendering Kue705FO - SlotIndex: ${slotIndex}, ModulName: ${modulName}` ); */ const selectedChartData = useSelector( (state: RootState) => state.variables.selectedChartData ); const dispatch = useDispatch(); const chartRef = useRef(null); const [activeButton, setActiveButton] = useState<"Schleife" | "TDR">( "Schleife" ); const [loopTitleText, setloopTitleText] = useState( "Schleifenwiderstand [kOhm]" ); const [isoDisplayText, setIsoDisplayText] = useState("Aderbruch"); const [groundFaultDisplayText, setGroundFaultDisplayText] = useState("Erdschluss"); const [loopFaultDisplayText, setLoopFaultDisplayText] = useState("Schleifenfehler"); const [isoFaultDisplayText, setIsoFaultDisplayText] = useState("Isolationsfehler"); const [isoGreaterThan200, setIsoGreaterThan200] = useState(">200 MOhm"); const [loading, setLoading] = useState(false); const [showModal, setShowModal] = useState(false); const [showChartModal, setShowChartModal] = useState(false); const [loopMeasurementCurveChartData, setLoopMeasurementCurveChartData] = useState(null); // Redux-Variablen abrufen const { kuePSTmMinus96V, kueVersion: reduxKueVersion, tdrActive, } = useSelector((state: RootState) => state.variables); // Stelle sicher, dass alle Werte als number[] vorliegen const kueCableBreak = useSelector( (state: RootState) => state.variables.kueCableBreak?.map(Number) ?? [] ); const kueGroundFault = useSelector( (state: RootState) => state.variables.kueGroundFault?.map(Number) ?? [] ); const kueAlarm1 = useSelector( (state: RootState) => state.variables.kueAlarm1?.map(Number) ?? [] ); const kueAlarm2 = useSelector( (state: RootState) => state.variables.kueAlarm2?.map(Number) ?? [] ); const kueOverflow = useSelector( (state: RootState) => state.variables.kueOverflow?.map(Number) ?? [] ); //------------------------- const handleOpenModal = () => setShowModal(true); const handleCloseModal = () => setShowModal(false); const handleOpenChartModal = () => { setShowChartModal(true); dispatch(setChartOpen(true)); dispatch(setSlotNumber(slotIndex + 1)); // Slot-Nummer speichern if (activeButton === "TDR") { dispatch(setActiveMode("TDR")); } else { dispatch(setActiveMode("Schleife")); } }; // Funktion aufrufen in handleRefreshClick const handleRefreshClick = () => { if (activeButton === "Schleife") { goLoop(slotIndex, setLoading); } else if (activeButton === "TDR") { goTDR(slotIndex, setLoading); } }; const handleCloseChartModal = () => { if (chartInstance.current) { console.log("Chart wird beim Schließen des Modals zerstört."); chartInstance.current.destroy(); chartInstance.current = null; } setShowChartModal(false); }; // Funktion zum Erstellen des TDR-Charts const chartInstance = useRef(null); //---------------------------------- useEffect(() => { if (selectedChartData) { createTDRChart(selectedChartData); // Neues Chart erstellen } return () => { // Cleanup beim Komponentenwechsel if (chartInstance.current) { console.log("Chart wird beim Komponentenwechsel zerstört."); chartInstance.current.destroy(); chartInstance.current = null; } }; }, [selectedChartData]); //---------------------------------- //hooks einbinden const kueVersion = useKueVersion(slotIndex, reduxKueVersion); const currentAlarmStatus = useAlarmStatus( slotIndex, kueAlarm1, kueAlarm2, kueCableBreak, kueGroundFault ); const isoDisplayValue = useIsoDisplay( slotIndex, kuePSTmMinus96V, kueCableBreak, kueGroundFault, kueAlarm1, kueAlarm2, kueOverflow, isolationswert, isoDisplayText, groundFaultDisplayText, isoFaultDisplayText, loopFaultDisplayText, isoGreaterThan200 ); const { currentModulName, setCurrentModulName } = useModulName( slotIndex, modulName ); const loopDisplayValue = useLoopDisplay(schleifenwiderstand, activeButton); const zoomPlugin = useChartPlugin(); useChartData(loopMeasurementCurveChartData); //--------------------------------- return (
{kueOnline === 1 ? ( <>
{slotIndex + 1}

KÜ705-FO

{}
Betrieb Alarm
{/* Anzeige des Isolation */}
{isoDisplayValue} {Number(kuePSTmMinus96V?.[slotIndex]) !== 1 && Number(kueCableBreak?.[slotIndex]) !== 1 && Number(kueGroundFault?.[slotIndex]) !== 1 && Number(kueAlarm1?.[slotIndex]) !== 1 && Number(kueAlarm2?.[slotIndex]) !== 1 && Number(kueOverflow?.[slotIndex]) !== 1 && (
ISO MOhm
)}
{currentModulName || `Modul ${slotIndex + 1}`}
{kueVersion}
{/* loopDisplay: Zeigt Schleifenwiderstand oder TDR-Distanz an, je nach Modus */}
{loopTitleText}

{loopDisplayValue + (activeButton === "Schleife" ? " KOhm" : " Km")}

{/* Modal für Messkurve */} {showChartModal && ( )} ) : (

Kein Modul im Slot {slotIndex + 1}

)}
); }; export default Kue705FO;