refactor: lade TDM-Liste nur im TDR-Modus über TDRChartActionBar

- fetchTDMDataBySlotThunk aus ChartSwitcher entfernt
- TDM-Daten werden jetzt gezielt im TDR-Kontext geladen
- Vermeidet Konflikte mit Schleifenmodus und spart Ressourcen
This commit is contained in:
ISA
2025-03-28 08:32:32 +01:00
parent 4e459a7f36
commit 35c9c1e486
5 changed files with 69 additions and 12 deletions

View File

@@ -18,7 +18,7 @@ import {
setSelectedChartType,
} from "../../../../../redux/slices/tdrChartSlice";
import { resetBrushRange } from "../../../../../redux/slices/brushSlice";
import { fetchAllTDRChartData } from "../../../../../redux/thunks/fetchAllTDRChartThunk";
//import { fetchAllTDRChartData } from "../../../../../redux/thunks/fetchAllTDRChartThunk";
import { fetchTDMDataBySlotThunk } from "../../../../../redux/thunks/fetchTDMDataBySlotThunk";
import { fetchTDRChartDataBySlotThunk } from "../../../../../redux/thunks/fetchTDRChartDataBySlotThunk";
@@ -64,20 +64,15 @@ const ChartSwitcher: React.FC<ChartSwitcherProps> = ({
//-------------------------------------
useEffect(() => {
dispatch(fetchAllTDRChartData()); // Erstes Laden
//dispatch(fetchAllTDRChartData()); // Erstes Laden
const interval = setInterval(() => {
dispatch(fetchAllTDRChartData());
//dispatch(fetchAllTDRChartData());
}, 10000); // Alle 10 Sekunden neue Daten abrufen
return () => clearInterval(interval); // Cleanup, wenn Komponente entladen wird
}, [dispatch]);
//-------------------------------------
useEffect(() => {
if (slotIndex !== null) {
dispatch(fetchTDMDataBySlotThunk(slotIndex));
}
}, [slotIndex]);
//-------------------------------------
useEffect(() => {

View File

@@ -1,15 +1,18 @@
// /components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChartActionBar.tsx
import React, { useState } from "react";
import React, { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { useAppDispatch } from "../../../../../../redux/store";
import { RootState } from "../../../../../../redux/store";
import { fetchTDRChartDataById } from "../../../../../../services/fetchTDRChartDataById";
import {
setTDRChartDataById,
setSelectedTDRId,
} from "../../../../../../redux/slices/tdrDataByIdSlice";
import { fetchTDMDataBySlotThunk } from "../../../../../../redux/thunks/fetchTDMDataBySlotThunk";
const TDRChartActionBar: React.FC = () => {
const dispatch = useDispatch();
const dispatch = useAppDispatch();
const tdmChartData = useSelector((state: RootState) => state.tdmChart.data);
const selectedSlot = useSelector(
@@ -54,7 +57,12 @@ const TDRChartActionBar: React.FC = () => {
alert("❌ Referenzkurve konnte nicht gesetzt werden.");
}
};
//-------------------------------
useEffect(() => {
if (selectedSlot !== null) {
dispatch(fetchTDMDataBySlotThunk(selectedSlot));
}
}, [selectedSlot]);
//--------------------------------
return (
<div className="flex justify-between items-center p-2 bg-gray-100 rounded-lg space-x-4">

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/
const webVersion = "1.6.179";
const webVersion = "1.6.180";
export default webVersion;

View File

@@ -0,0 +1,52 @@
// /redux/slices/tdmSingleChartSlice.ts
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { fetchTDMDataBySlotThunk } from "../thunks/fetchTDMDataBySlotThunk";
interface TDMChartEntry {
id: number;
t: string;
}
interface TDMChartState {
data: {
[slot: number]: TDMChartEntry[];
};
loading: boolean;
error: string | null;
}
const initialState: TDMChartState = {
data: {},
loading: false,
error: null,
};
const tdmSingleChartSlice = createSlice({
name: "tdmSingleChart",
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchTDMDataBySlotThunk.pending, (state) => {
state.loading = true;
state.error = null;
})
.addCase(
fetchTDMDataBySlotThunk.fulfilled,
(
state,
action: PayloadAction<{ slot: number; data: TDMChartEntry[] }>
) => {
state.loading = false;
state.data[action.payload.slot] = action.payload.data;
}
)
.addCase(fetchTDMDataBySlotThunk.rejected, (state, action) => {
state.loading = false;
state.error = action.error.message ?? "Unbekannter Fehler";
});
},
});
export default tdmSingleChartSlice.reducer;

View File

@@ -20,6 +20,7 @@ import tdrDataByIdReducer from "./slices/tdrDataByIdSlice";
import kueDataReducer from "./slices/kueDataSlice";
import selectedChartDataReducer from "./slices/selectedChartDataSlice";
import tdrSingleChartReducer from "./slices/tdrSingleChartSlice";
import tdmSingleChartReducer from "./slices/tdmSingleChartSlice";
const store = configureStore({
reducer: {
@@ -42,6 +43,7 @@ const store = configureStore({
kueData: kueDataReducer,
selectedChartData: selectedChartDataReducer,
tdrSingleChart: tdrSingleChartReducer,
tdmSingleChart: tdmSingleChartReducer,
},
});