refactor: TDR-Daten in neuen tdrSingleChartSlice ausgelagert und nur pro Slot geladen

- Globalen fetchAllTDRChartData entfernt
- Neuen Slice und Thunk pro Slot erstellt
- TDRChart liest initiale Daten aus neuem Slice
This commit is contained in:
ISA
2025-03-27 14:55:06 +01:00
parent c91d621186
commit 4e459a7f36
9 changed files with 146 additions and 10 deletions

View File

@@ -19,6 +19,8 @@ import {
} from "../../../../../redux/slices/tdrChartSlice";
import { resetBrushRange } from "../../../../../redux/slices/brushSlice";
import { fetchAllTDRChartData } from "../../../../../redux/thunks/fetchAllTDRChartThunk";
import { fetchTDMDataBySlotThunk } from "../../../../../redux/thunks/fetchTDMDataBySlotThunk";
import { fetchTDRChartDataBySlotThunk } from "../../../../../redux/thunks/fetchTDRChartDataBySlotThunk";
interface ChartSwitcherProps {
isOpen: boolean;
@@ -71,6 +73,19 @@ const ChartSwitcher: React.FC<ChartSwitcherProps> = ({
return () => clearInterval(interval); // Cleanup, wenn Komponente entladen wird
}, [dispatch]);
//-------------------------------------
useEffect(() => {
if (slotIndex !== null) {
dispatch(fetchTDMDataBySlotThunk(slotIndex));
}
}, [slotIndex]);
//-------------------------------------
useEffect(() => {
if (slotIndex !== null) {
dispatch(fetchTDRChartDataBySlotThunk(slotIndex));
}
}, [slotIndex]);
//-------------------------------------
return (
<ReactModal
isOpen={isOpen}

View File

@@ -9,16 +9,12 @@ import { Chart, registerables } from "chart.js";
import "chartjs-adapter-date-fns";
import { getColor } from "../../../../../../utils/colors";
import TDRChartActionBar from "./TDRChartActionBar";
import { fetchAllTDRChartData } from "../../../../../../redux/thunks/fetchAllTDRChartThunk";
import { fetchAllTDRReferenceChartThunk } from "../../../../../../redux/thunks/fetchAllTDRReferenceChartThunk";
const TDRChart: React.FC<{ isFullScreen: boolean }> = ({ isFullScreen }) => {
const dispatch = useDispatch<AppDispatch>();
useEffect(() => {
dispatch(fetchAllTDRChartData());
dispatch(fetchAllTDRReferenceChartThunk());
}, [dispatch]);
//---------------------------------
const chartRef = useRef<HTMLCanvasElement>(null);
const chartInstance = useRef<Chart | null>(null);
@@ -36,10 +32,13 @@ const TDRChart: React.FC<{ isFullScreen: boolean }> = ({ isFullScreen }) => {
const tdrDataById = useSelector(
(state: RootState) => state.tdrDataById.dataById
);
const tdrInitialData = useSelector((state: RootState) =>
selectedSlot !== null ? state.tdrChart.data[selectedSlot] || [] : []
//--------------------------------
const tdrDataBySlot = useSelector(
(state: RootState) => state.tdrSingleChart.data
);
const tdrInitialData =
selectedSlot !== null ? tdrDataBySlot[selectedSlot] ?? [] : [];
//--------------------------------
// Kombinierte Logik: ID hat Vorrang, sonst Initial-Daten für Slot
const tdrChartData = useMemo(() => {
if (selectedId !== null && tdrDataById[selectedId]) {
@@ -190,7 +189,6 @@ const TDRChart: React.FC<{ isFullScreen: boolean }> = ({ isFullScreen }) => {
});
}, [JSON.stringify(tdrChartData), selectedSlot, selectedChartType]);
return (
<div style={{ width: "100%", height: isFullScreen ? "90%" : "28rem" }}>
<TDRChartActionBar />