"use client"; // components/modules/kue705FO/Kue705FO.tsx import React, { useState, useEffect, 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 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"; import useTDRChart from "./hooks/useTDRChart"; //--------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"; const Kue705FO: React.FC = ({ isolationswert, schleifenwiderstand, modulName, kueOnline, slotIndex, tdrLocation, }) => { /* console.log( `Rendering Kue705FO - SlotIndex: ${slotIndex}, ModulName: ${modulName}` ); */ const selectedChartData = useSelector( (state: RootState) => state.selectedChartDataSlice.selectedChartData ); const dispatch = useDispatch(); const { kueName } = useSelector((state: RootState) => state.kueDataSlice); 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 { 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); 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, kueCableBreak, kueGroundFault, kueAlarm1, kueAlarm2, kueOverflow, isolationswert, isoDisplayText, groundFaultDisplayText, isoFaultDisplayText, loopFaultDisplayText, isoGreaterThan200 ); const { currentModulName, 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 ); const zoomPlugin = useChartPlugin(); useChartData(loopMeasurementCurveChartData); const { chartInstance } = useTDRChart(selectedChartData); //--------------------------------- return (
{kueOnline === 1 ? ( <>
{slotIndex + 1}

KÜ705-FO

{} {showModal && ( )}
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
)}
{kueName?.[slotIndex] || `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 && ( )} ) : (
{/* Das soll rausgenommen werden

Kein Modul im Slot {slotIndex + 0}

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