"use client"; // components/modales/KueModal.jsx import ReactModal from "react-modal"; import { useEffect, useState } from "react"; import { useSelector, useDispatch } from "react-redux"; import type { RootState } from "../../../../redux/store"; import "bootstrap-icons/font/bootstrap-icons.css"; import handleSave, { OriginalValues } from "./handlers/handleSave"; import handleDisplayEinschalten from "./handlers/handleDisplayEinschalten"; import firmwareUpdate from "./handlers/firmwareUpdate"; import decodeToken from "../../../../utils/decodeToken"; import { setKueData } from "../../../../redux/slices/kueDataSlice"; interface KueModalProps { showModal: boolean; onClose: () => void; slot: number; onModulNameChange: (id: string) => void; } function KueModal({ showModal, onClose, slot, onModulNameChange, }: KueModalProps): JSX.Element { const dispatch = useDispatch(); const isAdminLoggedIn = useSelector( (state: any) => state.authSlice.isAdminLoggedIn ); const [isAdmin, setIsAdmin] = useState(false); const { kueID, kueLimit1, kueDelay1, kueLimit2Low, kueLimit2High, kueLoopInterval, } = useSelector((state: RootState) => state.kueDataSlice); const [bezeichnungen, setBezeichnungen] = useState(Array(32).fill("")); const [originalValues, setOriginalValues] = useState({ kueID: Array(32).fill(""), kueBezeichnungen: Array(32).fill(""), isolationsgrenzwerte: Array(32).fill(10.0), verzoegerung: Array(32).fill(1.0), untereSchleifenGrenzwerte: Array(32).fill(0.1), obereSchleifenGrenzwerte: Array(32).fill(1.0), schleifenintervall: Array(32).fill(24), }); useEffect(() => { if (showModal) { setBezeichnungen( kueID ? kueID.map((name: string) => name.trim() || "---") : bezeichnungen ); setOriginalValues({ kueID: [...kueID], kueBezeichnungen: [...bezeichnungen], isolationsgrenzwerte: [...kueLimit1], verzoegerung: [...kueDelay1], untereSchleifenGrenzwerte: [...kueLimit2Low], obereSchleifenGrenzwerte: [...kueLimit2High], schleifenintervall: [...kueLoopInterval], }); } }, [ showModal, kueID, kueLimit1, kueDelay1, kueLimit2Low, kueLimit2High, kueLoopInterval, ]); useEffect(() => { const token = sessionStorage.getItem("token"); if (token) { const decoded = decodeToken(token); setIsAdmin(decoded?.role?.toLowerCase() === "admin"); } }, [showModal]); const handleSaveWrapper = () => { handleSave({ ids: [...kueID], bezeichnungen, isolationsgrenzwerte: [...kueLimit1], verzoegerung: [...kueDelay1], untereSchleifenGrenzwerte: [...kueLimit2Low], obereSchleifenGrenzwerte: [...kueLimit2High], schleifenintervall: [...kueLoopInterval], originalValues, slot, dispatch, onModulNameChange, onClose, }); }; // Korrekte updateArray Methode ohne Thunk const updateArray = ( key: keyof RootState["kueDataSlice"], array: number[], value: number ) => { const updatedArray = [...array]; updatedArray[slot] = value; dispatch(setKueData({ [key]: updatedArray })); }; const handleDisplayEinschaltenWrapper = () => { handleDisplayEinschalten(slot); }; return (

KUE Einstellung - Slot {slot + 1}

{ const newIds = [...kueID]; newIds[slot] = e.target.value; dispatch(setKueData({ kueID: newIds })); }} />

Isolationsmessung

Grenzwert (MOhm) Verzögerung (sek)
updateArray( "kueLimit1", kueLimit1, parseFloat(e.target.value) ) } /> updateArray( "kueDelay1", kueDelay1, parseFloat(e.target.value) ) } />

Schleifenmessung

Grenzwert (kOhm) Schleifenintervall (h)
updateArray( "kueLimit2Low", kueLimit2Low, parseFloat(e.target.value) ) } /> updateArray( "kueLoopInterval", kueLoopInterval, parseFloat(e.target.value) ) } />
{isAdminLoggedIn && ( )}
); } export default KueModal;