git commit -m "fix: Redux TypeScript Fehler behoben & automatische Mock-Daten Aktualisierung
- useAppDispatch in store.ts hinzugefügt, um AsyncThunkActions korrekt zu dispatchen - TypeScript-Fehler in useFetchAnalogeEingaenge.ts behoben - loadFromWindow wird jetzt regelmäßig neu geladen, um Änderungen in Mock-Daten zu übernehmen - UI aktualisiert sich automatisch, wenn sich Werte in ae.js ändern - Code-Struktur verbessert & Redux-Integration optimiert Test erfolgreich: Änderungen in ae.js werden nun direkt in der UI sichtbar!"
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
// redux/slices/analogeEingaengeSlice.ts
|
||||
// Redux Slice: redux/slices/analogeEingaengeSlice.ts
|
||||
import { createSlice, PayloadAction, createAsyncThunk } from "@reduxjs/toolkit";
|
||||
|
||||
// Typ für einen einzelnen analogen Eingang
|
||||
export interface AnalogerEingang {
|
||||
id: number | null;
|
||||
value: number | null;
|
||||
@@ -12,19 +11,11 @@ export interface AnalogerEingang {
|
||||
oG: boolean;
|
||||
}
|
||||
|
||||
// Typ für den Gesamt-State
|
||||
export interface AnalogeEingaengeState {
|
||||
win_analogeEingaenge1: AnalogerEingang;
|
||||
win_analogeEingaenge2: AnalogerEingang;
|
||||
win_analogeEingaenge3: AnalogerEingang;
|
||||
win_analogeEingaenge4: AnalogerEingang;
|
||||
win_analogeEingaenge5: AnalogerEingang;
|
||||
win_analogeEingaenge6: AnalogerEingang;
|
||||
win_analogeEingaenge7: AnalogerEingang;
|
||||
win_analogeEingaenge8: AnalogerEingang;
|
||||
[key: string]: AnalogerEingang;
|
||||
}
|
||||
|
||||
// Standardwert für einen Eingang
|
||||
// Standardwerte für Eingänge
|
||||
const defaultAnalogerEingang: AnalogerEingang = {
|
||||
id: null,
|
||||
value: null,
|
||||
@@ -35,7 +26,7 @@ const defaultAnalogerEingang: AnalogerEingang = {
|
||||
oG: false,
|
||||
};
|
||||
|
||||
// Initialer Zustand mit leeren Werten
|
||||
// Initialer Zustand
|
||||
const initialState: AnalogeEingaengeState = {
|
||||
win_analogeEingaenge1: { ...defaultAnalogerEingang },
|
||||
win_analogeEingaenge2: { ...defaultAnalogerEingang },
|
||||
@@ -47,19 +38,18 @@ const initialState: AnalogeEingaengeState = {
|
||||
win_analogeEingaenge8: { ...defaultAnalogerEingang },
|
||||
};
|
||||
|
||||
// Mock-Daten aus `window` laden
|
||||
// Dynamisch Mock-Daten aus `window` abrufen
|
||||
export const loadFromWindow = createAsyncThunk(
|
||||
"analogeEingaenge/loadFromWindow",
|
||||
async () => {
|
||||
const entries = Object.entries(window).filter(([key]) =>
|
||||
key.startsWith("win_analogeEingaenge")
|
||||
);
|
||||
|
||||
const data: Partial<AnalogeEingaengeState> = {};
|
||||
|
||||
entries.forEach(([key, value]) => {
|
||||
for (let i = 1; i <= 8; i++) {
|
||||
const key = `win_analogeEingaenge${i}`;
|
||||
const value = (window as any)[key];
|
||||
|
||||
if (Array.isArray(value) && value.length === 7) {
|
||||
data[key as keyof AnalogeEingaengeState] = {
|
||||
data[key] = {
|
||||
id: value[0],
|
||||
value: value[1],
|
||||
name: value[2],
|
||||
@@ -69,7 +59,7 @@ export const loadFromWindow = createAsyncThunk(
|
||||
oG: value[6] === 1,
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -82,18 +72,18 @@ const analogeEingaengeSlice = createSlice({
|
||||
reducers: {
|
||||
setAnalogerEingang(
|
||||
state,
|
||||
action: PayloadAction<{
|
||||
key: keyof AnalogeEingaengeState;
|
||||
value: AnalogerEingang;
|
||||
}>
|
||||
action: PayloadAction<{ key: string; value: AnalogerEingang }>
|
||||
) {
|
||||
state[action.payload.key] = action.payload.value;
|
||||
},
|
||||
resetAnalogeEingaenge(state) {
|
||||
Object.keys(state).forEach((key) => {
|
||||
state[key as keyof AnalogeEingaengeState] = {
|
||||
...defaultAnalogerEingang,
|
||||
};
|
||||
setAnalogeEingaenge(
|
||||
state,
|
||||
action: PayloadAction<Partial<AnalogeEingaengeState>>
|
||||
) {
|
||||
Object.entries(action.payload).forEach(([key, value]) => {
|
||||
if (value) {
|
||||
state[key] = value;
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
@@ -104,7 +94,7 @@ const analogeEingaengeSlice = createSlice({
|
||||
},
|
||||
});
|
||||
|
||||
export const { setAnalogerEingang, resetAnalogeEingaenge } =
|
||||
export const { setAnalogerEingang, setAnalogeEingaenge } =
|
||||
analogeEingaengeSlice.actions;
|
||||
|
||||
export default analogeEingaengeSlice.reducer;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// redux/store.ts
|
||||
import { configureStore } from "@reduxjs/toolkit";
|
||||
import { useDispatch } from "react-redux";
|
||||
import authReducer from "./slices/authSlice";
|
||||
import variablesReducer from "./slices/variablesSlice";
|
||||
import kueChartModeReducer from "./slices/kueChartModeSlice";
|
||||
@@ -30,5 +30,6 @@ const store = configureStore({
|
||||
|
||||
export type RootState = ReturnType<typeof store.getState>;
|
||||
export type AppDispatch = typeof store.dispatch;
|
||||
export const useAppDispatch: () => AppDispatch = useDispatch; // ✅ Typisierte Dispatch-Funktion
|
||||
|
||||
export default store;
|
||||
|
||||
Reference in New Issue
Block a user