WIP: polyline Slice visiblity
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.329
|
NEXT_PUBLIC_APP_VERSION=1.1.330
|
||||||
|
|||||||
@@ -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.329
|
NEXT_PUBLIC_APP_VERSION=1.1.330
|
||||||
|
|||||||
@@ -31,34 +31,26 @@ const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, prior
|
|||||||
|
|
||||||
GisSystemStatic.forEach(({ Name, IdSystem }) => {
|
GisSystemStatic.forEach(({ Name, IdSystem }) => {
|
||||||
const key = `system-${IdSystem}`;
|
const key = `system-${IdSystem}`;
|
||||||
// LayerGroup-Instanzierung und Bereinigung
|
// LayerGroup immer komplett neu erstellen, um doppelte Marker zu verhindern
|
||||||
if (layerRefs.current[key]) {
|
if (layerRefs.current[key]) {
|
||||||
// Entferne alte LayerGroup von der Map, falls vorhanden
|
|
||||||
if (map.hasLayer(layerRefs.current[key])) {
|
if (map.hasLayer(layerRefs.current[key])) {
|
||||||
map.removeLayer(layerRefs.current[key]);
|
map.removeLayer(layerRefs.current[key]);
|
||||||
}
|
}
|
||||||
layerRefs.current[key].clearLayers();
|
layerRefs.current[key].clearLayers();
|
||||||
|
delete layerRefs.current[key];
|
||||||
}
|
}
|
||||||
// Neue oder wiederverwendete LayerGroup anlegen und zur Map hinzufügen
|
layerRefs.current[key] = new L.LayerGroup();
|
||||||
if (!layerRefs.current[key]) {
|
|
||||||
layerRefs.current[key] = new L.LayerGroup();
|
|
||||||
}
|
|
||||||
layerRefs.current[key].addTo(map);
|
layerRefs.current[key].addTo(map);
|
||||||
// Debug-Ausgabe
|
|
||||||
/* console.log(
|
|
||||||
`[DeviceLayers] LayerGroup für ${key} auf Map hinzugefügt. Aktuelle LayerGroups:`,
|
|
||||||
Object.keys(layerRefs.current)
|
|
||||||
); */
|
|
||||||
|
|
||||||
createAndSetDevices(
|
createAndSetDevices(
|
||||||
IdSystem,
|
IdSystem,
|
||||||
newMarkers => {
|
newMarkers => {
|
||||||
// Füge neue Marker der LayerGroup hinzu (nur Geräte-Marker)
|
// Füge neue Marker der LayerGroup hinzu (nur Geräte-Marker)
|
||||||
if (layerRefs.current[key]) {
|
if (layerRefs.current[key]) {
|
||||||
// Entferne alle Marker aus der LayerGroup, bevor neue hinzugefügt werden
|
|
||||||
layerRefs.current[key].clearLayers();
|
layerRefs.current[key].clearLayers();
|
||||||
newMarkers.forEach(marker => {
|
// Nur eindeutige Marker hinzufügen
|
||||||
// Nur LayerGroup verwenden, nicht direkt auf map
|
const uniqueMarkers = Array.isArray(newMarkers) ? Array.from(new Set(newMarkers)) : [];
|
||||||
|
uniqueMarkers.forEach(marker => {
|
||||||
marker.addTo(layerRefs.current[key]);
|
marker.addTo(layerRefs.current[key]);
|
||||||
});
|
});
|
||||||
// Debug: Anzahl Marker in LayerGroup
|
// Debug: Anzahl Marker in LayerGroup
|
||||||
@@ -83,29 +75,20 @@ const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, prior
|
|||||||
if (!map) return;
|
if (!map) return;
|
||||||
const editMode = localStorage.getItem("editMode") === "true";
|
const editMode = localStorage.getItem("editMode") === "true";
|
||||||
|
|
||||||
Object.entries(markerStates).forEach(([key, markers]) => {
|
Object.entries(layerRefs.current).forEach(([key, layerGroup]) => {
|
||||||
const isVisible = mapLayersVisibility[key] ?? true; // undefined = true
|
const isVisible = mapLayersVisibility[key] ?? true;
|
||||||
|
if (editMode || isVisible === false) {
|
||||||
markers.forEach(marker => {
|
if (map.hasLayer(layerGroup)) {
|
||||||
const hasLayer = map.hasLayer(marker);
|
map.removeLayer(layerGroup);
|
||||||
|
|
||||||
// Logik korrigiert:
|
|
||||||
// - Im editMode: alle Marker verstecken
|
|
||||||
// - Nicht im editMode: nur sichtbare Marker anzeigen (isVisible === true)
|
|
||||||
if (editMode || isVisible === false) {
|
|
||||||
// Marker verstecken
|
|
||||||
if (hasLayer) {
|
|
||||||
map.removeLayer(marker);
|
|
||||||
}
|
|
||||||
} else if (isVisible === true) {
|
|
||||||
// Marker anzeigen (nur wenn explizit true)
|
|
||||||
if (!hasLayer) {
|
|
||||||
marker.addTo(map);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
} else if (isVisible === true) {
|
||||||
|
if (!map.hasLayer(layerGroup)) {
|
||||||
|
layerGroup.addTo(map);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Overlapping-Check bleibt wie gehabt
|
||||||
const allMarkers = Object.values(markerStates).filter(Array.isArray).flat();
|
const allMarkers = Object.values(markerStates).filter(Array.isArray).flat();
|
||||||
checkOverlappingMarkers(map, allMarkers, plusRoundIcon);
|
checkOverlappingMarkers(map, allMarkers, plusRoundIcon);
|
||||||
}, [map, markerStates, mapLayersVisibility]);
|
}, [map, markerStates, mapLayersVisibility]);
|
||||||
|
|||||||
@@ -40,40 +40,24 @@ function MapLayersControlPanel() {
|
|||||||
|
|
||||||
const handlePolylineCheckboxChange = event => {
|
const handlePolylineCheckboxChange = event => {
|
||||||
const checked = event.target.checked;
|
const checked = event.target.checked;
|
||||||
console.log("🖱️ Kabelstrecken checkbox clicked, new value:", checked);
|
|
||||||
|
|
||||||
// Beide localStorage-Variablen setzen für Kompatibilität
|
|
||||||
setKabelstreckenVisible(checked);
|
setKabelstreckenVisible(checked);
|
||||||
localStorage.setItem("kabelstreckenVisible", checked.toString());
|
localStorage.setItem("kabelstreckenVisible", checked.toString());
|
||||||
localStorage.setItem("polylineVisible", checked.toString()); // Auch die alte Variable setzen
|
localStorage.setItem("polylineVisible", checked.toString());
|
||||||
console.log("💾 Saved to localStorage as kabelstreckenVisible:", checked);
|
|
||||||
console.log("💾 Saved to localStorage as polylineVisible:", checked);
|
|
||||||
|
|
||||||
// Redux für andere Teile der App aktualisieren
|
|
||||||
dispatch(setPolylineVisible(checked));
|
dispatch(setPolylineVisible(checked));
|
||||||
|
|
||||||
// Event auslösen, damit andere Komponenten über die Änderung informiert werden
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const event = new Event("polylineVisibilityChanged");
|
const event = new Event("polylineVisibilityChanged");
|
||||||
window.dispatchEvent(event);
|
window.dispatchEvent(event);
|
||||||
console.log("📢 Event 'polylineVisibilityChanged' dispatched");
|
|
||||||
}, 100);
|
}, 100);
|
||||||
|
// Wenn aktiviert, TALAS aktivieren
|
||||||
// Wenn Kabelstrecken aktiviert wird, aktiviere automatisch auch TALAS (IdSystem 1)
|
|
||||||
if (checked) {
|
if (checked) {
|
||||||
const talasKey = "system-1"; // TALAS hat IdSystem 1
|
const talasKey = "system-1";
|
||||||
dispatch(setLayerVisibility({ layer: talasKey, visibility: true }));
|
dispatch(setLayerVisibility({ layer: talasKey, visibility: true }));
|
||||||
|
|
||||||
// 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";
|
||||||
|
|
||||||
const updatedVisibility = { ...mapLayersVisibility, [talasKey]: true };
|
const updatedVisibility = { ...mapLayersVisibility, [talasKey]: true };
|
||||||
localStorage.setItem(mapStorageKey, JSON.stringify(updatedVisibility));
|
localStorage.setItem(mapStorageKey, JSON.stringify(updatedVisibility));
|
||||||
|
|
||||||
console.log("🔗 Kabelstrecken aktiviert → TALAS automatisch aktiviert");
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -221,35 +205,23 @@ function MapLayersControlPanel() {
|
|||||||
const handleCheckboxChange = (key, event) => {
|
const handleCheckboxChange = (key, event) => {
|
||||||
if (editMode) return;
|
if (editMode) return;
|
||||||
const { checked } = event.target;
|
const { checked } = event.target;
|
||||||
|
|
||||||
dispatch(setLayerVisibility({ layer: key, visibility: checked }));
|
dispatch(setLayerVisibility({ layer: key, visibility: checked }));
|
||||||
|
|
||||||
// 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";
|
||||||
|
|
||||||
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, deaktiviere automatisch auch Kabelstrecken
|
|
||||||
if (key === "system-1" && !checked) {
|
if (key === "system-1" && !checked) {
|
||||||
console.log("🔗 TALAS deaktiviert → Kabelstrecken automatisch deaktiviert");
|
|
||||||
|
|
||||||
// Kabelstrecken deaktivieren
|
|
||||||
setKabelstreckenVisible(false);
|
setKabelstreckenVisible(false);
|
||||||
localStorage.setItem("kabelstreckenVisible", "false");
|
localStorage.setItem("kabelstreckenVisible", "false");
|
||||||
localStorage.setItem("polylineVisible", "false");
|
localStorage.setItem("polylineVisible", "false");
|
||||||
dispatch(setPolylineVisible(false));
|
dispatch(setPolylineVisible(false));
|
||||||
|
|
||||||
// Event für Kabelstrecken auslösen
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const polylineEvent = new Event("polylineVisibilityChanged");
|
const polylineEvent = new Event("polylineVisibilityChanged");
|
||||||
window.dispatchEvent(polylineEvent);
|
window.dispatchEvent(polylineEvent);
|
||||||
console.log("📢 Event 'polylineVisibilityChanged' dispatched (auto-deactivated)");
|
|
||||||
}, 50);
|
}, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const event = new Event("visibilityChanged");
|
const event = new Event("visibilityChanged");
|
||||||
window.dispatchEvent(event);
|
window.dispatchEvent(event);
|
||||||
|
|||||||
Binary file not shown.
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "nodemap",
|
"name": "nodemap",
|
||||||
"version": "1.1.329",
|
"version": "1.1.330",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "nodemap",
|
"name": "nodemap",
|
||||||
"version": "1.1.329",
|
"version": "1.1.330",
|
||||||
"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.329",
|
"version": "1.1.330",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.13.3",
|
"@emotion/react": "^11.13.3",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.13.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user