diff --git a/.env.local b/.env.local index 0eede7565..8d9543dec 100644 --- a/.env.local +++ b/.env.local @@ -13,4 +13,5 @@ NEXT_PUBLIC_USE_MOCK_API=true NEXT_PUBLIC_DEBUG_LOG=true # für Polylines/kabelstecken -> in Konextmenü "Station öffnen" " -NEXT_PUBLIC_BASE_URL=http://192.168.10.33/talas5/devices/ \ No newline at end of file +NEXT_PUBLIC_BASE_URL=http://192.168.10.33/talas5/devices/ +NEXT_PUBLIC_API_BASE_URL=http://192.168.10.33/talas5/ClientData/WebServiceMap.asmx diff --git a/components/DataSheet.js b/components/DataSheet.js index 784fe7e7b..2af8ce31f 100644 --- a/components/DataSheet.js +++ b/components/DataSheet.js @@ -12,6 +12,7 @@ import { polylineLayerVisibleState } from "../redux/slices/polylineLayerVisibleS import { useSelector, useDispatch } from "react-redux"; import { selectGisStationsStaticDistrict } from "../redux/slices/webService/gisStationsStaticDistrictSlice"; import { selectPolylineVisible, setPolylineVisible } from "../redux/slices/polylineLayerVisibleSlice"; +import { selectGisSystemStatic } from "../redux/slices/webService/gisSystemStaticSlice"; function DataSheet() { const [editMode, setEditMode] = useState(false); // Zustand für editMode @@ -21,7 +22,8 @@ function DataSheet() { const [stationListing, setStationListing] = useState([]); const [systemListing, setSystemListing] = useState([]); const GisStationsStaticDistrict = useSelector(selectGisStationsStaticDistrict) || []; - const GisSystemStatic = useRecoilValue(gisSystemStaticState); + const GisSystemStatic = useSelector(selectGisSystemStatic) || []; + const setZoomTrigger = useSetRecoilState(zoomTriggerState); const dispatch = useDispatch(); const polylineVisible = useSelector(selectPolylineVisible); @@ -72,7 +74,7 @@ function DataSheet() { }; useEffect(() => { - const allowedSystems = new Set(GisSystemStatic.filter((system) => system.Allow === 1).map((system) => system.IdSystem)); + const allowedSystems = Array.isArray(GisSystemStatic) ? new Set(GisSystemStatic.filter((system) => system.Allow === 1).map((system) => system.IdSystem)) : new Set(); const seenNames = new Set(); const filteredAreas = Array.isArray(GisStationsStaticDistrict) @@ -93,13 +95,15 @@ function DataSheet() { ); const seenSystemNames = new Set(); - const filteredSystems = GisSystemStatic.filter((item) => { - const isUnique = !seenSystemNames.has(item.Name) && item.Allow === 1; - if (isUnique) { - seenSystemNames.add(item.Name); - } - return isUnique; - }); + const filteredSystems = Array.isArray(GisSystemStatic) + ? GisSystemStatic.filter((item) => { + const isUnique = !seenSystemNames.has(item.Name) && item.Allow === 1; + if (isUnique) { + seenSystemNames.add(item.Name); + } + return isUnique; + }) + : []; setSystemListing( filteredSystems.map((system, index) => ({ @@ -151,6 +155,9 @@ function DataSheet() { localStorage.setItem("standorteVisible", checked); }; //------------------------------ + useEffect(() => { + console.log("GisSystemStatic aus Redux:", GisSystemStatic); // ✅ Debugging: Ist es ein Array? + }, [GisSystemStatic]); //--------------------------- return ( diff --git a/components/mainComponent/MapComponent.js b/components/mainComponent/MapComponent.js index c7b28b1f9..d924bc3f8 100644 --- a/components/mainComponent/MapComponent.js +++ b/components/mainComponent/MapComponent.js @@ -73,6 +73,8 @@ import { useInitGisStationsStaticDistrict } from "./hooks/useInitGisStationsStat import { selectGisStationsStaticDistrict } from "../../redux/slices/webService/gisStationsStaticDistrictSlice"; import { useInitGisStationsStatusDistrict } from "./hooks/useInitGisStationsStatusDistrict"; import { useInitGisStationsMeasurements } from "./hooks/useInitGisStationsMeasurements"; +import { useInitGisSystemStatic } from "./hooks/useInitGisSystemStatic"; +import { selectGisSystemStatic, setGisSystemStatic } from "../../redux/slices/webService/gisSystemStaticSlice"; const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { const dispatch = useDispatch(); @@ -129,7 +131,7 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { const GisStationsStaticDistrict = useSelector(selectGisStationsStaticDistrict); 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 + const GisSystemStatic = useSelector(selectGisSystemStatic); // Konstanten für die URLs const mapGisStationsStaticDistrictUrl = config.mapGisStationsStaticDistrictUrl; const mapGisStationsStatusDistrictUrl = config.mapGisStationsStatusDistrictUrl; @@ -1005,6 +1007,8 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { useInitGisStationsStaticDistrict(); useInitGisStationsStatusDistrict(); useInitGisStationsMeasurements(); + useInitGisSystemStatic(); + //-------------------------------------- useEffect(() => { console.log("GisStationsStaticDistrict aus Redux:", GisStationsStaticDistrict); diff --git a/components/mainComponent/hooks/useInitGisSystemStatic.js b/components/mainComponent/hooks/useInitGisSystemStatic.js new file mode 100644 index 000000000..621eb7dea --- /dev/null +++ b/components/mainComponent/hooks/useInitGisSystemStatic.js @@ -0,0 +1,12 @@ +// /components/mainComponent/hooks/useInitGisStationsMeasurements.js +import { useEffect } from "react"; +import { useDispatch } from "react-redux"; +import { fetchGisSystemStaticFromWebService } from "../../../redux/slices/webService/gisSystemStaticSlice"; + +export const useInitGisSystemStatic = () => { + const dispatch = useDispatch(); + + useEffect(() => { + dispatch(fetchGisSystemStaticFromWebService()); + }, [dispatch]); +}; diff --git a/config/appVersion.js b/config/appVersion.js index 505333ed3..bbefc1393 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.25"; +export const APP_VERSION = "1.1.26"; diff --git a/redux/api/fromWebService/fetchGisSystemStatic.js b/redux/api/fromWebService/fetchGisSystemStatic.js new file mode 100644 index 000000000..311dc782a --- /dev/null +++ b/redux/api/fromWebService/fetchGisSystemStatic.js @@ -0,0 +1,16 @@ +// /redux/api/fromWebService/fetchGisSystemStatic.js +import { useSearchParams } from "next/navigation"; // Falls du Next.js 13+ nutzt + +export async function fetchGisSystemStatic() { + const params = new URLSearchParams(window.location.search); + const idMap = params.get("idMap") || "12"; // Fallback-Wert 12 + const idUser = params.get("idUser") || "484"; // Fallback-Wert 484 + + const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; // Dynamische Server-IP + + const response = await fetch(`${apiBaseUrl}/GisSystemStatic?idMap=${idMap}&idUser=${idUser}`); + const data = await response.json(); + + console.log("fetchGisSystemStatic API Response:", data); // ✅ Prüfen, ob API Daten liefert + return data; +} diff --git a/redux/slices/webService/gisSystemStaticSlice.js b/redux/slices/webService/gisSystemStaticSlice.js index 1eaa77a0d..5f82b93dc 100644 --- a/redux/slices/webService/gisSystemStaticSlice.js +++ b/redux/slices/webService/gisSystemStaticSlice.js @@ -1,7 +1,32 @@ // /redux/slices/webService/gisSystemStaticSlice.js -import { atom } from "recoil"; +import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"; +import { fetchGisSystemStatic } from "../../api/fromWebService/fetchGisSystemStatic"; -export const gisSystemStaticState = atom({ - key: "gisSystemStatic", // Eindeutiger Schlüssel (innerhalb des Projekts) - default: [], // Standardwert (Anfangszustand) +export const fetchGisSystemStaticFromWebService = createAsyncThunk("gisSystemStatic/fetchGisSystemStaticFromWebService", async () => { + const response = await fetchGisSystemStatic(); + return response.Systems || []; // ✅ Hier sicherstellen, dass nur `Systems` gespeichert wird }); + +const gisSystemStaticSlice = createSlice({ + name: "gisSystemStatic", + initialState: { + data: [], // ✅ Immer ein Array setzen + status: "idle", + error: null, + }, + reducers: { + setGisSystemStatic: (state, action) => { + state.data = action.payload.Systems || []; // ✅ Falls `Systems` fehlt, leeres Array setzen + }, + }, + extraReducers: (builder) => { + builder.addCase(fetchGisSystemStaticFromWebService.fulfilled, (state, action) => { + state.status = "succeeded"; + state.data = action.payload; // ✅ Jetzt sollte `data` direkt das `Systems`-Array enthalten + }); + }, +}); + +export const { setGisSystemStatic } = gisSystemStaticSlice.actions; +export default gisSystemStaticSlice.reducer; +export const selectGisSystemStatic = (state) => state.gisSystemStatic.data || []; diff --git a/redux/store.js b/redux/store.js index f1f2d0bf5..344a4eda4 100644 --- a/redux/store.js +++ b/redux/store.js @@ -6,6 +6,7 @@ import locationDevicesFromDBReducer from "./slices/db/locationDevicesFromDBSlice import gisStationsStaticDistrictReducer from "./slices/webService/gisStationsStaticDistrictSlice"; import gisStationsStatusDistrictReducer from "./slices/webService/gisStationsStatusDistrictSlice"; import gisStationsMeasurementsReducer from "./slices/webService/gisStationsMeasurementsSlice"; +import gisSystemStaticReducer from "./slices/webService/gisSystemStaticSlice"; export const store = configureStore({ reducer: { @@ -16,5 +17,6 @@ export const store = configureStore({ gisStationsStaticDistrict: gisStationsStaticDistrictReducer, gisStationsStatusDistrict: gisStationsStatusDistrictReducer, gisStationsMeasurements: gisStationsMeasurementsReducer, + gisSystemStatic: gisSystemStaticReducer, }, });