feat: lokale Speicherung der Referenzkurve per localStorage implementiert

- Aktuelle Messkurve wird bei Klick auf „Als Referenzkurve setzen“ in localStorage gespeichert
- fetchTDRReferenceCurve lädt zuerst aus localStorage, dann aus Datei/Produktion
- Ermöglicht Setzen und Testen von Referenzkurven in der Entwicklungsumgebung ohne Backend
This commit is contained in:
Ismail Ali
2025-03-30 20:22:48 +02:00
parent cb2deecf17
commit 826977c9c7
4 changed files with 23 additions and 20 deletions

View File

@@ -22,7 +22,11 @@ const TDRChartActionBar: React.FC = () => {
const idsForSlot = const idsForSlot =
selectedSlot !== null ? tdmChartData[selectedSlot] ?? [] : []; selectedSlot !== null ? tdmChartData[selectedSlot] ?? [] : [];
const tdrDataById = useSelector(
(state: RootState) => state.tdrDataById.dataById
);
const [selectedId, setSelectedId] = useState<number | null>(null); const [selectedId, setSelectedId] = useState<number | null>(null);
const currentChartData = selectedId !== null ? tdrDataById[selectedId] : [];
// 🔄 Dropdown-Auswahl: neue Messung laden // 🔄 Dropdown-Auswahl: neue Messung laden
const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => { const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
@@ -32,19 +36,15 @@ const TDRChartActionBar: React.FC = () => {
}; };
// 📌 Referenz setzen (nutzt Slotnummer + 1 für die API) // 📌 Referenz setzen (nutzt Slotnummer + 1 für die API)
const handleSetReference = async () => { const handleSetReference = () => {
if (selectedId === null || selectedSlot === null) return; if (selectedSlot === null || !currentChartData?.length) return;
const apiSlot = selectedSlot + 1; localStorage.setItem(
const url = `${window.location.origin}/CPL?seite.ACP&KTR${apiSlot}=${selectedId}`; `ref-curve-slot${selectedSlot}`,
try { JSON.stringify(currentChartData)
const response = await fetch(url); );
if (!response.ok) throw new Error("Fehler beim Setzen der Referenzkurve");
alert("✅ Referenzkurve erfolgreich gesetzt."); alert("✅ Referenzkurve lokal gespeichert (nur im Browser)");
} catch (error) {
console.error("❌ Fehler:", error);
alert("❌ Referenzkurve konnte nicht gesetzt werden.");
}
}; };
// 📥 Beim Slot-Wechsel TDM-Liste + letzte ID laden // 📥 Beim Slot-Wechsel TDM-Liste + letzte ID laden

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.186"; const webVersion = "1.6.187";
export default webVersion; export default webVersion;

View File

@@ -1,4 +1,4 @@
// /redux/thunks/fetchAllTDRReferenceChartThunk.ts // /redux/thunks/fetchReferenceCurveBySlotThunk.ts
import { createAsyncThunk } from "@reduxjs/toolkit"; import { createAsyncThunk } from "@reduxjs/toolkit";
import { fetchTDRReferenceCurve } from "../../services/fetchTDRReferenceCurve"; import { fetchTDRReferenceCurve } from "../../services/fetchTDRReferenceCurve";

View File

@@ -1,11 +1,17 @@
// /services/fetchTDRReferenceCurve.ts // /services/fetchTDRReferenceCurve.ts
export const fetchTDRReferenceCurve = async ( export const fetchTDRReferenceCurve = async (
slot: number slot: number
): Promise<any[] | null> => { ): Promise<any[] | null> => {
if (typeof window === "undefined") return null; // ✅ Erst aus localStorage lesen
const local = localStorage.getItem(`ref-curve-slot${slot}`);
if (local) {
console.log(`📦 Lade Referenzkurve für Slot ${slot} aus localStorage`);
return JSON.parse(local);
}
// 🔁 Fallback: Datei oder Produktion-API
const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development"; const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development";
const url = isDev const url = isDev
? `/CPLmockData/tdr-reference-curves/slot${slot}.json` ? `/CPLmockData/tdr-reference-curves/slot${slot}.json`
: `${window.location.origin}/CPL?Service/empty.acp&TDRR=${slot}`; : `${window.location.origin}/CPL?Service/empty.acp&TDRR=${slot}`;
@@ -15,10 +21,7 @@ export const fetchTDRReferenceCurve = async (
if (!res.ok) throw new Error(`HTTP ${res.status}`); if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json(); return await res.json();
} catch (error) { } catch (error) {
console.error( console.error(`❌ Fehler beim Laden von Slot ${slot}:`, error);
`❌ Fehler beim Laden der Referenzkurve für Slot ${slot}:`,
error
);
return null; return null;
} }
}; };