This commit is contained in:
ISA
2025-05-26 11:12:45 +02:00
parent c8d7fbe434
commit 03a1f480e0
20 changed files with 87 additions and 86 deletions

View File

@@ -39,12 +39,12 @@ import useInitializeMap from "./hooks/useInitializeMap";
//-------------------Redux-------------------- //-------------------Redux--------------------
import { useSelector, useDispatch } from "react-redux"; import { useSelector, useDispatch } from "react-redux";
//-------------------Redux-Slices-------------------- //-------------------Redux-Slices--------------------
import { setSelectedPoi } from "../../redux/slices/selectedPoiSlice"; import { setSelectedPoi } from "../../redux/slices/database/pois/selectedPoiSlice.js";
import { setDisabled } from "../../redux/slices/polylineEventsDisabledSlice"; import { setDisabled } from "../../redux/slices/database/polylines/polylineEventsDisabledSlice.js";
import { setMapId, setUserId } from "../../redux/slices/urlParameterSlice"; import { setMapId, setUserId } from "../../redux/slices/urlParameterSlice";
import { fetchPoiTypes } from "../../redux/slices/database/pois/poiTypesSlice.js"; import { fetchPoiTypes } from "../../redux/slices/database/pois/poiTypesSlice.js";
import { selectMapLayersState } from "../../redux/slices/mapLayersSlice"; import { selectMapLayersState } from "../../redux/slices/mapLayersSlice";
import { setCurrentPoi } from "../../redux/slices/currentPoiSlice.js"; import { setCurrentPoi } from "../../redux/slices/database/pois/currentPoiSlice.js";
import { selectGisLines } from "../../redux/slices/database/polylines/gisLinesSlice"; import { selectGisLines } from "../../redux/slices/database/polylines/gisLinesSlice";
import { selectGisLinesStatus } from "../../redux/slices/webservice/gisLinesStatusSlice"; import { selectGisLinesStatus } from "../../redux/slices/webservice/gisLinesStatusSlice";
import { selectPoiTypData, selectPoiTypStatus } from "../../redux/slices/database/pois/poiTypSlice"; import { selectPoiTypData, selectPoiTypStatus } from "../../redux/slices/database/pois/poiTypSlice";
@@ -52,8 +52,8 @@ import { selectPriorityConfig } from "../../redux/slices/database/priorityConfig
import { selectPoiIconsData, selectPoiIconsStatus } from "../../redux/slices/database/pois/poiIconsDataSlice"; import { selectPoiIconsData, selectPoiIconsStatus } from "../../redux/slices/database/pois/poiIconsDataSlice";
import { selectGisLinesStatusFromWebservice } from "../../redux/slices/webservice/gisLinesStatusSlice"; import { selectGisLinesStatusFromWebservice } from "../../redux/slices/webservice/gisLinesStatusSlice";
import { selectGisUserRightsFromWebservice } from "../../redux/slices/webservice/userRightsSlice"; import { selectGisUserRightsFromWebservice } from "../../redux/slices/webservice/userRightsSlice";
import { updateCountdown, closePolylineContextMenu } from "../../redux/slices/polylineContextMenuSlice"; import { updateCountdown, closePolylineContextMenu } from "../../redux/slices/database/polylines/polylineContextMenuSlice.js";
import { selectPolylineVisible, setPolylineVisible } from "../../redux/slices/polylineLayerVisibleSlice.js"; import { selectPolylineVisible, setPolylineVisible } from "../../redux/slices/database/polylines/polylineLayerVisibleSlice.js";
import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice.js"; import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice.js";
import { selectGisSystemStatic, setGisSystemStatic } from "../../redux/slices/webservice/gisSystemStaticSlice.js"; import { selectGisSystemStatic, setGisSystemStatic } from "../../redux/slices/webservice/gisSystemStaticSlice.js";
//-----------Redux-Thunks------------------- //-----------Redux-Thunks-------------------

View File

@@ -3,7 +3,7 @@ import React, { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice"; import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice";
import { fetchPoiTypes } from "../../redux/slices/database/pois/poiTypesSlice"; import { fetchPoiTypes } from "../../redux/slices/database/pois/poiTypesSlice";
import { incrementTrigger } from "../../redux/slices/poiReadFromDbTriggerSlice"; import { incrementTrigger } from "../../redux/slices/database/pois/poiReadFromDbTriggerSlice";
import { addPoiThunk } from "../../redux/thunks/database/pois/addPoiThunk"; import { addPoiThunk } from "../../redux/thunks/database/pois/addPoiThunk";
import { fetchPoiIconsDataThunk } from "../../redux/thunks/database/pois/fetchPoiIconsDataThunk"; import { fetchPoiIconsDataThunk } from "../../redux/thunks/database/pois/fetchPoiIconsDataThunk";

View File

@@ -3,11 +3,11 @@ import React, { useEffect, useState } from "react";
import { setSelectedArea } from "../../../redux/slices/selectedAreaSlice"; import { setSelectedArea } from "../../../redux/slices/selectedAreaSlice";
import EditModeToggle from "./EditModeToggle"; import EditModeToggle from "./EditModeToggle";
import { useSelector, useDispatch } from "react-redux"; import { useSelector, useDispatch } from "react-redux";
import { selectPolylineVisible, setPolylineVisible } from "../../../redux/slices/polylineLayerVisibleSlice"; import { selectPolylineVisible, setPolylineVisible } from "../../../redux/slices/database/polylines/polylineLayerVisibleSlice";
import { selectGisSystemStatic } from "../../../redux/slices/webservice/gisSystemStaticSlice"; import { selectGisSystemStatic } from "../../../redux/slices/webservice/gisSystemStaticSlice";
import { selectGisStationsStaticDistrict } from "../../../redux/slices/webservice/gisStationsStaticDistrictSlice"; import { selectGisStationsStaticDistrict } from "../../../redux/slices/webservice/gisStationsStaticDistrictSlice";
import { selectMapLayersState, setLayerVisibility } from "../../../redux/slices/mapLayersSlice"; import { selectMapLayersState, setLayerVisibility } from "../../../redux/slices/mapLayersSlice";
import { setVisible } from "../../../redux/slices/poiLayerVisibleSlice"; import { setVisible } from "../../../redux/slices/database/pois/poiLayerVisibleSlice";
import { incrementZoomTrigger } from "../../../redux/slices/zoomTriggerSlice"; import { incrementZoomTrigger } from "../../../redux/slices/zoomTriggerSlice";
function MapLayersControlPanel() { function MapLayersControlPanel() {

View File

@@ -1,2 +1,2 @@
// /config/appVersion // /config/appVersion
export const APP_VERSION = "1.1.172"; export const APP_VERSION = "1.1.173";

View File

@@ -1,52 +1,48 @@
// /hooks/useMapComponentState.js // /hooks/useMapComponentState.js
// POI -> Kontextmenü -> POI bearbeiten -> Dropdown Geräteauswahl import { useEffect, useState } from "react";
import { useState, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux";
import { useSelector } from "react-redux"; import { fetchPoiTypThunk } from "../redux/thunks/database/pois/fetchPoiTypThunk";
import { selectPoiTypData, selectPoiTypStatus } from "../redux/slices/database/pois/poiTypSlice";
import { selectPoiLayerVisible } from "../redux/slices/database/pois/poiLayerVisibleSlice";
export const useMapComponentState = () => { export const useMapComponentState = () => {
const [poiTypData, setPoiTypData] = useState([]); const dispatch = useDispatch();
const [isPoiTypLoaded, setIsPoiTypLoaded] = useState(false);
const [deviceName, setDeviceName] = useState("");
const [locationDeviceData, setLocationDeviceData] = useState([]);
const [priorityConfig, setPriorityConfig] = useState([]);
const [menuItemAdded, setMenuItemAdded] = useState(false);
// Redux: Zustand der Sichtbarkeit des POI-Layers // Redux: POI-Typen
const poiTypData = useSelector(selectPoiTypData);
const poiTypStatus = useSelector(selectPoiTypStatus);
// Redux: Sichtbarkeit des POI-Layers
const poiLayerVisible = useSelector((state) => state.poiLayerVisible.visible); const poiLayerVisible = useSelector((state) => state.poiLayerVisible.visible);
// Lokaler State: Geräte und Kontextmenü
const [deviceName, setDeviceName] = useState("");
const [locationDeviceData, setLocationDeviceData] = useState([]);
const [priorityConfig, setPriorityConfig] = useState([]); // TODO: Redux
const [menuItemAdded, setMenuItemAdded] = useState(false);
// Optional: Nur im Mock-Modus POI-Typen lokal setzen
useEffect(() => { useEffect(() => {
const fetchPoiTypData = async () => { if (process.env.NEXT_PUBLIC_USE_MOCK_API === "true") {
if (process.env.NEXT_PUBLIC_USE_MOCK_API === "true") { const mockData = [
console.log("⚠️ Mock-API: POI Typen geladen (Mock)"); { idPoiTyp: 1, name: "Mock Zähleranschlusskasten", icon: 4, onlySystemTyp: 0 },
{ idPoiTyp: 2, name: "Mock Geräteschrank", icon: 2, onlySystemTyp: 0 },
const mockData = [ { idPoiTyp: 4, name: "Mock Parkplatz", icon: 3, onlySystemTyp: 0 },
{ idPoiTyp: 1, name: "Mock Zähleranschlusskasten", icon: 4, onlySystemTyp: 0 }, { idPoiTyp: 6, name: "Mock Zufahrt", icon: 4, onlySystemTyp: 0 },
{ idPoiTyp: 2, name: "Mock Geräteschrank", icon: 2, onlySystemTyp: 0 }, { idPoiTyp: 20, name: "Mock Zählgerät", icon: 5, onlySystemTyp: 110 },
{ idPoiTyp: 4, name: "Mock Parkplatz", icon: 3, onlySystemTyp: 0 }, { idPoiTyp: 21, name: "Mock Messschleife", icon: 6, onlySystemTyp: 110 },
{ idPoiTyp: 6, name: "Mock Zufahrt", icon: 4, onlySystemTyp: 0 }, { idPoiTyp: 25, name: "Mock Sonstige", icon: 0, onlySystemTyp: 0 },
{ idPoiTyp: 20, name: "Mock Zählgerät", icon: 5, onlySystemTyp: 110 }, { idPoiTyp: 33, name: "Mock Autobahnauffahrt", icon: 4, onlySystemTyp: null },
{ idPoiTyp: 21, name: "Mock Messschleife", icon: 6, onlySystemTyp: 110 }, ];
{ idPoiTyp: 25, name: "Mock Sonstige", icon: 0, onlySystemTyp: 0 }, // Du kannst das Redux-Mock-Datenhandling später noch global regeln
{ idPoiTyp: 33, name: "Mock Autobahnauffahrt", icon: 4, onlySystemTyp: null }, console.warn("⚠️ POI-Typen im Mock-Modus geladen.");
]; } else if (poiTypStatus === "idle") {
dispatch(fetchPoiTypThunk());
setPoiTypData(mockData); }
setIsPoiTypLoaded(true); }, [dispatch, poiTypStatus]);
return;
}
try {
const response = await fetch("/api/talas_v5_DB/poiTyp/readPoiTyp");
const data = await response.json();
setPoiTypData(data);
setIsPoiTypLoaded(true);
} catch (error) {
console.error("❌ Fehler beim Abrufen der POI-Typen:", error);
setPoiTypData([]);
setIsPoiTypLoaded(true);
}
};
// Geräte-Daten lokal laden (kann später durch fetchLocationDevicesThunk ersetzt werden)
useEffect(() => {
const fetchDeviceData = async () => { const fetchDeviceData = async () => {
try { try {
const protocol = window.location.protocol; const protocol = window.location.protocol;
@@ -71,13 +67,12 @@ export const useMapComponentState = () => {
} }
}; };
fetchPoiTypData();
fetchDeviceData(); fetchDeviceData();
}, []); }, []);
return { return {
poiTypData, poiTypData,
isPoiTypLoaded, isPoiTypLoaded: poiTypStatus === "succeeded",
deviceName, deviceName,
setDeviceName, setDeviceName,
locationDeviceData, locationDeviceData,

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import dynamic from "next/dynamic"; import dynamic from "next/dynamic";
import { setPoiMarkers } from "../redux/slices/readPoiMarkersStoreSlice.js"; import { setPoiMarkers } from "../redux/slices/database/pois/readPoiMarkersStoreSlice.js";
import { useSelector, useDispatch } from "react-redux"; import { useSelector, useDispatch } from "react-redux";
const MapComponentWithNoSSR = dynamic(() => import("../components/mainComponent/MapComponent"), { ssr: false }); const MapComponentWithNoSSR = dynamic(() => import("../components/mainComponent/MapComponent"), { ssr: false });

View File

@@ -1,3 +1,4 @@
// /redux/slices/database/locationDevicesFromDBSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
import { fetchLocationDevicesThunk } from "../../thunks/database/fetchLocationDevicesThunk"; import { fetchLocationDevicesThunk } from "../../thunks/database/fetchLocationDevicesThunk";

View File

@@ -1,3 +1,4 @@
// /redux/slices/database/pois/addPoiOnPolylineSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// /redux/slices/currentPoiSlice.js // /redux/slices/database/pois/currentPoiSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// /redux/slices/poiLayerVisibleSlice.js // /redux/slices/database/pois/poiLayerVisibleSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// redux/slices/poiReadFromDbTriggerSlice.js // redux/slices/database/pois/poiReadFromDbTriggerSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// redux/slices/readPoiMarkersStoreSlice.js // redux/slices/database/pois/readPoiMarkersStoreSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// redux/slices/selectedPoiSlice.js // redux/slices/database/pois/selectedPoiSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
export const selectedPoiSlice = createSlice({ export const selectedPoiSlice = createSlice({

View File

@@ -1,4 +1,4 @@
// redux/slices/polylineContextMenuSlice.js // redux/slices/database/polylines/polylineContextMenuSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,4 +1,4 @@
// redux/slices/polylineEventsDisabledSlice.js // redux/slices/database/polylines/polylineEventsDisabledSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,5 +1,4 @@
// /redux/slices/polylineLayerVisibleSlice.js // /redux/slices/database7polylines/polylineLayerVisibleSlice.js
// redux/slices/polylineLayerVisibleSlice.js
import { createSlice } from "@reduxjs/toolkit"; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {

View File

@@ -1,28 +1,23 @@
// /redux/store.js // /redux/store.js
import { configureStore } from "@reduxjs/toolkit"; import { configureStore } from "@reduxjs/toolkit";
import lineVisibilityReducer from "./slices/lineVisibilitySlice"; //-----database---------------------------------------------------
import currentPoiReducer from "./slices/currentPoiSlice"; //--pois------------
import polylineLayerVisibleReducer from "./slices/polylineLayerVisibleSlice";
import addPoiOnPolylineReducer from "./slices/addPoiOnPolylineSlice";
import polylineContextMenuReducer from "./slices/polylineContextMenuSlice";
import selectedPoiReducer from "./slices/selectedPoiSlice";
import selectedDeviceReducer from "./slices/selectedDeviceSlice";
import mapLayersReducer from "./slices/mapLayersSlice";
import poiLayerVisibleReducer from "./slices/poiLayerVisibleSlice";
import poiReadFromDbTriggerReducer from "./slices/poiReadFromDbTriggerSlice";
import polylineEventsDisabledReducer from "./slices/polylineEventsDisabledSlice";
import readPoiMarkersStoreReducer from "./slices/readPoiMarkersStoreSlice";
import selectedAreaReducer from "./slices/selectedAreaSlice";
import zoomTriggerReducer from "./slices/zoomTriggerSlice";
import urlParameterReducer from "./slices/urlParameterSlice";
//-----database------------
import priorityConfigReducer from "./slices/database/priorityConfigSlice";
import poiTypesReducer from "./slices/database/pois/poiTypesSlice"; import poiTypesReducer from "./slices/database/pois/poiTypesSlice";
import locationDevicesFromDBReducer from "./slices/database/locationDevicesFromDBSlice";
import gisLinesFromDatabaseReducer from "./slices/database/polylines/gisLinesSlice";
import poiTypReducer from "./slices/database/pois/poiTypSlice"; import poiTypReducer from "./slices/database/pois/poiTypSlice";
import poiIconsDataReducer from "./slices/database/pois/poiIconsDataSlice"; import poiIconsDataReducer from "./slices/database/pois/poiIconsDataSlice";
//----webservice------------ import poiLayerVisibleReducer from "./slices/database/pois/poiLayerVisibleSlice";
import addPoiOnPolylineReducer from "./slices/database/pois/addPoiOnPolylineSlice";
import selectedPoiReducer from "./slices/database/pois/selectedPoiSlice";
import currentPoiReducer from "./slices/database/pois/currentPoiSlice";
import poiReadFromDbTriggerReducer from "./slices/database/pois/poiReadFromDbTriggerSlice";
import readPoiMarkersStoreReducer from "./slices/database/pois/readPoiMarkersStoreSlice";
//--polylines------------
import gisLinesFromDatabaseReducer from "./slices/database/polylines/gisLinesSlice";
import polylineLayerVisibleReducer from "./slices/database/polylines/polylineLayerVisibleSlice";
import polylineContextMenuReducer from "./slices/database/polylines/polylineContextMenuSlice";
import polylineEventsDisabledReducer from "./slices/database/polylines/polylineEventsDisabledSlice";
//----webservice---------------------------------------------------------------
import gisStationsStaticDistrictReducer from "./slices/webservice/gisStationsStaticDistrictSlice"; import gisStationsStaticDistrictReducer from "./slices/webservice/gisStationsStaticDistrictSlice";
import gisStationsStatusDistrictReducer from "./slices/webservice/gisStationsStatusDistrictSlice"; import gisStationsStatusDistrictReducer from "./slices/webservice/gisStationsStatusDistrictSlice";
import gisStationsMeasurementsReducer from "./slices/webservice/gisStationsMeasurementsSlice"; import gisStationsMeasurementsReducer from "./slices/webservice/gisStationsMeasurementsSlice";
@@ -30,6 +25,16 @@ import gisSystemStaticReducer from "./slices/webservice/gisSystemStaticSlice";
import userRightsReducer from "./slices/webservice/userRightsSlice"; import userRightsReducer from "./slices/webservice/userRightsSlice";
import gisLinesStatusFromWebserviceReducer from "./slices/webservice/gisLinesStatusSlice"; import gisLinesStatusFromWebserviceReducer from "./slices/webservice/gisLinesStatusSlice";
import addPoiReducer from "./slices/database/pois/addPoiSlice"; import addPoiReducer from "./slices/database/pois/addPoiSlice";
//-----------------
import mapLayersReducer from "./slices/mapLayersSlice";
import priorityConfigReducer from "./slices/database/priorityConfigSlice";
import locationDevicesFromDBReducer from "./slices/database/locationDevicesFromDBSlice";
import lineVisibilityReducer from "./slices/lineVisibilitySlice";
import selectedDeviceReducer from "./slices/selectedDeviceSlice";
import selectedAreaReducer from "./slices/selectedAreaSlice";
import zoomTriggerReducer from "./slices/zoomTriggerSlice";
import urlParameterReducer from "./slices/urlParameterSlice";
//----------------
export const store = configureStore({ export const store = configureStore({
reducer: { reducer: {

View File

@@ -1,4 +1,4 @@
// /services/database/fetchPoiTypService.js // /services/database/pois/fetchPoiTypService.js
export const fetchPoiTypService = async () => { export const fetchPoiTypService = async () => {
const res = await fetch(`${window.location.origin}/api/talas_v5_DB/poiTyp/readPoiTyp`); const res = await fetch(`${window.location.origin}/api/talas_v5_DB/poiTyp/readPoiTyp`);
if (!res.ok) throw new Error("Fehler beim Abrufen der POI-Typen"); if (!res.ok) throw new Error("Fehler beim Abrufen der POI-Typen");

View File

@@ -7,9 +7,9 @@ import endIcon from "../../components/gisPolylines/icons/EndIcon";
import { redrawPolyline } from "./redrawPolyline"; import { redrawPolyline } from "./redrawPolyline";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { store } from "../../redux/store"; // Importiere den Store import { store } from "../../redux/store"; // Importiere den Store
import { openPolylineContextMenu, closePolylineContextMenu } from "../../redux/slices/polylineContextMenuSlice"; import { openPolylineContextMenu, closePolylineContextMenu } from "../../redux/slices/database/polylines/polylineContextMenuSlice";
import { monitorContextMenu } from "./monitorContextMenu"; import { monitorContextMenu } from "./monitorContextMenu";
import { forceCloseContextMenu } from "../../redux/slices/polylineContextMenuSlice"; import { forceCloseContextMenu } from "../../redux/slices/database/polylines/polylineContextMenuSlice";
//-------------------------------------------- //--------------------------------------------
export const setupPolylines = (map, linePositions, lineColors, tooltipContents, setNewCoords, tempMarker, currentZoom, currentCenter, polylineVisible) => { export const setupPolylines = (map, linePositions, lineColors, tooltipContents, setNewCoords, tempMarker, currentZoom, currentCenter, polylineVisible) => {

View File

@@ -2,7 +2,7 @@
import { parsePoint } from "./geometryUtils"; import { parsePoint } from "./geometryUtils";
import { handleEditPoi } from "./poiUtils"; import { handleEditPoi } from "./poiUtils";
import { updateLocationInDatabaseService } from "../services/database/updateLocationInDatabaseService"; import { updateLocationInDatabaseService } from "../services/database/updateLocationInDatabaseService";
import { setSelectedPoi, clearSelectedPoi } from "../redux/slices/selectedPoiSlice"; import { setSelectedPoi, clearSelectedPoi } from "../redux/slices/database/pois/selectedPoiSlice";
export const setupPOIs = async ( export const setupPOIs = async (
map, map,