Files
nodeMap/docs/utils/devices/createAndSetDevices.md
ISA 8894ce4411 docs: .env.local durch .env.production & .env.development ersetzt + Rücklinks & Footer ergänzt
- Alle Hinweise in Markdown-Dateien aktualisiert: Verwendung von `.env.production` und `.env.development` statt `.env.local`
- Footer-Abschnitte mit „Zurück zur Übersicht“-Link in allen relevanten `/docs/`-Dateien ergänzt
- Inhaltliche Korrekturen und Ergänzungen in Architektur-, Setup-, FAQ-, und Mockdaten-Dokumentation
- Inhaltsverzeichnis in `README.md` aktualisiert und funktionierende relative Links in Unterverzeichnissen sichergestellt
- Ziel: bessere Lesbarkeit, Navigation und Klarheit für neue Entwickler
2025-06-24 09:00:49 +02:00

113 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- /docs/utils/devices/createAndSetDevices.md -->
# 🧭 createAndSetDevices.js Geräte setzen und verwalten
## Zweck
Diese Datei erstellt Leaflet-Marker für aktive Geräte basierend auf Webservice-Daten
und konfiguriert Kontexteinträge für Interaktionen wie:
- Geräte-Popup anzeigen
- Station/Gerät per Klick in neue Tab öffnen -> Kontextmenü ->Item "Station öffnen (Tab)"
- Statusinformationen einblenden
- Redux-Aktionen für ausgewähltes Gerät auslösen
Die erzeugten Marker werden über `setMarkersFunction(markersData)` an die aufrufende Komponente
übergeben.
---
## Datenquellen
Die Daten stammen aus:
- `GisStationsStaticDistrict` (statische Stationsinfos)
- `GisStationsStatusDistrict` (Statusinformationen)
Sie werden entweder über echte Webservices oder Mock-Daten geladen.
---
## Besonderheiten
- Marker werden mit Prioritätsicons gerendert
- Redux-Slices:
- `selectedDeviceSlice` wird bei Hover gesetzt
- `lineVisibilitySlice` aktualisiert Linienstatus
- Leaflet-Kontextmenü (nur Marker) mit Menüeintrag:
„Station öffnen (Tab)“
---
## Dynamische URL mit Port-Logik
Die Station-Links im Kontextmenü nutzen keine feste URL mehr.
Stattdessen wird dynamisch unterschieden:
```js
const mode = process.env.NEXT_PUBLIC_API_PORT_MODE;
const baseUrl =
mode === "dev"
? `${window.location.protocol}//${window.location.hostname}:80/talas5/`
: `${window.location.origin}/talas5/`;
```
➡ Dadurch wird verhindert, dass bei jeder Server-IP `.env.development` oder ein Build nötig ist.
---
## Kontextmenüaktion
```js
window.open(`${baseUrl}cpl.aspx?ver=35&kue=24&id=${station.IdLD}`, "_blank");
```
---
## Schutz vor doppelten Kontextmenüs
Ein `contextMenuCreated`-Flag stellt sicher, dass pro Marker nur **ein** Kontextmenü erzeugt wird:
```js
if (!contextMenuCreated) {
contextMenuCreated = true;
marker.bindContextMenu({ ... });
}
```
➡ Verhindert Duplikate bei wiederholten Rechtsklicks
---
## Weitere Funktionen
- Popup-HTML enthält Statusanzeigen (Name, Farbe, Meldung)
- Marker werden auf Klick animiert (bounce-Effekt)
- Kontextmenüeinträge werden sauber entfernt bei Klick außerhalb
---
## Tests
- Marker wird bei gültigen Daten erzeugt
- Kontextmenü enthält nur **einen** Eintrag „Station öffnen“
- Popup zeigt korrekte Statusinformationen (Farben, Texte)
- Redux `setSelectedDevice(...)` wird korrekt aufgerufen
---
## Siehe auch
- `setupPolylines.js`
- `redux/slices/selectedDeviceSlice.js`
- Webservices: `fetchGisStationsStaticDistrict.js`, `fetchGisStationsStatusDistrict.js`
---
📄 Pfad: `/docs/frontend/utils/devices/createAndSetDevices.md`
---
[Zurück zur Übersicht](../../README.md)