feat: Chart-Status zurücksetzen, wenn das Modal geschlossen wird

- Redux-Slice `kabelueberwachungChartSlice.ts` erweitert, um `isChartOpen` beim Schließen zurückzusetzen
- `ChartSwitcher.tsx` so angepasst, dass `setChartOpen(false)` beim Schließen des Modals (`onClose`) aufgerufen wird
- `handleClose` als zentrale Schließen-Funktion eingeführt, um sowohl das Modal zu schließen als auch den Redux-Status zu aktualisieren
- Sicherstellt, dass `vonDatum` und `bisDatum` beim erneuten Öffnen korrekt aktualisiert werden
This commit is contained in:
ISA
2025-02-21 11:18:05 +01:00
parent cdf5ca6d6e
commit 0faf506763
4 changed files with 42 additions and 18 deletions

View File

@@ -5,8 +5,9 @@ import LoopChartActionBar from "./LoopMeasurementChart/LoopChartActionBar";
import TDRChartActionBar from "./TDRChart/TDRChartActionBar"; import TDRChartActionBar from "./TDRChart/TDRChartActionBar";
import LoopMeasurementChart from "./LoopMeasurementChart/LoopMeasurementChart"; import LoopMeasurementChart from "./LoopMeasurementChart/LoopMeasurementChart";
import TDRChart from "./TDRChart/TDRChart"; import TDRChart from "./TDRChart/TDRChart";
import { useSelector } from "react-redux"; import { useSelector, useDispatch } from "react-redux";
import { RootState } from "../../../../../redux/store"; import { RootState } from "../../../../../redux/store";
import { setChartOpen } from "../../../../../redux/slices/kabelueberwachungChartSlice";
interface ChartSwitcherProps { interface ChartSwitcherProps {
isOpen: boolean; isOpen: boolean;
@@ -14,21 +15,27 @@ interface ChartSwitcherProps {
} }
const ChartSwitcher: React.FC<ChartSwitcherProps> = ({ isOpen, onClose }) => { const ChartSwitcher: React.FC<ChartSwitcherProps> = ({ isOpen, onClose }) => {
const dispatch = useDispatch();
const activeMode = useSelector( const activeMode = useSelector(
(state: RootState) => state.chartData.activeMode (state: RootState) => state.chartData.activeMode
); );
// **Neue Funktion: Modal schließen + Redux-Status zurücksetzen**
const handleClose = () => {
dispatch(setChartOpen(false)); // Schalter zurücksetzen
onClose(); // Originale Schließen-Funktion aufrufen
};
return ( return (
<ReactModal <ReactModal
isOpen={isOpen} isOpen={isOpen}
onRequestClose={onClose} onRequestClose={handleClose} // Hier `handleClose` statt `onClose`
ariaHideApp={false} ariaHideApp={false}
style={{ style={{
overlay: { backgroundColor: "rgba(0, 0, 0, 0.5)" }, overlay: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
content: { content: {
top: "50%", top: "50%",
left: "50%", left: "50%",
bottom: "auto", bottom: "auto",
marginRight: "-50%", marginRight: "-50%",
transform: "translate(-50%, -50%)", transform: "translate(-50%, -50%)",
@@ -40,7 +47,7 @@ const ChartSwitcher: React.FC<ChartSwitcherProps> = ({ isOpen, onClose }) => {
}} }}
> >
<button <button
onClick={onClose} onClick={handleClose} // Hier `handleClose` statt `onClose`
style={{ style={{
position: "absolute", position: "absolute",
top: "0.625rem", top: "0.625rem",
@@ -59,13 +66,13 @@ const ChartSwitcher: React.FC<ChartSwitcherProps> = ({ isOpen, onClose }) => {
<> <>
<h3 className="text-lg font-semibold">Schleifenmessung</h3> <h3 className="text-lg font-semibold">Schleifenmessung</h3>
<LoopChartActionBar /> <LoopChartActionBar />
<LoopMeasurementChart /> {/* 🎯 Hier wird das Chart gerendert */} <LoopMeasurementChart />
</> </>
) : ( ) : (
<> <>
<h3 className="text-lg font-semibold">TDR-Messung</h3> <h3 className="text-lg font-semibold">TDR-Messung</h3>
<TDRChartActionBar /> <TDRChartActionBar />
<TDRChart /> {/* 🎯 Hier wird das Chart gerendert */} <TDRChart />
</> </>
)} )}
</ReactModal> </ReactModal>

View File

@@ -9,15 +9,15 @@ import {
setChartData, setChartData,
setSelectedMode, setSelectedMode,
setSelectedSlotType, setSelectedSlotType,
setChartOpen,
} from "../../../../../../redux/slices/kabelueberwachungChartSlice"; } from "../../../../../../redux/slices/kabelueberwachungChartSlice";
const LoopChartActionBar: React.FC = () => { const LoopChartActionBar: React.FC = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
// Redux-Status abrufen // Redux-Status abrufen
const { vonDatum, bisDatum, selectedMode, selectedSlotType } = useSelector( const { vonDatum, bisDatum, selectedMode, selectedSlotType, isChartOpen } =
(state: RootState) => state.kabelueberwachungChart useSelector((state: RootState) => state.kabelueberwachungChart);
);
/** /**
* API-URL-Erstellung für Entwicklung und Produktion * API-URL-Erstellung für Entwicklung und Produktion
@@ -46,6 +46,15 @@ const LoopChartActionBar: React.FC = () => {
if (Array.isArray(jsonData)) { if (Array.isArray(jsonData)) {
dispatch(setChartData(jsonData)); dispatch(setChartData(jsonData));
// Falls das Chart zum ersten Mal geöffnet wird, setze vonDatum & bisDatum
if (!isChartOpen && jsonData.length > 0) {
const firstDate = new Date(jsonData[jsonData.length - 1].t);
const lastDate = new Date(jsonData[0].t);
dispatch(setVonDatum(firstDate.toISOString().split("T")[0]));
dispatch(setBisDatum(lastDate.toISOString().split("T")[0]));
dispatch(setChartOpen(true)); // Setze den Schalter auf "geöffnet"
}
} else { } else {
console.error("Erwartetes Array, aber erhalten:", jsonData); console.error("Erwartetes Array, aber erhalten:", jsonData);
} }
@@ -95,14 +104,6 @@ const LoopChartActionBar: React.FC = () => {
<option value="schleifenwiderstand">Schleifenwiderstand</option> <option value="schleifenwiderstand">Schleifenwiderstand</option>
<option value="isolationswiderstand">Isolationswiderstand</option> <option value="isolationswiderstand">Isolationswiderstand</option>
</select> </select>
{/* Daten abrufen */}
<button
onClick={handleFetchData}
className="px-3 py-1 bg-green-500 text-white rounded text-sm"
>
Daten Laden
</button>
</div> </div>
); );
}; };

View File

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

View File

@@ -6,6 +6,7 @@ interface KabelueberwachungChartState {
bisDatum: string; bisDatum: string;
selectedMode: "DIA0" | "DIA1" | "DIA2"; selectedMode: "DIA0" | "DIA1" | "DIA2";
selectedSlotType: "isolationswiderstand" | "schleifenwiderstand"; selectedSlotType: "isolationswiderstand" | "schleifenwiderstand";
isChartOpen: boolean; // NEU: Schalter für das erste Öffnen des Charts
} }
const initialState: KabelueberwachungChartState = { const initialState: KabelueberwachungChartState = {
@@ -14,6 +15,7 @@ const initialState: KabelueberwachungChartState = {
bisDatum: "2025-02-28", bisDatum: "2025-02-28",
selectedMode: "DIA0", selectedMode: "DIA0",
selectedSlotType: "schleifenwiderstand", selectedSlotType: "schleifenwiderstand",
isChartOpen: false, // Standard: Chart ist beim ersten Laden geschlossen
}; };
const kabelueberwachungChartSlice = createSlice({ const kabelueberwachungChartSlice = createSlice({
@@ -22,6 +24,16 @@ const kabelueberwachungChartSlice = createSlice({
reducers: { reducers: {
setChartData: (state, action: PayloadAction<any[]>) => { setChartData: (state, action: PayloadAction<any[]>) => {
state.chartData = action.payload; state.chartData = action.payload;
// Falls das Chart das erste Mal geöffnet wird, setze vonDatum & bisDatum
if (!state.isChartOpen && action.payload.length > 0) {
const firstDate = new Date(action.payload[action.payload.length - 1].t);
const lastDate = new Date(action.payload[0].t);
state.vonDatum = firstDate.toISOString().split("T")[0];
state.bisDatum = lastDate.toISOString().split("T")[0];
state.isChartOpen = true; // Schalter setzen, damit es nicht erneut passiert
}
}, },
setVonDatum: (state, action: PayloadAction<string>) => { setVonDatum: (state, action: PayloadAction<string>) => {
state.vonDatum = action.payload; state.vonDatum = action.payload;
@@ -41,6 +53,9 @@ const kabelueberwachungChartSlice = createSlice({
) => { ) => {
state.selectedSlotType = action.payload; state.selectedSlotType = action.payload;
}, },
setChartOpen: (state, action: PayloadAction<boolean>) => {
state.isChartOpen = action.payload;
},
}, },
}); });
@@ -50,6 +65,7 @@ export const {
setBisDatum, setBisDatum,
setSelectedMode, setSelectedMode,
setSelectedSlotType, setSelectedSlotType,
setChartOpen,
} = kabelueberwachungChartSlice.actions; } = kabelueberwachungChartSlice.actions;
export default kabelueberwachungChartSlice.reducer; export default kabelueberwachungChartSlice.reducer;