diff --git a/components/AddPOIOnPolyline.js b/components/AddPOIOnPolyline.js
index 904333c8f..8306f5a92 100644
--- a/components/AddPOIOnPolyline.js
+++ b/components/AddPOIOnPolyline.js
@@ -1,3 +1,4 @@
+// /components/AddPOIOnPolyline.js
import React, { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { closeAddPoiOnPolylineModal } from "../redux/slices/addPoiOnPolylineSlice";
@@ -20,6 +21,7 @@ const AddPOIOnPolyline = () => {
if (!isOpen) return null;
const handleSubmit = async (event) => {
+ alert("POI auf Polyline hinzufügen");
event.preventDefault();
const formData = { name, latitude, longitude };
diff --git a/components/CircleIcon.js b/components/CircleIcon.js
deleted file mode 100644
index c9f4843d3..000000000
--- a/components/CircleIcon.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// /components/CircleIcon.js
-// Custom circle icon for draggable markers
-import L from "leaflet";
-import "leaflet/dist/leaflet.css";
-
-const circleIcon = L.divIcon({
- className: "custom-div-icon",
- html: "
",
- iconSize: [25, 25],
- iconAnchor: [5, 5],
-});
-
-export default circleIcon;
diff --git a/components/CoordinateModal.js b/components/CoordinateModal.js
deleted file mode 100644
index a6ad623b6..000000000
--- a/components/CoordinateModal.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// components/CoordinateModal.js
-import React from "react";
-
-const CoordinateModal = ({ isOpen, onClose, coordinates }) => {
- if (!isOpen) return null;
-
- return (
-
-
-
Koordinaten
-
Koordinaten: {coordinates}
-
-
-
-
- );
-};
-
-export default CoordinateModal;
diff --git a/components/EndIcon.js b/components/EndIcon.js
deleted file mode 100644
index c6d56a8bc..000000000
--- a/components/EndIcon.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Viereck als End-Icon für die Route
-import L from "leaflet";
-const endIcon = L.divIcon({
- className: "custom-end-icon",
- html: "", // Graues Viereck
- iconSize: [14, 14],
- iconAnchor: [7, 7], // Mittelpunkt des Vierecks als Anker
-});
-
-export default endIcon;
diff --git a/components/StartIcon.js b/components/StartIcon.js
deleted file mode 100644
index dc54c0f30..000000000
--- a/components/StartIcon.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Custom triangle icon for draggable markers
-import L from "leaflet";
-
-const startIcon = L.divIcon({
- className: "custom-start-icon",
- html: `
-
- `, // Schwarzes Dreieck innerhalb eines grauen Dreiecks
- iconSize: [18, 18],
- iconAnchor: [9, 10],
-});
-
-export default startIcon;
diff --git a/components/mainComponent/MapComponent.js b/components/mainComponent/MapComponent.js
index 826faf938..ff780d9b7 100644
--- a/components/mainComponent/MapComponent.js
+++ b/components/mainComponent/MapComponent.js
@@ -7,7 +7,7 @@ import "leaflet-contextmenu";
import "leaflet.smooth_marker_bouncing";
import OverlappingMarkerSpiderfier from "overlapping-marker-spiderfier-leaflet"; //sieht deaktiviert aber ist das nicht so und wird benötigt
import "react-toastify/dist/ReactToastify.css";
-import MapLayersControlPanel from "../MapLayersControlPanel.js";
+import MapLayersControlPanel from "../uiWidgets/MapLayersControlPanel.js";
import { InformationCircleIcon } from "@heroicons/react/20/solid";
import PoiUpdateModal from "../pois/PoiUpdateModal.js";
@@ -23,7 +23,7 @@ import useSmsfunkmodemMarkersLayer from "../../hooks/layers/useSmsfunkmodemMarke
import useBereicheMarkersLayer from "../../hooks/layers/useBereicheMarkersLayer.js";
import { setupPolylines } from "../../utils/polylines/setupPolylines.js";
import { setupPOIs } from "../../utils/setupPOIs.js";
-import VersionInfoModal from "../VersionInfoModal.js";
+import VersionInfoModal from "../uiWidgets/VersionInfoModal.js";
import useLayerVisibility from "../../hooks/useLayerVisibility.js";
import useLineData from "../../hooks/useLineData.js";
import { useMapComponentState } from "../../hooks/useMapComponentState.js";
@@ -31,15 +31,14 @@ import { updateLocation } from "../../utils/updateBereichUtil.js";
import { selectMapLayersState } from "../../redux/slices/mapLayersSlice";
import { useSelector, useDispatch } from "react-redux";
import { setCurrentPoi } from "../../redux/slices/currentPoiSlice.js";
-import CoordinateInput from "../CoordinateInput.js";
-import CoordinateModal from "../CoordinateModal.js";
+import CoordinateInput from "../uiWidgets/CoordinateInput.js";
import CoordinatePopup from "../CoordinatePopup.js";
//------------------------Daten aus API--------------------
import { fetchPoiDataService } from "../../services/database/fetchPoiDataService.js";
import { selectPolylineVisible, setPolylineVisible } from "../../redux/slices/polylineLayerVisibleSlice.js";
import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice.js";
import { selectGisSystemStatic, setGisSystemStatic } from "../../redux/slices/webservice/gisSystemStaticSlice.js";
-import ShowAddStationPopup from "../AddPOIModal.js";
+import ShowAddStationPopup from "../pois/AddPOIModal.js";
import AddPOIOnPolyline from "../AddPOIOnPolyline";
import { enablePolylineEvents, disablePolylineEvents } from "../../utils/polylines/eventHandlers";
import { updateCountdown, closePolylineContextMenu } from "../../redux/slices/polylineContextMenuSlice";
@@ -865,8 +864,6 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
return (
<>
{useSelector((state) => state.addPoiOnPolyline.isOpen) && }
- {/* Zeigt das Koordinaten-Modal, wenn `showCoordinatesModal` true ist */}
- {showCoordinatesModal && setShowCoordinatesModal(false)} />}
{/* Zeigt das POI-Modal, wenn `showPoiModal` true ist */}
{showPoiModal && setShowPoiModal(false)} />}
diff --git a/components/AddPOIModal.js b/components/pois/AddPOIModal.js
similarity index 93%
rename from components/AddPOIModal.js
rename to components/pois/AddPOIModal.js
index bbc68df85..61e56ffa1 100644
--- a/components/AddPOIModal.js
+++ b/components/pois/AddPOIModal.js
@@ -1,13 +1,13 @@
-// components/AddStationPopup.js
+// components/AddPOIModal.js
import React, { useState, useEffect, use } from "react";
import ReactDOM from "react-dom";
-import { setPoiMarkers } from "../redux/slices/readPoiMarkersStoreSlice";
-import { selectGisStationsStaticDistrict } from "../redux/slices/webservice/gisStationsStaticDistrictSlice";
+import { setPoiMarkers } from "../../redux/slices/readPoiMarkersStoreSlice";
+import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice";
import { useDispatch, useSelector } from "react-redux";
-import { fetchPoiTypes } from "../redux/slices/database/poiTypesSlice";
-import { incrementTrigger } from "../redux/slices/poiReadFromDbTriggerSlice";
+import { fetchPoiTypes } from "../../redux/slices/database/poiTypesSlice";
+import { incrementTrigger } from "../../redux/slices/poiReadFromDbTriggerSlice";
-const ShowAddStationPopup = ({ onClose, map, latlng }) => {
+const AddPOIModal = ({ onClose, map, latlng }) => {
const dispatch = useDispatch();
const poiTypData = useSelector((state) => state.poiTypes.data);
@@ -176,4 +176,4 @@ const ShowAddStationPopup = ({ onClose, map, latlng }) => {
);
};
-export default ShowAddStationPopup;
+export default AddPOIModal;
diff --git a/components/CoordinateInput.js b/components/uiWidgets/CoordinateInput.js
similarity index 100%
rename from components/CoordinateInput.js
rename to components/uiWidgets/CoordinateInput.js
diff --git a/components/MapLayersControlPanel.js b/components/uiWidgets/MapLayersControlPanel.js
similarity index 93%
rename from components/MapLayersControlPanel.js
rename to components/uiWidgets/MapLayersControlPanel.js
index 49bf9a6f0..857aacb5e 100644
--- a/components/MapLayersControlPanel.js
+++ b/components/uiWidgets/MapLayersControlPanel.js
@@ -1,14 +1,14 @@
// /componentss/MapLayersControlPanel.js
import React, { useEffect, useState } from "react";
-import { setSelectedArea } from "../redux/slices/selectedAreaSlice";
-import EditModeToggle from "./EditModeToggle";
+import { setSelectedArea } from "../../redux/slices/selectedAreaSlice";
+import EditModeToggle from "../EditModeToggle";
import { useSelector, useDispatch } from "react-redux";
-import { selectPolylineVisible, setPolylineVisible } from "../redux/slices/polylineLayerVisibleSlice";
-import { selectGisSystemStatic } from "../redux/slices/webservice/gisSystemStaticSlice";
-import { selectGisStationsStaticDistrict } from "../redux/slices/webservice/gisStationsStaticDistrictSlice";
-import { selectMapLayersState, setLayerVisibility } from "../redux/slices/mapLayersSlice";
-import { setVisible } from "../redux/slices/poiLayerVisibleSlice";
-import { incrementZoomTrigger } from "../redux/slices/zoomTriggerSlice";
+import { selectPolylineVisible, setPolylineVisible } from "../../redux/slices/polylineLayerVisibleSlice";
+import { selectGisSystemStatic } from "../../redux/slices/webservice/gisSystemStaticSlice";
+import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice";
+import { selectMapLayersState, setLayerVisibility } from "../../redux/slices/mapLayersSlice";
+import { setVisible } from "../../redux/slices/poiLayerVisibleSlice";
+import { incrementZoomTrigger } from "../../redux/slices/zoomTriggerSlice";
function MapLayersControlPanel() {
const [editMode, setEditMode] = useState(false); // Zustand für editMode
diff --git a/components/VersionInfoModal.js b/components/uiWidgets/VersionInfoModal.js
similarity index 100%
rename from components/VersionInfoModal.js
rename to components/uiWidgets/VersionInfoModal.js
diff --git a/config/appVersion.js b/config/appVersion.js
index b17893dc9..fe427d0f8 100644
--- a/config/appVersion.js
+++ b/config/appVersion.js
@@ -1,2 +1,2 @@
// /config/appVersion
-export const APP_VERSION = "1.1.151";
+export const APP_VERSION = "1.1.152";
diff --git a/package-lock.json b/package-lock.json
index 23bede652..a470322f4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "22.05.2025 NodeMap",
+ "name": "23.05.2025 NodeMap",
"lockfileVersion": 3,
"requires": true,
"packages": {
diff --git a/redux/slices/database/addPoiSlice.js b/redux/slices/database/addPoiSlice.js
new file mode 100644
index 000000000..71bf3fea9
--- /dev/null
+++ b/redux/slices/database/addPoiSlice.js
@@ -0,0 +1,38 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { addPoiThunk } from "../../thunks/database/addPoiThunk";
+
+const initialState = {
+ status: "idle", // idle | loading | succeeded | failed
+ error: null,
+};
+
+const addPoiSlice = createSlice({
+ name: "addPoi",
+ initialState,
+ reducers: {
+ resetAddPoiStatus: (state) => {
+ state.status = "idle";
+ state.error = null;
+ },
+ },
+ extraReducers: (builder) => {
+ builder
+ .addCase(addPoiThunk.pending, (state) => {
+ state.status = "loading";
+ })
+ .addCase(addPoiThunk.fulfilled, (state) => {
+ state.status = "succeeded";
+ state.error = null;
+ })
+ .addCase(addPoiThunk.rejected, (state, action) => {
+ state.status = "failed";
+ state.error = action.payload;
+ });
+ },
+});
+
+export const { resetAddPoiStatus } = addPoiSlice.actions;
+export default addPoiSlice.reducer;
+
+export const selectAddPoiStatus = (state) => state.addPoi.status;
+export const selectAddPoiError = (state) => state.addPoi.error;
diff --git a/redux/store.js b/redux/store.js
index c2ea25e2f..a36c586cf 100644
--- a/redux/store.js
+++ b/redux/store.js
@@ -27,6 +27,7 @@ import gisStationsMeasurementsReducer from "./slices/webservice/gisStationsMeasu
import gisSystemStaticReducer from "./slices/webservice/gisSystemStaticSlice";
import userRightsReducer from "./slices/webservice/userRightsSlice";
import gisLinesStatusFromWebserviceReducer from "./slices/webservice/gisLinesStatusSlice";
+import addPoiReducer from "./slices/database/addPoiSlice";
export const store = configureStore({
reducer: {
@@ -55,5 +56,6 @@ export const store = configureStore({
zoomTrigger: zoomTriggerReducer,
urlParameter: urlParameterReducer,
priorityConfig: priorityConfigReducer,
+ addPoi: addPoiReducer,
},
});
diff --git a/redux/thunks/database/addPoiThunk.js b/redux/thunks/database/addPoiThunk.js
new file mode 100644
index 000000000..600a9f8c9
--- /dev/null
+++ b/redux/thunks/database/addPoiThunk.js
@@ -0,0 +1,11 @@
+// /redux/thunks/database/addPoiThunk.js
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import { addPoiService } from "../../../services/database/addPoiService";
+
+export const addPoiThunk = createAsyncThunk("poi/add", async (formData, thunkAPI) => {
+ try {
+ return await addPoiService(formData);
+ } catch (error) {
+ return thunkAPI.rejectWithValue(error.message);
+ }
+});
diff --git a/services/database/addPoiService.js b/services/database/addPoiService.js
new file mode 100644
index 000000000..80043e1bc
--- /dev/null
+++ b/services/database/addPoiService.js
@@ -0,0 +1,14 @@
+// /services/database/addPoiService.js
+export const addPoiService = async (formData) => {
+ const response = await fetch("/api/talas_v5_DB/pois/addLocation", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(formData),
+ });
+
+ if (!response.ok) {
+ throw new Error("Fehler beim Hinzufügen des POI");
+ }
+
+ return await response.json();
+};