// /components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChartActionBar.tsx import React, { useState, useEffect } from "react"; import { useSelector } from "react-redux"; import { useAppDispatch } from "@/redux/store"; import { RootState } from "@/redux/store"; import { fetchTDMDataBySlotThunk } from "@/redux/thunks/getTDMListBySlotThunk"; import { getTDRChartDataByIdThunk } from "@/redux/thunks/getTDRChartDataByIdThunk"; import { getReferenceCurveBySlotThunk } from "@/redux/thunks/getReferenceCurveBySlotThunk"; // ⬅ import ergänzen import { Listbox } from "@headlessui/react"; const TDRChartActionBar: React.FC = () => { const dispatch = useAppDispatch(); // ✅ Redux: selectedSlot aus kueChartMode (0-basiert) const selectedSlot = useSelector( (state: RootState) => state.kueChartModeSlice.selectedSlot ); const tdmChartData = useSelector( (state: RootState) => state.tdmSingleChartSlice.data ); const idsForSlot = selectedSlot !== null ? tdmChartData[selectedSlot] ?? [] : []; const tdrDataById = useSelector( (state: RootState) => state.tdrDataByIdSlice.dataById ); const [selectedId, setSelectedId] = useState(null); const currentChartData = selectedId !== null ? tdrDataById[selectedId] : []; // 📌 Referenz setzen (nutzt Slotnummer + 1 für die API) const handleSetReference = async () => { if ( selectedSlot === null || selectedId === null || !currentChartData?.length ) return; try { const slotNumber = selectedSlot + 1; // Slot ist 0-basiert, API will 1-basiert const isDev = process.env.NEXT_PUBLIC_NODE_ENV === "development"; if (isDev) { await fetch("/api/cpl/updateTdrReferenceCurveAPIHandler", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ slot: slotNumber, data: currentChartData, }), }); } else { const url = `/CPL?KTR${slotNumber}=${selectedId}`; await fetch(url, { method: "GET" }); } if (!isDev) { const url = `/CPL?KTR${slotNumber}=${selectedId}`; const response = await fetch(url, { method: "GET" }); if (!response.ok) { throw new Error( `Fehler beim Setzen der Referenz: ${response.statusText}` ); } } // Optional: lokale Speicherung und Redux-Update localStorage.setItem( `ref-curve-slot${selectedSlot}`, JSON.stringify(currentChartData) ); dispatch(getReferenceCurveBySlotThunk(selectedSlot)); alert("Referenzkurve wurde erfolgreich gesetzt!"); } catch (error) { console.error("Fehler beim Setzen der Referenzkurve:", error); alert("Fehler beim Setzen der Referenzkurve."); } }; // 📥 Beim Slot-Wechsel TDM-Liste + letzte ID laden useEffect(() => { if (selectedSlot !== null) { dispatch(fetchTDMDataBySlotThunk(selectedSlot)).then((action) => { // action can be a PayloadAction with payload or a rejected action const payload = ( action as { payload?: { data?: { id: number; t: string; d: number }[] }; } ).payload; const slotData = payload?.data; if ((slotData ?? []).length > 0) { const lastId = (slotData ?? [])[0].id; setSelectedId(lastId); dispatch(getTDRChartDataByIdThunk(lastId)); } }); } }, [selectedSlot, dispatch]); return (
{/* 🧩 Slot-Anzeige (1-basiert für Benutzer) */}
{selectedSlot !== null ? `Steckplatz ${selectedSlot + 1}` : "Kein Steckplatz gewählt"}
{/* ✅ Referenz setzen */} {selectedId !== null && ( )} {/* 🔽 Dropdown für Messungen */}
{ setSelectedId(id); if (id !== null) { dispatch(getTDRChartDataByIdThunk(id)); } }} disabled={idsForSlot.length === 0} >
{selectedId ? (() => { const selected = idsForSlot.find( (e) => e.id === selectedId ); return selected ? `${new Date(selected.t).toLocaleString("de-DE", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", second: "2-digit", })} – Fehlerstelle: ${selected.d} m` : "Wähle Messung"; })() : "Wähle Messung"} {idsForSlot.map((entry) => ( `px-4 py-1 cursor-pointer ${ selected ? "bg-littwin-blue text-white" : active ? "bg-gray-200" : "" }` } > {new Date(entry.t).toLocaleString("de-DE", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", second: "2-digit", })}{" "} – Fehlerstelle: {entry.d} m ))}
); }; export default TDRChartActionBar;