From 6b99c8017bf2317012c57fb00661adea9cc9dafa Mon Sep 17 00:00:00 2001 From: ISA Date: Tue, 13 May 2025 07:24:29 +0200 Subject: [PATCH] feat: automatische Redux-Initialisierung in _app.tsx basierend auf Seite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - zentrale Datenaktualisierung per Thunk alle 10 Sekunden - alle Seiten wie dashboard, kabelueberwachung, digitale/analoge Ein-/Ausgänge etc. werden erkannt - automatische Zuordnung der richtigen Redux-Thunks - README.md und CHANGELOG.md aktualisiert - Version auf 1.6.400 erhöht --- CHANGELOG.md | 14 ++++++++ config/webVersion.ts | 2 +- pages/_app.tsx | 69 ++++++++++++++++++++++++++-------------- redux/slices/slices.zip | Bin 0 -> 15536 bytes redux/thunks/thunks.zip | Bin 0 -> 8257 bytes 5 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 redux/slices/slices.zip create mode 100644 redux/thunks/thunks.zip 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 0000000000000000000000000000000000000000..53eff6a0e1e9259ac13bacd491d84bc37e037f88 GIT binary patch literal 15536 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 b`akA-e`13J0v`|%Cg8&W2v(M?&%ga2b0$<* literal 0 HcmV?d00001 diff --git a/redux/thunks/thunks.zip b/redux/thunks/thunks.zip new file mode 100644 index 0000000000000000000000000000000000000000..7755cc8b2123359e39257ae8086c21add171ce5e GIT binary patch literal 8257 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 VA+S+Z1`UlAby1)`Q3FrE{U10;I-vjn literal 0 HcmV?d00001