diff --git a/CHANGELOG.md b/CHANGELOG.md index a98adab..3c17790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ Alle Änderungen und Versionen des CPLv4.0 Frontends chronologisch dokumentiert. --- +## [1.6.400] – 2025-05-13 + +### Feature + +- In `_app.tsx` wurde ein zentrales Redux-Update-System implementiert: + - Die aktuelle Seite wird automatisch erkannt (`window.location.pathname`) + - Abhängig von der Seite werden die passenden Thunks geladen (z. B. `fetchKueDataThunk`, `fetchDigitalOutputsThunk` usw.) + - Die Daten werden alle 10 Sekunden erneut geladen + - Dadurch muss auf den Unterseiten kein separater Redux-Aufruf mehr erfolgen +- Unterstützt alle Slices: digitale/analoge Ein- und Ausgänge, Meldungen, Systemstatus, Einstellungen, TDR/Loop-Daten +- Reduziert Hardwarelast durch seitenbezogene API-Calls + +--- + ## [1.6.399] – 2025-05-12 ### fix diff --git a/config/webVersion.ts b/config/webVersion.ts index d5cd292..5ccef1c 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -6,5 +6,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.6.399"; +const webVersion = "1.6.400"; export default webVersion; diff --git a/pages/_app.tsx b/pages/_app.tsx index 90a7878..8c8efc3 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -4,14 +4,28 @@ import { useEffect, useState } from "react"; import { Provider } from "react-redux"; import store, { useAppDispatch } from "../redux/store"; +import { AppProps } from "next/app"; import { loadWindowVariables } from "../utils/loadWindowVariables"; + import Header from "../components/header/Header"; import Navigation from "../components/navigation/Navigation"; import Footer from "../components/footer/Footer"; -import { setKueData } from "../redux/slices/kueDataSlice"; + +// Thunks importieren +import { fetchKueDataThunk } from "../redux/thunks/fetchKueDataThunk"; +import { fetchDigitalOutputsThunk } from "../redux/thunks/fetchDigitalOutputsThunk"; +import { fetchAnalogeEingaengeThunk } from "../redux/thunks/fetchAnalogeEingaengeThunk"; +import { fetchAnalogInputsHistoryThunk } from "../redux/thunks/fetchAnalogInputsHistoryThunk"; +import { fetchLast20MessagesThunk } from "../redux/thunks/fetchLast20MessagesThunk"; +import { fetchOpcUaSettingsThunk } from "../redux/thunks/fetchOpcUaSettingsThunk"; +import { fetchSystemSettingsThunk } from "../redux/thunks/fetchSystemSettingsThunk"; +import { fetchSystemVoltTempThunk } from "../redux/thunks/fetchSystemVoltTempThunk"; +import { fetchReferenceCurveBySlotThunk } from "../redux/thunks/fetchReferenceCurveBySlotThunk"; +import { fetchAllTDRReferenceChartThunk } from "../redux/thunks/fetchAllTDRReferenceChartThunk"; +import { fetchTDRChartDataByIdThunk } from "../redux/thunks/fetchTDRChartDataByIdThunk"; +import { fetchLoopChartDataThunk } from "../redux/thunks/fetchLoopChartDataThunk"; import "../styles/globals.css"; -import { AppProps } from "next/app"; function MyApp({ Component, pageProps }: AppProps) { return ( @@ -27,32 +41,41 @@ function AppContent({ Component, pageProps }: AppProps) { useEffect(() => { let intervalId: NodeJS.Timeout; + const pathname = window.location.pathname; - const loadAndStoreVariables = async () => { - try { - const { variables, kueData } = await loadWindowVariables(); - if (!variables) throw new Error("Sitzungsfehler"); - - // Nur auf kabelueberwachung.html Redux aktualisieren - if (window.location.pathname.includes("kabelueberwachung")) { - dispatch(setKueData(kueData)); - } - - setSessionExpired(false); - } catch (error) { - console.error("❌ Fehler beim Laden der Sitzung:", error); - setSessionExpired(true); + const loadAndDispatch = () => { + if (pathname.includes("kabelueberwachung")) { + dispatch(fetchKueDataThunk()); + } else if (pathname.includes("digitalOutputs")) { + dispatch(fetchDigitalOutputsThunk()); + } else if (pathname.includes("digitalInputs")) { + dispatch(fetchDigitalOutputsThunk()); // 🟠 evtl. anpassen + } else if (pathname.includes("analogeEingaenge")) { + dispatch(fetchAnalogeEingaengeThunk()); + } else if (pathname.includes("analogHistory")) { + dispatch(fetchAnalogInputsHistoryThunk()); + } else if (pathname.includes("dashboard")) { + dispatch(fetchLast20MessagesThunk()); + } else if (pathname.includes("einstellungen")) { + dispatch(fetchOpcUaSettingsThunk()); + } else if (pathname.includes("systemvolt")) { + dispatch(fetchSystemVoltTempThunk()); + } else if (pathname.includes("system")) { + dispatch(fetchSystemSettingsThunk()); + } else if (pathname.includes("tdrRef")) { + dispatch(fetchAllTDRReferenceChartThunk()); + } else if (pathname.includes("tdrSlot")) { + dispatch(fetchReferenceCurveBySlotThunk()); + } else if (pathname.includes("tdrId")) { + dispatch(fetchTDRChartDataByIdThunk()); + } else if (pathname.includes("loopChart")) { + dispatch(fetchLoopChartDataThunk()); } }; if (typeof window !== "undefined") { - loadAndStoreVariables(); - - // Nur auf kabelueberwachung.html regelmäßig aktualisieren - if (window.location.pathname.includes("kabelueberwachung")) { - intervalId = setInterval(loadAndStoreVariables, 10000); - } - + loadAndDispatch(); + intervalId = setInterval(loadAndDispatch, 10000); return () => clearInterval(intervalId); } }, []); diff --git a/redux/slices/slices.zip b/redux/slices/slices.zip new file mode 100644 index 0000000..53eff6a Binary files /dev/null and b/redux/slices/slices.zip differ diff --git a/redux/thunks/thunks.zip b/redux/thunks/thunks.zip new file mode 100644 index 0000000..7755cc8 Binary files /dev/null and b/redux/thunks/thunks.zip differ