import React, { useState, useEffect } from "react"; import { useRecoilValue } from "recoil"; import { selectedPoiState } from "../../store/atoms/poiState"; import { currentPoiState } from "../../store/atoms/currentPoiState"; const PoiUpdateModal = ({ onClose, poiData, onSubmit }) => { const currentPoi = useRecoilValue(currentPoiState); const selectedPoi = useRecoilValue(selectedPoiState); const [poiId, setPoiId] = useState(poiData ? poiData.idPoi : ""); const [name, setName] = useState(poiData ? poiData.name : ""); const [poiTypData, setPoiTypData] = useState([]); const [poiTypeId, setPoiTypeId] = useState(""); const [locationDeviceData, setLocationDeviceData] = useState([]); const [deviceName, setDeviceName] = useState(""); const [idLD, setIdLD] = useState(poiData ? poiData.idLD : ""); const [description, setDescription] = useState(poiData ? poiData.description : ""); // Fetch and set POI data useEffect(() => { if (poiData) { setPoiId(poiData.idPoi); setName(poiData.name); setPoiTypeId(poiData.idPoiTyp); setIdLD(poiData.idLD); setDescription(poiData.description); } }, [poiData]); // Fetch POI types and pre-select the current POI type useEffect(() => { const fetchPoiTypData = async () => { const cachedPoiTypData = localStorage.getItem("poiTypData"); if (cachedPoiTypData) { const data = JSON.parse(cachedPoiTypData); setPoiTypData(data); if (poiData) { setPoiTypeId(poiData.idPoiTyp); // Set the selected POI type ID } } else { try { const response = await fetch("/api/talas_v5_DB/poiTyp/readPoiTyp"); const data = await response.json(); setPoiTypData(data); localStorage.setItem("poiTypData", JSON.stringify(data)); if (poiData) { setPoiTypeId(poiData.idPoiTyp); // Set the selected POI type ID } } catch (error) { console.error("Fehler beim Abrufen der poiTyp Daten:", error); } } }; fetchPoiTypData(); }, [poiData]); // Fetch location devices and pre-select the current device useEffect(() => { const fetchLocationDevices = async () => { const cachedDeviceData = localStorage.getItem("locationDeviceData"); if (cachedDeviceData) { const data = JSON.parse(cachedDeviceData); setLocationDeviceData(data); if (poiData) { const selectedDevice = data.find((device) => device.idLD === poiData.idLD); setDeviceName(selectedDevice ? selectedDevice.name : ""); // Pre-select the current device } } else { try { const response = await fetch("/api/talas_v5_DB/locationDevice/locationDevices"); const data = await response.json(); setLocationDeviceData(data); localStorage.setItem("locationDeviceData", JSON.stringify(data)); if (poiData) { const selectedDevice = data.find((device) => device.idLD === poiData.idLD); setDeviceName(selectedDevice ? selectedDevice.name : ""); // Pre-select the current device } } catch (error) { console.error("Fehler beim Abrufen der Standort- und Gerätedaten:", error); } } }; fetchLocationDevices(); }, [poiData]); const handleDeletePoi = async () => { if (confirm("Sind Sie sicher, dass Sie diesen POI löschen möchten?")) { try { const response = await fetch(`/api/talas_v5_DB/pois/deletePoi?id=${poiId}`, { method: "DELETE", }); if (response.ok) { onClose(); window.location.reload(); } else { throw new Error("Fehler beim Löschen des POI."); } } catch (error) { console.error("Fehler beim Löschen des POI:", error); alert("Fehler beim Löschen des POI."); } } }; const handleSubmit = async (event) => { event.preventDefault(); const idLDResponse = await fetch(`/api/talas_v5_DB/locationDevice/getDeviceId?deviceName=${encodeURIComponent(deviceName)}`); const idLDData = await idLDResponse.json(); const idLD = idLDData.idLD; try { const response = await fetch("/api/talas_v5_DB/pois/updatePoi", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ idPoi: poiId, name: name, description: description, idPoiTyp: poiTypeId, idLD: idLD, }), }); if (response.ok) { onClose(); window.location.reload(); } else { const errorResponse = await response.json(); throw new Error(errorResponse.error || "Fehler beim Aktualisieren des POI."); } } catch (error) { console.error("Fehler beim Aktualisieren des POI:", error); alert("Fehler beim Aktualisieren des POI."); } }; return (