fix: Kabelstrecken werden ausgeblendet
This commit is contained in:
@@ -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.341
|
NEXT_PUBLIC_APP_VERSION=1.1.342
|
||||||
|
|||||||
@@ -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.341
|
NEXT_PUBLIC_APP_VERSION=1.1.342
|
||||||
|
|||||||
@@ -367,6 +367,14 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
//Tooltip an mouse position anzeigen für die Linien
|
//Tooltip an mouse position anzeigen für die Linien
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!map) return;
|
if (!map) return;
|
||||||
|
console.log(
|
||||||
|
"[MapComponent/useEffect] polylineVisible:",
|
||||||
|
polylineVisible,
|
||||||
|
"isTalasAllowed:",
|
||||||
|
isTalasAllowed,
|
||||||
|
"poiLayerVisible:",
|
||||||
|
poiLayerVisible
|
||||||
|
);
|
||||||
|
|
||||||
// Wenn TALAS nicht erlaubt ist, Polyline-Checkbox und Anzeige deaktivieren
|
// Wenn TALAS nicht erlaubt ist, Polyline-Checkbox und Anzeige deaktivieren
|
||||||
if (!isTalasAllowed) {
|
if (!isTalasAllowed) {
|
||||||
@@ -381,6 +389,7 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
marker.remove();
|
marker.remove();
|
||||||
});
|
});
|
||||||
cleanupPolylinesForMemory(polylines, map);
|
cleanupPolylinesForMemory(polylines, map);
|
||||||
|
console.log("[MapComponent/useEffect] Nach cleanupPolylinesForMemory, polylines:", polylines);
|
||||||
|
|
||||||
// Setze neue Marker und Polylinien mit den aktuellen Daten (asynchron!)
|
// Setze neue Marker und Polylinien mit den aktuellen Daten (asynchron!)
|
||||||
const updatePolylines = async () => {
|
const updatePolylines = async () => {
|
||||||
@@ -442,9 +451,19 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
cleanupMarkers(markers, oms);
|
cleanupMarkers(markers, oms);
|
||||||
setMarkers(newMarkers);
|
setMarkers(newMarkers);
|
||||||
setPolylines(newPolylines);
|
setPolylines(newPolylines);
|
||||||
|
console.log("[MapComponent/useEffect] setPolylines (sichtbar):", newPolylines);
|
||||||
} else {
|
} else {
|
||||||
|
// Entferne wirklich alle Polylinien-Layer von der Karte
|
||||||
|
if (map) {
|
||||||
|
map.eachLayer(layer => {
|
||||||
|
if (layer instanceof L.Polyline) {
|
||||||
|
map.removeLayer(layer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
cleanupPolylinesForMemory(polylines, map);
|
cleanupPolylinesForMemory(polylines, map);
|
||||||
setPolylines([]);
|
setPolylines([]);
|
||||||
|
console.log("[MapComponent/useEffect] setPolylines ([]), alle Polylinien entfernt");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
updatePolylines();
|
updatePolylines();
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { useSelector, useDispatch } from "react-redux";
|
|||||||
import {
|
import {
|
||||||
selectPolylineVisible,
|
selectPolylineVisible,
|
||||||
setPolylineVisible,
|
setPolylineVisible,
|
||||||
initializePolylineFromLocalStorageThunk,
|
|
||||||
} from "@/redux/slices/database/polylines/polylineLayerVisibleSlice";
|
} 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";
|
||||||
@@ -15,11 +14,9 @@ import { setVisible } from "@/redux/slices/database/pois/poiLayerVisibleSlice";
|
|||||||
import { incrementZoomTrigger } from "@/redux/slices/zoomTriggerSlice";
|
import { incrementZoomTrigger } from "@/redux/slices/zoomTriggerSlice";
|
||||||
|
|
||||||
function MapLayersControlPanel() {
|
function MapLayersControlPanel() {
|
||||||
// Dummy state to force re-render after checkbox click (workaround for Redux/localStorage sync)
|
|
||||||
const [forceUpdate, setForceUpdate] = useState(0);
|
|
||||||
const [editMode, setEditMode] = useState(false); // Zustand für editMode
|
const [editMode, setEditMode] = useState(false); // Zustand für editMode
|
||||||
const [localStorageLoaded, setLocalStorageLoaded] = useState(false); // Tracking ob localStorage geladen wurde
|
const [localStorageLoaded, setLocalStorageLoaded] = useState(false); // Tracking ob localStorage geladen wurde
|
||||||
const kabelstreckenVisible = useSelector(selectPolylineVisible); // Redux State für Kabelstrecken
|
const kabelstreckenVisible = useSelector(selectPolylineVisible); // Nur noch Redux
|
||||||
const poiVisible = useSelector(state => state.poiLayerVisible.visible);
|
const poiVisible = useSelector(state => state.poiLayerVisible.visible);
|
||||||
const setPoiVisible = value => dispatch(setVisible(value));
|
const setPoiVisible = value => dispatch(setVisible(value));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
@@ -43,18 +40,26 @@ function MapLayersControlPanel() {
|
|||||||
|
|
||||||
const handlePolylineCheckboxChange = event => {
|
const handlePolylineCheckboxChange = event => {
|
||||||
const checked = event.target.checked;
|
const checked = event.target.checked;
|
||||||
|
// Debug-Ausgabe
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
const mapId = params.get("m");
|
||||||
|
const userId = params.get("u");
|
||||||
|
const polylineKey =
|
||||||
|
mapId && userId ? `polylineVisible_m${mapId}_u${userId}` : "polylineVisible";
|
||||||
|
console.log(
|
||||||
|
"[UI/handlePolylineCheckboxChange] checked:",
|
||||||
|
checked,
|
||||||
|
"Redux:",
|
||||||
|
kabelstreckenVisible,
|
||||||
|
"localStorage:",
|
||||||
|
localStorage.getItem(polylineKey)
|
||||||
|
);
|
||||||
dispatch(setPolylineVisible(checked));
|
dispatch(setPolylineVisible(checked));
|
||||||
// Synchronisiere Redux nach localStorage-Update
|
|
||||||
setTimeout(() => {
|
|
||||||
dispatch(initializePolylineFromLocalStorageThunk());
|
|
||||||
setForceUpdate(f => f + 1); // Force re-render
|
|
||||||
const event = new Event("polylineVisibilityChanged");
|
|
||||||
window.dispatchEvent(event);
|
|
||||||
}, 100);
|
|
||||||
// Wenn aktiviert, TALAS aktivieren
|
// Wenn aktiviert, TALAS aktivieren
|
||||||
if (checked) {
|
if (checked) {
|
||||||
const talasKey = "system-1";
|
const talasKey = "system-1";
|
||||||
dispatch(setLayerVisibility({ layer: talasKey, visibility: true }));
|
dispatch(setLayerVisibility({ layer: talasKey, visibility: true }));
|
||||||
|
// Optional: mapLayersVisibility im localStorage aktualisieren, aber nicht mehr für Sichtbarkeit nutzen
|
||||||
const mapId = localStorage.getItem("currentMapId");
|
const mapId = localStorage.getItem("currentMapId");
|
||||||
const userId = localStorage.getItem("currentUserId");
|
const userId = localStorage.getItem("currentUserId");
|
||||||
const mapStorageKey =
|
const mapStorageKey =
|
||||||
@@ -64,23 +69,19 @@ function MapLayersControlPanel() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initialisiere Redux-State für Kabelstrecken-Checkbox bei Kartenwechsel (mapId/userId)
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// LocalStorage Werte beim ersten Laden der Komponente oder bei Kartenwechsel wiederherstellen
|
// LocalStorage Werte beim ersten Laden der Komponente wiederherstellen (nur für POI und mapLayersVisibility, nicht mehr für Kabelstrecken)
|
||||||
const storedPoiVisible = localStorage.getItem("poiVisible");
|
const storedPoiVisible = localStorage.getItem("poiVisible");
|
||||||
if (storedPoiVisible !== null) {
|
if (storedPoiVisible !== null) {
|
||||||
setPoiVisible(storedPoiVisible === "true");
|
setPoiVisible(storedPoiVisible === "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kartenabhängige Sichtbarkeit für Kabelstrecken initialisieren
|
// Kartenspezifischer localStorage-Key verwenden
|
||||||
const mapId = localStorage.getItem("currentMapId");
|
const mapId = localStorage.getItem("currentMapId");
|
||||||
const userId = localStorage.getItem("currentUserId");
|
const userId = localStorage.getItem("currentUserId");
|
||||||
const mapStorageKey =
|
const mapStorageKey =
|
||||||
mapId && userId ? `mapLayersVisibility_m${mapId}_u${userId}` : "mapLayersVisibility";
|
mapId && userId ? `mapLayersVisibility_m${mapId}_u${userId}` : "mapLayersVisibility";
|
||||||
|
|
||||||
// Kabelstrecken-Checkbox initialisieren: Redux übernimmt map/user-spezifisch, keine Manipulation von 'polylineVisible' oder 'kabelstreckenVisible' hier mehr!
|
|
||||||
|
|
||||||
// mapLayersVisibility initialisieren
|
|
||||||
const storedMapLayersVisibility = localStorage.getItem(mapStorageKey);
|
const storedMapLayersVisibility = localStorage.getItem(mapStorageKey);
|
||||||
if (storedMapLayersVisibility) {
|
if (storedMapLayersVisibility) {
|
||||||
const parsedVisibility = JSON.parse(storedMapLayersVisibility);
|
const parsedVisibility = JSON.parse(storedMapLayersVisibility);
|
||||||
@@ -88,6 +89,7 @@ function MapLayersControlPanel() {
|
|||||||
dispatch(setLayerVisibility({ layer: key, visibility: parsedVisibility[key] }));
|
dispatch(setLayerVisibility({ layer: key, visibility: parsedVisibility[key] }));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
// Initialisiere mapLayersVisibility basierend auf Allow & Map (nur Systeme mit Map===1 anzeigen)
|
||||||
if (Array.isArray(GisSystemStatic)) {
|
if (Array.isArray(GisSystemStatic)) {
|
||||||
const initialVisibility = {};
|
const initialVisibility = {};
|
||||||
GisSystemStatic.forEach(system => {
|
GisSystemStatic.forEach(system => {
|
||||||
@@ -106,7 +108,7 @@ function MapLayersControlPanel() {
|
|||||||
setEditMode(storedEditMode === "true");
|
setEditMode(storedEditMode === "true");
|
||||||
|
|
||||||
setLocalStorageLoaded(true);
|
setLocalStorageLoaded(true);
|
||||||
}, [localStorage.getItem("currentMapId"), localStorage.getItem("currentUserId")]);
|
}, []); // Läuft nur beim Mount
|
||||||
|
|
||||||
const handleAreaChange = event => {
|
const handleAreaChange = event => {
|
||||||
const selectedIndex = event.target.options.selectedIndex;
|
const selectedIndex = event.target.options.selectedIndex;
|
||||||
@@ -165,16 +167,32 @@ function MapLayersControlPanel() {
|
|||||||
const handleCheckboxChange = (key, event) => {
|
const handleCheckboxChange = (key, event) => {
|
||||||
if (editMode) return;
|
if (editMode) return;
|
||||||
const { checked } = event.target;
|
const { checked } = event.target;
|
||||||
|
// Debug-Ausgabe
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
const mapId = params.get("m");
|
||||||
|
const userId = params.get("u");
|
||||||
|
const polylineKey =
|
||||||
|
mapId && userId ? `polylineVisible_m${mapId}_u${userId}` : "polylineVisible";
|
||||||
|
console.log(
|
||||||
|
"[UI/handleCheckboxChange] key:",
|
||||||
|
key,
|
||||||
|
"checked:",
|
||||||
|
checked,
|
||||||
|
"Redux:",
|
||||||
|
kabelstreckenVisible,
|
||||||
|
"localStorage:",
|
||||||
|
localStorage.getItem(polylineKey)
|
||||||
|
);
|
||||||
dispatch(setLayerVisibility({ layer: key, visibility: checked }));
|
dispatch(setLayerVisibility({ layer: key, visibility: checked }));
|
||||||
const mapId = localStorage.getItem("currentMapId");
|
const mapId2 = localStorage.getItem("currentMapId");
|
||||||
const userId = localStorage.getItem("currentUserId");
|
const userId2 = localStorage.getItem("currentUserId");
|
||||||
const mapStorageKey =
|
const mapStorageKey =
|
||||||
mapId && userId ? `mapLayersVisibility_m${mapId}_u${userId}` : "mapLayersVisibility";
|
mapId2 && userId2 ? `mapLayersVisibility_m${mapId2}_u${userId2}` : "mapLayersVisibility";
|
||||||
localStorage.setItem(mapStorageKey, JSON.stringify({ ...mapLayersVisibility, [key]: checked }));
|
localStorage.setItem(mapStorageKey, JSON.stringify({ ...mapLayersVisibility, [key]: checked }));
|
||||||
// Wenn TALAS (system-1) deaktiviert wird, Kabelstrecken deaktivieren
|
// Wenn TALAS (system-1) deaktiviert wird, Kabelstrecken deaktivieren
|
||||||
if (key === "system-1" && !checked) {
|
if (key === "system-1" && !checked) {
|
||||||
setKabelstreckenVisible(false);
|
localStorage.setItem("kabelstreckenVisible", "false");
|
||||||
// entfernt: keine Manipulation von 'kabelstreckenVisible' oder 'polylineVisible' mehr
|
localStorage.setItem("polylineVisible", "false");
|
||||||
dispatch(setPolylineVisible(false));
|
dispatch(setPolylineVisible(false));
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const polylineEvent = new Event("polylineVisibilityChanged");
|
const polylineEvent = new Event("polylineVisibilityChanged");
|
||||||
@@ -319,7 +337,7 @@ function MapLayersControlPanel() {
|
|||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
checked={kabelstreckenVisible} // Redux State
|
checked={kabelstreckenVisible} // Lokaler State statt Redux
|
||||||
onChange={handlePolylineCheckboxChange}
|
onChange={handlePolylineCheckboxChange}
|
||||||
id="polyline-checkbox"
|
id="polyline-checkbox"
|
||||||
disabled={!isTalasAllowed || editMode}
|
disabled={!isTalasAllowed || editMode}
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "nodemap",
|
"name": "nodemap",
|
||||||
"version": "1.1.341",
|
"version": "1.1.342",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "nodemap",
|
"name": "nodemap",
|
||||||
"version": "1.1.341",
|
"version": "1.1.342",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.13.3",
|
"@emotion/react": "^11.13.3",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.13.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nodemap",
|
"name": "nodemap",
|
||||||
"version": "1.1.341",
|
"version": "1.1.342",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.13.3",
|
"@emotion/react": "^11.13.3",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.13.0",
|
||||||
|
|||||||
@@ -44,6 +44,14 @@ const polylineLayerVisibleSlice = createSlice({
|
|||||||
if (mapId && userId) {
|
if (mapId && userId) {
|
||||||
const key = `polylineVisible_m${mapId}_u${userId}`;
|
const key = `polylineVisible_m${mapId}_u${userId}`;
|
||||||
localStorage.setItem(key, action.payload.toString());
|
localStorage.setItem(key, action.payload.toString());
|
||||||
|
console.log(
|
||||||
|
"[Redux/setPolylineVisible] payload:",
|
||||||
|
action.payload,
|
||||||
|
"key:",
|
||||||
|
key,
|
||||||
|
"localStorage:",
|
||||||
|
localStorage.getItem(key)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// fallback: do nothing
|
// fallback: do nothing
|
||||||
@@ -54,7 +62,12 @@ const polylineLayerVisibleSlice = createSlice({
|
|||||||
// Diese Action wird nur beim Initialisieren aus localStorage verwendet
|
// Diese Action wird nur beim Initialisieren aus localStorage verwendet
|
||||||
state.visible = action.payload;
|
state.visible = action.payload;
|
||||||
state.isInitialized = true;
|
state.isInitialized = true;
|
||||||
console.log("🔧 Redux: initializePolylineFromLocalStorage called with:", action.payload);
|
console.log(
|
||||||
|
"🔧 Redux: initializePolylineFromLocalStorage called with:",
|
||||||
|
action.payload,
|
||||||
|
"visible:",
|
||||||
|
state.visible
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -37,19 +37,15 @@ export const setupPolylines = async (
|
|||||||
basePath = config.basePath || "";
|
basePath = config.basePath || "";
|
||||||
}
|
}
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
if (!polylineVisible) {
|
|
||||||
//console.warn("Polylines deaktiviert - keine Zeichnung");
|
|
||||||
return { markers: [], polylines: [] };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!polylineVisible) {
|
if (!polylineVisible) {
|
||||||
// Entferne alle Polylinien, wenn sie ausgeblendet werden sollen
|
// Entferne alle Polylinien, wenn sie ausgeblendet werden sollen
|
||||||
if (window.polylines) {
|
if (window.polylines) {
|
||||||
window.polylines.forEach(polyline => {
|
window.polylines.forEach(polyline => {
|
||||||
if (map.hasLayer(polyline)) {
|
if (map && map.hasLayer(polyline)) {
|
||||||
map.removeLayer(polyline);
|
map.removeLayer(polyline);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
window.polylines = [];
|
||||||
}
|
}
|
||||||
return { markers: [], polylines: [] };
|
return { markers: [], polylines: [] };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user