diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dd995744..750e1ec9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,27 @@ Alle bedeutenden Änderungen an diesem Projekt werden in dieser Datei dokumentie --- +## [1.1.150] - 2025-05-22 + +### Removed + +- `config.js` vollständig gelöscht – keine Abhängigkeiten mehr im Projekt +- Funktion `isMockMode()` entfernt – direkter Zugriff auf `process.env.NEXT_PUBLIC_USE_MOCK_API` ersetzt zentrale Hilfsfunktion + +### Changed + +- `fetchUserRightsService.js`, `fetchGisSystemStaticService.js` und `useMapComponentState.js` angepasst: + - Verwendet dynamisch `window.location` + `.env.local` statt config.js + - Verbesserte Übersichtlichkeit und zentrale Steuerung über `.env.local` + +### Architecture + +- Konfiguration und API-Port-Steuerung vollständig in `.env.local` ausgelagert +- Einheitliche Struktur für Webservice-Aufrufe (`window.location + mode`) +- Vereinfachtes Debugging, klarere Struktur für neue Entwickler + +--- + ## [1.1.148] - 2025-05-22 ### Hinzugefügt diff --git a/README.md b/README.md index f18173381..705663550 100644 --- a/README.md +++ b/README.md @@ -261,7 +261,7 @@ NEXT_PUBLIC_USE_MOCK_API=true ### Serverkonfiguration - Port 3000 muss freigegeben sein -- `.env.local`, `config.js`, `[...]path.js` und `MapComponent.js` müssen IP und API-Endpunkte korrekt konfiguriert haben +- .env.local, MapComponent.js und alle Services verwenden dynamische API-Endpunkte basierend auf window.location und NEXT_PUBLIC_API_PORT_MODE - Die Anwendung wird über einen `nssm` Windows-Service gestartet (optional) - Browser: Chrome ab Version 125.0.6420.142 empfohlen diff --git a/components/mainComponent/MapComponent.js b/components/mainComponent/MapComponent.js index d53c31361..490cdcdf4 100644 --- a/components/mainComponent/MapComponent.js +++ b/components/mainComponent/MapComponent.js @@ -4,7 +4,6 @@ import L 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 "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"; diff --git a/config/appVersion.js b/config/appVersion.js index 07fbea74b..8e07be8fb 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.149"; +export const APP_VERSION = "1.1.150"; diff --git a/config/config.js b/config/config.js deleted file mode 100644 index c69d7f225..000000000 --- a/config/config.js +++ /dev/null @@ -1,43 +0,0 @@ -// Datei: /config/config.js -import { BASE_URL } from "../config/paths"; - -// Prüfen, ob Mock-Modus aktiv ist -function isMockMode() { - return process.env.NEXT_PUBLIC_USE_MOCK_API === "true"; -} - -// Definieren der grundlegenden Umgebungseinstellungen und Konfigurationen der Karte - -const mode = process.env.NEXT_PUBLIC_API_PORT_MODE; -let serverURL = ""; - -if (typeof window !== "undefined") { - serverURL = mode === "dev" ? `${window.location.protocol}//${window.location.hostname}:80` : `${window.location.origin}`; -} - -if (typeof window !== "undefined" && !serverURL && !isMockMode()) { - throw new Error("Die Umgebungsvariable ist nicht gesetzt!"); -} - -if (typeof window !== "undefined") { - console.log("%c 1- serverURL in config:", "color: #006400;", serverURL); -} - -// Initialisieren von Variablen, die später im Browserkontext gesetzt werden -let windowHeight, url_string, url, idMap, idUser; - -// URL-Setup - dynamisch abhängig von Mock oder Echtbetrieb -if (typeof window !== "undefined") { - windowHeight = window.innerHeight; - url_string = window.location.href; - url = new URL(url_string); - console.log("%c 2- URL in config:", "color: #006400; font-size: 16px; background-color: #f0f0f0;", url); - - idMap = url.searchParams.get("m"); - idUser = url.searchParams.get("u"); - console.log(`4- Parameter 'idMap' : ${idMap}`); - console.log(`5- Parameter 'idUser': ${idUser}`); -} - -// Export der Variablen und URLs -export { serverURL, windowHeight, url_string, url, idMap, idUser, isMockMode }; diff --git a/hooks/useMapComponentState.js b/hooks/useMapComponentState.js index 9c6bf30a6..ca1fbe059 100644 --- a/hooks/useMapComponentState.js +++ b/hooks/useMapComponentState.js @@ -2,7 +2,6 @@ // POI -> Kontextmenü -> POI bearbeiten -> Dropdown Geräteauswahl import { useState, useEffect } from "react"; import { useSelector } from "react-redux"; -import { isMockMode } from "../config/config"; export const useMapComponentState = () => { const [poiTypData, setPoiTypData] = useState([]); @@ -17,7 +16,7 @@ export const useMapComponentState = () => { useEffect(() => { const fetchPoiTypData = async () => { - if (isMockMode()) { + if (process.env.NEXT_PUBLIC_USE_MOCK_API === "true") { console.log("⚠️ Mock-API: POI Typen geladen (Mock)"); const mockData = [ diff --git a/services/webservice/fetchUserRightsService.js b/services/webservice/fetchUserRightsService.js index a37d5eaa9..690a68d22 100644 --- a/services/webservice/fetchUserRightsService.js +++ b/services/webservice/fetchUserRightsService.js @@ -1,26 +1,25 @@ // /services/webservice/fetchUserRightsService.js -import * as config from "../../config/config"; - export const fetchUserRightsService = async () => { - if (config.USE_MOCK_API) { - console.log("⚠️ Mock-API: Benutzerrechte geladen"); - return [56, 57, 58]; // Beispielrechte + const mode = process.env.NEXT_PUBLIC_API_PORT_MODE; + const apiBaseUrl = mode === "dev" ? `${window.location.protocol}//${window.location.hostname}:80/talas5/ClientData/WebServiceMap.asmx` : `${window.location.origin}/talas5/ClientData/WebServiceMap.asmx`; + + const params = new URLSearchParams(window.location.search); + const idMap = params.get("m"); + const idUser = params.get("u"); + + const url = `${apiBaseUrl}/GetUserRights?idMap=${idMap}&idUser=${idUser}`; + + const response = await fetch(url, { + method: "GET", + headers: { + Connection: "close", + }, + }); + + if (!response.ok) { + throw new Error("Fehler beim Abrufen der Benutzerrechte"); } - try { - const response = await fetch(`${config.serverURL}/talas5/ClientData/WebserviceMap.asmx/GisSystemStatic?idMap=${config.idMap}&idUser=${config.idUser}`, { - method: "GET", - headers: { Connection: "close" }, - }); - - if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); - - const data = await response.json(); - if (!data || !data.Rights || !Array.isArray(data.Rights)) throw new Error("Invalid response structure"); - - return data.Rights.map((right) => right.IdRight); - } catch (error) { - console.error("Fehler beim Abrufen der Benutzerrechte:", error); - return []; - } + const json = await response.json(); + return json.Rights || []; }; diff --git a/utils/poiUtils.js b/utils/poiUtils.js index 0887d2b2f..ddeb32e55 100644 --- a/utils/poiUtils.js +++ b/utils/poiUtils.js @@ -5,7 +5,6 @@ import { redrawPolyline } from "./polylines/redrawPolyline.js"; import L from "leaflet"; import "leaflet.smooth_marker_bouncing"; import { toast } from "react-toastify"; -import * as config from "../config/config.js"; export const insertNewPOI = (closestPoints, newPoint, lineData, map) => { const newMarker = L.marker(newPoint, {