feat: Redux-Thunk für analoge Eingänge integriert & useFetchAnalogeEingaenge entfernt

- `fetchAnalogeEingaengeThunk` in `AnalogeEingaengeTable.tsx` verwendet, um API-Daten in Redux zu speichern.
- `useFetchAnalogeEingaenge` entfernt, um doppelte API-Aufrufe zu vermeiden.
- Sicherstellung, dass Redux-Thunk nur im Client (`useEffect`) ausgeführt wird.
- Automatische Aktualisierung der API-Daten alle 10 Sekunden über Redux-Thunk.
- Code-Optimierungen für eine stabilere Client-Side-Architektur mit Next.js.

 Jetzt läuft Redux-Thunk stabil & effizient in der Next.js-Anwendung!
This commit is contained in:
ISA
2025-03-19 14:48:19 +01:00
parent f957d477c8
commit 25b63e3a31
13 changed files with 303 additions and 151 deletions

22
redux/slices/testSlice.ts Normal file
View File

@@ -0,0 +1,22 @@
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
interface TestState {
testData: any[];
}
const initialState: TestState = {
testData: [],
};
const testSlice = createSlice({
name: "test",
initialState,
reducers: {
setTestData: (state, action: PayloadAction<any[]>) => {
state.testData = action.payload;
},
},
});
export const { setTestData } = testSlice.actions;
export default testSlice.reducer;

View File

@@ -11,9 +11,9 @@ import dashboardReducer from "./slices/dashboardSlice";
import systemSettingsReducer from "./slices/systemSettingsSlice";
import opcuaSettingsReducer from "./slices/opcuaSettingsSlice";
import digitalOutputsReducer from "./slices/digitalOutputsSlice";
import analogeEingaengeReducer from "./slices/analogeEingaengeSlice";
import brushReducer from "./slices/brushSlice";
import tdrChartReducer from "./slices/tdrChartSlice";
import analogeEingaengeReducer from "./slices/analogeEingaengeSlice";
const store = configureStore({
reducer: {

View File

@@ -0,0 +1,22 @@
// /redux/thunks/fetchAnalogeEingaengeThunk.ts
import { createAsyncThunk } from "@reduxjs/toolkit";
import { fetchAnalogeEingaenge } from "../../services/fetchAnalogeEingaenge";
import { setAnalogeEingaenge } from "../slices/analogeEingaengeSlice";
/**
* Holt die analogen Eingänge von der API und speichert sie in Redux.
*/
export const fetchAnalogeEingaengeThunk = createAsyncThunk(
"analogeEingaenge/fetchAnalogeEingaenge",
async (_, { dispatch }) => {
if (typeof window === "undefined") return; // Server-Side Execution blockieren
try {
const data = await fetchAnalogeEingaenge();
if (data) {
dispatch(setAnalogeEingaenge(data)); // ✅ Redux mit API-Daten füllen
}
} catch (error) {
console.error("❌ Fehler beim Laden der analogen Eingänge:", error);
}
}
);

View File

@@ -0,0 +1,56 @@
// /redux/thunks/fetchLoopChartDataThunk.ts
import { createAsyncThunk } from "@reduxjs/toolkit";
import { fetchLoopChartData } from "../../services/fetchLoopChartData";
import { setLoopMeasurementCurveChartData } from "../slices/kabelueberwachungChartSlice";
/**
* Holt die neuesten Daten von der API und speichert sie in Redux.
*/
export const fetchLoopChartDataThunk = createAsyncThunk(
"kabelueberwachungChart/fetchLoopChartData",
async (
{
mode,
type,
slotNumber,
vonDatum,
bisDatum,
}: {
mode: "DIA0" | "DIA1" | "DIA2";
type: number;
slotNumber: number;
vonDatum: string;
bisDatum: string;
},
{ dispatch }
) => {
const data = await fetchLoopChartData(
mode,
type,
slotNumber,
vonDatum,
bisDatum
);
if (data) {
dispatch(setLoopMeasurementCurveChartData(data));
}
}
);
/**
* Starte automatisches Polling (alle 10 Sekunden).
*/
export const startLoopChartDataPolling = () => (dispatch: any) => {
setInterval(() => {
console.log("🔄 Daten werden aktualisiert...");
dispatch(
fetchLoopChartDataThunk({
mode: "DIA0",
type: 4,
slotNumber: 6,
vonDatum: "2024-02-01",
bisDatum: "2024-02-10",
})
);
}, 10000);
};