diff --git a/CHANGELOG.md b/CHANGELOG.md index 80b577ce4..0b30f3249 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ Alle bedeutenden Änderungen an diesem Projekt werden in dieser Datei dokumentie --- +## [1.1.211] – 2025-06-02 + +### Hinzugefügt + +- Leaflet-Kontextmenü für Geräte-Marker (Stations/Geräte) aktiviert +- Menüpunkt „Station öffnen (Tab)“ erscheint nun direkt im Marker-Kontextmenü, basierend auf `marker.options.link` +- Redux-Abhängigkeit (`selectedDevice`) für Kontextmenü entfernt + +### Geändert + +- `addContextMenuToMarker` prüft nun direkt auf `marker.options.idDevice` und `link` anstatt globalen Zustand + +--- + ## [1.1.209] – 2025-06-02 ### Added diff --git a/README.md b/README.md index fd1bb2f0e..8cacdee3c 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,10 @@ NEXT_PUBLIC_BASE_PATH= - Integration als iFrame in TALAS.web - Versionsanzeige über `.env.local` - Testdaten per Mock-API möglich (nur in der Entwicklungsumgebung) +- Rechtsklick auf Geräte-Marker öffnet ein Kontextmenü mit: + - „Station öffnen (Tab)“ + - Koordinaten anzeigen + - Zoom & Zentrieren --- @@ -446,6 +450,7 @@ NEXT_PUBLIC_USE_MOCK_API=true - **Layer steuern:** GIS-Geräte-Layer (z. B. TALAS, WAGO, GMA) ein-/ausblenden über Checkboxen im rechten Panel (`MapLayersControlPanel`) - **Station auswählen:** Dropdown oben rechts - **Zentrieren:** Rechtsklick → "Hier zentrieren" +- **Geräte-Kontextmenü:** Rechtsklick auf Marker → „Station öffnen (Tab)“ --- diff --git a/config/appVersion.js b/config/appVersion.js index ce3bc0e76..77daa14ff 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.211"; +export const APP_VERSION = "1.1.212"; diff --git a/docs/utils/contextMenuUtils.md b/docs/utils/contextMenuUtils.md index 753c40008..97ef58941 100644 --- a/docs/utils/contextMenuUtils.md +++ b/docs/utils/contextMenuUtils.md @@ -12,3 +12,21 @@ Hilfsfunktionen zur Verwaltung des Kontextmenüs auf Kartenmarkern und Polylinie ## Zweck - Menüeinträge je nach Zustand und Marker-Art dynamisch generieren + +# 📌 Kontextmenü für Geräte-Marker (Leaflet) + +Ab Version 1.1.20 verfügen alle Geräte-Marker über ein kontextbasiertes Leaflet-Menü. + +## Inhalte + +- "Station öffnen (Tab)" → Öffnet Geräte-URL in neuem Tab +- Koordinaten anzeigen +- Zoom-Optionen +- Zentrieren auf Marker + +## Technische Umsetzung + +- Datei: `contextMenuUtils.js` +- Marker müssen `options.idDevice` und `options.link` gesetzt haben +- Registrierung erfolgt über `addContextMenuToMarker(marker)` +- Redux `selectedDevice` wird nicht mehr benötigt diff --git a/utils/contextMenuUtils.js b/utils/contextMenuUtils.js index 4f4fdacd0..20197675e 100644 --- a/utils/contextMenuUtils.js +++ b/utils/contextMenuUtils.js @@ -10,7 +10,7 @@ export function addContextMenuToMarker(marker) { const contextMenuItems = []; // ✅ Nur hinzufügen, wenn `selectedDevice` vorhanden ist - if (selectedDevice && marker.options?.idDevice) { + if (marker?.options?.idDevice && marker?.options?.link) { contextMenuItems.push({ text: "Station öffnen (Tab)", icon: "/img/screen_new.png", diff --git a/utils/devices/createAndSetDevices.js b/utils/devices/createAndSetDevices.js index 0bcbc757d..11bd28db1 100644 --- a/utils/devices/createAndSetDevices.js +++ b/utils/devices/createAndSetDevices.js @@ -6,6 +6,7 @@ import { setSelectedDevice } from "../../redux/slices/selectedDeviceSlice.js"; import { selectGisStationsStaticDistrict } from "../../redux/slices/webservice/gisStationsStaticDistrictSlice.js"; import { selectGisStationsStatusDistrict } from "../../redux/slices/webservice/gisStationsStatusDistrictSlice.js"; import { selectGisStationsMeasurements } from "../../redux/slices/webservice/gisStationsMeasurementsSlice.js"; +import { addContextMenuToMarker } from "../../utils/contextMenuUtils"; const determinePriority = (iconPath, priorityConfig) => { for (let priority of priorityConfig) { @@ -119,11 +120,18 @@ export const createAndSetDevices = async (systemId, setMarkersFunction, GisSyste marker.openPopup(); }); - marker.on("contextmenu", (event) => { - event.originalEvent?.preventDefault(); - marker.openPopup(); + marker.on("contextmenu", () => { + store.dispatch( + setSelectedDevice({ + id: station.IdLD, + name: station.Device, + area: station.Area_Name, + }) + ); }); + addContextMenuToMarker(marker); + return marker; });