fix: Kabelstrecken-Checkbox und Anzeige an TALAS Allow-Status gekoppelt

- Checkbox für Kabelstrecken (polylines) wird deaktiviert, wenn TALAS (IdSystem: 1) Allow: 0 ist
- Polylinien werden auf der Karte nur angezeigt, wenn Allow: 1 für TALAS gesetzt ist
- Synchronisation zwischen UI
This commit is contained in:
ISA
2025-07-25 10:08:45 +02:00
parent 4e396a1b10
commit e1bfe7496b
7 changed files with 82 additions and 57 deletions

View File

@@ -25,4 +25,4 @@ NEXT_PUBLIC_USE_MOCKS=true
NEXT_PUBLIC_BASE_PATH=/talas5 NEXT_PUBLIC_BASE_PATH=/talas5
# Oder leer lassen für direkten Zugriff -> NEXT_PUBLIC_BASE_PATH= # Oder leer lassen für direkten Zugriff -> NEXT_PUBLIC_BASE_PATH=
# App-Versionsnummer # App-Versionsnummer
NEXT_PUBLIC_APP_VERSION=1.1.300 NEXT_PUBLIC_APP_VERSION=1.1.301

View File

@@ -26,4 +26,4 @@ NEXT_PUBLIC_BASE_PATH=/talas5
# Oder leer lassen für direkten Zugriff -> NEXT_PUBLIC_BASE_PATH= # Oder leer lassen für direkten Zugriff -> NEXT_PUBLIC_BASE_PATH=
# App-Versionsnummer # App-Versionsnummer
NEXT_PUBLIC_APP_VERSION=1.1.300 NEXT_PUBLIC_APP_VERSION=1.1.301

View File

@@ -96,6 +96,11 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
const countdownActive = useSelector(state => state.polylineContextMenu.countdownActive); const countdownActive = useSelector(state => state.polylineContextMenu.countdownActive);
const isPolylineContextMenuOpen = useSelector(state => state.polylineContextMenu.isOpen); const isPolylineContextMenuOpen = useSelector(state => state.polylineContextMenu.isOpen);
const polylineVisible = useSelector(selectPolylineVisible); const polylineVisible = useSelector(selectPolylineVisible);
const GisSystemStatic = useSelector(selectGisSystemStatic);
// Prüfen, ob TALAS (IdSystem 1) erlaubt ist
const isTalasAllowed = Array.isArray(GisSystemStatic)
? GisSystemStatic.some(system => system.IdSystem === 1 && system.Allow === 1)
: false;
const isPoiTypLoaded = useSelector(state => state.poiTypes.status === "succeeded"); const isPoiTypLoaded = useSelector(state => state.poiTypes.status === "succeeded");
const statusMeasurements = useSelector(state => state.gisStationsMeasurements.status); const statusMeasurements = useSelector(state => state.gisStationsMeasurements.status);
@@ -107,7 +112,6 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
const zoomTrigger = useSelector(state => state.zoomTrigger.trigger); const zoomTrigger = useSelector(state => state.zoomTrigger.trigger);
const poiReadTrigger = useSelector(state => state.poiReadFromDbTrigger.trigger); const poiReadTrigger = useSelector(state => state.poiReadFromDbTrigger.trigger);
const GisStationsStaticDistrict = useSelector(selectGisStationsStaticDistrict); const GisStationsStaticDistrict = useSelector(selectGisStationsStaticDistrict);
const GisSystemStatic = useSelector(selectGisSystemStatic);
const gisSystemStaticStatus = useSelector(state => state.gisSystemStatic.status); const gisSystemStaticStatus = useSelector(state => state.gisSystemStatic.status);
const polylineEventsDisabled = useSelector(state => state.polylineEventsDisabled.disabled); const polylineEventsDisabled = useSelector(state => state.polylineEventsDisabled.disabled);
const mapLayersVisibility = useSelector(selectMapLayersState) || {}; const mapLayersVisibility = useSelector(selectMapLayersState) || {};
@@ -310,71 +314,85 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
useEffect(() => { useEffect(() => {
if (!map) return; if (!map) return;
// vorherige Marker & Polylinien vollständig bereinigen // Wenn TALAS nicht erlaubt ist, Polyline-Checkbox und Anzeige deaktivieren
if (!isTalasAllowed) {
if (polylineVisible) {
dispatch(setPolylineVisible(false));
}
cleanupPolylinesForMemory(polylines, map);
setPolylines([]);
return;
}
// vorherige Marker & Polylinien vollständig bereinigen
markers.forEach(marker => { markers.forEach(marker => {
marker.remove(); marker.remove();
}); });
cleanupPolylinesForMemory(polylines, map); cleanupPolylinesForMemory(polylines, map);
// Setze neue Marker und Polylinien mit den aktuellen Daten // Setze neue Marker und Polylinien mit den aktuellen Daten
const { markers: newMarkers, polylines: newPolylines } = setupPolylines( if (polylineVisible) {
map, const { markers: newMarkers, polylines: newPolylines } = setupPolylines(
linePositions, map,
lineColors, linePositions,
tooltipContents, lineColors,
setNewCoords, tooltipContents,
tempMarker, setNewCoords,
currentZoom, tempMarker,
currentCenter, currentZoom,
polylineVisible // kommt aus Redux currentCenter,
); polylineVisible // kommt aus Redux
);
newPolylines.forEach((polyline, index) => { newPolylines.forEach((polyline, index) => {
const tooltipContent = const tooltipContent =
tooltipContents[`${linePositions[index].idLD}-${linePositions[index].idModul}`] || tooltipContents[`${linePositions[index].idLD}-${linePositions[index].idModul}`] ||
"Die Linie ist noch nicht in Webservice vorhanden oder bekommt keine Daten"; "Die Linie ist noch nicht in Webservice vorhanden oder bekommt keine Daten";
polyline.bindTooltip(tooltipContent, { polyline.bindTooltip(tooltipContent, {
permanent: false, permanent: false,
direction: "auto", direction: "auto",
sticky: true, sticky: true,
offset: [20, 0], offset: [20, 0],
pane: "tooltipPane", pane: "tooltipPane",
}); });
polyline.on("mouseover", e => { polyline.on("mouseover", e => {
const tooltip = polyline.getTooltip(); const tooltip = polyline.getTooltip();
if (tooltip) { if (tooltip) {
const mousePos = e.containerPoint; const mousePos = e.containerPoint;
const mapSize = map.getSize(); const mapSize = map.getSize();
let direction = "right"; let direction = "right";
if (mousePos.x > mapSize.x - 100) { if (mousePos.x > mapSize.x - 100) {
direction = "left"; direction = "left";
} else if (mousePos.x < 100) { } else if (mousePos.x < 100) {
direction = "right"; direction = "right";
}
if (mousePos.y > mapSize.y - 100) {
direction = "top";
} else if (mousePos.y < 100) {
direction = "bottom";
}
tooltip.options.direction = direction;
polyline.openTooltip(e.latlng);
} }
});
if (mousePos.y > mapSize.y - 100) { polyline.on("mouseout", () => {
direction = "top"; polyline.closeTooltip();
} else if (mousePos.y < 100) { });
direction = "bottom";
}
tooltip.options.direction = direction;
polyline.openTooltip(e.latlng);
}
}); });
cleanupMarkers(markers, oms);
polyline.on("mouseout", () => { setMarkers(newMarkers);
polyline.closeTooltip(); setPolylines(newPolylines);
}); } else {
}); cleanupPolylinesForMemory(polylines, map);
cleanupMarkers(markers, oms); setPolylines([]);
setMarkers(newMarkers); }
setPolylines(newPolylines);
}, [ }, [
map, map,
linePositions, linePositions,
@@ -384,6 +402,7 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
newCoords, newCoords,
tempMarker, tempMarker,
polylineVisible, polylineVisible,
isTalasAllowed,
]); ]);
//-------------------------------------------- //--------------------------------------------

View File

@@ -26,6 +26,11 @@ function MapLayersControlPanel() {
const polylineVisible = useSelector(selectPolylineVisible); const polylineVisible = useSelector(selectPolylineVisible);
// Prüfen, ob TALAS (IdSystem 1) erlaubt ist
const isTalasAllowed = Array.isArray(GisSystemStatic)
? GisSystemStatic.some(system => system.IdSystem === 1 && system.Allow === 1)
: false;
const handlePolylineCheckboxChange = event => { const handlePolylineCheckboxChange = event => {
const checked = event.target.checked; const checked = event.target.checked;
dispatch(setPolylineVisible(checked)); dispatch(setPolylineVisible(checked));
@@ -258,6 +263,7 @@ function MapLayersControlPanel() {
checked={polylineVisible} // Zustand für Kabelstrecken checked={polylineVisible} // Zustand für Kabelstrecken
onChange={handlePolylineCheckboxChange} onChange={handlePolylineCheckboxChange}
id="polyline-checkbox" id="polyline-checkbox"
disabled={!isTalasAllowed || editMode}
/> />
<label htmlFor="polyline-checkbox" className="text-sm ml-2"> <label htmlFor="polyline-checkbox" className="text-sm ml-2">
Kabelstrecken Kabelstrecken

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "nodemap", "name": "nodemap",
"version": "1.1.300", "version": "1.1.301",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "nodemap", "name": "nodemap",
"version": "1.1.300", "version": "1.1.301",
"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.300", "version": "1.1.301",
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.3", "@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0", "@emotion/styled": "^11.13.0",

View File

@@ -3,7 +3,7 @@
"IdSystem": 1, "IdSystem": 1,
"Name": "TALAS", "Name": "TALAS",
"Longname": "Talas Meldestationen", "Longname": "Talas Meldestationen",
"Allow": 1, "Allow": 0,
"Icon": 1 "Icon": 1
}, },
{ {