import React, { useState, useEffect } from "react"; // omponents/modales/settingsModal.jsx import ReactModal from "react-modal"; import { ClipLoader } from "react-spinners"; import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons import { useSelector } from "react-redux"; import { current } from "@reduxjs/toolkit"; import handleClearDatabase from "./handlers/handleClearDatabase"; import handleReboot from "./handlers/handleReboot"; import handleSetDateTime from "./handlers/handleSetDateTime"; import handleSubmit from "./handlers/handleSubmit"; // Definiere das App-Element für ReactModal ReactModal.setAppElement("#__next"); function SettingModal({ showModal, onClose }) { // Redux-Werte abrufen const deviceName_Redux = useSelector((state) => state.variables.deviceName); const mac1_Redux = useSelector((state) => state.variables.mac1); const ip_Redux = useSelector((state) => state.variables.ip); const subnet_Redux = useSelector((state) => state.variables.subnet); const gateway_Redux = useSelector((state) => state.variables.gateway); const datetime_Redux = useSelector( (state) => state.variables.cplInternalTimestamp ); const ntp1_Redux = useSelector((state) => state.variables.ntp1); const ntp2_Redux = useSelector((state) => state.variables.ntp2); const ntp3_Redux = useSelector((state) => state.variables.ntp3); const ntpTimezone_Redux = useSelector((state) => state.variables.ntpTimezone); const active_Redux = useSelector((state) => state.variables.ntpActive); // Lokale State-Variablen zum Bearbeiten const [name, setName] = useState(deviceName_Redux || ""); const [mac1, setMac1] = useState(mac1_Redux || ""); const [ip, setIp] = useState(ip_Redux || ""); const [subnet, setSubnet] = useState(subnet_Redux || ""); const [gateway, setGateway] = useState(gateway_Redux || ""); const [systemUhr, setSystemUhr] = useState(datetime_Redux || ""); const [ntp1, setNtp1] = useState(ntp1_Redux || ""); const [ntp2, setNtp2] = useState(ntp2_Redux || ""); const [ntp3, setNtp3] = useState(ntp3_Redux || ""); const [ntpTimezone, setNtpTimezone] = useState(ntpTimezone_Redux || ""); const [active, setActive] = useState(active_Redux || ""); const [showRebootModal, setShowRebootModal] = useState(false); // Originalwerte speichern const [originalValues, setOriginalValues] = useState({}); // Erzeuge das currentValues-Objekt aus den aktuellen State-Werten const currentValues = { name, ip, subnet, gateway, ntp1, ntp2, ntp3, ntpTimezone, active, }; // Effekt, um Redux-Werte beim Anzeigen des Modals in lokale State-Variablen zu setzen // Initialisiere currentPath für die gesamte Datei let currentPath = window.location.pathname; if (!currentPath.endsWith(".html")) { currentPath += ".html"; } //--------------------------------------------------- // Setze initiale Werte nur beim Öffnen des Modals useEffect(() => { if (showModal) { setName(deviceName_Redux || ""); setMac1(mac1_Redux || ""); setIp(ip_Redux || ""); setSubnet(subnet_Redux || ""); setGateway(gateway_Redux || ""); setSystemUhr(datetime_Redux || ""); setNtp1(ntp1_Redux || ""); setNtp2(ntp2_Redux || ""); setNtp3(ntp3_Redux || ""); setNtpTimezone(ntpTimezone_Redux || ""); setActive(active_Redux || ""); } }, [showModal]); // Nur beim Öffnen des Modals erneut setzen useEffect(() => { setOriginalValues({ name: deviceName_Redux, ip: ip_Redux, subnet: subnet_Redux, gateway: gateway_Redux, ntp1: ntp1_Redux, ntp2: ntp2_Redux, ntp3: ntp3_Redux, ntpTimezone: ntpTimezone_Redux, active: active_Redux, }); }, [ deviceName_Redux, ip_Redux, subnet_Redux, gateway_Redux, ntp1_Redux, ntp2_Redux, ntp3_Redux, ntpTimezone_Redux, active_Redux, ]); //--------------------------------------------------- // Aktualisiere `systemUhr`, wenn sich `datetime_Redux` ändert useEffect(() => { setSystemUhr(datetime_Redux || ""); }, [datetime_Redux]); //--------------------------------------------------- return ( <> {/* Modal-Inhalt */} {/* Weitere Inhalte wie Formular */} System: Name: setName(e.target.value)} /> MAC Adresse 1: setMac1(e.target.value)} disabled /> IP: setIp(e.target.value)} /> Subnet: setSubnet(e.target.value)} /> Gateway: setGateway(e.target.value)} /> Systemuhr: {/* Button für Systemzeit übernehmen */} { if ( window.confirm( "Möchten Sie wirklich die Systemzeit übernehmen?" ) ) { handleSetDateTime(); } }} > Systemzeit übernehmen {/* SNTP Client */} SNTP Client: IP NTP Server 1: setNtp1(e.target.value)} /> IP NTP Server 2: setNtp2(e.target.value)} /> IP NTP Server 3: setNtp3(e.target.value)} /> Zeitzone: setNtpTimezone(e.target.value)} /> NTP Active: setActive(e.target.value)} /> {/* Modal Footer */} handleReboot()} > Neustart CPL handleClearDatabase()} > Datenbank leeren handleSubmit(originalValues, currentValues)} className="bg-littwin-blue text-white px-4 py-2 rounded" > Übernehmen {/* Reboot Modal */} CPL wird neu gestartet... {/* Spinner */} Bitte warten Sie 5 Sekunden... > ); } export default SettingModal;
Bitte warten Sie 5 Sekunden...