"use client"; // components/modules/kue705FO/Kue705FO.tsx import React, { useState, useRef, useMemo } from "react"; import { useSelector } from "react-redux"; import KueModal from "./modals/SettingsModalWrapper"; import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons import { Kue705FOProps } from "../../../../types/Kue705FOProps"; import ChartSwitcher from "./Charts/ChartSwitcher"; //-------Redux Toolkit-------- import { RootState } from "../../../../redux/store"; import { useDispatch } from "react-redux"; //-------hooks---------------- 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 type { Chart } from "chart.js"; //--------handlers---------------- import handleButtonClick from "./kue705FO-Funktionen/handleButtonClick"; import handleOpenModal from "./handlers/handleOpenModal"; import handleCloseModal from "./handlers/handleCloseModal"; import handleOpenChartModal from "./handlers/handleOpenChartModal"; import handleCloseChartModal from "./handlers/handleCloseChartModal"; import handleRefreshClick from "./handlers/handleRefreshClick"; import FallSensors from "@/components/main/fall-detection-sensors/FallSensors"; const Kue705FO: React.FC = ({ isolationswert, schleifenwiderstand, modulName, kueOnline, slotIndex, tdrLocation, win_fallSensorsActive, }) => { /* console.log( `Rendering Kue705FO - SlotIndex: ${slotIndex}, ModulName: ${modulName}` ); */ const dispatch = useDispatch(); const { kueName } = useSelector((state: RootState) => state.kueDataSlice); const [activeButton, setActiveButton] = useState<"Schleife" | "TDR">( "Schleife" ); const [loopTitleText, setloopTitleText] = useState( "Schleifenwiderstand [kOhm]" ); const [isoDisplayText] = useState("Aderbruch"); const [groundFaultDisplayText] = useState("Erdschluss"); const [loopFaultDisplayText] = useState("Schleifenfehler"); const [isoFaultDisplayText] = useState("Isolationsfehler"); const [isoGreaterThan200] = useState(">200 MOhm"); const [loading, setLoading] = useState(false); const [showModal, setShowModal] = useState(false); const [showChartModal, setShowChartModal] = useState(false); // Removed unused loopMeasurementCurveChartData state //------- Redux-Variablen abrufen-------------------------------- const { kueVersion: reduxKueVersion, tdrActive, kueCableBreak: kueCableBreakRaw, kueGroundFault: kueGroundFaultRaw, kueAlarm1: kueAlarm1Raw, kueAlarm2: kueAlarm2Raw, kueOverflow: kueOverflowRaw, kuePSTmMinus96V, // <- richtig, weil so im State vorhanden } = useSelector((state: RootState) => state.kueDataSlice); //--------------------------------------------- const kueCableBreak = useMemo( () => kueCableBreakRaw?.map(Number) ?? [], [kueCableBreakRaw] ); const kueGroundFault = useMemo( () => kueGroundFaultRaw?.map(Number) ?? [], [kueGroundFaultRaw] ); const kueAlarm1 = useMemo( () => kueAlarm1Raw?.map(Number) ?? [], [kueAlarm1Raw] ); const kueAlarm2 = useMemo( () => kueAlarm2Raw?.map(Number) ?? [], [kueAlarm2Raw] ); const kueOverflow = useMemo( () => kueOverflowRaw?.map(Number) ?? [], [kueOverflowRaw] ); //-------------------------handlers------------------------- const openModal = () => handleOpenModal(setShowModal); const closeModal = () => handleCloseModal(setShowModal); const openChartModal = () => handleOpenChartModal(setShowChartModal, dispatch, slotIndex, activeButton); const refreshClick = () => handleRefreshClick(activeButton, slotIndex, setLoading); // Create a ref for the chart instance to pass as the second argument const chartInstance = useRef(null); const closeChartModal = () => handleCloseChartModal(setShowChartModal, chartInstance); //---------------------------------- //hooks einbinden const kueVersion = useKueVersion(slotIndex, reduxKueVersion); const currentAlarmStatus = useAlarmStatus( slotIndex, kueAlarm1, kueAlarm2, kueCableBreak, kueGroundFault ); const isoDisplayValue = useIsoDisplay( slotIndex, !!kuePSTmMinus96V?.[slotIndex], !!kueCableBreak?.[slotIndex], !!kueGroundFault?.[slotIndex], !!kueAlarm1?.[slotIndex], !!kueAlarm2?.[slotIndex], !!kueOverflow?.[slotIndex], Number(isolationswert), isoDisplayText, groundFaultDisplayText, isoFaultDisplayText, loopFaultDisplayText, isoGreaterThan200 ); const { setCurrentModulName } = useModulName(slotIndex, modulName); //--------------------------------- //--------------------------------- const tdmChartData = useSelector( (state: RootState) => state.tdmChartSlice.data ); const latestTdrDistanceMeters = Array.isArray(tdmChartData?.[slotIndex]) && tdmChartData[slotIndex].length > 0 && typeof tdmChartData[slotIndex][0].d === "number" ? tdmChartData[slotIndex][0].d : 0; const latestTdrDistance = Number((latestTdrDistanceMeters / 1000).toFixed(3)); //setLoopDisplayValue(latestTdrDistance); //--------------------------------- const loopValue = activeButton === "TDR" ? latestTdrDistance : typeof schleifenwiderstand === "number" ? schleifenwiderstand : Number(schleifenwiderstand); const { loopDisplayValue, setLoopDisplayValue } = useLoopDisplay( loopValue, activeButton ); // Removed useChartData(loopMeasurementCurveChartData) as the state was unused //--------------------------------- return (
{kueOnline === 1 ? ( <>
{slotIndex + 1}

KÜ705-FO

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

{loopDisplayValue + (activeButton === "Schleife" ? " kOhm" : " km")}

{/* Sensoren anzeigen */} { /* if Kabelüberwachungsmodul online (kue_online ) */ kueOnline === 1 && win_fallSensorsActive === 1 && (
) }
{/* Modal für Einstellungen */} {/* Modal für Messkurve */} {showChartModal && ( )} ) : (
{/* Das soll rausgenommen werden

Kein Modul im Slot {slotIndex + 0}

*/}
)}
); }; export default Kue705FO;