fix(map): entferne Start-, End- und Stützpunkt-Icons sofort beim Ausblenden der Kabelstrecken

- Alle Marker mit StartIcon, EndIcon und CircleIcon werden jetzt direkt entfernt, wenn die Kabelstrecken-Checkbox deaktiviert wird
- Kein Browser-Reload mehr nötig, Icons verschwinden sofort von der Karte
This commit is contained in:
ISA
2025-08-22 10:12:03 +02:00
parent f2a322a91b
commit a013c07394
5 changed files with 62 additions and 38 deletions

View File

@@ -24,4 +24,4 @@ NEXT_PUBLIC_USE_MOCKS=true
# z.B. http://10.10.0.13/xyz/index.aspx -> basePath in config.json auf /xyz setzen # z.B. http://10.10.0.13/xyz/index.aspx -> basePath in config.json auf /xyz setzen
# basePath wird jetzt in public/config.json gepflegt # basePath wird jetzt in public/config.json gepflegt
# App-Versionsnummer # App-Versionsnummer
NEXT_PUBLIC_APP_VERSION=1.1.342 NEXT_PUBLIC_APP_VERSION=1.1.343

View File

@@ -25,4 +25,4 @@ NEXT_PUBLIC_USE_MOCKS=false
# basePath wird jetzt in public/config.json gepflegt # basePath wird jetzt in public/config.json gepflegt
# App-Versionsnummer # App-Versionsnummer
NEXT_PUBLIC_APP_VERSION=1.1.342 NEXT_PUBLIC_APP_VERSION=1.1.343

View File

@@ -10,6 +10,9 @@ import { InformationCircleIcon } from "@heroicons/react/20/solid";
import PoiUpdateModal from "@/components/pois/poiUpdateModal/PoiUpdateModal.js"; import PoiUpdateModal from "@/components/pois/poiUpdateModal/PoiUpdateModal.js";
import { ToastContainer, toast } from "react-toastify"; import { ToastContainer, toast } from "react-toastify";
import plusRoundIcon from "../icons/devices/overlapping/PlusRoundIcon.js"; import plusRoundIcon from "../icons/devices/overlapping/PlusRoundIcon.js";
import StartIcon from "@/components/gisPolylines/icons/StartIcon.js";
import EndIcon from "@/components/gisPolylines/icons/EndIcon.js";
import CircleIcon from "@/components/gisPolylines/icons/CircleIcon.js";
import { restoreMapSettings, checkOverlappingMarkers } from "../../utils/mapUtils.js"; import { restoreMapSettings, checkOverlappingMarkers } from "../../utils/mapUtils.js";
import addItemsToMapContextMenu from "@/components/contextmenu/useMapContextMenu.js"; import addItemsToMapContextMenu from "@/components/contextmenu/useMapContextMenu.js";
@@ -234,41 +237,62 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
// URL-Parameter extrahieren und kartenspezifische localStorage-Keys verwenden // URL-Parameter extrahieren und kartenspezifische localStorage-Keys verwenden
useEffect(() => { useEffect(() => {
const params = new URLSearchParams(window.location.search); // Immer beim Umschalten der Kabelstrecken-Checkbox prüfen!
const mapId = params.get("m"); if (map) {
const userId = params.get("u"); if (!polylineVisible) {
map.eachLayer(layer => {
if (mapId && userId) { // Entferne alle Marker mit StartIcon, EndIcon oder CircleIcon (Stützpunkt)
// Speichere aktuelle Map- und User-ID if (
localStorage.setItem("currentMapId", mapId); layer instanceof L.Marker &&
localStorage.setItem("currentUserId", userId); layer.options &&
layer.options.icon &&
// Kartenspezifischer localStorage-Key (layer.options.icon === StartIcon ||
const mapStorageKey = `mapLayersVisibility_m${mapId}_u${userId}`; layer.options.icon === EndIcon ||
const storedMapLayersVisibility = localStorage.getItem(mapStorageKey); layer.options.icon === CircleIcon)
) {
if (storedMapLayersVisibility) { map.removeLayer(layer);
try { }
const parsedVisibility = JSON.parse(storedMapLayersVisibility); });
Object.keys(parsedVisibility).forEach(key => {
dispatch(setLayerVisibility({ layer: key, visibility: parsedVisibility[key] }));
});
console.log(
`🔄 mapLayersVisibility für Map ${mapId}/User ${userId} geladen:`,
parsedVisibility
);
} catch (error) {
console.error("❌ Fehler beim Laden von mapLayersVisibility:", error);
}
} else {
console.log(
`📝 Keine gespeicherten Einstellungen für Map ${mapId}/User ${userId} gefunden`
);
} }
// Redux Polyline Sichtbarkeit initialisieren (map/user spezifisch)
dispatch(initializePolylineFromLocalStorageThunk());
} }
}, [dispatch]); // Nur einmal beim Mount ausführen // Initialisierung der Layer-Visibility und Polyline-Redux-State nur beim Mount
if (typeof window !== "undefined") {
const params = new URLSearchParams(window.location.search);
const mapId = params.get("m");
const userId = params.get("u");
if (mapId && userId) {
// Speichere aktuelle Map- und User-ID
localStorage.setItem("currentMapId", mapId);
localStorage.setItem("currentUserId", userId);
// Kartenspezifischer localStorage-Key
const mapStorageKey = `mapLayersVisibility_m${mapId}_u${userId}`;
const storedMapLayersVisibility = localStorage.getItem(mapStorageKey);
if (storedMapLayersVisibility) {
try {
const parsedVisibility = JSON.parse(storedMapLayersVisibility);
Object.keys(parsedVisibility).forEach(key => {
dispatch(setLayerVisibility({ layer: key, visibility: parsedVisibility[key] }));
});
console.log(
`🔄 mapLayersVisibility für Map ${mapId}/User ${userId} geladen:`,
parsedVisibility
);
} catch (error) {
console.error("❌ Fehler beim Laden von mapLayersVisibility:", error);
}
} else {
console.log(
`📝 Keine gespeicherten Einstellungen für Map ${mapId}/User ${userId} gefunden`
);
}
// Redux Polyline Sichtbarkeit initialisieren (map/user spezifisch)
dispatch(initializePolylineFromLocalStorageThunk());
}
}
}, [dispatch, polylineVisible, map]);
useEffect(() => { useEffect(() => {
if (linesData && Array.isArray(linesData)) { if (linesData && Array.isArray(linesData)) {
const transformed = linesData.map(item => ({ const transformed = linesData.map(item => ({

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "nodemap", "name": "nodemap",
"version": "1.1.342", "version": "1.1.343",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "nodemap", "name": "nodemap",
"version": "1.1.342", "version": "1.1.343",
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.3", "@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0", "@emotion/styled": "^11.13.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "nodemap", "name": "nodemap",
"version": "1.1.342", "version": "1.1.343",
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.3", "@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0", "@emotion/styled": "^11.13.0",