diff --git a/components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart.tsx b/components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart.tsx index 8cdcca3..c2f73a9 100644 --- a/components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart.tsx +++ b/components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart.tsx @@ -9,6 +9,7 @@ import { Chart, registerables } from "chart.js"; import "chartjs-adapter-date-fns"; import { getColor } from "../../../../../../utils/colors"; import TDRChartActionBar from "./TDRChartActionBar"; +import { fetchReferenceCurveBySlotThunk } from "../../../../../../redux/thunks/fetchReferenceCurveBySlotThunk"; const TDRChart: React.FC<{ isFullScreen: boolean }> = ({ isFullScreen }) => { const dispatch = useDispatch(); @@ -43,12 +44,18 @@ const TDRChart: React.FC<{ isFullScreen: boolean }> = ({ isFullScreen }) => { ? tdrDataById[selectedId] : []; //-------------------------------- - const referenceChartData = useSelector((state: RootState) => selectedSlot !== null - ? state.tdrReferenceChart.referenceData[selectedSlot] || [] + ? state.tdrReferenceChartDataBySlot.referenceData[selectedSlot] || [] : [] ); + //-------------------------------- + useEffect(() => { + if (selectedSlot !== null) { + dispatch(fetchReferenceCurveBySlotThunk(selectedSlot)); + } + }, [selectedSlot, dispatch]); + //-------------------------------- const tdmChartData = useSelector( (state: RootState) => state.tdmSingleChart.data diff --git a/config/webVersion.ts b/config/webVersion.ts index 9b1471f..499819a 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.185"; +const webVersion = "1.6.186"; export default webVersion; diff --git a/redux/slices/tdrReferenceChartDataBySlotSlice.ts b/redux/slices/tdrReferenceChartDataBySlotSlice.ts new file mode 100644 index 0000000..672aa1b --- /dev/null +++ b/redux/slices/tdrReferenceChartDataBySlotSlice.ts @@ -0,0 +1,41 @@ +// /redux/slices/tdrReferenceChartDataBySlotSlice.ts +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { fetchReferenceCurveBySlotThunk } from "../thunks/fetchReferenceCurveBySlotThunk"; + +interface TDRReferenceChartState { + referenceData: { [slot: number]: any[] }; + loading: boolean; + error: string | null; +} + +const initialState: TDRReferenceChartState = { + referenceData: {}, + loading: false, + error: null, +}; + +const tdrReferenceChartDataBySlotSlice = createSlice({ + name: "tdrReferenceChartDataBySlot", + initialState, + reducers: {}, + extraReducers: (builder) => { + builder + .addCase(fetchReferenceCurveBySlotThunk.pending, (state) => { + state.loading = true; + state.error = null; + }) + .addCase( + fetchReferenceCurveBySlotThunk.fulfilled, + (state, action: PayloadAction<{ slot: number; data: any[] }>) => { + state.loading = false; + state.referenceData[action.payload.slot] = action.payload.data; + } + ) + .addCase(fetchReferenceCurveBySlotThunk.rejected, (state, action) => { + state.loading = false; + state.error = action.error.message ?? "Unbekannter Fehler"; + }); + }, +}); + +export default tdrReferenceChartDataBySlotSlice.reducer; diff --git a/redux/store.ts b/redux/store.ts index 41c6d3e..9c1fc95 100644 --- a/redux/store.ts +++ b/redux/store.ts @@ -20,6 +20,7 @@ import tdrDataByIdReducer from "./slices/tdrDataByIdSlice"; import kueDataReducer from "./slices/kueDataSlice"; import selectedChartDataReducer from "./slices/selectedChartDataSlice"; import tdmSingleChartReducer from "./slices/tdmSingleChartSlice"; +import tdrReferenceChartDataBySlotReducer from "./slices/tdrReferenceChartDataBySlotSlice"; const store = configureStore({ reducer: { @@ -42,6 +43,7 @@ const store = configureStore({ kueData: kueDataReducer, selectedChartData: selectedChartDataReducer, tdmSingleChart: tdmSingleChartReducer, + tdrReferenceChartDataBySlot: tdrReferenceChartDataBySlotReducer, }, }); diff --git a/redux/thunks/fetchReferenceCurveBySlotThunk.ts b/redux/thunks/fetchReferenceCurveBySlotThunk.ts new file mode 100644 index 0000000..a4be147 --- /dev/null +++ b/redux/thunks/fetchReferenceCurveBySlotThunk.ts @@ -0,0 +1,12 @@ +// /redux/thunks/fetchAllTDRReferenceChartThunk.ts +import { createAsyncThunk } from "@reduxjs/toolkit"; +import { fetchTDRReferenceCurve } from "../../services/fetchTDRReferenceCurve"; + +export const fetchReferenceCurveBySlotThunk = createAsyncThunk( + "tdrReferenceChart/fetchBySlot", + async (slot: number) => { + const data = await fetchTDRReferenceCurve(slot); + if (!data) throw new Error("Keine Referenzdaten gefunden"); + return { slot, data }; + } +); diff --git a/services/fetchTDRReferenceCurve.ts b/services/fetchTDRReferenceCurve.ts new file mode 100644 index 0000000..f2f2b5d --- /dev/null +++ b/services/fetchTDRReferenceCurve.ts @@ -0,0 +1,24 @@ +// /services/fetchTDRReferenceCurve.ts +export const fetchTDRReferenceCurve = async ( + slot: number +): Promise => { + if (typeof window === "undefined") return null; + + const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development"; + + const url = isDev + ? `/CPLmockData/tdr-reference-curves/slot${slot}.json` + : `${window.location.origin}/CPL?Service/empty.acp&TDRR=${slot}`; + + try { + const res = await fetch(url); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + return await res.json(); + } catch (error) { + console.error( + `❌ Fehler beim Laden der Referenzkurve für Slot ${slot}:`, + error + ); + return null; + } +};