From 5b2cb762cc3ebc96ceb7c7d22e6e3cbcc5a80681 Mon Sep 17 00:00:00 2001 From: Ismail Ali Date: Sun, 2 Feb 2025 13:01:04 +0100 Subject: [PATCH] fix: Behebt Endlosschleife und doppelte Recoil-Atom-Registrierung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `index.js` als Client-Komponente deklariert (`"use client"`) zur Vermeidung von SSR-Problemen. - `useEffect` optimiert, um unendliche API-Requests durch `isMounted`-Check zu verhindern. - `loadData()` angepasst, um API-Fehler korrekt abzufangen und erneute Ladeversuche zu vermeiden. - Doppelte Registrierung von `poiReadFromDbTriggerAtom` durch HMR verhindert. - Ungültige MySQL-Option `acquireTimeout` entfernt, um Verbindungsfehler zu beheben. Diese Änderungen verhindern unerwartete Reloads und verbessern die Stabilität der Anwendung. --- .env.local | 42 +- components/MapComponent - Kopie.js | 732 ++++++++++++++++++ components/PoiUpdateModal.js | 55 +- components/ShowAddStationPopup.js | 4 - components/imports.js | 162 ++++ config/config.js | 81 +- config/settings.js | 2 +- config/urls.js | 33 +- hooks/layers/useGmaMarkersLayer - Kopie.js | 79 ++ hooks/layers/useGmaMarkersLayer.js | 2 +- hooks/layers/useSmsfunkmodemMarkersLayer.js | 2 +- pages/api - Kopie/[...path].js | 20 + pages/api - Kopie/get-talasIP.js | 20 + pages/api - Kopie/gis-proxy.js | 34 + pages/api - Kopie/linesColorApi.js | 64 ++ pages/api - Kopie/rights.js | 29 + pages/api - Kopie/talas5/area.js | 40 + pages/api - Kopie/talas5/location_device.js | 42 + .../webserviceMap/GisStationsMeasurements.js | 116 +++ .../GisStationsStaticDistrict.js | 281 +++++++ .../GisStationsStatusDistrict.js | 84 ++ .../talas5/webserviceMap/GisSystemStatic.js | 273 +++++++ .../gisStationsMeasurementsSQL.js | 74 ++ .../talas_v5_DB/gisLines/readGisLines.js | 34 + .../gisLines/updateLineCoordinates.js | 58 ++ .../talas_v5_DB/locationDevice/getDeviceId.js | 41 + .../locationDevice/locationDeviceNameById.js | 40 + .../locationDevice/locationDevices.js | 32 + .../talas_v5_DB/poiTyp/readPoiTyp.js | 37 + .../talas_v5_DB/pois/addLocation.js | 37 + .../api - Kopie/talas_v5_DB/pois/deletePoi.js | 42 + .../talas_v5_DB/pois/getPoiById.js | 43 + .../api - Kopie/talas_v5_DB/pois/poi-icons.js | 36 + .../talas_v5_DB/pois/readLocations.js | 32 + .../talas_v5_DB/pois/updateLocation.js | 82 ++ .../api - Kopie/talas_v5_DB/pois/updatePoi.js | 45 ++ .../api - Kopie/talas_v5_DB/priorityConfig.js | 31 + .../station/getAllStationsNames.js | 43 + pages/api back30/[...path].js | 20 + pages/api back30/get-talasIP.js | 20 + pages/api back30/gis-proxy.js | 34 + pages/api back30/linesColorApi.js | 64 ++ pages/api back30/rights.js | 29 + pages/api back30/talas5/area.js | 40 + pages/api back30/talas5/location_device.js | 39 + .../webserviceMap/GisStationsMeasurements.js | 116 +++ .../GisStationsStaticDistrict.js | 281 +++++++ .../GisStationsStatusDistrict.js | 100 +++ .../talas5/webserviceMap/GisSystemStatic.js | 273 +++++++ .../gisStationsMeasurementsSQL.js | 70 ++ .../talas_v5_DB/gisLines/readGisLines.js | 37 + .../gisLines/updateLineCoordinates.js | 61 ++ .../talas_v5_DB/locationDevice/getDeviceId.js | 40 + .../locationDevice/locationDeviceNameById.js | 46 ++ .../locationDevice/locationDevices.js | 35 + .../talas_v5_DB/poiTyp/readPoiTyp.js | 33 + .../talas_v5_DB/pois/addLocation.js | 38 + .../api back30/talas_v5_DB/pois/deletePoi.js | 45 ++ .../api back30/talas_v5_DB/pois/getPoiById.js | 42 + .../api back30/talas_v5_DB/pois/poi-icons.js | 42 + .../talas_v5_DB/pois/readLocations.js | 42 + .../talas_v5_DB/pois/updateLocation.js | 39 + .../api back30/talas_v5_DB/pois/updatePoi.js | 46 ++ .../api back30/talas_v5_DB/priorityConfig.js | 40 + pages/api/[...path].js | 4 +- pages/api/talas5/area.js | 24 + .../webserviceMap/GisStationsMeasurements.js | 116 +++ .../GisStationsStaticDistrict.js | 281 +++++++ .../GisStationsStatusDistrict.js | 81 ++ .../talas5/webserviceMap/GisSystemStatic.js | 273 +++++++ .../gisStationsMeasurementsSQL.js | 56 ++ pages/index.js | 28 +- services/apiService.js | 33 +- store/atoms/poiReadFromDbTriggerAtom.js | 19 +- store/selectors/readPoiMarkersStore.js | 21 +- utils/createAndSetDevices.js | 10 +- utils/mapUtils.js | 9 +- utils/mysqlPool.js | 2 +- utils/openInNewTab.js | 3 +- utils/setupPOIs.js | 4 +- utils/setupPolylines-back.js | 341 ++++++++ utils/setupPolylines.js | 18 +- 82 files changed, 5710 insertions(+), 189 deletions(-) create mode 100644 components/MapComponent - Kopie.js create mode 100644 components/imports.js create mode 100644 hooks/layers/useGmaMarkersLayer - Kopie.js create mode 100644 pages/api - Kopie/[...path].js create mode 100644 pages/api - Kopie/get-talasIP.js create mode 100644 pages/api - Kopie/gis-proxy.js create mode 100644 pages/api - Kopie/linesColorApi.js create mode 100644 pages/api - Kopie/rights.js create mode 100644 pages/api - Kopie/talas5/area.js create mode 100644 pages/api - Kopie/talas5/location_device.js create mode 100644 pages/api - Kopie/talas5/webserviceMap/GisStationsMeasurements.js create mode 100644 pages/api - Kopie/talas5/webserviceMap/GisStationsStaticDistrict.js create mode 100644 pages/api - Kopie/talas5/webserviceMap/GisStationsStatusDistrict.js create mode 100644 pages/api - Kopie/talas5/webserviceMap/GisSystemStatic.js create mode 100644 pages/api - Kopie/talas5/webserviceMap/gisStationsMeasurementsSQL.js create mode 100644 pages/api - Kopie/talas_v5_DB/gisLines/readGisLines.js create mode 100644 pages/api - Kopie/talas_v5_DB/gisLines/updateLineCoordinates.js create mode 100644 pages/api - Kopie/talas_v5_DB/locationDevice/getDeviceId.js create mode 100644 pages/api - Kopie/talas_v5_DB/locationDevice/locationDeviceNameById.js create mode 100644 pages/api - Kopie/talas_v5_DB/locationDevice/locationDevices.js create mode 100644 pages/api - Kopie/talas_v5_DB/poiTyp/readPoiTyp.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/addLocation.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/deletePoi.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/getPoiById.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/poi-icons.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/readLocations.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/updateLocation.js create mode 100644 pages/api - Kopie/talas_v5_DB/pois/updatePoi.js create mode 100644 pages/api - Kopie/talas_v5_DB/priorityConfig.js create mode 100644 pages/api - Kopie/talas_v5_DB/station/getAllStationsNames.js create mode 100644 pages/api back30/[...path].js create mode 100644 pages/api back30/get-talasIP.js create mode 100644 pages/api back30/gis-proxy.js create mode 100644 pages/api back30/linesColorApi.js create mode 100644 pages/api back30/rights.js create mode 100644 pages/api back30/talas5/area.js create mode 100644 pages/api back30/talas5/location_device.js create mode 100644 pages/api back30/talas5/webserviceMap/GisStationsMeasurements.js create mode 100644 pages/api back30/talas5/webserviceMap/GisStationsStaticDistrict.js create mode 100644 pages/api back30/talas5/webserviceMap/GisStationsStatusDistrict.js create mode 100644 pages/api back30/talas5/webserviceMap/GisSystemStatic.js create mode 100644 pages/api back30/talas5/webserviceMap/gisStationsMeasurementsSQL.js create mode 100644 pages/api back30/talas_v5_DB/gisLines/readGisLines.js create mode 100644 pages/api back30/talas_v5_DB/gisLines/updateLineCoordinates.js create mode 100644 pages/api back30/talas_v5_DB/locationDevice/getDeviceId.js create mode 100644 pages/api back30/talas_v5_DB/locationDevice/locationDeviceNameById.js create mode 100644 pages/api back30/talas_v5_DB/locationDevice/locationDevices.js create mode 100644 pages/api back30/talas_v5_DB/poiTyp/readPoiTyp.js create mode 100644 pages/api back30/talas_v5_DB/pois/addLocation.js create mode 100644 pages/api back30/talas_v5_DB/pois/deletePoi.js create mode 100644 pages/api back30/talas_v5_DB/pois/getPoiById.js create mode 100644 pages/api back30/talas_v5_DB/pois/poi-icons.js create mode 100644 pages/api back30/talas_v5_DB/pois/readLocations.js create mode 100644 pages/api back30/talas_v5_DB/pois/updateLocation.js create mode 100644 pages/api back30/talas_v5_DB/pois/updatePoi.js create mode 100644 pages/api back30/talas_v5_DB/priorityConfig.js create mode 100644 pages/api/talas5/area.js create mode 100644 pages/api/talas5/webserviceMap/GisStationsMeasurements.js create mode 100644 pages/api/talas5/webserviceMap/GisStationsStaticDistrict.js create mode 100644 pages/api/talas5/webserviceMap/GisStationsStatusDistrict.js create mode 100644 pages/api/talas5/webserviceMap/GisSystemStatic.js create mode 100644 pages/api/talas5/webserviceMap/gisStationsMeasurementsSQL.js create mode 100644 utils/setupPolylines-back.js diff --git a/.env.local b/.env.local index 583cbd45b..328c5ab2b 100644 --- a/.env.local +++ b/.env.local @@ -1,47 +1,17 @@ #.env.local #je nach dem Mysql Server, ob localhost freigegeben ist oder die IP Adresse des Servers, manchmal die beide und manchmal nur eine -#DB_HOST=10.10.0.13 -#DB_USER=root -#DB_PASSWORD="root#$" -#DB_NAME=talas_v5 -#DB_PORT=3306 -######################### - -#NEXT_PUBLIC_BASE_URL="http://10.10.0.13/talas5/devices/" -#NEXT_PUBLIC_SERVER_URL="http://10.10.0.13" -#NEXT_PUBLIC_PROXY_TARGET="http://10.10.0.13" -#NEXT_PUBLIC_ONLINE_TILE_LAYER="http://10.10.0.13:3000/mapTiles/{z}/{x}/{y}.png" -######################### - - -#DB_HOST=10.10.0.70 -DB_HOST=127.0.0.1 +DB_HOST=192.168.10.33 DB_USER=root DB_PASSWORD="root#$" DB_NAME=talas_v5 DB_PORT=3306 - -######################### -#device nur Verlinkung wenn die gleiche DB ist -#NEXT_PUBLIC_BASE_URL="http://10.10.0.70/talas5/devices/" -#NEXT_PUBLIC_SERVER_URL="http://10.10.0.70" -#NEXT_PUBLIC_PROXY_TARGET="http://10.10.0.70" -#NEXT_PUBLIC_ONLINE_TILE_LAYER="http://10.10.0.13:3000/mapTiles/{z}/{x}/{y}.png" -NEXT_PUBLIC_ONLINE_TILE_LAYER="http://127.0.0.1:3000/mapTiles/{z}/{x}/{y}.png" ######################### -#DB_HOST=192.168.10.168 -#DB_USER=root -#DB_PASSWORD="root#$" -#DB_NAME=talas_v5 -#DB_PORT=3306 +NEXT_PUBLIC_BASE_URL="http://192.168.10.33/talas5/devices/" +NEXT_PUBLIC_SERVER_URL="http://192.168.10.33" +NEXT_PUBLIC_PROXY_TARGET="http://192.168.10.33" +NEXT_PUBLIC_ONLINE_TILE_LAYER="http://192.168.10.33/talas5/TileMap/mapTiles/{z}/{x}/{y}.png" ######################### -#URLs für den Client (clientseitig) -#NEXT_PUBLIC_BASE_URL="http://192.168.10.168/talas5/devices/" -#NEXT_PUBLIC_SERVER_URL="http://192.168.10.168" -#NEXT_PUBLIC_PROXY_TARGET="http://192.168.10.168" -#NEXT_PUBLIC_ONLINE_TILE_LAYER="http://192.168.10.14:3000/mapTiles/{z}/{x}/{y}.png" -######################### online -#NEXT_PUBLIC_ONLINE_TILE_LAYER="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" \ No newline at end of file + diff --git a/components/MapComponent - Kopie.js b/components/MapComponent - Kopie.js new file mode 100644 index 000000000..53b86cf72 --- /dev/null +++ b/components/MapComponent - Kopie.js @@ -0,0 +1,732 @@ +// components/MapComponent.js +import React, { useEffect, useRef, useState, useCallback } from "react"; +import L, { marker } from "leaflet"; +import "leaflet/dist/leaflet.css"; +import "leaflet-contextmenu/dist/leaflet.contextmenu.css"; +import "leaflet-contextmenu"; +import * as config from "../config/config.js"; +import * as urls from "../config/urls.js"; +import "leaflet.smooth_marker_bouncing"; +import OverlappingMarkerSpiderfier from "overlapping-marker-spiderfier-leaflet"; +import DataSheet from "./DataSheet.js"; +import { useRecoilState, useRecoilValue, useSetRecoilState } from "recoil"; +import { gisStationsStaticDistrictState } from "../store/atoms/gisStationState.js"; +import { gisSystemStaticState } from "../store/atoms/gisSystemState.js"; +import { mapLayersState } from "../store/atoms/mapLayersState.js"; +import { selectedAreaState } from "../store/atoms/selectedAreaState.js"; +import { zoomTriggerState } from "../store/atoms/zoomTriggerState.js"; +import { poiTypState } from "../store/atoms/poiTypState.js"; +import AddPoiModalWindow from "./pois/AddPoiModalWindow.js"; +import { poiReadFromDbTriggerAtom } from "../store/atoms/poiReadFromDbTriggerAtom.js"; +import { InformationCircleIcon } from "@heroicons/react/20/solid"; // oder 'outline' +import PoiUpdateModal from "./pois/PoiUpdateModal.js"; +import { selectedPoiState } from "../store/atoms/poiState.js"; +import { currentPoiState } from "../store/atoms/currentPoiState.js"; +import { ToastContainer, toast } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; +import { mapIdState, userIdState } from "../store/atoms/urlParameterState.js"; +import { poiLayerVisibleState } from "../store/atoms/poiLayerVisibleState.js"; +import plusRoundIcon from "./PlusRoundIcon.js"; +import { parsePoint, findClosestPoints } from "../utils/geometryUtils.js"; +import { insertNewPOI, removePOI, handleEditPoi } from "../utils/poiUtils.js"; +import { createAndSetDevices } from "../utils/createAndSetDevices.js"; +import { redrawPolyline, restoreMapSettings, checkOverlappingMarkers } from "../utils/mapUtils.js"; +import circleIcon from "./gisPolylines/icons/CircleIcon.js"; +import startIcon from "./gisPolylines/icons/StartIcon.js"; +import endIcon from "./gisPolylines/icons/EndIcon.js"; +import { fetchGisStatusStations, fetchPriorityConfig, fetchPoiData, updateLocationInDatabase, fetchUserRights, fetchDeviceNameById } from "../services/apiService.js"; +import { addContextMenuToMarker } from "../utils/addContextMenuToMarker.js"; +import { MAP_VERSION } from "../config/settings.js"; +import * as layers from "../config/layers.js"; +import { zoomIn, zoomOut, centerHere } from "../utils/zoomAndCenterUtils.js"; +import { initializeMap } from "../utils/initializeMap.js"; +import { addItemsToMapContextMenu } from "./useMapContextMenu.js"; +import useGmaMarkersLayer from "../hooks/layers/useGmaMarkersLayer.js"; // Import the custom hook +import useTalasMarkersLayer from "../hooks/layers/useTalasMarkersLayer.js"; // Import the custom hook +import useEciMarkersLayer from "../hooks/layers/useEciMarkersLayer.js"; +import useGsmModemMarkersLayer from "../hooks/layers/useGsmModemMarkersLayer.js"; +import useCiscoRouterMarkersLayer from "../hooks/layers/useCiscoRouterMarkersLayer.js"; +import useLteModemMarkersLayer from "../hooks/layers/useLteModemMarkersLayer"; + +import useWagoMarkersLayer from "../hooks/layers/useWagoMarkersLayer.js"; +import useSiemensMarkersLayer from "../hooks/layers/useSiemensMarkersLayer.js"; +import useOtdrMarkersLayer from "../hooks/layers/useOtdrMarkersLayer.js"; +import useWdmMarkersLayer from "../hooks/layers/useWdmMarkersLayer.js"; +import useMessstellenMarkersLayer from "../hooks/layers/useMessstellenMarkersLayer.js"; +import useTalasiclMarkersLayer from "../hooks/layers/useTalasiclMarkersLayer.js"; +import useDauzMarkersLayer from "../hooks/layers/useDauzMarkersLayer.js"; +import useSmsfunkmodemMarkersLayer from "../hooks/layers/useSmsfunkmodemMarkersLayer.js"; +import useUlafMarkersLayer from "../hooks/layers/useUlafMarkersLayer.js"; +import useSonstigeMarkersLayer from "../hooks/layers/useSonstigeMarkersLayer.js"; +import handlePoiSelect from "../utils/handlePoiSelect.js"; +import { fetchGisStationsStaticDistrict, fetchGisStationsStatusDistrict, fetchGisStationsMeasurements, fetchGisSystemStatic } from "../services/fetchData.js"; +import { setupPolylines } from "../utils/setupPolylines.js"; +import { setupPOIs } from "../utils/setupPOIs.js"; +import VersionInfoModal from "./VersionInfoModal.js"; +//-------------------------------------------- +import PoiUpdateModalWrapper from "./pois/PoiUpdateModalWrapper"; +import AddPoiModalWindowWrapper from "./pois/AddPoiModalWindowWrapper"; +import useFetchPoiData from "../hooks/useFetchPoiData"; +import usePoiTypData from "../hooks/usePoiTypData"; +import useMarkerLayers from "../hooks/useMarkerLayers"; +import useLayerVisibility from "../hooks/useLayerVisibility"; +import useLineData from "../hooks/useLineData.js"; +import useCreateAndSetDevices from "../hooks/useCreateAndSetDevices"; +//import { useCreateAndSetDevices } from "../hooks/useCreateAndSetDevices"; +import { useMapComponentState } from "../hooks/useMapComponentState"; +import { polylineEventsDisabledState } from "../store/atoms/polylineEventsDisabledState"; +import { disablePolylineEvents, enablePolylineEvents } from "../utils/setupPolylines"; +import { polylineLayerVisibleState } from "../store/atoms/polylineLayerVisibleState"; + +const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { + const polylineVisible = useRecoilValue(polylineLayerVisibleState); + const [editMode, setEditMode] = useState(false); // editMode Zustand + const { deviceName, setDeviceName } = useMapComponentState(); + const { poiTypData, isPoiTypLoaded } = usePoiTypData("/api/talas_v5_DB/poiTyp/readPoiTyp"); + //const [deviceName, setDeviceName] = useState(""); + const [locationDeviceData, setLocationDeviceData] = useState([]); + const [priorityConfig, setPriorityConfig] = useState([]); + const [menuItemAdded, setMenuItemAdded] = useState(false); + const poiLayerVisible = useRecoilValue(poiLayerVisibleState); + const [isRightsLoaded, setIsRightsLoaded] = useState(false); + const [hasRights, setHasRights] = useState(false); + const [mapId, setMapId] = useRecoilState(mapIdState); + const [userId, setUserId] = useRecoilState(userIdState); + const [AddPoiModalWindowState, setAddPoiModalWindowState] = useState(false); + const [userRights, setUserRights] = useState(null); + const setSelectedPoi = useSetRecoilState(selectedPoiState); + const [showPoiUpdateModal, setShowPoiUpdateModal] = useState(false); + const [currentPoiData, setCurrentPoiData] = useState(null); + const setCurrentPoi = useSetRecoilState(currentPoiState); + const [showVersionInfoModal, setShowVersionInfoModal] = useState(false); + const zoomTrigger = useRecoilValue(zoomTriggerState); + const [gisSystemStaticLoaded, setGisSystemStaticLoaded] = useState(false); + const [poiTypMap, setPoiTypMap] = useState(new Map()); + const [showPopup, setShowPopup] = useState(false); + const poiReadTrigger = useRecoilValue(poiReadFromDbTriggerAtom); + const poiLayerRef = useRef(null); // Referenz auf die Layer-Gruppe für Datenbank-Marker + const mapRef = useRef(null); // Referenz auf das DIV-Element der Karte + const [map, setMap] = useState(null); // Zustand der Karteninstanz + const [oms, setOms] = useState(null); // State für OMS-Instanz + const [GisStationsStaticDistrict, setGisStationsStaticDistrict] = useRecoilState(gisStationsStaticDistrictState); + const [GisStationsStatusDistrict, setGisStationsStatusDistrict] = useState([]); // Zustand für Statusdaten + const [GisStationsMeasurements, setGisStationsMeasurements] = useState([]); // Zustand für Messdaten + const [GisSystemStatic, setGisSystemStatic] = useRecoilState(gisSystemStaticState); // Zustand für Systemdaten + // Konstanten für die URLs + const mapGisStationsStaticDistrictUrl = config.mapGisStationsStaticDistrictUrl; + const mapGisStationsStatusDistrictUrl = config.mapGisStationsStatusDistrictUrl; + const mapGisStationsMeasurementsUrl = config.mapGisStationsMeasurementsUrl; + const mapGisSystemStaticUrl = config.mapGisSystemStaticUrl; + const webserviceGisLinesStatusUrl = config.webserviceGisLinesStatusUrl; + //console.log("priorityConfig in MapComponent1: ", priorityConfig); + /* + const talasMarkers = useTalasMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const eciMarkers = useEciMarkersLayer(map, eciMarkers, oms, layers.MAP_LAYERS.ECI); + const gsmModemMarkers = useGsmModemMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const ciscoRouterMarkers = useCiscoRouterMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const wagoMarkers = useWagoMarkersLayer(map, oms, GisSystemStatic, priorityConfig); + const siemensMarkers = useSiemensMarkersLayer(map, oms, GisSystemStatic, priorityConfig); + const otdrMarkers = useOtdrMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const wdmMarkers = useWdmMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const messstellenMarkers = useMessstellenMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const talasiclMarkers = useTalasiclMarkersLayer(map, oms, GisSystemStatic, priorityConfig); + const dauzMarkers = useDauzMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const smsfunkmodemMarkers = useSmsfunkmodemMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + const ulafMarkers = useUlafMarkersLayer(map, oms, GisSystemStatic, priorityConfig); + const sonstigeMarkers = useSonstigeMarkersLayer(map, oms, GisSystemStatic, priorityConfig); // Use the new custom hook + */ + + const [gmaMarkers, setGmaMarkers] = useState([]); //--------------------station.System === 11 alle sind untetschiedlich Nummern + const [talasMarkers, setTalasMarkers] = useState([]); + const [eciMarkers, setEciMarkers] = useState([]); + const [gsmModemMarkers, setGsmModemMarkers] = useState([]); + const [ciscoRouterMarkers, setCiscoRouterMarkers] = useState([]); + const [wagoMarkers, setWagoMarkers] = useState([]); + const [siemensMarkers, setSiemensMarkers] = useState([]); + const [otdrMarkers, setOtdrMarkers] = useState([]); + const [wdmMarkers, setWdmMarkers] = useState([]); + const [messstellenMarkers, setMessstellenMarkers] = useState([]); + const [talasiclMarkers, setTalasiclMarkers] = useState([]); + const [dauzMarkers, setDauzMarkers] = useState([]); + const [smsfunkmodemMarkers, setSmsfunkmodemMarkers] = useState([]); + const [ulafMarkers, setUlafMarkers] = useState([]); + const [sonstigeMarkers, setSonstigeMarkers] = useState([]); + const [lteModemMarkers, setLteModemMarkers] = useState([]); + + const [lineStatusData, setLineStatusData] = useState([]); + const [linesData, setLinesData] = useState([]); + const mapLayersVisibility = useRecoilValue(mapLayersState); + const selectedArea = useRecoilValue(selectedAreaState); + const poiData = useFetchPoiData("/api/talas_v5_DB/pois/poi-icons"); + const [linePositions, setLinePositions] = useState([]); + const { lineColors, tooltipContents } = useLineData(webserviceGisLinesStatusUrl, setLineStatusData); + const [polylines, setPolylines] = useState([]); + const [markers, setMarkers] = useState([]); + const closePopup = () => setShowPopup(false); + const [newPoint, setNewPoint] = useState(null); + const [newCoords, setNewCoords] = useState(null); + const [tempMarker, setTempMarker] = useState(null); + + const [popupCoordinates, setPopupCoordinates] = useState({ + lat: 52.52, + lng: 13.405, + }); + + const handleAddStation = (stationData) => { + setAddPoiModalWindowState(false); + closePopup(); // Schließt das Popup nach dem Hinzufügen + }; + + const openVersionInfoModal = () => { + setShowVersionInfoModal(true); + }; + + const closeVersionInfoModal = () => { + setShowVersionInfoModal(false); + }; + + const [currentZoom, setCurrentZoom] = useState(() => { + const storedZoom = localStorage.getItem("mapZoom"); + return storedZoom ? parseInt(storedZoom, 10) : 12; + }); + + const [currentCenter, setCurrentCenter] = useState(() => { + const storedCenter = localStorage.getItem("mapCenter"); + try { + return storedCenter ? JSON.parse(storedCenter) : [53.111111, 8.4625]; + } catch (e) { + console.error("Error parsing stored map center:", e); + return [53.111111, 8.4625]; + } + }); + const [polylineEventsDisabled, setPolylineEventsDisabled] = useRecoilState(polylineEventsDisabledState); // Recoil State + + //--------------------------------------------------------------- + + /* useEffect(() => { + fetchGisStatusStations(12, 484); // Beispielaufruf mit idMap = 10 und idUser = 484 + }, []); */ + + useEffect(() => { + const params = new URL(window.location.href).searchParams; + setMapId(params.get("m")); + setUserId(params.get("u")); + }, [setMapId, setUserId]); + + useEffect(() => { + if (map && poiLayerRef.current && isPoiTypLoaded && !menuItemAdded && isRightsLoaded) { + //console.log("Überprüfung der Berechtigung vor addItemsToMapContextMenu: ", hasRights); + addItemsToMapContextMenu(hasRights); + } + }, [ + map, + poiLayerRef, + isPoiTypLoaded, + menuItemAdded, // Hinzufügen zu den Abhängigkeiten, um den Effekt korrekt zu steuern + hasRights, // Sicherstellen, dass hasRights berücksichtigt wird + isRightsLoaded, // Überprüfung, ob die Rechte geladen sind + ]); + + useEffect(() => { + const fetchAndSetUserRights = async () => { + const rights = await fetchUserRights(); + setUserRights(rights); + setIsRightsLoaded(true); + + // Sicherstellen, dass `rights` ein Array ist, bevor `.includes()` aufgerufen wird + setHasRights(localStorage.getItem("editMode") && Array.isArray(rights) && rights.includes(56)); + }; + + fetchAndSetUserRights(); + }, []); + + useGmaMarkersLayer(map, gmaMarkers, GisStationsMeasurements, layers.MAP_LAYERS.GMA, oms); // Verwende den ausgelagerten Hook + + useEffect(() => { + const fetchWebServiceMap = async () => { + try { + // Zähler für externe API-Aufrufe in localStorage speichern + let requestCount = localStorage.getItem("fetchWebServiceMap") || 0; + requestCount = parseInt(requestCount, 10); + + const fetchOptions = { + method: "GET", + headers: { + Connection: "close", // Keep-Alive-Header hinzufügen + }, + }; + + // Fetch GIS Stations Static District + await fetchGisStationsStaticDistrict(mapGisStationsStaticDistrictUrl, setGisStationsStaticDistrict, fetchOptions); + requestCount++; // Zähler erhöhen + localStorage.setItem("fetchWebServiceMap", requestCount); + //console.log(`fetchWebServiceMap in MapComponent wurde ${requestCount} Mal aufgerufen.`); + + // Fetch GIS Stations Status District + await fetchGisStationsStatusDistrict(mapGisStationsStatusDistrictUrl, setGisStationsStatusDistrict, fetchOptions); + requestCount++; // Zähler erhöhen + localStorage.setItem("fetchWebServiceMap", requestCount); + //console.log(`fetchWebServiceMap in MapComponent wurde ${requestCount} Mal aufgerufen.`); + + // Fetch GIS Stations Measurements + await fetchGisStationsMeasurements(mapGisStationsMeasurementsUrl, setGisStationsMeasurements, fetchOptions); + requestCount++; // Zähler erhöhen + localStorage.setItem("fetchWebServiceMap", requestCount); + //console.log(`fetchWebServiceMap in MapComponent wurde ${requestCount} Mal aufgerufen.`); + + // Fetch GIS System Static + await fetchGisSystemStatic(mapGisSystemStaticUrl, setGisSystemStatic, setGisSystemStaticLoaded, fetchOptions); + requestCount++; // Zähler erhöhen + localStorage.setItem("fetchWebServiceMap", requestCount); + //console.log(`fetchWebServiceMap in MapComponent wurde ${requestCount} Mal aufgerufen.`); + } catch (error) { + console.error("Error fetching data:", error); + } + }; + + fetchWebServiceMap(); + }, []); + + //-------------------------------------------------------- + useEffect(() => { + const endpoint = "/api/talas_v5_DB/gisLines/readGisLines"; + //const endpoint = "http://localhost/talas5/ClientData/WebServiceMap.asmx/GisLinesStatus?idMap=10"; + fetch(endpoint) + .then((response) => { + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return response.json(); + }) + .then((data) => { + const newLinePositions = data.map((item) => { + //console.log("item.idLD", item.idLD); + //console.log("item.idModul", item.idModul); + + if (item.points && Array.isArray(item.points)) { + return { + coordinates: item.points.map((point) => [point.x, point.y]), + idModul: item.idModul, + idLD: item.idLD, + }; + } else { + throw new Error("Points missing or not an array"); + } + }); + setLinePositions(newLinePositions); + }) + .catch((error) => { + console.error("Error fetching data:", error.message); + }); + }, []); + //-------------------------------------------- + useEffect(() => { + const fetchPoiTypData = async () => { + try { + const response = await fetch("/api/talas_v5_DB/poiTyp/readPoiTyp"); + const data = await response.json(); + const map = new Map(); + data.forEach((item) => map.set(item.idPoiTyp, item.name)); + setPoiTypMap(map); + } catch (error) { + console.error("Fehler beim Abrufen der poiTyp-Daten-1:", error); + } + }; + //-------------------------------------------- + const fetchPoiData = async () => { + try { + const response = await fetch("/api/talas_v5_DB/pois/poi-icons"); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + const data = await response.json(); + } catch (error) { + console.error("Fehler beim Abrufen der poiData-2:", error); + } + }; + //-------------------------------------------- + + fetchPoiTypData(); + fetchPoiData(); + }, []); + + useEffect(() => { + if (map) { + const dbLayer = new L.LayerGroup().addTo(map); // Define dbLayer here + + return () => { + dbLayer.remove(); + }; + } + }, [map]); + + useEffect(() => { + if (map && !poiLayerRef.current) { + poiLayerRef.current = new L.LayerGroup().addTo(map); + } + + return () => { + if (map && poiLayerRef.current) { + map.removeLayer(poiLayerRef.current); + poiLayerRef.current = new L.LayerGroup().addTo(map); + } + locations.forEach((location) => {}); + }; + //console.log("trigger in MapComponent.js:", poiReadTrigger); + }, [map, locations, poiReadTrigger]); + + //-------------------------------------------- + useEffect(() => { + if (poiData.length === 0) return; + + setupPOIs(map, locations, poiData, poiTypMap, userRights, poiLayerRef, setSelectedPoi, setLocationDeviceData, setDeviceName, setCurrentPoi, poiLayerVisible, fetchPoiData, toast, setShowPoiUpdateModal, setCurrentPoiData, deviceName); + }, [map, locations, onLocationUpdate, poiReadTrigger, isPoiTypLoaded, userRights, poiLayerVisible, poiData, poiTypMap]); + + //--------------------------------------------- + //console.log("priorityConfig in MapComponent2: ", priorityConfig); + useEffect(() => { + if (gisSystemStaticLoaded && map) { + /* + createAndSetDevices(1, GisSystemStatic, priorityConfig); // TALAS-System + createAndSetDevices(2, GisSystemStatic, priorityConfig); // ECI-System + createAndSetDevices(5, GisSystemStatic, priorityConfig); // GSM-Modem-System + createAndSetDevices(6, GisSystemStatic, priorityConfig); // Cisco-Router-System + createAndSetDevices(7, GisSystemStatic, priorityConfig); // WAGO-System + createAndSetDevices(8, GisSystemStatic, priorityConfig); // Siemens-System + createAndSetDevices(9, GisSystemStatic, priorityConfig); // OTDR-System + createAndSetDevices(10, GisSystemStatic, priorityConfig); // WDM-System + createAndSetDevices(13, GisSystemStatic, priorityConfig); // Messstellen-System + createAndSetDevices(100, GisSystemStatic, priorityConfig); // TALASICL-System + createAndSetDevices(110, GisSystemStatic, priorityConfig); // DAUZ-System + createAndSetDevices(111, GisSystemStatic, priorityConfig); // SMS-Funkmodem-System + createAndSetDevices(200, GisSystemStatic, priorityConfig); // Sonstige-System + createAndSetDevices(0, GisSystemStatic, priorityConfig); // ULAF-System + */ + createAndSetDevices(11, setGmaMarkers, GisSystemStatic, priorityConfig); // GMA-System + createAndSetDevices(1, setTalasMarkers, GisSystemStatic, priorityConfig); // TALAS-System + createAndSetDevices(2, setEciMarkers, GisSystemStatic, priorityConfig); // ECI-System + createAndSetDevices(5, setGsmModemMarkers, GisSystemStatic, priorityConfig); // GSM-Modem-System + createAndSetDevices(5, setLteModemMarkers, GisSystemStatic, priorityConfig); //LTE Modem + createAndSetDevices(6, setCiscoRouterMarkers, GisSystemStatic, priorityConfig); // Cisco-Router-System + createAndSetDevices(7, setWagoMarkers, GisSystemStatic, priorityConfig); // WAGO-System + createAndSetDevices(8, setSiemensMarkers, GisSystemStatic, priorityConfig); // Siemens-System + createAndSetDevices(9, setOtdrMarkers, GisSystemStatic, priorityConfig); // OTDR-System + createAndSetDevices(10, setWdmMarkers, GisSystemStatic, priorityConfig); // WDM-System + createAndSetDevices(13, setMessstellenMarkers, GisSystemStatic, priorityConfig); // Messstellen-System + createAndSetDevices(100, setTalasiclMarkers, GisSystemStatic, priorityConfig); // TALASICL-System + createAndSetDevices(110, setDauzMarkers, GisSystemStatic, priorityConfig); // DAUZ-System + createAndSetDevices(111, setSmsfunkmodemMarkers, GisSystemStatic, priorityConfig); // SMS-Funkmodem-System + createAndSetDevices(200, setSonstigeMarkers, GisSystemStatic, priorityConfig); // Sonstige-System + createAndSetDevices(0, setUlafMarkers, GisSystemStatic, priorityConfig); // ULAF-System + } + }, [gisSystemStaticLoaded, map, GisSystemStatic, priorityConfig]); + + //useCreateAndSetDevices(1, talasMarkers, GisSystemStatic, priorityConfig); + + useLayerVisibility(map, talasMarkers, mapLayersVisibility, "TALAS", oms); + useLayerVisibility(map, eciMarkers, mapLayersVisibility, "ECI", oms); + useLayerVisibility(map, gsmModemMarkers, mapLayersVisibility, "GSMModem", oms); + useLayerVisibility(map, ciscoRouterMarkers, mapLayersVisibility, "CiscoRouter", oms); + useLayerVisibility(map, lteModemMarkers, mapLayersVisibility, "LTEModem", oms); + + useLayerVisibility(map, wagoMarkers, mapLayersVisibility, "WAGO", oms); + useLayerVisibility(map, siemensMarkers, mapLayersVisibility, "Siemens", oms); + useLayerVisibility(map, otdrMarkers, mapLayersVisibility, "OTDR", oms); + useLayerVisibility(map, wdmMarkers, mapLayersVisibility, "WDM", oms); + useLayerVisibility(map, gmaMarkers, mapLayersVisibility, "GMA", oms); + useLayerVisibility(map, sonstigeMarkers, mapLayersVisibility, "Sonstige", oms); + useLayerVisibility(map, talasiclMarkers, mapLayersVisibility, "TALASICL", oms); + useLayerVisibility(map, dauzMarkers, mapLayersVisibility, "DAUZ", oms); + useLayerVisibility(map, smsfunkmodemMarkers, mapLayersVisibility, "SMSFunkmodem", oms); + useLayerVisibility(map, messstellenMarkers, mapLayersVisibility, "Messstellen", oms); + useLayerVisibility(map, ulafMarkers, mapLayersVisibility, "ULAF", oms); + + useEffect(() => { + if (map) { + var x = 51.41321407879154; + var y = 7.739617925303934; + var zoom = 7; + + if (map && map.flyTo) { + map.flyTo([x, y], zoom); + } else { + console.error("Map object is not ready or does not have flyTo method"); + } + } + }, [map, zoomTrigger]); + + useEffect(() => { + if (map) { + const allMarkers = [ + ...talasMarkers, + ...eciMarkers, + ...gsmModemMarkers, + ...ciscoRouterMarkers, + ...wagoMarkers, + ...siemensMarkers, + ...otdrMarkers, + ...wdmMarkers, + ...gmaMarkers, + ...messstellenMarkers, + ...talasiclMarkers, + ...dauzMarkers, + ...smsfunkmodemMarkers, + ...sonstigeMarkers, + ...ulafMarkers, + ...lteModemMarkers, + ]; + + checkOverlappingMarkers(map, allMarkers, plusRoundIcon); + } + }, [map, talasMarkers, eciMarkers, ciscoRouterMarkers, wagoMarkers, siemensMarkers, otdrMarkers, wdmMarkers, gmaMarkers, messstellenMarkers, talasiclMarkers, dauzMarkers, smsfunkmodemMarkers, sonstigeMarkers, ulafMarkers, lteModemMarkers]); + + useEffect(() => { + const fetchData = async () => { + try { + const response1 = await fetch(webserviceGisLinesStatusUrl); + const data1 = await response1.json(); + //console.log("data1.Statis", data1.Statis); + const reversedData = data1.Statis.reverse(); + setLineStatusData(reversedData); + + const response2 = await fetch("/api/talas_v5_DB/gisLines/readGisLines"); + const data2 = await response2.json(); + + const colorsByModule = {}; + reversedData.forEach((stat) => { + const matchingLine = data2.find((item) => item.idLD === stat.IdLD && item.idModul === stat.Modul); + if (matchingLine) { + colorsByModule[matchingLine.idModul] = stat.PrioColor; + //console.log("Übereinstimmung gefunden für: ", stat); + setLinesData(matchingLine); + } + }); + //setLineColors(colorsByModule); + } catch (error) { + console.error("Error fetching data:", error); + } + }; + fetchData(); + }, []); + //-------------------------------------------- + //Tooltip an mouse position anzeigen für die Linien + useEffect(() => { + if (!map) return; + + // Entferne alte Marker und Polylinien + markers.forEach((marker) => marker.remove()); + polylines.forEach((polyline) => polyline.remove()); + + // Setze neue Marker und Polylinien mit den aktuellen Daten + const { markers: newMarkers, polylines: newPolylines } = setupPolylines( + map, + linePositions, + lineColors, + tooltipContents, + setNewCoords, + tempMarker, + polylineVisible // polylineVisible wird jetzt korrekt übergeben + ); + + newPolylines.forEach((polyline, index) => { + const tooltipContent = tooltipContents[`${linePositions[index].idLD}-${linePositions[index].idModul}`] || "Standard-Tooltip-Inhalt"; + + polyline.bindTooltip(tooltipContent, { + permanent: false, + direction: "auto", + sticky: true, + offset: [20, 0], + pane: "tooltipPane", + }); + + polyline.on("mouseover", (e) => { + const tooltip = polyline.getTooltip(); + if (tooltip) { + const mousePos = e.containerPoint; + const mapSize = map.getSize(); + + let direction = "right"; + + if (mousePos.x > mapSize.x - 100) { + direction = "left"; + } else if (mousePos.x < 100) { + direction = "right"; + } + + if (mousePos.y > mapSize.y - 100) { + direction = "top"; + } else if (mousePos.y < 100) { + direction = "bottom"; + } + + tooltip.options.direction = direction; + polyline.openTooltip(e.latlng); + } + }); + + polyline.on("mouseout", () => { + polyline.closeTooltip(); + }); + }); + + setMarkers(newMarkers); + setPolylines(newPolylines); + }, [map, linePositions, lineColors, tooltipContents, newPoint, newCoords, tempMarker, polylineVisible]); + + //-------------------------------------------- + + useEffect(() => { + if (map) { + restoreMapSettings(map); + } + }, [map]); + + useEffect(() => { + if (map) { + const handleMapMoveEnd = (event) => { + const newCenter = map.getCenter(); + const newZoom = map.getZoom(); + + setCurrentCenter([newCenter.lat, newCenter.lng]); + setCurrentZoom(newZoom); + + localStorage.setItem("mapCenter", JSON.stringify([newCenter.lat, newCenter.lng])); + localStorage.setItem("mapZoom", newZoom); + }; + + map.on("moveend", handleMapMoveEnd); + map.on("zoomend", handleMapMoveEnd); + + return () => { + map.off("moveend", handleMapMoveEnd); + map.off("zoomend", handleMapMoveEnd); + }; + } + }, [map]); + //-------------------------------------------- + + useEffect(() => { + if (selectedArea && map) { + const station = GisStationsStaticDistrict.find((s) => s.Area_Name === selectedArea); + if (station) { + map.flyTo([station.X, station.Y], 14); + } + } + }, [selectedArea, map, GisStationsStaticDistrict]); + + useEffect(() => { + if (zoomTrigger && map) { + map.flyTo([51.41321407879154, 7.739617925303934], 7); + } + }, [zoomTrigger, map]); + + useEffect(() => { + if (map && poiLayerRef.current && isPoiTypLoaded && !menuItemAdded && isRightsLoaded) { + addItemsToMapContextMenu(map, menuItemAdded, setMenuItemAdded, hasRights, setShowPopup, setPopupCoordinates); + } + }, [map, poiLayerRef, isPoiTypLoaded, menuItemAdded, hasRights, isRightsLoaded]); + //-------------------------------------------- + // rote Marker ganz oben wenn überlappen sind + useEffect(() => { + const fetchPriorityConfig = async () => { + try { + const res = await fetch("/api/talas_v5_DB/priorityConfig"); + if (!res.ok) { + throw new Error(`HTTP error! status: ${res.status}`); + } + const data = await res.json(); + setPriorityConfig(data); + } catch (error) { + console.error("Failed to load priority configuration:", error); + } + }; + + fetchPriorityConfig(); + }, []); + //-------------------------------------------- + useEffect(() => { + if (mapRef.current && !map) { + initializeMap(mapRef, setMap, setOms, setMenuItemAdded, addItemsToMapContextMenu, hasRights, setPolylineEventsDisabled); + } + }, [mapRef, map, hasRights, setPolylineEventsDisabled]); + + useEffect(() => { + if (map) { + if (polylineEventsDisabled) { + disablePolylineEvents(window.polylines); + } else { + enablePolylineEvents(window.polylines, window.lineColors); + } + } + }, [map, polylineEventsDisabled]); + useEffect(() => { + if (map) { + console.log("6- Karteninstanz (map) wurde jetzt erfolgreich initialisiert"); + + // Setze die Karteninstanz in den Recoil-Atom + } + }, [map]); + //-------------------------------------------- + useEffect(() => { + const initializeContextMenu = () => { + if (map) { + map.whenReady(() => { + setTimeout(() => { + if (map.contextmenu) { + //console.log("Contextmenu ist vorhanden"); + } else { + console.warn("Contextmenu ist nicht verfügbar."); + } + }, 500); + }); + } + }; + + initializeContextMenu(); + }, [map]); + //-------------------------------------------- + + return ( + <> + +
{showPoiUpdateModal && setShowPoiUpdateModal(false)} poiData={currentPoiData} onSubmit={() => {}} latlng={popupCoordinates} />}
+ +
+ {showPopup && ( +
+
e.stopPropagation()}> + + +
+
+ )} +
+ + + +
+ +
+
+
+ TALAS.Map +
+ Version {MAP_VERSION} +
+
+ +
+
+
+ + + ); +}; + +export default MapComponent; diff --git a/components/PoiUpdateModal.js b/components/PoiUpdateModal.js index d24cab7ad..09940017b 100644 --- a/components/PoiUpdateModal.js +++ b/components/PoiUpdateModal.js @@ -1,5 +1,5 @@ // pages/api/poiUpdateModal.js - +// import React, { useState, useEffect } from "react"; import { useRecoilValue } from "recoil"; import { selectedPoiState } from "../store/atoms/poiState"; @@ -15,22 +15,50 @@ const PoiUpdateModal = ({ onClose, poiData }) => { const [locationDeviceData, setLocationDeviceData] = useState([]); const [deviceName, setDeviceName] = useState(""); const [idLD, setIdLD] = useState(poiData ? poiData.idLD : ""); + const [idLocationDevice, setIdLocationDevice] = useState(""); const [description, setDescription] = useState(poiData ? poiData.description : ""); + // Log the initial POI data useEffect(() => { if (poiData) { - console.log("Initial poiData:", poiData); setPoiId(poiData.idPoi); setName(poiData.name); setPoiTypeId(poiData.idPoiTyp); setIdLD(poiData.idLD); + setDescription(poiData.description); setDeviceName(poiData.idLD); console.log("Loaded POI Data for editing:", poiData); + console.log("POI ID:", poiData.idPoi); + console.log("POI Name:", poiData.name); + console.log("POI Typ ID:", poiData.idPoiTyp); + console.log("POI Beschreibung:", poiData.description); + console.log("POI Geräte-ID:", poiData.idLD); } }, [poiData]); + /* const fetchDeviceNameById = async (idLD) => { + try { + const response = await fetch(`/api/getDeviceNameById?idLD=${idLD}`); + const data = await response.json(); + setDeviceName(data.deviceName); + } catch (error) { + console.error("Error fetching device name:", error); + } + }; */ + + /* const fetchDeviceNameById = async (idLD) => { + try { + const response = await fetch(`/api/talas_v5_DB/locationDevice/locationDeviceNameById?idLD=${idLD}`); + const data = await response.json(); + setDeviceName(data.deviceName); + } catch (error) { + console.error("Error fetching device name:", error); + } + }; */ + + // Beim Öffnen des Modals die Geräte-ID basierend auf dem Gerätenamen abrufen, wenn vorhanden useEffect(() => { const fetchDeviceId = async () => { if (poiData && poiData.idLD) { @@ -47,6 +75,7 @@ const PoiUpdateModal = ({ onClose, poiData }) => { fetchDeviceId(); }, [poiData]); + // Function to handle deleting a POI const handleDeletePoi = async () => { if (confirm("Sind Sie sicher, dass Sie diesen POI löschen möchten?")) { try { @@ -55,7 +84,8 @@ const PoiUpdateModal = ({ onClose, poiData }) => { }); if (response.ok) { alert("POI wurde erfolgreich gelöscht."); - onClose(); + onClose(); // Close the modal + //Browser neu laden, um die aktualisierte Liste anzuzeigen window.location.reload(); } else { throw new Error("Fehler beim Löschen des POI."); @@ -67,6 +97,7 @@ const PoiUpdateModal = ({ onClose, poiData }) => { } }; + // Fetch POI types useEffect(() => { const fetchPoiTypData = async () => { try { @@ -86,15 +117,15 @@ const PoiUpdateModal = ({ onClose, poiData }) => { fetchPoiTypData(); }, [selectedPoi]); + // Fetch device data um den Gerät Namen in den dropdown menu anzuzeigen also erstmal die Liste der Geräte abrufen useEffect(() => { const fetchData = async () => { try { - // const response = await fetch("/api/talas_v5/location_device"); //"/api/talas_v5_DB/locationDevice/location_device" - const response = await fetch( - "/api/talas_v5_DB/locationDevice/locationDevices" - ); + const response = await fetch("/api/talas_v5/location_device"); const data = await response.json(); + //console.log("Standort- und Gerätedaten:", data); setLocationDeviceData(data); + console.log("Standort- und Gerätedaten poiData:", poiData); if (poiData && poiData.idLD) { const selectedDevice = data.find((device) => device.id === poiData.idLD); setDeviceName(selectedDevice ? selectedDevice.id : data[0].id); // Hier wird die ID als initialer Zustand gesetzt @@ -107,8 +138,11 @@ const PoiUpdateModal = ({ onClose, poiData }) => { }; fetchData(); }, []); + //-------------------------------------------------------------------------------------------- + // Fetch device name basierend auf der Geräte-ID useEffect(() => { + console.log("currentPoi von PoiUpdateModal.js : ", currentPoi.idLD); fetch("/api/talas_v5_DB/locationDevice/locationDevices") .then((response) => response.json()) .then((data) => { @@ -127,6 +161,10 @@ const PoiUpdateModal = ({ onClose, poiData }) => { }); }, [poiData?.idLD, currentPoi]); + //-------------------------------------------------------------------------------------------- + // Angenommen, deviceName enthält die Geräte-ID + //const idLD = deviceName; // Stellen Sie sicher, dass dies eine ID ist und kein Name + const handleSubmit = async (event) => { event.preventDefault(); const idLDResponse = await fetch(`/api/talas_v5_DB/locationDevice/getDeviceId?deviceName=${encodeURIComponent(deviceName)}`); @@ -144,6 +182,7 @@ const PoiUpdateModal = ({ onClose, poiData }) => { description: description, idPoiTyp: poiTypeId, idLD: idLD, + //idLD: parseInt(deviceName, 10), // Konvertieren in eine Ganzzahl }), }); @@ -208,7 +247,7 @@ const PoiUpdateModal = ({ onClose, poiData }) => {