diff --git a/config/appVersion.js b/config/appVersion.js index ba26cc27b..a4174f091 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.198"; +export const APP_VERSION = "1.1.199"; diff --git a/docs/docs/NodeMap.pdf b/docs/docs/NodeMap.pdf new file mode 100644 index 000000000..423f61acf Binary files /dev/null and b/docs/docs/NodeMap.pdf differ diff --git a/docs/docs/README.md b/docs/docs/README.md new file mode 100644 index 000000000..ae12a69bc --- /dev/null +++ b/docs/docs/README.md @@ -0,0 +1,14 @@ + + +# Entwickler-Dokumentation + +Willkommen in der technischen Dokumentation von NodeMap. + +📂 Wichtige Themen: + +- Webservices: `api/webservices.md` +- Redux / Fetch-Logik: `redux/api/fromWebService.md` +- Konfigurationsschema: `env/env.local.schema.md` +- Deployment: `deployment.md` + +Diese Doku ist für Entwickler, die an diesem Projekt mitarbeiten oder übernehmen. diff --git a/docs/docs/architecture.md b/docs/docs/architecture.md new file mode 100644 index 000000000..5c4bd8dab --- /dev/null +++ b/docs/docs/architecture.md @@ -0,0 +1,90 @@ + + +# 🧠 Architekturübersicht – NodeMap + +Dieses Dokument beschreibt die technische Gesamtarchitektur des Projekts **NodeMap**, einer kartenbasierten Webanwendung zur Anzeige, Bearbeitung und Verwaltung von GIS-Daten, POIs und Gerätestatus. + +--- + +## ⚙️ Technologie-Stack + +| Komponente | Beschreibung | +| --------------------- | ---------------------------------------------------------------------- | +| **Frontend** | React 18 + Next.js (App Router) | +| **State-Management** | Redux Toolkit mit zentralem Store, Thunks & Slices | +| **UI** | Tailwind CSS + Leaflet + React-Icons | +| **Backend-Anbindung** | Webservices via `WebServiceMap.asmx` (IIS) + lokale Next.js API für DB | +| **Datenbank** | MySQL (Produktiv & Entwicklung, z. T. via Docker) | +| **Deployment** | Windows Server (IIS), optional per `nssm` als Dienst | + +--- + +## 🗺️ Architekturüberblick + +``` ++------------------+ +------------------+ +------------------+ +| Leaflet Map | <---> | Redux Store | <---> | Webservices | +| (Interaktivität) | | (Status & Data) | | (IIS, .asmx) | ++------------------+ +------------------+ +------------------+ + ^ + | + v ++------------------+ +------------------+ +-------------------+ +| POI-Komponenten | <---> | Redux Slices | <---> | Next.js API-Routen| +| (Add/Edit) | | (z. B. poiSlice) | | (Datenbank) | ++------------------+ +------------------+ +-------------------+ +``` + +--- + +## 🔁 Datenfluss (Beispiel: POI anzeigen) + +1. Leaflet-Karte lädt bei `MapComponent` Mounting +2. Redux-Thunk `fetchPoiMarkersThunk` wird ausgelöst +3. Thunk ruft `fetchPoiDataService.js` (DB) oder Webservice (IIS) auf +4. Ergebnisse werden im Slice `readPoiMarkersStoreSlice` gespeichert +5. Komponenten lesen POI-Daten über `useSelector(...)` aus dem Store +6. POIs werden als Marker in Leaflet gesetzt + +--- + +## 📁 Schlüsselfunktionen & Module + +| Bereich | Datei/Modul | Aufgabe | +| ------------- | ----------------------------------------------- | ---------------------------------------- | +| Kartenlogik | `MapComponent.js` | Zentrale Initialisierung und Layer-Logik | +| Webservices | `services/webservice/` | Kommunikation mit TALAS V5 Webservice | +| Datenbank | `services/database/` | Zugriff auf lokale Next.js-API & DB | +| POIs | `AddPOIModal.js`, `PoiUpdateModal.js` | UI für POI-Erstellung & -Bearbeitung | +| Redux | `redux/slices/`, `redux/thunks/`, `redux/store` | Globaler State, API-Steuerung | +| Konfiguration | `.env.local`, `config.js`, dynamic URLs | IP, basePath, Ports | + +--- + +## 🧩 Besonderheiten + +- **Konfigurierbarer basePath:** + Pfad wie `/talas5` ist optional und kann per `NEXT_PUBLIC_BASE_PATH` in `.env.local` gesetzt werden. +- **Rechteabhängige UI:** + Funktionen (z. B. POI bearbeiten) basieren auf Benutzerrechten (`IdRight`) vom Server. +- **Zentrale Komponentensteuerung:** + Komponenten wie `MapLayersControlPanel` oder `CoordinatePopup` kontrollieren Layer & Interaktion. +- **Kontextmenü-Logik:** + Marker & Polylinien besitzen eigene Kontextmenüs – dynamisch zusammengesetzt und verwaltet. + +--- + +## 📦 Versionierung & Builds + +- Version ist in `appVersion.js` definiert → wird über `NEXT_PUBLIC_APP_VERSION` eingeblendet +- Build erfolgt via `npm run build`, Auslieferung über `.next/` +- Nicht benötigte Dateien wie `__tests__`, `docs/`, `scripts/` etc. werden nicht in den Build aufgenommen + +--- + +## 📚 Weiterführende Dokumentation + +- [`build-and-deploy.md`](./build-and-deploy.md) +- [`env.local.schema.md`](./env.local.schema.md) +- [`redux/slices/`](./redux/slices/) +- [`services/webservice/`](./services/webservice/) diff --git a/docs/docs/build-and-deploy.md b/docs/docs/build-and-deploy.md new file mode 100644 index 000000000..8ce4da561 --- /dev/null +++ b/docs/docs/build-and-deploy.md @@ -0,0 +1,46 @@ + + +# 🛠 Deployment & Build-Verhalten (Next.js) + +Diese Datei beschreibt, welche Projektdateien in den Build (`.next/`) aufgenommen werden und welche nicht. +Ziel: Klarheit für Onboarding, Deployment-ZIP-Erstellung oder CI/CD. + +--- + +## 📦 Wird beim `npm run build` in `.next/` gespeichert + +| Inhalt | Beschreibung | +| ---------------------- | -------------------------------------------------- | +| Kompilierte Seiten | Alle unter `/pages/` | +| API-Routen | Alles aus `pages/api/` | +| Assets aus `public/` | Werden im Build nicht verändert, aber ausgeliefert | +| CSS-Dateien (Tailwind) | Werden gebundelt und minimiert | +| `.env.local` | Wird eingelesen, aber nicht exportiert | +| JS/TS-Quellcode | Wird zu Client- und Server-Bundles kompiliert | + +--- + +## 🧹 Wird **nicht** in `.next/` aufgenommen + +| Ordner/Datei | Zweck / Grund | +| --------------------------- | -------------------------------------------- | +| `__tests__`, `__mocks__` | Nur lokal für Tests, nicht im Build | +| `cypress/` | End-to-End-Tests, nur für lokale Entwicklung | +| `scripts/` | Hilfsskripte, nicht für Runtime relevant | +| `docs/` | Dokumentation, nur für Entwickler | +| `README.md`, `CHANGELOG.md` | Doku – nicht erforderlich zur Laufzeit | +| `Jenkinsfile`, `.github/` | CI/CD – wird vom Buildsystem verwendet | + +--- + +## 📂 Empfohlene Struktur für Deployment (z. B. ZIP-Upload auf Server) + +Nur folgende Dateien/Ordner übertragen: + +```bash +.next/ +public/ +package.json +package-lock.json +.env.local +``` diff --git a/docs/docs/checklist.md b/docs/docs/checklist.md new file mode 100644 index 000000000..62133ddbe --- /dev/null +++ b/docs/docs/checklist.md @@ -0,0 +1,42 @@ + + +# 🧾 Projektpflege-Checkliste + +Diese Datei dient als persönliche Gedächtnisstütze bei der Entwicklung und Pflege des Projekts. + +Bevor du einen Feature-, Refactor- oder Bugfix-Commit abschließt, geh diese Liste durch: + +--- + +## 📝 Dokumentation + +- [ ] Ist `README.md` noch aktuell (Projektziel, Setup, Nutzung)? +- [ ] Wurde `CHANGELOG.md` ergänzt (mit Datum, Version, Änderung)? +- [ ] Wurde ggf. ein neuer Punkt in `/docs/` ergänzt oder aktualisiert? +- [ ] Sind Beispiel-URLs oder sensible Daten **nicht im Code**, sondern dokumentiert? + +--- + +## 📦 Konfiguration + +- [ ] Ist `.env.local` aktuell und vollständig (für Entwickler/Testserver)? +- [ ] Wird jede Konfiguration ausschließlich über `.env.local` gesteuert? + +--- + +## ✅ Codequalität & Git + +- [ ] Ist die Git-Commit-Message beschreibend und lesbar (z. B. `feat:`, `fix:`, `docs:`)? +- [ ] Wurden unnötige Debug-Logs entfernt oder per `NODE_ENV` abgesichert? +- [ ] Wurden Änderungen getestet (lokal, ggf. auf Testsystem)? + +--- + +## 🧭 Onboarding-freundlich? + +- [ ] Könnte ein neuer Entwickler mit den aktuellen Dokumenten verstehen, was wie funktioniert? +- [ ] Gibt es Hinweise zur Architektur, API-Flows oder Besonderheiten im Code? + +--- + +Du kannst diese Checkliste in jedem Projekt beibehalten und auf deine Arbeitsweise anpassen. diff --git a/docs/docs/components/README.md b/docs/docs/components/README.md new file mode 100644 index 000000000..53c7cd71e --- /dev/null +++ b/docs/docs/components/README.md @@ -0,0 +1,77 @@ + + +# 🧩 `components/` – Übersicht über alle UI-Komponenten + +Dieses Verzeichnis enthält die gesamten React-Komponenten der TALAS-Kartenanwendung. +Sie sind thematisch gegliedert in Teilbereiche für Kontextmenüs, POIs, Polylinien, Modale und die zentrale `MapComponent`. + +--- + +## 📁 Strukturübersicht + +```bash +components/ +├── contextmenu/ # Komponenten für rechte Maustaste & Kontextaktionen +│ ├── CoordinatePopup.js +│ └── useMapContextMenu.js + +├── gisPolylines/ # Polylinien (Kabelstrecken) +│ ├── PolylineContextMenu.js +│ └── icons/ +│ ├── CircleIcon.js +│ ├── EndIcon.js +│ ├── StartIcon.js +│ └── SupportPointIcons.js + +├── icons/devices/overlapping/ # Zusätzliche Overlap-Icons für Geräte +│ └── PlusRoundIcon.js + +├── mainComponent/ # Hauptkomponenten für Karteninitialisierung +│ ├── MapComponent.js +│ └── hooks/ +│ └── useInitializeMap.js + +├── pois/ # POI-spezifische Modale +│ ├── AddPOIModal.js +│ └── PoiUpdateModal.js + +├── uiWidgets/ # UI-Widgets +│ ├── CoordinateInput.js +│ ├── VersionInfoModal.js +│ ├── TestScript.js +│ └── mapLayersControlPanel/ +│ ├── EditModeToggle.js +│ └── MapLayersControlPanel.js +``` + +--- + +## 🔎 Beschreibung der Hauptbereiche + +### `contextmenu/` + +Rechtsklick-Menüs für Marker, POIs, Polylinien. Steuert Anzeige & Verhalten. + +### `gisPolylines/` + +Komponenten für das Zeichnen, Bearbeiten und Interagieren mit Linien/Strecken. + +### `mainComponent/` + +Zentrale Leaflet-Map-Logik & Initialisierung via `MapComponent` und `useInitializeMap`. + +### `pois/` + +Modale für das Hinzufügen und Bearbeiten von POIs (Points of Interest). + +### `uiWidgets/` + +Komponenten wie Eingabefelder für Koordinaten-Suche, Infoboxen und Control Panel für Geräte Layers . + +--- + +## ✅ Besonderheiten + +- Verwendet **Tailwind CSS** für Styling +- Integration mit Redux, Leaflet, OverlappingMarkerSpiderfier +- Vollständig modular & testbar aufgebaut diff --git a/docs/docs/components/TestScript.md b/docs/docs/components/TestScript.md new file mode 100644 index 000000000..c8184a986 --- /dev/null +++ b/docs/docs/components/TestScript.md @@ -0,0 +1,44 @@ + + +# 🧪 TestScript.js + +Ein einfaches React-Testskript zur Laufzeitüberprüfung von Codefragmenten in `setupPolylines.js`. + +## Zweck + +Dieses Skript durchsucht die geladene `setupPolylines.js`-Datei (per `raw-loader`) nach bestimmten Kontextmenüeinträgen: + +- „Stützpunkt entfernen“ +- „Stützpunkt hinzufügen“ + +## Vorgehen + +- Lädt `setupPolylines.js` als Text via `!!raw-loader!` +- Nutzt reguläre Ausdrücke zur Prüfung +- Gibt Ergebnisse farblich formatiert in der Konsole aus + +## Ausgaben + +| Zustand | Beschreibung | +|-------------|-----------------------------------------------------| +| ✅ Test bestanden | Der gesuchte Text wurde gefunden | +| ❌ Test fehlgeschlagen | Der gesuchte Text fehlt in der Datei | +| ℹ️ Info | Neutrale Zusatzinformationen in der Konsole | + +## Besonderheiten + +- Kein visuelles UI – Rückmeldung nur über `console.log` +- Eignet sich als Dev-Hilfe für Refactoring oder PR-Checks + +## Beispielausgabe + +```plaintext +✔ Test bestanden: Der Text für 'Stützpunkt entfernen' wurde gefunden. +ℹ️ Info: Überprüfung abgeschlossen. +``` + +## Hinweise + +- Wird automatisch beim Mount (via `useEffect`) ausgeführt +- `return null` → keine sichtbare Ausgabe + diff --git a/docs/docs/components/contextmenu/CoordinatePopup.md b/docs/docs/components/contextmenu/CoordinatePopup.md new file mode 100644 index 000000000..05048fe80 --- /dev/null +++ b/docs/docs/components/contextmenu/CoordinatePopup.md @@ -0,0 +1,32 @@ + + +# 📌 CoordinatePopup.js + +Zeigt ein modales Fenster mit Koordinateninformationen an, z. B. aus einem Kontextmenü heraus. + +## Features + +- Darstellung eines Koordinatenwerts (`lat,lng`) +- Kopieren in die Zwischenablage (Clipboard API + Fallback) +- Modal zentriert mit Tailwind CSS +- Zwei Buttons: „Kopieren“ und „Schließen“ + +## Props + +| Name | Typ | Beschreibung | +| ------------- | ---------- | -------------------------------------------- | +| `isOpen` | `boolean` | Steuert Sichtbarkeit des Modals | +| `coordinates` | `string` | Zu zeigende Koordinaten (z. B. `"53.2,8.1"`) | +| `onClose` | `function` | Wird bei Klick auf „Schließen“ ausgelöst | + +## Design + +- Tailwind-Klassen für zentriertes Layout (`fixed`, `inset-0`, `z-50`) +- Leicht animierter Button-Hover + +## Interne Logik + +- Nutzt `navigator.clipboard.writeText` oder Fallback mit `document.execCommand("copy")` +- Stoppt Event-Bubbling, um Klick außerhalb zu erkennen + +🔙 [Zurück zur Übersicht](./README.md) diff --git a/docs/docs/components/contextmenu/README.md b/docs/docs/components/contextmenu/README.md new file mode 100644 index 000000000..9a2cff810 --- /dev/null +++ b/docs/docs/components/contextmenu/README.md @@ -0,0 +1,43 @@ + + +# 🖱️ `contextmenu/` – Kontextmenü-Komponenten + +Dieses Verzeichnis enthält Komponenten und Hooks zur Anzeige und Steuerung von Kontextmenüs in der Leaflet-Kartenanwendung. Sie dienen der Interaktion mit POIs, Koordinaten und Layer-Objekten per Rechtsklick. + +--- + +## 📂 Enthaltene Dateien + +| Datei | Beschreibung | +| ------------------------------------------------ | ---------------------------------------------------------------------- | +| [`CoordinatePopup.js`](./CoordinatePopup.md) | Zeigt ein kleines Kontextfenster mit Koordinaten und Copy-Funktion | +| [`useMapContextMenu.js`](./useMapContextMenu.md) | Hook zur Initialisierung und Verwaltung des Kontextmenüs auf der Karte | + +--- + +## 🔄 Verwendung + +Diese Komponenten sind typischerweise eingebunden in: + +- [`MapComponent.js`](../mainComponent/MapComponent.md) +- [`PolylineContextMenu.js`](../gisPolylines/PolylineContextMenu.md) +- Marker- und Linienfunktionen aus `setupDevices`, `setupPolylines` + +--- + +## 🎯 Ziel + +Ermöglicht einfache Benutzerinteraktion mit: + +- Geräten +- Koordinaten +- POIs +- Streckenabschnitten + +--- + +## 📚 Weitere Dokumentation + +Alle Markdown-Dateien für Komponenten befinden sich im `/docs/components/contextmenu/` Verzeichnis. + +🔙 [Zurück zu `components`](../README.md) diff --git a/docs/docs/components/contextmenu/useMapContextMenu.md b/docs/docs/components/contextmenu/useMapContextMenu.md new file mode 100644 index 000000000..4c88560ee --- /dev/null +++ b/docs/docs/components/contextmenu/useMapContextMenu.md @@ -0,0 +1,30 @@ + + +# 🖱️ useMapContextMenu.js + +Initialisiert Kontextmenüeinträge für die Leaflet-Karte. +Wird typischerweise in `initializeMap()` oder `MapComponent` verwendet. + +## Kontextmenüeinträge + +| Eintrag | Funktion | +| -------------------- | ----------------------------------------------- | +| Koordinaten anzeigen | Öffnet `CoordinatePopup` mit aktueller Position | +| Reinzoomen | Zoomt 3 Stufen näher an das Zentrum heran | +| Rauszoomen | Zoomt 3 Stufen heraus | +| Hier zentrieren | Verschiebt Kartenzentrum auf Klickposition | +| POI hinzufügen | (nur bei `editMode=true`) öffnet POI-Dialog | + +## Parameter + +```js +addItemsToMapContextMenu(map, menuItemAdded, setMenuItemAdded, setShowCoordinatesModal, setShowPoiModal, setPopupCoordinates, openPopupWithCoordinates); +``` + +## Besonderheiten + +- Prüft auf `localStorage.editMode` für POI-Eintrag +- FlyTo-Animationen für Zoom-Vorgänge mit dynamischer Dauer +- Modularer Aufbau: `openPopupWithCoordinates` wird extern übergeben + + 🔙 [Zurück zu contextmenu ](./README.md) diff --git a/docs/docs/components/gisPolylines/PolylineContextMenu.md b/docs/docs/components/gisPolylines/PolylineContextMenu.md new file mode 100644 index 000000000..32ab16ae0 --- /dev/null +++ b/docs/docs/components/gisPolylines/PolylineContextMenu.md @@ -0,0 +1,34 @@ + + +# 📐 PolylineContextMenu.js + +Ein einfaches benutzerdefiniertes Kontextmenü zur Interaktion mit Linien (Polylinien) auf der Karte. + +## Zweck + +Das Menü erlaubt folgende Interaktionen: + +- ➕ „Stützpunkt hinzufügen“ +- ➖ „Stützpunkt entfernen“ +- ❌ „Schließen“ + +Wird dynamisch positioniert anhand der Klickkoordinaten (`position.x`, `position.y`). + +## Props + +| Prop | Typ | Beschreibung | +|---------------|-----------|----------------------------------------------------| +| `position` | `{x, y}` | Position in Pixelkoordinaten (z. B. von Mausereignis) | +| `onAddPoint` | `function`| Handler für „Stützpunkt hinzufügen“ | +| `onRemovePoint` | `function` | Handler für „Stützpunkt entfernen“ | +| `onClose` | `function`| Handler zum Schließen des Menüs | + +## Styling + +- Absolut positioniertes `div` +- Weißer Hintergrund, schwarzer Rahmen +- Kein Tailwind – purer Inline-Style + +## Verwendung + +Eingebettet z. B. in `setupPolylines.js` oder `PolylineLayerManager`, um rechte Mausklicks auf Linien zu behandeln. diff --git a/docs/docs/components/gisPolylines/icons/CircleIcon.md b/docs/docs/components/gisPolylines/icons/CircleIcon.md new file mode 100644 index 000000000..6b063073c --- /dev/null +++ b/docs/docs/components/gisPolylines/icons/CircleIcon.md @@ -0,0 +1,16 @@ + + +# 🔘 CircleIcon.js + +Ein einfacher, grauer runder Marker als Stützpunkt in einer Polyline. + +## Eigenschaften + +- Stil: grauer Kreis mit schwarzem Rand +- Größe: 10×10 px, IconSize 25×25 px (wegen Klickfläche) +- Klasse: `custom-circle-icon` + +## Verwendung + +Wird in Polylinien als Zwischenpunkt gesetzt. Inaktiv, aber sichtbar. + diff --git a/docs/docs/components/gisPolylines/icons/EndIcon.md b/docs/docs/components/gisPolylines/icons/EndIcon.md new file mode 100644 index 000000000..28189bd5a --- /dev/null +++ b/docs/docs/components/gisPolylines/icons/EndIcon.md @@ -0,0 +1,15 @@ + + +# 🔲 EndIcon.js + +Ein Viereck zur Markierung des Endpunkts einer Polyline. + +## Eigenschaften + +- Stil: graues Quadrat mit schwarzem Rand +- Größe: 14×14 px +- Klasse: `custom-end-icon` + +## Verwendung + +Wird am letzten Punkt einer Linie gesetzt, z. B. `lineData.coordinates[line.length - 1]` diff --git a/docs/docs/components/gisPolylines/icons/StartIcon.md b/docs/docs/components/gisPolylines/icons/StartIcon.md new file mode 100644 index 000000000..a09d2a3d9 --- /dev/null +++ b/docs/docs/components/gisPolylines/icons/StartIcon.md @@ -0,0 +1,15 @@ + + +# 🔺 StartIcon.js + +Ein SVG-Dreieck zur Markierung des Startpunkts einer Polyline. + +## Eigenschaften + +- Schwarzes Dreieck mit grauem Overlay (Polygon SVG) +- Größe: 18×18 px +- Klasse: `custom-start-icon` + +## Verwendung + +Wird am ersten Punkt einer Polyline platziert. diff --git a/docs/docs/components/gisPolylines/icons/SupportPointIcons.md b/docs/docs/components/gisPolylines/icons/SupportPointIcons.md new file mode 100644 index 000000000..1e0e102a6 --- /dev/null +++ b/docs/docs/components/gisPolylines/icons/SupportPointIcons.md @@ -0,0 +1,20 @@ + + +# ➕➖ SupportPointIcons.js + +Definiert zwei Icons für interaktive Stützpunkte in einer Polyline: + +## AddSupportPointIcon + +- Grüner Kreis mit weißem Rand und Pluszeichen +- `iconSize`: 24×24 px + +## RemoveSupportPointIcon + +- Roter Kreis mit weißem Rand und Minuszeichen +- `iconSize`: 24×24 px + +## Verwendung + +- Hinzufügen/Entfernen von Zwischenpunkten in der Bearbeitungsansicht (editMode) +- Marker erscheinen z. B. bei Maus-Hover oder per Kontextmenü diff --git a/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md b/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md new file mode 100644 index 000000000..42d3b2569 --- /dev/null +++ b/docs/docs/components/icons/devices/overlapping/PlusRoundIcon.md @@ -0,0 +1,26 @@ + + +# ➕ PlusRoundIcon.js + +Ein einfaches Leaflet-Icon, das ein rundes Pluszeichen darstellt. +Wird für zusätzliche UI-Markierungen auf Geräten oder überlappenden Icons verwendet. + +## Eigenschaften + +| Attribut | Wert | +|--------------|--------------------| +| `iconUrl` | `/img/plus_round.png` | +| `iconSize` | `[22, 22]` | +| `iconAnchor` | `[25, 55]` | +| `className` | `absolute top-0 left-0 z-10` (Tailwind) + +## Verwendung + +- Dient als Overlay-Symbol, z. B. für „Gerät hinzufügen“ oder zur Darstellung über bestehenden Icons +- Durch die `z-10`-Klasse immer im Vordergrund sichtbar +- Kombinierbar mit OverlappingMarkerSpiderfier oder Marker-Gruppen + +## Hinweis + +- Die Bilddatei `/img/plus_round.png` muss vorhanden sein +- Kann bei Bedarf dynamisch durch ein anderes Icon ersetzt werden diff --git a/docs/docs/components/mainComponent/MapComponent.md b/docs/docs/components/mainComponent/MapComponent.md new file mode 100644 index 000000000..7099b50c9 --- /dev/null +++ b/docs/docs/components/mainComponent/MapComponent.md @@ -0,0 +1,71 @@ + + +# 🗺️ MapComponent.js + +Die zentrale React-Komponente zur Darstellung und Steuerung der Leaflet-Karte. +Bindet alle Marker, Layer, POIs, Linien und das Kontextmenü dynamisch ein. + +--- + +## 🎯 Zweck + +- Initialisiert die Leaflet-Karte (`useInitializeMap`) +- Bindet Marker & Polylinien über Redux und eigene Hooks +- Steuerung über Redux-Slices wie `selectedArea`, `zoomTrigger`, `polylineVisible` +- Kontextmenüs für Karte, POIs, Polylinien +- Unterstützung für Editierfunktionen über `editMode` (localStorage) + +--- + +## 🧱 Hauptbestandteile + +- `useEffect`-Hooks zum Laden und Aktualisieren von: + - Kartenlayern, POIs, Linien, Rechte, Systeme, Positionen +- Marker-Logik für 15+ Layergruppen (TALAS, ECI, GMA, etc.) +- Marker-Overlapping mit `OverlappingMarkerSpiderfier` +- Kontextmenüs (Karte & Polylinie) +- UI-Komponenten: + - `MapLayersControlPanel` + - `CoordinateInput` + - `CoordinatePopup` + - `AddPOIModal`, `PoiUpdateModal`, `VersionInfoModal` + +--- + +## 🧠 Zustand & Redux + +Verwendet umfangreiche Redux-Slices zur Steuerung von: + +- Linienstatus, POI-Typen, POI-Icons +- Gerätesysteme & Rechte +- Sichtbarkeit einzelner Layergruppen +- Aktuelle Selektion (Area, Gerät, POI) + +--- + +## 🔧 Lokale Steuerung + +- EditMode wird aus `localStorage` gelesen +- Karte speichert Zoom & Center dauerhaft im Browser +- Kontextmenü-Einträge ändern sich je nach Rechten & Modus + +--- + +## 🧪 Besonderheiten + +- Fehlerbehandlung für `contextmenu`-Fehler eingebaut → Auto-Neuladen +- Alle Marker-Updates mit Overlapping-Check & Z-Index-Steuerung +- Linien enthalten dynamische Tooltips mit `tooltipContents` +- Initiale Datenabfrage über Redux-Thunk-Kaskade + +--- + +## 🔗 Abhängigkeiten + +- Leaflet, OverlappingMarkerSpiderfier, React-Toastify +- Redux Toolkit (Thunks + Selectors) +- Tailwind CSS für visuelles Layout + +--- + +📄 Pfad: `/components/mainComponent/MapComponent.js` diff --git a/docs/docs/components/mainComponent/hooks/useInitializeMap.md b/docs/docs/components/mainComponent/hooks/useInitializeMap.md new file mode 100644 index 000000000..05b5acfa9 --- /dev/null +++ b/docs/docs/components/mainComponent/hooks/useInitializeMap.md @@ -0,0 +1,53 @@ + + +# 🪄 useInitializeMap.js + +Custom React-Hook zur Initialisierung der Leaflet-Karte. +Ermöglicht die einfache Übergabe aller nötigen Parameter und abstrahiert die `initializeMap(...)`-Logik. + +--- + +## 📦 Zweck + +- Führt `initializeMap(...)` nur **einmal** aus, wenn `mapRef` existiert und `map === null` +- Kapselt die Initialisierung in ein `useEffect` + +--- + +## 🔧 Parameter + +| Name | Typ | Beschreibung | +|--------------------------|------------|---------------------------------------------------| +| `map` | `LeafletMap` (Zustand) | Wird initialisiert, wenn `null` | +| `mapRef` | `ref` | Referenz auf `
` | +| `setMap` | `function` | Callback zum Setzen der Karteninstanz | +| `setOms` | `function` | Callback für OverlappingMarkerSpiderfier | +| `setMenuItemAdded` | `function` | Wird genutzt, um mehrfaches Menü-Setup zu verhindern | +| `addItemsToMapContextMenu` | `function` | Logik zum Hinzufügen von Kontextmenüeinträgen | +| `hasRights` | `boolean` | Steuerung, ob POI-Menüs angezeigt werden dürfen | +| `setPolylineEventsDisabled` | `function` | Aktiviert/Deaktiviert Polyline-Events global | + +--- + +## 🌐 Verwendung + +In `MapComponent.js`: + +```js +useInitializeMap( + map, + mapRef, + setMap, + setOms, + setMenuItemAdded, + addItemsToMapContextMenu, + hasRights, + (value) => dispatch(setDisabled(value)) +); +``` + +--- + +## 📁 Quelle + +Wrappt `initializeMap()` aus `/utils/initializeMap.js` diff --git a/docs/docs/components/pois/AddPOIModal.md b/docs/docs/components/pois/AddPOIModal.md new file mode 100644 index 000000000..0a3017925 --- /dev/null +++ b/docs/docs/components/pois/AddPOIModal.md @@ -0,0 +1,28 @@ + + +# ➕ AddPOIModal.js + +Zeigt ein modales Formular an, um einen neuen POI auf der Karte zu erstellen. +Die Koordinaten (`latlng`) werden automatisch übernommen. + +## Funktionen + +- POI-Name, Typ und zugehöriges Gerät auswählbar +- Koordinatenanzeige (`lat`, `lng`) +- Dynamisches Laden der Gerätedaten und POI-Typen +- Fehleranzeige bei fehlgeschlagenem Speichern +- Löst `addPoiThunk` + Refresh-Trigger (`incrementTrigger`) aus + +## Props + +| Prop | Typ | Beschreibung | +|----------|-----------|--------------------------------------------------| +| `onClose` | `function` | Schließt das Modal | +| `map` | `Leaflet` | (optional) zum Schließen evtl. offener Popups | +| `latlng` | `object` | Koordinaten für den neuen POI | + +## Redux + +- `fetchPoiTypThunk`, `fetchPoiIconsDataThunk` +- `addPoiThunk`, `resetAddPoiStatus` + diff --git a/docs/docs/components/pois/PoiUpdateModal.md b/docs/docs/components/pois/PoiUpdateModal.md new file mode 100644 index 000000000..df17e5ec7 --- /dev/null +++ b/docs/docs/components/pois/PoiUpdateModal.md @@ -0,0 +1,29 @@ + + +# ✏️ PoiUpdateModal.js + +Ein Dialog zur Aktualisierung oder Löschung bestehender POIs. + +## Features + +- Zeigt aktuellen Namen, Beschreibung, Gerät und Typ +- Gerät und Typ auswählbar via `react-select` +- Unterstützt Löschen und Speichern von POIs +- Eingebundene Sicherheitsabfrage bei Löschen + +## Props + +| Prop | Typ | Beschreibung | +|------------|-----------|---------------------------------------| +| `onClose` | `function`| Schließt das Modal | +| `poiData` | `object` | Bestehende POI-Daten zur Bearbeitung | + +## Redux + +- `updatePoiThunk`, `deletePoiThunk` +- `fetchLocationDevicesThunk`, `fetchPoiTypThunk` + +## Technisches + +- Dynamische Gerätegruppenfilterung basierend auf `mapLayersVisibility` +- Formfelder mit `react-select` für bessere UX diff --git a/docs/docs/components/uiWidgets/CoordinateInput.md b/docs/docs/components/uiWidgets/CoordinateInput.md new file mode 100644 index 000000000..ebbb81513 --- /dev/null +++ b/docs/docs/components/uiWidgets/CoordinateInput.md @@ -0,0 +1,101 @@ + + +# 📍 CoordinateInput.js + +Die Komponente `CoordinateInput` stellt ein einfaches Eingabefeld für geografische Koordinaten (Latitude, Longitude) bereit. +Sie dient typischerweise dazu, einen bestimmten Punkt auf der Karte zu fokussieren bzw. zu markieren. + +--- + +## 🔧 Pfad + +```bash +/components/uiWidgets/CoordinateInput.js +``` + +--- + +## 🎯 Zweck + +- Eingabe von Koordinaten (z. B. `53.2,8.1`) +- Übergabe dieser Koordinaten an eine Callback-Funktion zur weiteren Verarbeitung +- Positioniert sich dauerhaft in der linken oberen Ecke der Seite (z. B. zur schnellen Navigation) + +--- + +## ⚙️ Props + +| Prop | Typ | Beschreibung | +| --------------------- | ---------- | ------------------------------------------------------------------------------------- | +| `onCoordinatesSubmit` | `function` | Wird beim Abschicken des Formulars mit dem eingegebenen Koordinaten-String aufgerufen | + +--- + +## 🧩 Interne Logik + +```js +const [coordinates, setCoordinates] = useState(""); +``` + +- Der Eingabewert wird im lokalen State gespeichert +- Beim Submit (`onSubmit`) wird `onCoordinatesSubmit(coordinates)` aufgerufen, wenn gesetzt + +--- + +## 🧰 UI-Aufbau + +- Eingabefeld für Text: Erwartet `lat,lng` +- Button: „Zu Marker zoomen“ +- Position: `fixed top-5 left-5` → dauerhaft sichtbar + +--- + +## 🎨 Gestaltung (Tailwind CSS) + +| Element | Klassen | +| --------- | ---------------------------------------------------------------- | +| Container | `fixed top-5 left-5 z-50 bg-white shadow-lg rounded-lg p-4 w-72` | +| Input | `border p-2 rounded w-full mb-2` | +| Button | `bg-blue-500 text-white p-2 rounded w-full hover:bg-blue-600` | + +--- + +## 🧪 Testfälle + +| Eingabe | Erwartung | +| -------------------------- | --------------------------------------------------------- | +| `53.2,8.1` | Callback `onCoordinatesSubmit("53.2,8.1")` wird ausgelöst | +| Leer | Callback wird ausgelöst mit leerem String | +| Buttonklick | Löst `handleSubmit()` aus | +| Enter-Taste im Eingabefeld | Löst ebenfalls Submit aus | + +--- + +## 💡 Erweiterungsideen + +- Validierung des Formats (`lat,lng`) vor dem Absenden +- Automatisches Zentrieren der Leaflet-Karte in der Callback-Funktion +- Optionale Markierung des Punkts auf der Karte + +--- + +## 📄 Verwendung + +Beispiel in einer Map-Komponente: + +```jsx + { + const [lat, lng] = coords.split(",").map(Number); + map.setView([lat, lng], 16); // Leaflet + }} +/> +``` + +--- + +## 📦 Verwandte Komponenten + +- `MapComponent.js` – kann die übergebenen Koordinaten zur Zentrierung oder Marker-Erstellung nutzen + +--- diff --git a/docs/docs/components/uiWidgets/VersionInfoModal.md b/docs/docs/components/uiWidgets/VersionInfoModal.md new file mode 100644 index 000000000..e211afb8e --- /dev/null +++ b/docs/docs/components/uiWidgets/VersionInfoModal.md @@ -0,0 +1,92 @@ + + +# 🪪 VersionInfoModal.js + +Das `VersionInfoModal` ist ein modales Fenster zur Anzeige von Unternehmensinformationen und der aktuellen App-Version. +Es wird meist im Footer oder als Info-Schaltfläche in der Benutzeroberfläche eingeblendet. + +--- + +## 🔧 Pfad + +```bash +/components/uiWidgets/VersionInfoModal.js +``` + +--- + +## 🎯 Zweck + +Die Komponente informiert Nutzer über: + +- Die **aktuelle TALAS.Map Version** +- Die **Firmenadresse und Kontaktdaten** der Littwin Systemtechnik GmbH & Co. KG +- Eine zentral platzierte Grafik mit dem TALAS-Logo +- Eine Schaltfläche zum Schließen des Modals + +--- + +## ⚙️ Props + +| Prop | Typ | Beschreibung | +| ----------------------- | ---------- | -------------------------------------------------------------- | +| `showVersionInfoModal` | `boolean` | Steuert, ob das Modal angezeigt wird | +| `closeVersionInfoModal` | `function` | Callback zum Schließen des Modals | +| `APP_VERSION` | `string` | Versionstext (z. B. `1.1.188`), meist aus `.env.local` geladen | + +--- + +## 💡 Verhalten + +- Wird `showVersionInfoModal` auf `true` gesetzt, erscheint das Modal zentriert über einem halbtransparenten Overlay +- Klick auf den Hintergrund (schwarzes Overlay) oder auf „Schließen“ führt `closeVersionInfoModal()` aus + +--- + +## 🧩 Inhalt im Modal + +```plaintext ++--------------------------+ +| [Logo_TALAS.png] | +| Littwin GmbH Adresse | +| Telefon & E-Mail | +| Version: 1.1.188 | +| [Schließen] Button | ++--------------------------+ +``` + +--- + +## 🎨 Gestaltung + +- Modal-Layout mit Tailwind CSS (`fixed`, `z-50`, `bg-white`, `rounded`, `shadow`) +- Schaltfläche `Schließen` reagiert auf Hover mit Farbwechsel (`hover:bg-blue-700`) +- Design folgt der UI-Ästhetik von TALAS.web + +--- + +## 🧪 Testfälle + +| Bedingung | Erwartung | +| ------------------------------- | ----------------------------------------- | +| `showVersionInfoModal = true` | Modal wird angezeigt | +| Klick auf Hintergrund | Modal wird geschlossen | +| Klick auf „Schließen“-Button | Modal wird geschlossen | +| Version `APP_VERSION = 1.1.188` | Text „TALAS.Map Version 1.1.188“ sichtbar | + +--- + +## 📦 Verknüpfte Dateien + +- `.env.local` enthält z. B. `NEXT_PUBLIC_APP_VERSION=1.1.188` +- Aufruf in `Footer` oder `Layout` zur Anzeige bei Klick auf „Version“ + +--- + +## 🛠 Verbesserungsideen + +- ESC-Taste als Schließen-Funktion ergänzen +- Option für dynamische Anzeige von Changelog-Link +- Automatischer Import von Version via `process.env.NEXT_PUBLIC_APP_VERSION` + +--- diff --git a/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md b/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md new file mode 100644 index 000000000..237bf2d8c --- /dev/null +++ b/docs/docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md @@ -0,0 +1,85 @@ + + +# ✏️ EditModeToggle.js + +Die Komponente `EditModeToggle` stellt einen interaktiven Umschalter für den Bearbeitungsmodus bereit. +Sie ermöglicht das Ein- und Ausschalten des Modus, in dem POIs, Polylines (Strecken) und Bereiche bearbeitet werden können. + +--- + +## 📦 Pfad + +```bash +/components/uiWidgets/mapLayersControlPanel/EditModeToggle.js +``` + +--- + +## 🧩 Zweck + +Der Bearbeitungsmodus wirkt sich auf die Interaktivität der Map aus: + +- Wenn **aktiv**: + - Checkboxen für Layer sind deaktiviert + - POI-Funktionen (Hinzufügen, Verschieben, Löschen) werden ermöglicht +- Wenn **inaktiv**: + - Keine Bearbeitung möglich + - UI ist auf Betrachtung beschränkt + +--- + +## 🖱 Verhalten + +Beim Klick auf das Icon: + +1. Wird der lokale Zustand `editMode` umgeschaltet +2. `localStorage` speichert den neuen Status (`true` oder `false`) +3. Die Seite wird neu geladen (`window.location.reload()`), um globale Effekte zu aktivieren + +--- + +## 🧠 Interner Zustand + +```js +const [editMode, setEditMode] = useState(() => localStorage.getItem("editMode") === "true"); +``` + +- Initialisiert aus `localStorage` +- Persistente Speicherung des Zustands browserseitig +- Aufruf in anderen Komponenten (z. B. `MapLayersControlPanel.js`) basiert ebenfalls auf diesem Wert + +--- + +## 🧰 UI-Darstellung + +- Verwendet **Material-UI-Icons**: + - 🟢 `ModeEditIcon`: Bearbeitungsmodus **aus** → wird angeboten zum **Aktivieren** + - 🔴 `EditOffIcon`: Bearbeitungsmodus **ein** → wird angeboten zum **Deaktivieren** +- Tooltip informiert den Nutzer über die jeweilige Aktion + +--- + +## 🧪 Testfälle + +| Zustand | Erwartetes Verhalten | +| ------------------ | ------------------------------------------------------ | +| `editMode = false` | Icon: ✏️ → Tooltip: „Bearbeitungsmodus aktivieren“ | +| `editMode = true` | Icon: 🚫✏️ → Tooltip: „Bearbeitungsmodus deaktivieren“ | +| Klick auf Icon | Status umschalten, Seite neu laden | + +--- + +## 💡 Erweiterungsideen + +- 🔄 Statt `window.location.reload()` → globalen Zustand über Redux-Dispatch steuern +- 📢 Feedback-Toast nach Umschalten anzeigen (z. B. „Bearbeitungsmodus aktiviert“) +- 🧩 Integration in Redux-Store zur globalen Synchronisierung ohne Reload + +--- + +## 📄 Verwandte Komponenten + +- `MapLayersControlPanel.js`: liest `localStorage.editMode` und deaktiviert Layer-Checkboxen im aktiven Modus +- `PoiUpdateModal`, `AddPOIModal`: nutzen den Bearbeitungsmodus für UI-Freigabe + +--- diff --git a/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md b/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md new file mode 100644 index 000000000..8f47f7b7e --- /dev/null +++ b/docs/docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md @@ -0,0 +1,150 @@ + + +# 🧭 MapLayersControlPanel.js + +Dieses UI-Widget zeigt eine interaktive Steuereinheit für Layer, POIs und Stationsbereiche auf der rechten Seite der Karte. +Es ist vollständig an den Redux-Store angebunden und reagiert auf Änderungen der Layer-Sichtbarkeit, Bearbeitungsmodus und Stationsauswahl. + +--- + +## 🔧 Pfad + +```bash +/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.js +``` + +--- + +## 📌 Zweck + +Das `MapLayersControlPanel` ermöglicht Nutzern: + +- Die Auswahl eines Stationsbereichs (Dropdown) +- Das Aktivieren/Deaktivieren einzelner GIS-Systeme (Checkboxen) +- Das Anzeigen von POIs oder Kabelstrecken (TALAS-spezifisch) +- Das Ein-/Ausschalten des Bearbeitungsmodus +- Die Steuerung der Karten-Zentrierung über ein Icon + +--- + +## 🧠 Verwendete Redux-Slices + +| Slice | Zweck | +| -------------------------------- | ----------------------------------------------------------- | +| `gisStationsStaticDistrictSlice` | Enthält die Gerätebereiche (mit `.Points`) | +| `gisSystemStaticSlice` | Enthält die konfigurierten GIS-Systeme mit Anzeigeerlaubnis | +| `mapLayersSlice` | Speichert die Sichtbarkeit aller Layer | +| `poiLayerVisibleSlice` | Steuert Sichtbarkeit der POIs | +| `polylineLayerVisibleSlice` | Steuert Sichtbarkeit der Kabelstrecken (TALAS) | +| `zoomTriggerSlice` | Löst Neuzentrierung der Karte aus | +| `selectedAreaSlice` | Speichert den gewählten Bereich/Station | + +--- + +## 🔄 Logikübersicht + +- **Dropdown Stationsauswahl:** + Wird dynamisch aus `GisStationsStaticDistrict.Points` befüllt + Nur eindeutige `Area_Name`, wenn `System` erlaubt ist + +- **Checkboxen für Layer:** + Zeigen alle Systeme aus `GisSystemStatic`, bei denen `Allow === 1` + Sonderfall: `TALAS` erhält ein Untermenü für „Kabelstrecken“ + +- **Lokale Speicherung:** + Sichtbarkeiten, Bearbeitungsmodus und POI-Zustand werden in `localStorage` geschrieben und bei Initialisierung geladen + +- **Bearbeitungsmodus:** + Wenn aktiv (`editMode === true`), sind Layer-Checkboxen deaktiviert + +--- + +## 📥 Wichtige Funktionen + +| Funktion | Zweck | +| -------------------------------- | ---------------------------------------- | +| `handleAreaChange()` | Setzt `selectedArea` im Redux Store | +| `handleCheckboxChange()` | Schaltet Sichtbarkeit einzelner Layer | +| `handlePolylineCheckboxChange()` | Aktiviert Sichtbarkeit von Kabelstrecken | +| `handlePoiCheckboxChange()` | Aktiviert Sichtbarkeit von POIs | +| `handleIconClick()` | Setzt Station zurück und triggert Zoom | + +--- + +## 🧩 UI-Struktur + +```plaintext +[Dropdown: Station wählen] +[🟩 EditModeToggle] [🔍 Expand-Icon] + +[ ] GIS-System 1 +[ ] GIS-System 2 + └─ [ ] Kabelstrecken (falls "TALAS") + +[ ] POIs +``` + +--- + +## 🐞 Debug-Hinweise + +- Debug-Logs: + `console.log("🔍 GisStationsStaticDistrict Inhalt:", ...)` + werden ausgegeben, um sicherzustellen, dass Daten korrekt geladen wurden + +- Warnungen: + Falls `.Points` nicht vorhanden ist, wird dies in der Konsole gewarnt + +--- + +## 🛠 ToDos / Erweiterungsideen + +- Checkboxen für Bereiche („Bereiche“, „Standorte“) sind bereits vorbereitet, aber auskommentiert +- Möglichkeit, Tooltips zu aktivieren/deaktivieren? +- Gruppierung von Layern nach Typ (z. B. Linien, Geräte, POIs) + +--- + +## 📄 Verwendete Komponenten + +- `EditModeToggle` – Schaltfläche für Umschalten des Bearbeitungsmodus + +--- + +## ✅ Zustand: Lokal & Global + +- **Global:** `useSelector(...)` aus Redux +- **Lokal:** `useState(...)` für editMode, stationListing, systemListing + +--- + +## 📦 LokaleStorage-Keys + +| Key | Beschreibung | +| --------------------- | ------------------------------------------ | +| `poiVisible` | Sichtbarkeit der POI-Marker | +| `polylineVisible` | Sichtbarkeit der Kabelstrecken | +| `mapLayersVisibility` | Sichtbarkeiten der einzelnen Systeme | +| `editMode` | Zustand des Bearbeitungsmodus (true/false) | + +--- + +## 🧪 Testempfehlung + +- Dropdown zeigt erwartete `Area_Name`-Werte? +- Layer-Checkboxen werden korrekt gespeichert? +- Bei `TALAS` erscheint zusätzlich: „Kabelstrecken“? +- Bei Wechsel der Station wird `setSelectedArea` ausgelöst? + +--- + +## 🧩 Verknüpfte Dateien + +- `redux/slices/webservice/gisStationsStaticDistrictSlice.js` +- `redux/slices/webservice/gisSystemStaticSlice.js` +- `redux/slices/mapLayersSlice.js` +- `redux/slices/selectedAreaSlice.js` +- `redux/slices/database/polylines/polylineLayerVisibleSlice.js` +- `redux/slices/database/pois/poiLayerVisibleSlice.js` + +--- diff --git a/docs/docs/config/README.md b/docs/docs/config/README.md new file mode 100644 index 000000000..92b772c2f --- /dev/null +++ b/docs/docs/config/README.md @@ -0,0 +1,38 @@ + + +# ⚙️ Konfigurationsübersicht (/config) + +Dieses Verzeichnis enthält zentrale Konfigurationsdateien, die das Verhalten der gesamten App steuern. +Hier sind die wichtigsten Dateien, ihre Aufgaben und Verlinkungen zur Dokumentation: + +--- + +## 📦 [`appVersion.js`](./appVersion.md) + +- Definiert die aktuelle Version der App (`APP_VERSION`) +- Wird z. B. im `VersionInfoModal` angezeigt + +--- + +## 🗺️ [`layers.js`](./layers.md) + +- Enthält alle Leaflet-Layergruppen für die Kartenanzeige +- Zentrale Steuerung der aktiven Layer: TALAS, GMA, Cisco, etc. + +--- + +## 📁 [`paths.js`](./paths.md) + +- Berechnet den Basis-Pfad aus `.env.local` +- Liefert `BASE_URL`, z. B. `/talas5` + +--- + +## 🌐 [`urls.js`](./urls.md) + +- Erzeugt dynamisch API- und Tile-URLs +- Verwendet `window.location.origin` → keine statischen Ports notwendig + +--- + +Diese Konfiguration macht das Projekt flexibel für mehrere Hosting-Umgebungen. diff --git a/docs/docs/config/appVersion.md b/docs/docs/config/appVersion.md new file mode 100644 index 000000000..092947d6f --- /dev/null +++ b/docs/docs/config/appVersion.md @@ -0,0 +1,16 @@ + + +# 📦 appVersion.js + +Diese Datei exportiert die aktuelle App-Version, die an mehreren Stellen in der UI angezeigt werden kann – z. B. im `VersionInfoModal`. + +## Inhalt + +```js +export const APP_VERSION = "1.1.193"; +``` + +## Verwendung + +- Im Footer oder Info-Fenster +- Vergleich von Client- vs. Serverversion diff --git a/docs/docs/config/config.md b/docs/docs/config/config.md new file mode 100644 index 000000000..ca279618f --- /dev/null +++ b/docs/docs/config/config.md @@ -0,0 +1,60 @@ + + +# ⚙️ config.js – zentrale Konfiguration und Umgebungssteuerung + +## Zweck + +Diese Datei enthält zentrale Konfigurationswerte, die abhängig von der Umgebung +(Entwicklung oder Produktion) dynamisch erzeugt werden. + +--- + +## Ersetzungen von Umgebungsvariablen + +Vorher wurden folgende `.env.local` Variablen verwendet: + +- `NEXT_PUBLIC_BASE_URL` +- `NEXT_PUBLIC_SERVER_URL` + +Diese wurden ersetzt durch dynamische Berechnung anhand von: + +```env +NEXT_PUBLIC_API_PORT_MODE=dev +``` + +--- + +## Dynamische Berechnung von `serverURL` + +Die Konfiguration entscheidet anhand des Modus: + +```js +const mode = process.env.NEXT_PUBLIC_API_PORT_MODE; + +const serverURL = mode === "dev" ? `${window.location.protocol}//${window.location.hostname}:80` : `${window.location.origin}`; +``` + +→ Dadurch funktioniert der Code ohne Anpassung bei IP-/Server-Wechseln oder Portunterschieden. + +--- + +## Konfigurationswerte + +- `USE_MOCK_API`: aktiviert lokale Mock-Daten +- `serverURL`: Basis für Webservice-Aufrufe (`/talas5/...`) +- `mapGisStationsStaticDistrictUrl`: komplette zusammengesetzte URL +- `useMockStationData`: true/false aus `.env.local` + +--- + +## Vorteile + +| Punkt | Vorteil | +| ------------------------------- | ---------------------------------------- | +| Keine festen IPs oder Ports | ✅ Weniger Fehler, einfacher Umzug | +| Einheitlich mit anderen Dateien | ✅ Gleiche Struktur wie Webservice-Setup | +| Lesbar & leicht anpassbar | ✅ Auch ohne Doku sofort verständlich | + +--- + +📄 Pfad: `/docs/frontend/config/config.md` diff --git a/docs/docs/config/layers.md b/docs/docs/config/layers.md new file mode 100644 index 000000000..dca2328a3 --- /dev/null +++ b/docs/docs/config/layers.md @@ -0,0 +1,21 @@ + + +# 🗺️ layers.js + +Diese Datei definiert alle verfügbaren Leaflet-Layergruppen im Projekt. +Sie werden global als `MAP_LAYERS` exportiert und enthalten alle Systemtypen (TALAS, GMA, OTDR etc.). + +## Struktur + +```js +export const MAP_LAYERS = { + TALAS: new L.layerGroup(), + ... + lineLayer: new L.LayerGroup(), +}; +``` + +## Verwendung + +- Initialisierung der Leaflet-Karte +- Zuweisung von Markern und Linien diff --git a/docs/docs/config/paths.md b/docs/docs/config/paths.md new file mode 100644 index 000000000..39dfd3ba7 --- /dev/null +++ b/docs/docs/config/paths.md @@ -0,0 +1,19 @@ + + +# 📁 paths.js + +Berechnet den sauberen `BASE_URL`-Pfad basierend auf `.env.local → NEXT_PUBLIC_BASE_PATH`. +Entfernt führende und abschließende Slashes. + +## Beispiel + +Wenn `NEXT_PUBLIC_BASE_PATH = "/talas5/"`, wird `BASE_URL = "/talas5"` gesetzt. + +```js +const BASE_PATH = basePathRaw.replace(/^\/|\/$/g, ""); +export const BASE_URL = BASE_PATH ? `/${BASE_PATH}` : ""; +``` + +## Nutzung + +- Für konsistente Pfadangaben im gesamten Projekt diff --git a/docs/docs/config/urls.md b/docs/docs/config/urls.md new file mode 100644 index 000000000..ec94784eb --- /dev/null +++ b/docs/docs/config/urls.md @@ -0,0 +1,18 @@ + + +# 🌐 urls.js + +Diese Datei berechnet dynamisch URLs basierend auf `window.location.origin`. +Alle Endpunkte (API, Tiles, Server) werden ohne Port oder Hardcoding erzeugt. + +## Exportierte Konstanten + +- `BASE_URL` → `/api` +- `SERVER_URL` → Hostname ohne Port (für Links) +- `PROXY_TARGET` → z. B. `http://hostname:4000` +- `OFFLINE_TILE_LAYER` → Offline-Kachelpfad +- `MAP_TILES_LAYER` → Alias für `OFFLINE_TILE_LAYER` + +## Hinweis + +Alle Berechnungen erfolgen nur **clientseitig** (`typeof window !== "undefined"`). diff --git a/docs/docs/env.local..md b/docs/docs/env.local..md new file mode 100644 index 000000000..8cff0f562 --- /dev/null +++ b/docs/docs/env.local..md @@ -0,0 +1,7 @@ + + +### /docs/env.local.schema.md + +- `NEXT_PUBLIC_API_HOST` → Webservice-DNS oder IP +- `NEXT_PUBLIC_API_BASE_PATH` → z. B. `talas5`, per Deployment steuerbar +- `DB_NAME` → hängt vom Kundenprojekt ab diff --git a/docs/docs/hooks/layers/useAreaMarkersLayer.md b/docs/docs/hooks/layers/useAreaMarkersLayer.md new file mode 100644 index 000000000..6b8d698fc --- /dev/null +++ b/docs/docs/hooks/layers/useAreaMarkersLayer.md @@ -0,0 +1,13 @@ + + +# 🗺️ useAreaMarkersLayer.js + +Lädt Bereichs-/Stationsmarker aus einer API und rendert sie auf der Karte. + +## Features + +- Marker mit Tooltip für Standort & Bereich +- Draggable Marker (verschiebbar) +- Automatischer API-Fetch mit `fetch(...)` +- Dynamisches Layer-Handling via localStorage ("mapLayersVisibility") +- Automatisches Speichern neuer Koordinaten per `updateAreaThunk()` diff --git a/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md b/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md new file mode 100644 index 000000000..18947c16c --- /dev/null +++ b/docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md @@ -0,0 +1,11 @@ + + +# 🌐 useCiscoRouterMarkersLayer.js + +Hook zur Verwaltung aller Cisco-Router-Marker in der Leaflet-Karte. + +## Funktionen + +- Lädt Geräte per `createAndSetDevices(6, ...)` +- Fügt Marker hinzu & registriert Popup/Kontextmenü +- Verwendet `checkOverlappingMarkers(...)` diff --git a/docs/docs/hooks/layers/useDauzMarkersLayer.md b/docs/docs/hooks/layers/useDauzMarkersLayer.md new file mode 100644 index 000000000..6cac8ac43 --- /dev/null +++ b/docs/docs/hooks/layers/useDauzMarkersLayer.md @@ -0,0 +1,11 @@ + + +# 🔧 useDauzMarkersLayer.js + +Spezialisierter Hook zur Verwaltung von DAUZ-Gerätemarkern (System-ID: 110) + +## Verhalten + +- Marker mit Popup & Kontextmenü +- Nutzung von `createAndSetDevices(...)` +- Sichtbarkeit direkt über Kartenlayer steuerbar diff --git a/docs/docs/hooks/layers/useDrawLines.md b/docs/docs/hooks/layers/useDrawLines.md new file mode 100644 index 000000000..039d75015 --- /dev/null +++ b/docs/docs/hooks/layers/useDrawLines.md @@ -0,0 +1,11 @@ + + +# 🧬 useDrawLines.js + +Hook zur Konvertierung von GIS-Linien in kartentaugliche Koordinatenpaare. + +## Schritte + +- Lädt Linien mit `fetchGisLinesThunk()` +- Wandelt `points[x, y]` in Leaflet-Koordinaten `[lat, lng]` um +- Gibt `setLinePositions([...])` zurück diff --git a/docs/docs/hooks/layers/useEciMarkersLayer.md b/docs/docs/hooks/layers/useEciMarkersLayer.md new file mode 100644 index 000000000..b228e4b92 --- /dev/null +++ b/docs/docs/hooks/layers/useEciMarkersLayer.md @@ -0,0 +1,11 @@ + + +# 🛰️ useEciMarkersLayer.js + +Verwaltet die Darstellung und Events für ECI-Marker (System-ID: 2) + +## Features + +- Kontextmenü & Popup für jeden Marker +- Erkennung überlappender Marker (`checkOverlappingMarkers`) +- Nutzung von `createAndSetDevices(...)` diff --git a/docs/docs/hooks/layers/useGmaMarkersLayer.md b/docs/docs/hooks/layers/useGmaMarkersLayer.md new file mode 100644 index 000000000..d4dee7f2b --- /dev/null +++ b/docs/docs/hooks/layers/useGmaMarkersLayer.md @@ -0,0 +1,11 @@ + + +# 🌡️ useGmaMarkersLayer.js + +Spezialhook für GMA-Marker mit Messwertanzeige (LT, FBT, GT, RLF). + +## Besonderheiten + +- Tooltip enthält Temperatur-/Feuchtigkeitswerte aus Redux +- Eigenes Kontextmenü mit Zoom/Zentrieren +- Verwendet `marker.options.areaName` zur Messzuordnung diff --git a/docs/docs/hooks/layers/useLteModemMarkersLayer.md b/docs/docs/hooks/layers/useLteModemMarkersLayer.md new file mode 100644 index 000000000..e7f411b27 --- /dev/null +++ b/docs/docs/hooks/layers/useLteModemMarkersLayer.md @@ -0,0 +1,10 @@ + + +# 📶 useLteModemMarkersLayer.js + +Steuert Marker vom Typ LTE-Modem (System-ID: 5) + +## Features + +- Standard-Kontextmenü + Popup +- Integration mit OMS und Overlap-Check diff --git a/docs/docs/hooks/layers/useMessstellenMarkersLayer.md b/docs/docs/hooks/layers/useMessstellenMarkersLayer.md new file mode 100644 index 000000000..3e3cddb78 --- /dev/null +++ b/docs/docs/hooks/layers/useMessstellenMarkersLayer.md @@ -0,0 +1,10 @@ + + +# 🧾 useMessstellenMarkersLayer.js + +Für Messstellen-Marker (System-ID: 13) + +## Verhalten + +- Einfache Marker mit Tooltip +- Nutzung von `createAndSetDevices(...)` + Kontextmenü diff --git a/docs/docs/hooks/layers/useOtdrMarkersLayer.md b/docs/docs/hooks/layers/useOtdrMarkersLayer.md new file mode 100644 index 000000000..b7d79ff12 --- /dev/null +++ b/docs/docs/hooks/layers/useOtdrMarkersLayer.md @@ -0,0 +1,10 @@ + + +# 🔍 useOtdrMarkersLayer.js + +Darstellung von OTDR-Messpunkten (System-ID: 9) + +## Funktionen + +- Popup-Interaktion beim Hover +- Marker mit Kontextmenü via `addContextMenuToMarker` diff --git a/docs/docs/hooks/layers/useSiemensMarkersLayer.md b/docs/docs/hooks/layers/useSiemensMarkersLayer.md new file mode 100644 index 000000000..8dc2c6ae4 --- /dev/null +++ b/docs/docs/hooks/layers/useSiemensMarkersLayer.md @@ -0,0 +1,7 @@ +# 🏭 useSiemensMarkersLayer.js + +Für Siemens-Geräte (System-ID: 8). + +- Marker mit Kontextmenü und Overlap-Prüfung +- Integration mit OMS +- Nutzung von `checkOverlappingMarkers(...)` \ No newline at end of file diff --git a/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md b/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md new file mode 100644 index 000000000..be77c5efc --- /dev/null +++ b/docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md @@ -0,0 +1,7 @@ +# 📡 useSmsfunkmodemMarkersLayer.js + +Filtert `GisSystemStatic` nach SMS Modem (System 111 oder Name). + +- Icon: `/img/icons/pois/sms-funkmodem.png` +- Kontextmenü & Popup +- Sichtbarkeit über `isVisible` steuerbar \ No newline at end of file diff --git a/docs/docs/hooks/layers/useSonstigeMarkersLayer.md b/docs/docs/hooks/layers/useSonstigeMarkersLayer.md new file mode 100644 index 000000000..cf876ffef --- /dev/null +++ b/docs/docs/hooks/layers/useSonstigeMarkersLayer.md @@ -0,0 +1,7 @@ +# ❔ useSonstigeMarkersLayer.js + +Für alle Geräte mit System-ID 200 (Sonstige). + +- Klassische Leaflet-Marker +- Kontextmenü und Popup +- Nutzung von `createAndSetDevices(...)` \ No newline at end of file diff --git a/docs/docs/hooks/layers/useTalasMarkersLayer.md b/docs/docs/hooks/layers/useTalasMarkersLayer.md new file mode 100644 index 000000000..ce85c4ffc --- /dev/null +++ b/docs/docs/hooks/layers/useTalasMarkersLayer.md @@ -0,0 +1,6 @@ +# 🌐 useTalasMarkersLayer.js + +Für TALAS-Systeme (System-ID: 1). + +- Popup + Kontextmenü auf Marker +- Fügt Marker zuerst zu OMS, dann zu Karte hinzu \ No newline at end of file diff --git a/docs/docs/hooks/layers/useTalasiclMarkersLayer.md b/docs/docs/hooks/layers/useTalasiclMarkersLayer.md new file mode 100644 index 000000000..cfd112e60 --- /dev/null +++ b/docs/docs/hooks/layers/useTalasiclMarkersLayer.md @@ -0,0 +1,6 @@ +# 🔗 useTalasiclMarkersLayer.js + +Spezialhook für Geräte vom Typ TALASICL (System-ID: 100). + +- Erstellt Marker mit Standardverhalten +- Kontextmenü, Popup, Overlap-Prüfung \ No newline at end of file diff --git a/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md b/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md new file mode 100644 index 000000000..cf615a30b --- /dev/null +++ b/docs/docs/hooks/layers/useTkComponentsMarkersLayer.md @@ -0,0 +1,6 @@ +# ⚙️ useTkComponentsMarkersLayer.js + +Für TK-Komponenten (System-ID: 30). + +- Lädt Marker via `createAndSetDevices` +- Marker-Koordinaten können debug-geloggt werden \ No newline at end of file diff --git a/docs/docs/hooks/layers/useUlafMarkersLayer.md b/docs/docs/hooks/layers/useUlafMarkersLayer.md new file mode 100644 index 000000000..ee55b88cc --- /dev/null +++ b/docs/docs/hooks/layers/useUlafMarkersLayer.md @@ -0,0 +1,7 @@ +# 💡 useUlafMarkersLayer.js + +Spezialhook für ULAF-Systeme (System-ID: 0). + +- Marker mit ULAF-Icon +- Kontextmenü und Popup (statisch) +- Dynamisch generierter Popupinhalt \ No newline at end of file diff --git a/docs/docs/hooks/layers/useWagoMarkersLayer.md b/docs/docs/hooks/layers/useWagoMarkersLayer.md new file mode 100644 index 000000000..144ce8c83 --- /dev/null +++ b/docs/docs/hooks/layers/useWagoMarkersLayer.md @@ -0,0 +1,6 @@ +# 🧰 useWagoMarkersLayer.js + +Für WAGO-Systeme (System-ID: 7). + +- Kontextmenü, Popup, Overlapping-Support +- OMS-Integration und Layer-Hinzufügung \ No newline at end of file diff --git a/docs/docs/hooks/layers/useWdmMarkersLayer.md b/docs/docs/hooks/layers/useWdmMarkersLayer.md new file mode 100644 index 000000000..2453e5542 --- /dev/null +++ b/docs/docs/hooks/layers/useWdmMarkersLayer.md @@ -0,0 +1,7 @@ +# 🔷 useWdmMarkersLayer.js + +Verwaltet WDM-Marker (System-ID: 10) in Leaflet. + +- Marker mit Kontextmenü +- Mouseover-Popup +- Nutzung von `createAndSetDevices(...)` \ No newline at end of file diff --git a/docs/docs/hooks/useCreateAndSetDevices.md b/docs/docs/hooks/useCreateAndSetDevices.md new file mode 100644 index 000000000..05f0d430a --- /dev/null +++ b/docs/docs/hooks/useCreateAndSetDevices.md @@ -0,0 +1,17 @@ + + +# 🛠️ useCreateAndSetDevices.js + +Custom Hook zur Initialisierung von Leaflet-Markern für ein bestimmtes System. +Bindet `createAndSetDevices(...)` automatisch in einen `useEffect`. + +## Parameter + +- `systemId`: ID des Gerätesystems (z. B. 1 = TALAS) +- `setMarkersFunction`: Funktion zum Speichern der erzeugten Marker +- `GisSystemStatic`: Systemdaten aus Redux +- `priorityConfig`: Konfigurationsobjekt zur Prioritätsbewertung + +## Redux + +- Bezieht `polylineEventsDisabled` aus Redux zur Steuerung der Interaktivität diff --git a/docs/docs/hooks/useDynamicMarkerLayers.md b/docs/docs/hooks/useDynamicMarkerLayers.md new file mode 100644 index 000000000..8035346f6 --- /dev/null +++ b/docs/docs/hooks/useDynamicMarkerLayers.md @@ -0,0 +1,17 @@ + + +# 🔄 useDynamicMarkerLayers.js + +Verwaltet alle Marker-Layergruppen dynamisch und modular in einem zentralen Hook. + +## Funktionen + +- Initialisiert LayerGroups für 15+ Gerätesysteme +- Ruft `createAndSetDevices()` pro System-ID auf +- Führt automatisch Overlap-Check aus (`checkOverlappingMarkers`) +- Speichert erzeugte Marker in `setMarkerStates` + +## Voraussetzungen + +- Karte (`map`) muss bereit sein +- `GisSystemStatic` + `priorityConfig` + Marker-Setter müssen übergeben werden diff --git a/docs/docs/hooks/useLayerVisibility.md b/docs/docs/hooks/useLayerVisibility.md new file mode 100644 index 000000000..a76503523 --- /dev/null +++ b/docs/docs/hooks/useLayerVisibility.md @@ -0,0 +1,15 @@ + + +# 👁️ useLayerVisibility.js + +Custom Hook zur dynamischen Steuerung von Layer-Sichtbarkeit basierend auf Redux. + +## Features + +- Entfernt oder zeigt Marker je nach `mapLayersVisibility` +- Nutzt `OverlappingMarkerSpiderfier` (`oms`) +- Normalisiert Layer-Keys (z. B. `"GMA"` → `"gma"`) + +## Intern + +Verwendet `addContextMenuToMarker()` zur Kontextmenüintegration pro Marker. diff --git a/docs/docs/hooks/useLineData.md b/docs/docs/hooks/useLineData.md new file mode 100644 index 000000000..82b42230a --- /dev/null +++ b/docs/docs/hooks/useLineData.md @@ -0,0 +1,19 @@ + + +# 📊 useLineData.js + +Lädt Linienstatusdaten (Farben, Tooltips) aus zwei Webservices in Redux und bereitet sie auf. + +## Rückgabe + +- `lineColors`: Farben pro Linie basierend auf Status +- `tooltipContents`: HTML-Tooltip pro Modul/Station + +## Datenquellen + +- `fetchGisLinesThunk()` (Struktur) +- `fetchGisLinesStatusThunk()` (Statusdaten) + +## Intern + +- Nutzt Map `valueMap`, um Messwert, Schleifenwert, Meldungen zu gruppieren diff --git a/docs/docs/hooks/useMapComponentState.md b/docs/docs/hooks/useMapComponentState.md new file mode 100644 index 000000000..e1a3b092b --- /dev/null +++ b/docs/docs/hooks/useMapComponentState.md @@ -0,0 +1,18 @@ + + +# 🧠 useMapComponentState.js + +Sammelt zentrale UI-Zustände und Redux-Daten für die `MapComponent`. + +## Rückgabe + +- POI-Typen + Ladezustand +- `deviceName` (z. B. erstes Gerät) +- `locationDeviceData` +- `priorityConfig` +- `menuItemAdded`, `setMenuItemAdded` +- Sichtbarkeit des POI-Layers + +## Redux + +- `fetchPoiTypThunk`, `fetchGisStationsStaticDistrictThunk`, `fetchPriorityConfigThunk` diff --git a/docs/docs/hooks/useMarkerLayers.md b/docs/docs/hooks/useMarkerLayers.md new file mode 100644 index 000000000..46c160be0 --- /dev/null +++ b/docs/docs/hooks/useMarkerLayers.md @@ -0,0 +1,16 @@ + + +# 📍 useMarkerLayers.js + +Steuert das Hinzufügen oder Entfernen von Markern in ein Leaflet-Map-Layer. + +## Verwendung + +```js +useMarkerLayers(map, gmaMarkers, "GMA"); +``` + +## Redux + +- Liest `mapLayersVisibility` aus dem Store +- Reagiert automatisch auf Änderungen diff --git a/docs/docs/hooks/usePolylineTooltipLayer.md b/docs/docs/hooks/usePolylineTooltipLayer.md new file mode 100644 index 000000000..aa42d0a7d --- /dev/null +++ b/docs/docs/hooks/usePolylineTooltipLayer.md @@ -0,0 +1,15 @@ + + +# 💬 usePolylineTooltipLayer.js + +Initialisiert und steuert Polylinien + Tooltip-Verhalten für Linienmessdaten. + +## Funktion + +- Nutzt `setupPolylines(...)` zur Marker- und Linienerstellung +- Tooltip-Anzeige bei `mouseover`, dynamisch positioniert +- Entfernt alte Marker und Polylinien automatisch + +## Parameter (gekürzt) + +- `map`, `markers`, `setMarkers`, `setPolylines`, `linePositions`, `tooltipContents`, `lineColors`, etc. diff --git a/docs/docs/nssm-exe-installation.md b/docs/docs/nssm-exe-installation.md new file mode 100644 index 000000000..b03858905 --- /dev/null +++ b/docs/docs/nssm-exe-installation.md @@ -0,0 +1,56 @@ + + +````markdown +- Als Administrator Eingabeaufforderung oder PowerShell öffnen + +- Navigiere zu dem NodeMap Projekt Verzeichnis: + ```shell + C:\Users\Administrator>cd C:\inetpub\wwwroot\talas5\nodeMap + ``` +```` + +- Befehl zum Erstellen eines Dienstes: + Führen Sie den folgenden Befehl aus, um einen neuen Dienst zu erstellen: + + ```shell + nssm.exe install NodeMapService + ``` + + Nachdem Sie diesen Befehl ausgeführt haben, öffnet sich ein NSSM-Dialogfenster. + + **Dienstkonfiguration:** + In dem geöffneten NSSM-Dialogfenster müssen Sie einige Parameter angeben: + + - **Path:** Der Pfad zur ausführbaren Datei, die der Dienst ausführen soll. + ```shell + C:\inetpub\wwwroot\talas5\nodeMap\StartNodeApp.bat + ``` + - **Startup directory:** Das Verzeichnis, in dem die Anwendung gestartet werden soll. + ```shell + C:\inetpub\wwwroot\talas5\nodeMap + ``` + - **Arguments:** kann leer gelassen werden. + +- Dienst starten: + Sobald der Dienst erstellt wurde, können Sie ihn starten. + Das können Sie entweder über die Eingabeaufforderung oder über die Diensteverwaltung von Windows tun. + Um den Dienst über die Eingabeaufforderung zu starten, verwenden Sie den folgenden Befehl: + ```shell + nssm.exe start DienstName + ``` + +--- + +- **Dienst bearbeiten:** + ```shell + nssm.exe edit NodeMapService + ``` +- **Dienst entfernen:** + ```shell + nssm.exe remove NodeMapService confirm + ``` + dauert bis 1 Minute + +``` + +``` diff --git a/docs/docs/pages/_app.md b/docs/docs/pages/_app.md new file mode 100644 index 000000000..6e7523f39 --- /dev/null +++ b/docs/docs/pages/_app.md @@ -0,0 +1,26 @@ + + +# 🌐 _app.js + +Diese Datei stellt die Haupt-Wrap-Komponente der Next.js-App dar. +Sie initialisiert globale Provider wie den Redux Store. + +## Features + +- Importiert globales CSS (`styles/global.css`) +- Bindet Redux `Provider` um alle Seiten-Komponenten +- Ermöglicht Zugriff auf Store in allen Seiten + +## Struktur + +```jsx + + + +``` + +## Pfad + +```bash +/pages/_app.js +``` \ No newline at end of file diff --git a/docs/docs/pages/api/[...path].md b/docs/docs/pages/api/[...path].md new file mode 100644 index 000000000..d76f3bed0 --- /dev/null +++ b/docs/docs/pages/api/[...path].md @@ -0,0 +1,45 @@ + + +# 🌐 [...path].js + +Next.js API-Proxy-Handler mit `http-proxy-middleware`. +Dient als Middleware zur Weiterleitung von API-Requests an das Backend (z. B. Raspberry Pi oder Entwicklungsserver). + +--- + +## 🔧 Funktion + +- Leitet alle Requests von `/api/...` an das definierte `target` weiter +- Entfernt `/api` aus dem URL-Pfad +- Erlaubt Cross-Origin Requests mit `changeOrigin: true` + +--- + +## Ziel-Logik + +```js +const mode = process.env.NEXT_PUBLIC_API_PORT_MODE; +const target = mode === "dev" ? "http://localhost:80" : "http://localhost"; +``` + +--- + +## Beispiel + +- Frontend-Request: `GET /api/GisStationsStaticDistrict` +- Weitergeleitet an: `GET http://localhost:80/GisStationsStaticDistrict` + +--- + +## Besonderheiten + +- Ermöglicht portunabhängige Proxy-Nutzung über `.env` +- Setzt `logLevel: "debug"` zur Diagnose + +--- + +## Pfad + +```bash +/pages/api/[...path].js +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/area/readArea.md b/docs/docs/pages/api/talas_v5_DB/area/readArea.md new file mode 100644 index 000000000..3d32a3e64 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/area/readArea.md @@ -0,0 +1,28 @@ + + +# 📥 readArea.js + +Liest Bereichskoordinaten (`location_coordinates`) aus der Datenbank basierend auf `idMaps` (und optional `idLocation`). + +## Methode + +- `GET` + +## URL-Parameter + +| Name | Beschreibung | +|-------------|--------------------------------------| +| `m` | Karten-ID (entspricht `idMaps`) | +| `idLocation` | (optional) ID eines bestimmten Bereichs | + +## Verhalten + +- Joint `location`, `location_coordinates` und `area`-Tabelle +- Gibt strukturierte Daten mit `x`, `y`, `location_name`, `area_name` zurück +- Nutzt MySQL-Pool (`getPool()`) + +## Beispiel + +```http +GET /api/talas_v5_DB/area/readArea?m=3 +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/area/updateArea.md b/docs/docs/pages/api/talas_v5_DB/area/updateArea.md new file mode 100644 index 000000000..01d7fd46d --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/area/updateArea.md @@ -0,0 +1,32 @@ + + +# 📤 updateArea.js + +Aktualisiert die Koordinaten eines Bereichs (`location_coordinates`) basierend auf `idLocation` und `idMap`. + +## Methode + +- `PUT` + +## Request-Body + +```json +{ + "idLocation": 12, + "idMap": 3, + "x": 53.21421, + "y": 8.43212 +} +``` + +## Verhalten + +- Führt `UPDATE location_coordinates SET x=?, y=? WHERE idLocation=? AND idMaps=?` +- Gibt bei Erfolg `success: true` zurück +- Nutzt MySQL-Pool und `connection.release()` + +## Fehlerbehandlung + +- 400: Fehlende Daten +- 404: Kein Eintrag gefunden +- 500: Interner Fehler \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md b/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md new file mode 100644 index 000000000..66fcda44b --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/device/getAllStationsNames.md @@ -0,0 +1,29 @@ + + +# 🧾 getAllStationsNames.js + +Liefert eine Zuordnungstabelle aller Geräte-IDs (`idLD`) zu ihren Namen (`name`). + +## Methode + +- `GET` + +## Antwortformat + +```json +{ + "123": "Kue 705", + "124": "Basisstation 1" +} +``` + +## Verhalten + +- Nutzt Tabelle `location_device` +- Gibt Fehler bei leerem Ergebnis (404) oder Datenbankfehler (500) + +## Pfad + +```bash +/pages/api/talas_v5_DB/device/getAllStationsNames.js +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/device/getDevices.md b/docs/docs/pages/api/talas_v5_DB/device/getDevices.md new file mode 100644 index 000000000..6c1387f54 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/device/getDevices.md @@ -0,0 +1,34 @@ + + +# 🔌 getDevices.js + +API-Route zum Abrufen aller Geräteinformationen aus der `devices`-Tabelle. + +## Methode + +- `POST` (erwartet JSON-Body mit optionalem `activeSystems`-Array) + +## Verhalten + +- Führt ein einfaches `SELECT * FROM devices` aus +- Nutzt Singleton-MySQL-Pool für Verbindung +- Rückgabe: JSON-Array mit allen Geräteobjekten + +## Beispielantwort + +```json +[ + { + "id": 1, + "name": "Kue705", + "idsystem_typ": 1, + ... + } +] +``` + +## Pfad + +```bash +/pages/api/talas_v5_DB/device/getDevices.js +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md b/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md new file mode 100644 index 000000000..fb83233c7 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md @@ -0,0 +1,25 @@ + + +# 🧭 readGisLines.js + +Liefert alle Linien aus der Tabelle `gis_lines`. + +## Methode + +- `GET` + +## Rückgabe + +- JSON-Array mit Objekten aus `gis_lines` +- Leeres Array bei keinen Treffern + +## Besonderheiten + +- Nutzt Singleton-Pool (`getPool()`) +- Immer HTTP 200, auch bei leerem Ergebnis + +## Beispiel + +```http +GET /api/talas_v5_DB/gisLines/readGisLines +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md b/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md new file mode 100644 index 000000000..a123286b1 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md @@ -0,0 +1,30 @@ + + +# ✏️ updateLineCoordinates.js + +Aktualisiert die `points`-Spalte einer Linie in der Tabelle `gis_lines`. + +## Methode + +- `POST` + +## Request-Body + +```json +{ + "idLD": 7, + "idModul": 2, + "newCoordinates": [[53.2151, 8.4522], [53.2165, 8.4531]] +} +``` + +## Verhalten + +- Erzeugt aus Koordinaten eine `LINESTRING(...)` +- Nutzt `ST_GeomFromText()` in MySQL +- Transaktion mit Commit/Rollback + +## Fehlerfälle + +- 400: Ungültige oder fehlende Felder +- 500: Datenbankfehler \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md new file mode 100644 index 000000000..aaaff0a8d --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md @@ -0,0 +1,26 @@ + + +# 🔍 getDeviceId.js + +Gibt die Geräte-ID (`idLD`) zu einem übergebenen Gerätenamen zurück. + +## Methode + +- `GET` + +## Parameter + +| Name | Beschreibung | +|-------------|----------------------| +| `deviceName` | Der Gerätename (z. B. "Kue705") | + +## Antwort + +```json +{ "idLD": 27 } +``` + +## Fehler + +- 400: Wenn `deviceName` fehlt +- 404: Gerät nicht gefunden \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md new file mode 100644 index 000000000..fbadfec2d --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md @@ -0,0 +1,26 @@ + + +# 🏷️ locationDeviceNameById.js + +Gibt den Namen eines Geräts anhand seiner ID zurück. + +## Methode + +- `GET` + +## Parameter + +| Name | Beschreibung | +|--------|------------------------| +| `idLD` | Geräte-ID (z. B. 27) | + +## Antwort + +```json +{ "name": "Kue705" } +``` + +## Fehler + +- 400: Fehlender Parameter +- 404: Gerät mit ID nicht gefunden \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md new file mode 100644 index 000000000..3521a8f35 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md @@ -0,0 +1,27 @@ + + +# 🗂️ locationDevices.js + +Gibt eine vollständige Liste aller Geräte in der Tabelle `location_device` zurück. + +## Methode + +- `GET` + +## Verhalten + +- Führt `SELECT * FROM location_device ORDER BY name` aus +- Gibt vollständige Objekte zurück + +## Beispielantwort + +```json +[ + { + "idLD": 27, + "name": "Kue705", + "description": "...", + ... + } +] +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md b/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md new file mode 100644 index 000000000..244aa1827 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md @@ -0,0 +1,36 @@ + + +# 🗂️ readPoiTyp.js + +Liefert alle verfügbaren POI-Typen aus der Tabelle `poityp`. + +## Methode + +- `GET` + +## Rückgabe + +- JSON-Array mit allen Einträgen in `poityp` + +## Besonderheiten + +- Gibt bei leerem Ergebnis `200` mit Warnung zurück +- Verwendet Singleton-Verbindungspool (`getPool()`) + +## Beispiel + +```http +GET /api/talas_v5_DB/poiTyp/readPoiTyp +``` + +## Antwort + +```json +[ + { + "idPoiTyp": 1, + "name": "Messgerät", + "icon": 12 + } +] +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md b/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md new file mode 100644 index 000000000..22c075cd4 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/addPoi.md @@ -0,0 +1,25 @@ + + +# ➕ addPoi.js + +Fügt einen neuen POI (Point of Interest) zur Datenbank hinzu. + +## Methode + +- `POST` + +## Request-Body + +```json +{ + "name": "POI A", + "poiTypeId": 1, + "latitude": 53.2, + "longitude": 8.1, + "idLD": 27 +} +``` + +## Besonderheiten + +- Position wird als `POINT(longitude latitude)` gespeichert \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md b/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md new file mode 100644 index 000000000..f09c740d0 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md @@ -0,0 +1,20 @@ + + +# ❌ deletePoi.js + +Löscht einen POI anhand seiner ID. + +## Methode + +- `DELETE` + +## Query-Parameter + +| Parameter | Beschreibung | +|-----------|---------------------| +| `id` | ID des POI (`idPoi`) | + +## Antwort + +- 200: Erfolgreich gelöscht +- 404: POI nicht gefunden \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md b/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md new file mode 100644 index 000000000..ececf24d0 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md @@ -0,0 +1,21 @@ + + +# 🔎 getPoiById.js + +Gibt die Beschreibung eines POIs zurück. + +## Methode + +- `GET` + +## Query-Parameter + +| Parameter | Beschreibung | +|-----------|--------------| +| `idPoi` | POI-ID | + +## Antwort + +```json +{ "description": "POI A" } +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md b/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md new file mode 100644 index 000000000..26a63d1b7 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md @@ -0,0 +1,21 @@ + + +# 🖼️ poi-icons.js + +Gibt eine Liste aller POIs und ihrer zugehörigen Icon-Pfade zurück. + +## Methode + +- `GET` + +## Datenquelle + +- `poi` → `poiTyp` → `poiicons` + +## Antwort + +```json +[ + { "idPoi": 12, "path": "/icons/kue.svg" } +] +``` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md b/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md new file mode 100644 index 000000000..dcd1fda01 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md @@ -0,0 +1,17 @@ + + +# 📋 readAllPOIs.js + +Gibt alle POIs mit Positionen zurück. + +## Methode + +- `GET` + +## Rückgabe + +- JSON-Array mit `idPoi`, `description`, `idPoiTyp`, `idLD`, `position` + +## Besonderheiten + +- Position wird per `ST_AsText(...)` als String geliefert \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md b/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md new file mode 100644 index 000000000..f995a3aad --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md @@ -0,0 +1,23 @@ + + +# 🧭 updateLocation.js + +Aktualisiert die Position (`POINT`) eines POIs. + +## Methode + +- `POST` + +## Request-Body + +```json +{ + "id": 12, + "latitude": 53.2, + "longitude": 8.1 +} +``` + +## Antwort + +- 200: `{ success: true }` \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md b/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md new file mode 100644 index 000000000..2e5088db2 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md @@ -0,0 +1,25 @@ + + +# 📝 updatePoi.js + +Aktualisiert Beschreibung, Typ und Gerät eines POIs. + +## Methode + +- `POST` + +## Request-Body + +```json +{ + "idPoi": 12, + "description": "POI A", + "idPoiTyp": 2, + "idLD": 27 +} +``` + +## Antwort + +- 200: Erfolgreich aktualisiert +- 404: POI nicht gefunden \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/priorityConfig.md b/docs/docs/pages/api/talas_v5_DB/priorityConfig.md new file mode 100644 index 000000000..9cc9d196d --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/priorityConfig.md @@ -0,0 +1,83 @@ + + +# 📊 API: /api/talas_v5_DB/priorityConfig + +Diese API liefert die Konfigurationsdaten für Prioritäten (z. B. „critical“, „minor“) aus der Tabelle `prio`. +Sie wird u. a. für Meldungsanzeigen, Filter und Leaflet-Marker-Priorisierung verwendet. + +--- + +## 📍 Anwendung in Leaflet – Marker-Priorität bei Überlappung + +Die `level`-Werte dieser Konfiguration steuern die **Darstellungsreihenfolge überlappender Marker** in Leaflet: + +- Marker mit **höherer Priorität** (`level = 1`, z. B. `critical`) werden **oben** dargestellt +- Marker mit **niedriger Priorität** (`level = 100`, `101`) werden **weiter hinten** gezeichnet +- Dadurch bleiben wichtige Meldungen stets sichtbar, selbst bei POI-Überlagerung + +Diese Sortierung wird z. B. bei OverlappingMarkerSpiderfier oder Clustern angewendet. + +--- + +## 🔗 Route + +- **Pfad:** `/api/talas_v5_DB/priorityConfig` +- **Methode:** `GET` +- **Beschreibung:** Gibt alle aktiven Prioritätsstufen inkl. Farbcodes zurück + +--- + +## 🧾 Beispielantwort + +**Test-URL:** [`/api/talas_v5_DB/priorityConfig`](http://10.10.0.70:3000/api/talas_v5_DB/priorityConfig) + +```json +[ + { "idprio": 0, "level": 100, "name": "kein", "color": "#ffffff" }, + { "idprio": 1, "level": 101, "name": "gut", "color": "#99CC00" }, + { "idprio": 5, "level": 1, "name": "critical", "color": "#FF0000" }, + { "idprio": 7, "level": 2, "name": "major", "color": "#FF9900" }, + { "idprio": 9, "level": 3, "name": "minor", "color": "#FFFF00" }, + { "idprio": 10, "level": 4, "name": "system", "color": "#FF00FF" }, + { "idprio": 12, "level": 0, "name": "Stationsausfall", "color": "#FF6600" } +] +``` + +📦 Datenstruktur +Feld Typ Beschreibung +idprio number Eindeutige ID der Priorität +level number Prioritätsstufe (1 = hoch, 100 = niedrig) +name string Bezeichnung (z. B. "minor", "system", "Stationsausfall") +color string HEX-Farbcode (z. B. #FF0000) zur visuellen Darstellung + +⚙️ Datenquelle +Tabelle: prio + +SQL-Abfrage: + +sql + +SELECT idprio, level, name, color FROM prio; + +Backend: verwendet getPool() aus utils/mysqlPool.js + +## 🔗 Verwendet in + +| Datei | Zweck | +| ----------------------------- | ------------------------------------------------------------------- | +| `fetchPriorityConfigThunk.js` | Holt Prioritätsdaten über API und reicht sie an Redux weiter | +| `priorityConfigSlice.js` | Speichert die geladenen Prioritätsdaten im Redux-Store | +| `MapComponent.js` | Dispatcht Thunk zum Laden der Daten beim Start | +| `useMapComponentState.js` | Liest `priorityConfig` aus Redux und gibt es an Marker-Setup weiter | +| `createAndSetDevices.js` | Erzeugt Marker mit `zIndexOffset` basierend auf Priorität | +| `useCreateAndSetDevices.js` | Hook zur Initialisierung von Geräten auf der Karte | +| `useDynamicMarkerLayers.js` | Verwaltet Marker-Layer dynamisch (inkl. Z-Priorität) | + +❌ Fehlerbehandlung +Bei DB- oder Verbindungsfehlern: + +json +Copy +Edit +{ "error": "Fehler bei der Abfrage" } +HTTP-Statuscode: 500 diff --git a/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md b/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md new file mode 100644 index 000000000..ff1a7c698 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/station/getAllStationsNames.md @@ -0,0 +1,29 @@ + + +# 🏷️ getAllStationsNames.js + +Liefert eine Mapping-Tabelle aus `idLD` → `name` aller Einträge in `location_device`. + +## Methode + +- `GET` + +## Rückgabe + +```json +{ + "12": "Hauptstation", + "13": "Unterstation" +} +``` + +## Verhalten + +- Antwort ist ein Key-Value-Objekt +- Nutzt `reduce()` zur Map-Erstellung +- Verwendet MySQL-Singleton-Pool + +## Fehler + +- 404: Wenn keine Daten vorhanden +- 500: Datenbankfehler \ No newline at end of file diff --git a/docs/docs/pages/api/talas_v5_DB/station/getDevices.md b/docs/docs/pages/api/talas_v5_DB/station/getDevices.md new file mode 100644 index 000000000..da765d1d8 --- /dev/null +++ b/docs/docs/pages/api/talas_v5_DB/station/getDevices.md @@ -0,0 +1,40 @@ + + +# 📦 getDevices.js + +Gibt alle Geräte aus der `devices`-Tabelle zurück. + +## Methode + +- `POST` + +## Request-Body + +```json +{ + "activeSystems": [1, 2, 3] +} +``` + +⚠️ Hinweis: Im aktuellen Code wird der Parameter `activeSystems` nicht verwendet! + +## Rückgabe + +- JSON-Array mit Geräteobjekten + +## Beispielantwort + +```json +[ + { + "id": 1, + "name": "CPL V4.0", + "idsystem_typ": 1 + } +] +``` + +## Fehler + +- 404: Keine Ergebnisse +- 500: Datenbankfehler \ No newline at end of file diff --git a/docs/docs/pages/index.md b/docs/docs/pages/index.md new file mode 100644 index 000000000..d7da48530 --- /dev/null +++ b/docs/docs/pages/index.md @@ -0,0 +1,32 @@ + + +# 🏠 index.js (Home-Seite) + +Die Hauptseite der Anwendung. +Bindet dynamisch die Leaflet-Karte (`MapComponent`) und ein Testscripting-Tool (`TestScript`). + +## Features + +- `MapComponent` ohne SSR eingebunden +- `TestScript` prüft per Konsole Logik/Strukturen +- Lädt POI-Daten per `fetchPoiMarkersThunk()` +- Liest URL-Parameter `m` und `u` +- Unterstützt POI-Hinzufügen über `addPoiThunk(...)` + +## Redux-Slices + +- `poiMarkersSlice` +- `addPoiSlice` +- `poiReadFromDbTrigger` + +## Struktur + +```jsx + + +``` + +## Besonderheiten + +- Dynamisches Nachladen der POIs bei Triggeränderung +- Fehleranzeige über `addPoiStatus` + `addPoiError` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/area/updateAreaSlice.md b/docs/docs/redux/slices/database/area/updateAreaSlice.md new file mode 100644 index 000000000..4c46aefd1 --- /dev/null +++ b/docs/docs/redux/slices/database/area/updateAreaSlice.md @@ -0,0 +1,40 @@ + + +# 🧩 updateAreaSlice.js + +Redux-Slice zur Verwaltung des Update-Zustands beim Aktualisieren eines Bereichs (Area). + +--- + +## Zustand + +```js +{ + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +--- + +## Thunk + +- `updateAreaThunk`: Führt den API-Call zum Speichern von `x`, `y` für `idLocation` & `idMaps` durch. + +--- + +## Aktionen + +- `resetUpdateAreaStatus()`: Setzt Status auf `"idle"` und entfernt Fehler + +--- + +## Verwendung + +In der Komponente `useAreaMarkersLayer.js` beim Ziehen und Speichern von Stationsmarkern. + +--- + +## Fehlerbehandlung + +- Fehlernachricht wird in `error` gespeichert, falls `updateAreaThunk` fehlschlägt. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md b/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md new file mode 100644 index 000000000..cf58c3de0 --- /dev/null +++ b/docs/docs/redux/slices/database/locationDevice/locationDevicesSlice.md @@ -0,0 +1,45 @@ + + +# 🧩 locationDevicesSlice.js + +Redux-Slice zur Verwaltung von Standortgeräten (Devices) aus der Tabelle `location_device`. + +--- + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +--- + +## Thunks + +- `fetchLocationDevicesThunk`: Lädt Geräte aus der API + +--- + +## Aktionen + +- `clearLocationDevices()`: Löscht Geräte-Array und setzt Status zurück + +--- + +## Selektoren + +```js +selectLocationDevices = (state) => state.locationDevices.data; +selectLocationDeviceStatus = (state) => state.locationDevices.status; +``` + +--- + +## Besonderheiten + +- Zustand wird bei `pending`, `fulfilled` und `rejected` aktualisiert +- Fehlernachricht wird in `error` gespeichert \ No newline at end of file diff --git a/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md b/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md new file mode 100644 index 000000000..3eedc3fba --- /dev/null +++ b/docs/docs/redux/slices/database/locationDevicesFromDBSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 locationDevicesFromDBSlice.js + +Redux-Slice für das Laden von Geräten aus der Datenbank-Tabelle `location_device`. + +## Zustand + +```js +{ + devices: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchLocationDevicesThunk` (async) + +## Selector + +```js +selectLocationDevices = (state) => state.locationDevicesFromDB.devices +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/locationDevicesSlice.md b/docs/docs/redux/slices/database/locationDevicesSlice.md new file mode 100644 index 000000000..1030038a8 --- /dev/null +++ b/docs/docs/redux/slices/database/locationDevicesSlice.md @@ -0,0 +1,23 @@ + + +# 🧩 locationDevicesSlice.js + +Zweite Variante des Slices für Geräte (veraltet oder parallel verwendet). + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Selector + +```js +selectLocationDevices = (state) => state.locationDevices.data +``` + +⚠️ Beachte: Duplikat zu `locationDevicesFromDBSlice.js` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md b/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md new file mode 100644 index 000000000..8d16ada73 --- /dev/null +++ b/docs/docs/redux/slices/database/pois/addPoiOnPolylineSlice.md @@ -0,0 +1,3 @@ +# 🧩 addPoiOnPolylineSlice.js + +Redux-Slice zur Verwaltung von addPoiOnPolyline. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/addPoiSlice.md b/docs/docs/redux/slices/database/pois/addPoiSlice.md new file mode 100644 index 000000000..31f99a654 --- /dev/null +++ b/docs/docs/redux/slices/database/pois/addPoiSlice.md @@ -0,0 +1,3 @@ +# 🧩 addPoiSlice.js + +Redux-Slice zur Verwaltung von addPoi. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/currentPoiSlice.md b/docs/docs/redux/slices/database/pois/currentPoiSlice.md new file mode 100644 index 000000000..0c1b4e7fe --- /dev/null +++ b/docs/docs/redux/slices/database/pois/currentPoiSlice.md @@ -0,0 +1,3 @@ +# 🧩 currentPoiSlice.js + +Redux-Slice zur Verwaltung von currentPoi. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md b/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md new file mode 100644 index 000000000..80f57f38d --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiIconsDataSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiIconsDataSlice.js + +Redux-Slice zur Verwaltung von POIIconsData. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md b/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md new file mode 100644 index 000000000..ef4aa5c8e --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiLayerVisibleSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiLayerVisibleSlice.js + +Redux-Slice zur Verwaltung von POILayerVisible. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiMarkersSlice.md b/docs/docs/redux/slices/database/pois/poiMarkersSlice.md new file mode 100644 index 000000000..94563967d --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiMarkersSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiMarkersSlice.js + +Redux-Slice zur Verwaltung von POIMarkers. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md b/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md new file mode 100644 index 000000000..fd3270b7f --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiReadFromDbTriggerSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiReadFromDbTriggerSlice.js + +Redux-Slice zur Verwaltung von POIReadFromDbTrigger. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiTypSlice.md b/docs/docs/redux/slices/database/pois/poiTypSlice.md new file mode 100644 index 000000000..edf0ff581 --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiTypSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiTypSlice.js + +Redux-Slice zur Verwaltung von POITyp. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/poiTypesSlice.md b/docs/docs/redux/slices/database/pois/poiTypesSlice.md new file mode 100644 index 000000000..24366914c --- /dev/null +++ b/docs/docs/redux/slices/database/pois/poiTypesSlice.md @@ -0,0 +1,3 @@ +# 🧩 poiTypesSlice.js + +Redux-Slice zur Verwaltung von POITypes. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md b/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md new file mode 100644 index 000000000..5cd8b478c --- /dev/null +++ b/docs/docs/redux/slices/database/pois/readPoiMarkersStoreSlice.md @@ -0,0 +1,3 @@ +# 🧩 readPoiMarkersStoreSlice.js + +Redux-Slice zur Verwaltung von readPoiMarkersStore. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/pois/selectedPoiSlice.md b/docs/docs/redux/slices/database/pois/selectedPoiSlice.md new file mode 100644 index 000000000..20bceb7eb --- /dev/null +++ b/docs/docs/redux/slices/database/pois/selectedPoiSlice.md @@ -0,0 +1,3 @@ +# 🧩 selectedPoiSlice.js + +Redux-Slice zur Verwaltung von selectedPoi. \ No newline at end of file diff --git a/docs/docs/redux/slices/database/polylines/gisLinesSlice.md b/docs/docs/redux/slices/database/polylines/gisLinesSlice.md new file mode 100644 index 000000000..580f15c4f --- /dev/null +++ b/docs/docs/redux/slices/database/polylines/gisLinesSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisLinesSlice.js + +Verwaltet alle Linienobjekte, die aus der Datenbank (`gis_lines`) gelesen wurden. + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisLinesThunk()` + +## Selector + +```js +selectGisLines = (state) => state.gisLines.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md b/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md new file mode 100644 index 000000000..9258beada --- /dev/null +++ b/docs/docs/redux/slices/database/polylines/polylineContextMenuSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 polylineContextMenuSlice.js + +Verwaltet den Zustand des Kontextmenüs bei Polylinien (z. B. Stützpunkt hinzufügen/entfernen). + +## Zustand + +```js +{ + isOpen: false, + position: { lat, lng } | null, + forceClose: false, + timerStart: number | null, + countdown: number, + countdownActive: boolean +} +``` + +## Aktionen + +- `openPolylineContextMenu(payload)` +- `closePolylineContextMenu()` +- `updateCountdown()` +- `forceCloseContextMenu()` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md b/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md new file mode 100644 index 000000000..92fc70c85 --- /dev/null +++ b/docs/docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md @@ -0,0 +1,16 @@ + + +# 🧩 polylineEventsDisabledSlice.js + +Steuert, ob Interaktionen mit Polylinien (z. B. Ziehen, Klicks) temporär deaktiviert sind. + +## Zustand + +```js +{ disabled: boolean } +``` + +## Aktionen + +- `setDisabled(boolean)` +- `toggleDisabled()` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md b/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md new file mode 100644 index 000000000..6b440aad9 --- /dev/null +++ b/docs/docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md @@ -0,0 +1,21 @@ + + +# 🧩 polylineLayerVisibleSlice.js + +Steuert die Sichtbarkeit des Polylinienlayers auf der Karte. + +## Zustand + +```js +{ visible: boolean } +``` + +## Aktion + +- `setPolylineVisible(boolean)` + +## Selector + +```js +selectPolylineVisible = (state) => state.polylineLayerVisible.visible +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md b/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md new file mode 100644 index 000000000..eae91b396 --- /dev/null +++ b/docs/docs/redux/slices/database/polylines/updatePolylineCoordinatesSlice.md @@ -0,0 +1,22 @@ + + +# 🧩 updatePolylineCoordinatesSlice.js + +Redux-Slice zur Überwachung des Lade-/Fehlerstatus bei der Aktualisierung von Linienkoordinaten. + +## Zustand + +```js +{ + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `updatePolylineCoordinatesThunk()` + +## Aktion + +- `resetUpdateStatus()` \ No newline at end of file diff --git a/docs/docs/redux/slices/database/priorityConfigSlice.md b/docs/docs/redux/slices/database/priorityConfigSlice.md new file mode 100644 index 000000000..e3a040089 --- /dev/null +++ b/docs/docs/redux/slices/database/priorityConfigSlice.md @@ -0,0 +1,24 @@ + + +# 🧩 priorityConfigSlice.js + +Lädt die Prioritätskonfiguration für Marker (z. B. zur farblichen Darstellung). + +## Zustand + +```js +{ + data: [], + status: "idle" | "succeeded" +} +``` + +## Thunk + +- `fetchPriorityConfigThunk` + +## Selector + +```js +selectPriorityConfig = (state) => state.priorityConfig.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/lineVisibilitySlice.md b/docs/docs/redux/slices/lineVisibilitySlice.md new file mode 100644 index 000000000..41d22c21a --- /dev/null +++ b/docs/docs/redux/slices/lineVisibilitySlice.md @@ -0,0 +1,24 @@ + + +# 📶 lineVisibilitySlice.js + +Redux-Slice zur Steuerung der Sichtbarkeit aktiver Linien auf der Karte. + +## Zustand + +```js +{ + activeLines: { + [idLD]: true | false + } +} +``` + +## Aktionen + +- `updateLineStatus({ idLD, active })`: Einzelne Linie sichtbar/unsichtbar +- `setActiveLines({ ... })`: Ganze Objektzuweisung + +## Anwendung + +Wird verwendet z. B. in `useLineData.js`, `MapComponent.js` \ No newline at end of file diff --git a/docs/docs/redux/slices/mapLayersSlice.md b/docs/docs/redux/slices/mapLayersSlice.md new file mode 100644 index 000000000..f2847e83d --- /dev/null +++ b/docs/docs/redux/slices/mapLayersSlice.md @@ -0,0 +1,27 @@ + + +# 🗺️ mapLayersSlice.js + +Verwaltet die Sichtbarkeit einzelner Layergruppen (z. B. GMA, ECI, Siemens). + +## Zustand + +```js +{ + TALAS: true, + ECI: true, + ULAF: true, + ... +} +``` + +## Aktionen + +- `toggleLayer(layer)`: Sichtbarkeit toggeln +- `setLayerVisibility({ layer, visibility })`: Sichtbarkeit explizit setzen + +## Selector + +```js +selectMapLayersState = (state) => state.mapLayers +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/selectedAreaSlice.md b/docs/docs/redux/slices/selectedAreaSlice.md new file mode 100644 index 000000000..d1eb2e999 --- /dev/null +++ b/docs/docs/redux/slices/selectedAreaSlice.md @@ -0,0 +1,16 @@ + + +# 📍 selectedAreaSlice.js + +Steuert die aktuell selektierte Station/Bereich in der Karte. + +## Zustand + +```js +{ area: null | object } +``` + +## Aktionen + +- `setSelectedArea(area)` +- `clearSelectedArea()` \ No newline at end of file diff --git a/docs/docs/redux/slices/selectedDeviceSlice.md b/docs/docs/redux/slices/selectedDeviceSlice.md new file mode 100644 index 000000000..ef20a935a --- /dev/null +++ b/docs/docs/redux/slices/selectedDeviceSlice.md @@ -0,0 +1,16 @@ + + +# 🖥️ selectedDeviceSlice.js + +Speichert das aktuell ausgewählte Gerät aus der Karte. + +## Zustand + +```js +null | { ...Gerät } +``` + +## Aktionen + +- `setSelectedDevice(device)` +- `clearSelectedDevice()` \ No newline at end of file diff --git a/docs/docs/redux/slices/urlParameterSlice.md b/docs/docs/redux/slices/urlParameterSlice.md new file mode 100644 index 000000000..1a2c68801 --- /dev/null +++ b/docs/docs/redux/slices/urlParameterSlice.md @@ -0,0 +1,20 @@ + + +# 🔗 urlParameterSlice.js + +Verwaltet die URL-Parameter `m` (mapId) und `u` (userId). + +## Zustand + +```js +{ + mapId: number | null, + userId: number | null +} +``` + +## Aktionen + +- `setMapId(id)` +- `setUserId(id)` +- `setFromURL({ m, u })` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/gisLinesStatusSlice.md b/docs/docs/redux/slices/webService/gisLinesStatusSlice.md new file mode 100644 index 000000000..b6a0ba93d --- /dev/null +++ b/docs/docs/redux/slices/webService/gisLinesStatusSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisLinesStatusSlice.js + +Lädt und speichert Statusdaten von Linien (z. B. Spannungswerte, Betriebszustand) aus dem Webservice. + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisLinesStatusThunk()` + +## Selector + +```js +selectGisLinesStatusFromWebservice = (state) => state.gisLinesStatusFromWebservice +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md b/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md new file mode 100644 index 000000000..3f1308bf5 --- /dev/null +++ b/docs/docs/redux/slices/webService/gisStationsMeasurementsSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisStationsMeasurementsSlice.js + +Verwaltet Messwerte einzelner Stationen (z. B. Schleifenwiderstand, Isolation) aus Webservice-Antworten. + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisStationsMeasurementsThunk()` + +## Selector + +```js +selectGisStationsMeasurements = (state) => state.gisStationsMeasurements.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md b/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md new file mode 100644 index 000000000..faf67e4b2 --- /dev/null +++ b/docs/docs/redux/slices/webService/gisStationsStaticDistrictSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisStationsStaticDistrictSlice.js + +Lädt und speichert statische Standortdaten (z. B. Koordinaten) der Stationen im aktuellen Bezirk. + +## Zustand + +```js +{ + data: { Points: [] }, + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisStationsStaticDistrictThunk()` + +## Selector + +```js +selectGisStationsStaticDistrict = (state) => state.gisStationsStaticDistrict.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md b/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md new file mode 100644 index 000000000..e538fc9c2 --- /dev/null +++ b/docs/docs/redux/slices/webService/gisStationsStatusDistrictSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisStationsStatusDistrictSlice.js + +Verwaltet den Status aller Stationen im aktuellen Bezirk aus Webservice-Daten. + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisStationsStatusDistrictThunk()` + +## Selector + +```js +selectGisStationsStatusDistrict = (state) => state.gisStationsStatusDistrict.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/gisSystemStaticSlice.md b/docs/docs/redux/slices/webService/gisSystemStaticSlice.md new file mode 100644 index 000000000..ecf688b02 --- /dev/null +++ b/docs/docs/redux/slices/webService/gisSystemStaticSlice.md @@ -0,0 +1,25 @@ + + +# 🧩 gisSystemStaticSlice.js + +Verwaltet statische Gerätedaten aller Systeme, die vom Webservice zurückgegeben werden. + +## Zustand + +```js +{ + data: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchGisSystemStaticThunk()` + +## Selector + +```js +selectGisSystemStatic = (state) => state.gisSystemStatic.data +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/webService/userRightsSlice.md b/docs/docs/redux/slices/webService/userRightsSlice.md new file mode 100644 index 000000000..a40453d15 --- /dev/null +++ b/docs/docs/redux/slices/webService/userRightsSlice.md @@ -0,0 +1,26 @@ + + +# 🧩 userRightsSlice.js + +Verwaltet die Benutzerrechte, die vom Webservice für den angemeldeten Nutzer bereitgestellt werden. + +## Zustand + +```js +{ + rights: [], + status: "idle" | "loading" | "succeeded" | "failed", + error: string | null +} +``` + +## Thunk + +- `fetchUserRightsThunk()` + +## Selector + +```js +selectGisUserRightsFromWebservice = (state) => state.gisUserRightsFromWebservice.rights +selectGisUserRightsStatus = (state) => state.gisUserRightsFromWebservice.status +``` \ No newline at end of file diff --git a/docs/docs/redux/slices/zoomTriggerSlice.md b/docs/docs/redux/slices/zoomTriggerSlice.md new file mode 100644 index 000000000..e5aeb3226 --- /dev/null +++ b/docs/docs/redux/slices/zoomTriggerSlice.md @@ -0,0 +1,16 @@ + + +# 🔍 zoomTriggerSlice.js + +Ein Redux-Trigger, der die Karte zur Neuberechnung des Zoom-Zustands veranlasst. + +## Zustand + +```js +{ trigger: number } +``` + +## Aktionen + +- `incrementZoomTrigger()`: Erhöht den Trigger +- `resetZoomTrigger()`: Setzt auf 0 zurück \ No newline at end of file diff --git a/docs/docs/redux/store.md b/docs/docs/redux/store.md new file mode 100644 index 000000000..95664ef63 --- /dev/null +++ b/docs/docs/redux/store.md @@ -0,0 +1,64 @@ + + +# 🧠 Redux Store (store.js) + +Zentrale Konfiguration des globalen Redux-Stores für die Anwendung. +Er verwaltet Zustand für Daten aus Webservices, der Datenbank und UI-Status. + +--- + +## 🔌 Verwendung + +```js +import { Provider } from "react-redux"; +import { store } from "../redux/store"; + + + + +``` + +--- + +## 🔁 Struktur + +Der Store besteht aus drei Bereichen: + +### 1. `database` + +- `poiMarkers`, `addPoi`, `poiLayerVisible` +- `gisLinesFromDatabase`, `polylineLayerVisible` +- `readPoiMarkersStore`, `priorityConfig`, `locationDevicesFromDB` + +### 2. `webservice` + +- `gisStationsStaticDistrict`, `gisStationsStatusDistrict`, `gisSystemStatic` +- `gisStationsMeasurements`, `gisLinesStatusFromWebservice`, `userRights` + +### 3. `ui / interaktiv` + +- `mapLayers`, `selectedDevice`, `selectedPoi`, `selectedArea` +- `lineVisibility`, `zoomTrigger`, `urlParameter`, `polylineContextMenu` +- `polylineEventsDisabled`, `addPoiOnPolyline` + +--- + +## ⚙️ Einrichtung + +```js +export const store = configureStore({ + reducer: { + selectedDevice: selectedDeviceReducer, + poiMarkers: poiMarkersReducer, + ... + } +}); +``` + +--- + +## 📁 Pfad + +```bash +/redux/store.js +``` \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/area/updateAreaThunk.md b/docs/docs/redux/thunks/database/area/updateAreaThunk.md new file mode 100644 index 000000000..24d8dcec5 --- /dev/null +++ b/docs/docs/redux/thunks/database/area/updateAreaThunk.md @@ -0,0 +1,25 @@ + + +# ✏️ updateAreaThunk.js + +Async-Thunk zum Aktualisieren der Koordinaten eines Bereichs (Area). + +## Verwendung + +```js +dispatch(updateAreaThunk({ + idLocation: 5, + idMap: 2, + x: 53.215, + y: 8.45 +})); +``` + +## Quelle + +- Ruft `updateAreaService(payload)` auf + +## Verhalten + +- Gibt `await`-Ergebnis direkt zurück +- Fehlerbehandlung wird vom aufrufenden Slice übernommen \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md b/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md new file mode 100644 index 000000000..2d62cde1b --- /dev/null +++ b/docs/docs/redux/thunks/database/fetchLocationDevicesThunk.md @@ -0,0 +1,15 @@ + + +# 🚚 fetchLocationDevicesThunk.js + +Async-Thunk zum Laden aller Geräte aus der Tabelle `location_device`. + +## Verwendung + +```js +dispatch(fetchLocationDevicesThunk()); +``` + +## Quelle + +- Ruft `fetchLocationDevicesService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md b/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md new file mode 100644 index 000000000..53895c2f7 --- /dev/null +++ b/docs/docs/redux/thunks/database/fetchPriorityConfigThunk.md @@ -0,0 +1,15 @@ + + +# 🎯 fetchPriorityConfigThunk.js + +Async-Thunk zum Abrufen der Prioritätskonfiguration für Marker. + +## Verwendung + +```js +dispatch(fetchPriorityConfigThunk()); +``` + +## Quelle + +- Ruft `fetchPriorityConfigService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md b/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md new file mode 100644 index 000000000..4e0848f27 --- /dev/null +++ b/docs/docs/redux/thunks/database/getDeviceIdByNameThunk.md @@ -0,0 +1,16 @@ + + +# 🆔 getDeviceIdByNameThunk.js + +Async-Thunk zur Ermittlung der ID eines Geräts anhand des Gerätenamens. + +## Verwendung + +```js +dispatch(getDeviceIdByNameThunk("Kue705")); +``` + +## Verhalten + +- Ruft `getDeviceIdByNameService(deviceName)` auf +- Fehler werden mit `rejectWithValue(error.message)` behandelt \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md b/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md new file mode 100644 index 000000000..66ee57295 --- /dev/null +++ b/docs/docs/redux/thunks/database/locationDevice/fetchLocationDevicesThunk (1).md @@ -0,0 +1,37 @@ + + +# 🚚 fetchLocationDevicesThunk.js + +Redux-AsyncThunk zum Abrufen aller Einträge aus der Tabelle `location_device`. + +--- + +## 🔄 Zweck + +Dieser Thunk ruft die Servicefunktion `fetchLocationDevicesService()` auf und liefert deren Ergebnis an den Redux-Slice `locationDevicesSlice`. + +--- + +## 🧠 Intern + +```ts +createAsyncThunk("locationDevices/fetchAll", async () => { + return await fetchLocationDevicesService(); +}); +``` + +--- + +## ✅ Verwendung + +```ts +dispatch(fetchLocationDevicesThunk()); +``` + +--- + +## 📁 Pfad + +``` +/redux/thunks/database/locationDevice/fetchLocationDevicesThunk.js +``` \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/addPoiThunk.md b/docs/docs/redux/thunks/database/pois/addPoiThunk.md new file mode 100644 index 000000000..c53771de6 --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/addPoiThunk.md @@ -0,0 +1,21 @@ + + +# ➕ addPoiThunk.js + +Async-Thunk zur Erstellung eines neuen POIs. + +## Verwendung + +```js +dispatch(addPoiThunk({ + name: "Messstelle 1", + poiTypeId: 2, + latitude: 53.21, + longitude: 8.43, + idLD: 12 +})); +``` + +## Intern + +Ruft `addPoiService(formData)` auf und gibt das Ergebnis zurück. \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/deletePoiThunk.md b/docs/docs/redux/thunks/database/pois/deletePoiThunk.md new file mode 100644 index 000000000..2e6ea1625 --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/deletePoiThunk.md @@ -0,0 +1,16 @@ + + +# ❌ deletePoiThunk.js + +Async-Thunk zum Löschen eines POIs anhand seiner ID. + +## Verwendung + +```js +dispatch(deletePoiThunk(15)); +``` + +## Verhalten + +- Ruft `deletePoiService(id)` auf +- Gibt die ID im Erfolgsfall zurück \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md new file mode 100644 index 000000000..76931f618 --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/fetchPoiIconsDataThunk.md @@ -0,0 +1,15 @@ + + +# 🖼️ fetchPoiIconsDataThunk.js + +Lädt alle verfügbaren POI-Icons aus dem Backend. + +## Verwendung + +```js +dispatch(fetchPoiIconsDataThunk()); +``` + +## Intern + +- Ruft `fetchPoiIconsDataService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md new file mode 100644 index 000000000..e1cbc961d --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/fetchPoiMarkersThunk.md @@ -0,0 +1,15 @@ + + +# 📍 fetchPoiMarkersThunk.js + +Lädt alle POI-Marker (Positionsdaten) aus dem Backend. + +## Verwendung + +```js +dispatch(fetchPoiMarkersThunk()); +``` + +## Intern + +- Ruft `fetchPoiMarkersService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md b/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md new file mode 100644 index 000000000..2aae375b4 --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/fetchPoiTypThunk.md @@ -0,0 +1,15 @@ + + +# 🗂️ fetchPoiTypThunk.js + +Lädt alle verfügbaren POI-Typen aus der Datenbank. + +## Verwendung + +```js +dispatch(fetchPoiTypThunk()); +``` + +## Intern + +- Ruft `fetchPoiTypService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/pois/updatePoiThunk.md b/docs/docs/redux/thunks/database/pois/updatePoiThunk.md new file mode 100644 index 000000000..3a4dec185 --- /dev/null +++ b/docs/docs/redux/thunks/database/pois/updatePoiThunk.md @@ -0,0 +1,20 @@ + + +# 📝 updatePoiThunk.js + +Aktualisiert einen bestehenden POI mit neuen Daten. + +## Verwendung + +```js +dispatch(updatePoiThunk({ + idPoi: 15, + description: "Neue Beschreibung", + idPoiTyp: 3, + idLD: 8 +})); +``` + +## Intern + +- Ruft `updatePoiService(poi)` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md b/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md new file mode 100644 index 000000000..9bfbdec01 --- /dev/null +++ b/docs/docs/redux/thunks/database/polylines/fetchGisLinesThunk.md @@ -0,0 +1,16 @@ + + +# 📡 fetchGisLinesThunk.js + +Async-Thunk zum Laden aller Linien aus der Datenbanktabelle `gis_lines`. + +## Verwendung + +```js +dispatch(fetchGisLinesThunk()); +``` + +## Intern + +- Ruft `fetchGisLinesService()` auf +- Liefert alle Linien mit Koordinaten zur Anzeige auf der Karte \ No newline at end of file diff --git a/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md b/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md new file mode 100644 index 000000000..19c68ce6f --- /dev/null +++ b/docs/docs/redux/thunks/database/polylines/updatePolylineCoordinatesThunk.md @@ -0,0 +1,20 @@ + + +# 🧭 updatePolylineCoordinatesThunk.js + +Async-Thunk zur Aktualisierung von Linienkoordinaten in der Datenbank. + +## Verwendung + +```js +dispatch(updatePolylineCoordinatesThunk({ + idLD: 7, + idModul: 2, + newCoordinates: [[53.2, 8.4], [53.21, 8.45]] +})); +``` + +## Intern + +- Ruft `updatePolylineCoordinatesService(requestData)` auf +- Wandelt Koordinaten in MySQL LINESTRING um \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md b/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md new file mode 100644 index 000000000..82e04ab66 --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchGisLinesStatusThunk.md @@ -0,0 +1,16 @@ + + +# 📡 fetchGisLinesStatusThunk.js + +Async-Thunk zum Laden des Status aller Linien aus dem Webservice. + +## Verwendung + +```js +dispatch(fetchGisLinesStatusThunk()); +``` + +## Intern + +- Ruft `fetchGisLinesStatusService()` auf +- Fehlerbehandlung per `rejectWithValue(error.message)` \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md new file mode 100644 index 000000000..94cfe884f --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchGisStationsMeasurementsThunk.md @@ -0,0 +1,15 @@ + + +# 📈 fetchGisStationsMeasurementsThunk.js + +Lädt Messwerte aller Stationen (z. B. Schleifenwiderstand, Isolation). + +## Verwendung + +```js +dispatch(fetchGisStationsMeasurementsThunk()); +``` + +## Intern + +- Ruft `fetchGisStationsMeasurementsService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md new file mode 100644 index 000000000..d69b6dfb4 --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchGisStationsStaticDistrictThunk.md @@ -0,0 +1,15 @@ + + +# 🧭 fetchGisStationsStaticDistrictThunk.js + +Lädt statische Standortdaten (z. B. Koordinaten) für den aktuellen Bezirk. + +## Verwendung + +```js +dispatch(fetchGisStationsStaticDistrictThunk()); +``` + +## Intern + +- Ruft `fetchGisStationsStaticDistrictService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md b/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md new file mode 100644 index 000000000..587db68b1 --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchGisStationsStatusDistrictThunk.md @@ -0,0 +1,15 @@ + + +# 🚦 fetchGisStationsStatusDistrictThunk.js + +Lädt Statusdaten (aktiv/inaktiv) aller Stationen im Bezirk. + +## Verwendung + +```js +dispatch(fetchGisStationsStatusDistrictThunk()); +``` + +## Intern + +- Ruft `fetchGisStationsStatusDistrictService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md b/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md new file mode 100644 index 000000000..9211be3d9 --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchGisSystemStaticThunk.md @@ -0,0 +1,15 @@ + + +# 🧱 fetchGisSystemStaticThunk.js + +Lädt Geräte-/Systemdaten für alle Module aus dem Webservice. + +## Verwendung + +```js +dispatch(fetchGisSystemStaticThunk()); +``` + +## Intern + +- Ruft `fetchGisSystemStaticService()` auf \ No newline at end of file diff --git a/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md b/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md new file mode 100644 index 000000000..fe1d96508 --- /dev/null +++ b/docs/docs/redux/thunks/webservice/fetchUserRightsThunk.md @@ -0,0 +1,16 @@ + + +# 🔐 fetchUserRightsThunk.js + +Lädt Rechte des angemeldeten Nutzers vom Webservice. + +## Verwendung + +```js +dispatch(fetchUserRightsThunk()); +``` + +## Intern + +- Ruft `fetchUserRightsService()` auf +- Fehlerbehandlung per `rejectWithValue(error.message)` \ No newline at end of file diff --git a/docs/docs/services/database/area/updateAreaService.md b/docs/docs/services/database/area/updateAreaService.md new file mode 100644 index 000000000..fa7520cd2 --- /dev/null +++ b/docs/docs/services/database/area/updateAreaService.md @@ -0,0 +1,37 @@ + + +# 🗺️ updateAreaService.js + +Service zur Aktualisierung der Koordinaten eines Bereichs (Area) in der Datenbank. + +## Verwendung + +```js +await updateAreaService({ + idLocation: 4, + idMap: 1, + newCoords: { x: 53.219, y: 8.435 } +}); +``` + +## API-Route + +``` +PUT /api/talas_v5_DB/area/updateArea +``` + +## Payload + +```json +{ + "idLocation": 4, + "idMap": 1, + "x": 53.219, + "y": 8.435 +} +``` + +## Rückgabe + +- Erfolgreich: JSON mit Erfolgsmeldung +- Fehler: `throw new Error(...)` bei nicht OK \ No newline at end of file diff --git a/docs/docs/services/database/fetchDeviceNameByIdService.md b/docs/docs/services/database/fetchDeviceNameByIdService.md new file mode 100644 index 000000000..95b5880b6 --- /dev/null +++ b/docs/docs/services/database/fetchDeviceNameByIdService.md @@ -0,0 +1,22 @@ + + +# 🆔 fetchDeviceNameByIdService.js + +Lädt den Gerätenamen (`name`) anhand der ID (`idLD`) von der API. + +## Verwendung + +```js +const name = await fetchDeviceNameById(idLD); +``` + +## API-Route + +``` +/api/talas_v5_DB/locationDevice/locationDeviceNameById?idLD=... +``` + +## Rückgabe + +- Erfolgreich: Gerätebezeichnung als `string` +- Fehler: `"Unbekannt"` \ No newline at end of file diff --git a/docs/docs/services/database/fetchLocationDevicesService.md b/docs/docs/services/database/fetchLocationDevicesService.md new file mode 100644 index 000000000..f40447bab --- /dev/null +++ b/docs/docs/services/database/fetchLocationDevicesService.md @@ -0,0 +1,21 @@ + + +# 🧰 fetchLocationDevicesService.js + +Service zum Abrufen aller Einträge aus der `location_device` Tabelle. + +## Verwendung + +```js +const result = await fetchLocationDevicesService(); +``` + +## API-Route + +``` +/api/talas_v5_DB/locationDevice/locationDevices +``` + +## Rückgabe + +- JSON-Array aller Geräte \ No newline at end of file diff --git a/docs/docs/services/database/fetchPriorityConfigService.md b/docs/docs/services/database/fetchPriorityConfigService.md new file mode 100644 index 000000000..7dce4c026 --- /dev/null +++ b/docs/docs/services/database/fetchPriorityConfigService.md @@ -0,0 +1,17 @@ + + +# 🎯 fetchPriorityConfigService.js + +Service zum Abrufen der Prioritätskonfiguration für POIs oder Marker. + +## Verwendung + +```js +const result = await fetchPriorityConfigService(); +``` + +## API-Route + +``` +/api/talas_v5_DB/priorityConfig +``` \ No newline at end of file diff --git a/docs/docs/services/database/getDeviceIdByNameService.md b/docs/docs/services/database/getDeviceIdByNameService.md new file mode 100644 index 000000000..cc0903403 --- /dev/null +++ b/docs/docs/services/database/getDeviceIdByNameService.md @@ -0,0 +1,22 @@ + + +# 🆔 getDeviceIdByNameService.js + +Service zur Ermittlung der Geräte-ID (`idLD`) anhand eines Gerätenamens. + +## Verwendung + +```js +const id = await getDeviceIdByNameService("CPL-V4"); +``` + +## API-Route + +``` +/api/talas_v5_DB/locationDevice/getDeviceId?deviceName=... +``` + +## Rückgabe + +- Erfolgreich: `idLD` (number) +- Fehler: Exception \ No newline at end of file diff --git a/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md b/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md new file mode 100644 index 000000000..f40447bab --- /dev/null +++ b/docs/docs/services/database/locationDevice/fetchLocationDevicesService.md @@ -0,0 +1,21 @@ + + +# 🧰 fetchLocationDevicesService.js + +Service zum Abrufen aller Einträge aus der `location_device` Tabelle. + +## Verwendung + +```js +const result = await fetchLocationDevicesService(); +``` + +## API-Route + +``` +/api/talas_v5_DB/locationDevice/locationDevices +``` + +## Rückgabe + +- JSON-Array aller Geräte \ No newline at end of file diff --git a/docs/docs/services/database/pois/addPoiService.md b/docs/docs/services/database/pois/addPoiService.md new file mode 100644 index 000000000..16d80616d --- /dev/null +++ b/docs/docs/services/database/pois/addPoiService.md @@ -0,0 +1,22 @@ + + +# ➕ addPoiService.js + +Service zum Hinzufügen eines neuen POIs in der Datenbank. + +## Verwendung + +```js +await addPoiService({ + name: "Beispiel", + poiTypeId: 1, + idLD: 12, + latitude: 53.21, + longitude: 8.43 +}); +``` + +## API + +- Endpoint: `POST /api/talas_v5_DB/pois/addPoi` +- Headers: `"Content-Type": "application/json"` \ No newline at end of file diff --git a/docs/docs/services/database/pois/deletePoiService.md b/docs/docs/services/database/pois/deletePoiService.md new file mode 100644 index 000000000..62569ca9a --- /dev/null +++ b/docs/docs/services/database/pois/deletePoiService.md @@ -0,0 +1,15 @@ + + +# ❌ deletePoiService.js + +Service zum Löschen eines POIs aus der Datenbank per ID. + +## Verwendung + +```js +await deletePoiService(id); +``` + +## API + +- Endpoint: `DELETE /api/talas_v5_DB/pois/deletePoi?id=ID` \ No newline at end of file diff --git a/docs/docs/services/database/pois/fetchPoiDataByIdService.md b/docs/docs/services/database/pois/fetchPoiDataByIdService.md new file mode 100644 index 000000000..fbbb86acc --- /dev/null +++ b/docs/docs/services/database/pois/fetchPoiDataByIdService.md @@ -0,0 +1,15 @@ + + +# 🔍 fetchPoiDataByIdService.js + +Service zum Abrufen der POI-Daten anhand einer POI-ID. + +## Verwendung + +```js +const poi = await fetchPoiDataService(idPoi); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/pois/getPoiById?idPoi=ID` \ No newline at end of file diff --git a/docs/docs/services/database/pois/fetchPoiDataService.md b/docs/docs/services/database/pois/fetchPoiDataService.md new file mode 100644 index 000000000..797a8a658 --- /dev/null +++ b/docs/docs/services/database/pois/fetchPoiDataService.md @@ -0,0 +1,15 @@ + + +# 📄 fetchPoiDataService.js + +Lädt POI-Icons (alias `poiData`) aus dem Serververzeichnis. + +## Verwendung + +```js +const data = await fetchPoiDataService(); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/pois/poi-icons` \ No newline at end of file diff --git a/docs/docs/services/database/pois/fetchPoiIconsDataService.md b/docs/docs/services/database/pois/fetchPoiIconsDataService.md new file mode 100644 index 000000000..8e1ff22a0 --- /dev/null +++ b/docs/docs/services/database/pois/fetchPoiIconsDataService.md @@ -0,0 +1,15 @@ + + +# 🖼️ fetchPoiIconsDataService.js + +Service zum Abrufen der POI-Icon-Metadaten. + +## Verwendung + +```js +const icons = await fetchPoiIconsDataService(); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/pois/poi-icons` \ No newline at end of file diff --git a/docs/docs/services/database/pois/fetchPoiMarkersService.md b/docs/docs/services/database/pois/fetchPoiMarkersService.md new file mode 100644 index 000000000..de209ebdf --- /dev/null +++ b/docs/docs/services/database/pois/fetchPoiMarkersService.md @@ -0,0 +1,15 @@ + + +# 📍 fetchPoiMarkersService.js + +Service zum Abrufen aller gespeicherten POI-Marker (Positionen). + +## Verwendung + +```js +const pois = await fetchPoiMarkersService(); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/pois/readAllPOIs` \ No newline at end of file diff --git a/docs/docs/services/database/pois/fetchPoiTypService.md b/docs/docs/services/database/pois/fetchPoiTypService.md new file mode 100644 index 000000000..360d035fe --- /dev/null +++ b/docs/docs/services/database/pois/fetchPoiTypService.md @@ -0,0 +1,15 @@ + + +# 🗂️ fetchPoiTypService.js + +Service zum Abrufen aller verfügbaren POI-Typen aus der Datenbank. + +## Verwendung + +```js +const types = await fetchPoiTypService(); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/poiTyp/readPoiTyp` \ No newline at end of file diff --git a/docs/docs/services/database/pois/updatePoiService.md b/docs/docs/services/database/pois/updatePoiService.md new file mode 100644 index 000000000..07f78d478 --- /dev/null +++ b/docs/docs/services/database/pois/updatePoiService.md @@ -0,0 +1,21 @@ + + +# 📝 updatePoiService.js + +Service zur Aktualisierung eines POIs mit neuen Informationen. + +## Verwendung + +```js +await updatePoiService({ + idPoi: 5, + description: "Neuer Text", + idLD: 3, + idPoiTyp: 1 +}); +``` + +## API + +- Endpoint: `POST /api/talas_v5_DB/pois/updatePoi` +- Body: JSON mit den zu aktualisierenden Feldern \ No newline at end of file diff --git a/docs/docs/services/database/polylines/fetchGisLinesService.md b/docs/docs/services/database/polylines/fetchGisLinesService.md new file mode 100644 index 000000000..13cecfeca --- /dev/null +++ b/docs/docs/services/database/polylines/fetchGisLinesService.md @@ -0,0 +1,19 @@ + + +# 📡 fetchGisLinesService.js + +Service zum Abrufen aller Linien aus der `gisLines`-Tabelle der Datenbank. + +## Verwendung + +```js +const lines = await fetchGisLinesService(); +``` + +## API + +- Endpoint: `GET /api/talas_v5_DB/gisLines/readGisLines` + +## Rückgabe + +- JSON-Array mit allen Linien und ihren Koordinaten \ No newline at end of file diff --git a/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md b/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md new file mode 100644 index 000000000..2cf961735 --- /dev/null +++ b/docs/docs/services/database/polylines/updatePolylineCoordinatesService.md @@ -0,0 +1,24 @@ + + +# 🧭 updatePolylineCoordinatesService.js + +Service zum Aktualisieren der Koordinaten einer Linie in der Datenbank. + +## Verwendung + +```js +await updatePolylineCoordinatesService({ + idLD: 5, + idModul: 1, + newCoordinates: [[53.2, 8.4], [53.21, 8.45]] +}); +``` + +## API + +- Endpoint: `POST /api/talas_v5_DB/gisLines/updateLineCoordinates` +- Headers: `{ "Content-Type": "application/json" }` + +## Fehlerbehandlung + +- Bei Fehler: `throw new Error(...)` mit Backend-Meldung \ No newline at end of file diff --git a/docs/docs/services/database/updateLocationInDatabaseService.md b/docs/docs/services/database/updateLocationInDatabaseService.md new file mode 100644 index 000000000..e5561d0fe --- /dev/null +++ b/docs/docs/services/database/updateLocationInDatabaseService.md @@ -0,0 +1,21 @@ + + +# 📍 updateLocationInDatabaseService.js + +Service zur Aktualisierung der Geokoordinaten eines POIs in der Datenbank. + +## Verwendung + +```js +await updateLocationInDatabaseService(id, lat, lng); +``` + +## API-Route + +``` +/api/talas_v5_DB/pois/updateLocation +``` + +## Methode + +- `POST` mit JSON-Body: `{ id, latitude, longitude }` \ No newline at end of file diff --git a/docs/docs/services/utils/fetchWithTimeout.md b/docs/docs/services/utils/fetchWithTimeout.md new file mode 100644 index 000000000..c57084bb4 --- /dev/null +++ b/docs/docs/services/utils/fetchWithTimeout.md @@ -0,0 +1,46 @@ + + +# ⏱️ fetchWithTimeout.js + +Hilfsfunktion zur Durchführung eines `fetch`-Requests mit einem Timeout. + +--- + +## 💡 Zweck + +Manche Serveranfragen können hängen bleiben. Diese Funktion sorgt dafür, dass eine Anfrage nach einer bestimmten Zeit abgebrochen wird, um UI-Blockierungen oder lange Wartezeiten zu vermeiden. + +--- + +## 🧩 Funktion + +```js +fetchWithTimeout(url, options, timeout); +``` + +- `url`: Ziel-URL +- `options`: Fetch-Optionen (Headers, Methode etc.) +- `timeout`: Zeit in Millisekunden (Standard: 5000 ms) + +--- + +## Beispiel + +```js +const response = await fetchWithTimeout("/api/data", {}, 3000); +``` + +--- + +## Verhalten + +- Verwendet `AbortController` zur Abbruchsteuerung +- Gibt den `fetch`-Response oder einen Fehler zurück + +--- + +## Pfad + +``` +/services/utils/fetchWithTimeout.js +``` \ No newline at end of file diff --git a/docs/docs/services/webservice/fetchGisLinesStatusService.md b/docs/docs/services/webservice/fetchGisLinesStatusService.md new file mode 100644 index 000000000..da7745114 --- /dev/null +++ b/docs/docs/services/webservice/fetchGisLinesStatusService.md @@ -0,0 +1,60 @@ + + +# fetchGisLinesStatusService + +Lädt Linienstatus-Daten über den TALAS WebService. + +--- + +## 📁 URL-Aufbau + +``` +/ClientData/WebServiceMap.asmx/GisLinesStatus?idMap={idMap} +``` + +- Die `idMap` wird automatisch aus der URL (`?m=...`) gelesen. +- Diese WebService-Antwort enthält ein Objekt mit dem Feld `Statis[]`. + +--- + +## ✅ Rückgabe + +```json +{ + "Name": "...", + "Statis": [ ... ] +} +``` + +- `Statis[]` enthält Statusinformationen zu Linien (Farben, Meldungen, Werte). +- Diese Daten sind **nicht identisch** mit `gisLines.data` aus der Datenbank. + +--- + +## ❗ Unterschied zu `gisLinesSlice` (aus der Datenbank) + +| Eigenschaft | `gisLines` (DB) | `gisLinesStatus` (WebService) | +| ----------- | --------------------------- | ----------------------------------- | +| Quelle | `api/talas_v5_DB/gisLines` | `WebServiceMap.asmx/GisLinesStatus` | +| Daten | Liniengeometrien (`points`) | Status, Meldungen, Farben, Werte | +| Typ | `PolyLine-Daten` | `Statusanzeige` für Linien | +| Nutzung | Layer-Rendering | Farbliche Darstellung / Tooltip | + +--- + +## 🧠 Verwendung im Frontend + +- Die Daten werden über `fetchGisLinesStatusThunk` geladen. +- Sie landen im Redux Slice `gisLinesStatusSlice`. +- Zugriff über: `selectGisLinesStatus(state)` → enthält `.data`, `.status`, `.error` + +--- + +## 📁 Zugehörige Dateien + +| Datei | Zweck | +| ------------------------------- | ---------------------- | +| `fetchGisLinesStatusService.js` | WebService-Aufruf | +| `fetchGisLinesStatusThunk.js` | Redux Thunk | +| `gisLinesStatusSlice.js` | Redux Slice | +| `store.js` | Integration des Slices | diff --git a/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md b/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md new file mode 100644 index 000000000..f10c4b708 --- /dev/null +++ b/docs/docs/services/webservice/fetchGisStationsMeasurementsService.md @@ -0,0 +1,16 @@ + + +# 📈 fetchGisStationsMeasurementsService.js + +Lädt Schleifen- und Isolationswerte für Stationen. + +## Verwendung + +```js +const messwerte = await fetchGisStationsMeasurementsService(); +``` + +## API-Aufruf + +- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsMeasurements?idMap=...&idUser=...` +- Rückgabe: `Statis[]` \ No newline at end of file diff --git a/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md b/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md new file mode 100644 index 000000000..5ab0812b3 --- /dev/null +++ b/docs/docs/services/webservice/fetchGisStationsStaticDistrictService.md @@ -0,0 +1,16 @@ + + +# 🧭 fetchGisStationsStaticDistrictService.js + +Lädt Koordinateninformationen (`Points[]`) aller Stationen im aktuellen Bezirk. + +## Verwendung + +```js +const points = await fetchGisStationsStaticDistrictService(); +``` + +## API-Aufruf + +- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsStaticDistrict?idMap=...&idUser=...` +- Rückgabe: `Points[]` \ No newline at end of file diff --git a/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md b/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md new file mode 100644 index 000000000..c5d217c08 --- /dev/null +++ b/docs/docs/services/webservice/fetchGisStationsStatusDistrictService.md @@ -0,0 +1,16 @@ + + +# 🚦 fetchGisStationsStatusDistrictService.js + +Service zum Abrufen des Status aller Stationen im aktuellen Bezirk. + +## Verwendung + +```js +const result = await fetchGisStationsStatusDistrictService(); +``` + +## API-Aufruf + +- Endpoint: `/ClientData/WebServiceMap.asmx/GisStationsStatusDistrict?idMap=...&idUser=...` +- Rückgabe: `Statis[]` \ No newline at end of file diff --git a/docs/docs/services/webservice/fetchGisSystemStaticService.md b/docs/docs/services/webservice/fetchGisSystemStaticService.md new file mode 100644 index 000000000..1a7da718f --- /dev/null +++ b/docs/docs/services/webservice/fetchGisSystemStaticService.md @@ -0,0 +1,16 @@ + + +# 🧱 fetchGisSystemStaticService.js + +Service zur Abfrage von Systemdaten aller Module aus dem Webservice. + +## Verwendung + +```js +const systems = await fetchGisSystemStaticService(); +``` + +## API-Aufruf + +- Endpoint: `/ClientData/WebServiceMap.asmx/GisSystemStatic?idMap=...&idUser=...` +- Rückgabe: `Systems[]` \ No newline at end of file diff --git a/docs/docs/services/webservice/fetchUserRightsService.md b/docs/docs/services/webservice/fetchUserRightsService.md new file mode 100644 index 000000000..ed0b170cb --- /dev/null +++ b/docs/docs/services/webservice/fetchUserRightsService.md @@ -0,0 +1,16 @@ + + +# 🔐 fetchUserRightsService.js + +Lädt die Benutzerrechte über den TALAS WebService. + +## Verwendung + +```js +const rights = await fetchUserRightsService(); +``` + +## API-Aufruf + +- Endpoint: `/ClientData/WebServiceMap.asmx/GisSystemStatic?idMap=...&idUser=...` +- Rückgabe: `Rights[]` (Fallback: `[]`) \ No newline at end of file diff --git a/docs/docs/utils/addContextMenuToMarker.md b/docs/docs/utils/addContextMenuToMarker.md new file mode 100644 index 000000000..beaf58578 --- /dev/null +++ b/docs/docs/utils/addContextMenuToMarker.md @@ -0,0 +1,28 @@ + + +# 🧭 addContextMenuToMarker.js + +Fügt einem Leaflet-Marker ein individuelles Kontextmenü hinzu. + +## Zweck + +- Erlaubt dem Nutzer über Rechtsklick oder Interaktion den Zugriff auf Funktionen wie: + - „Station öffnen (Tab)“ + - „Details anzeigen“ + - „Bearbeiten starten“ + +## Verwendung + +```js +addContextMenuToMarker(marker, idLD, name); +``` + +## Parameter + +- `marker`: Leaflet-Marker +- `idLD`: Geräte-ID +- `name`: Anzeigename + +## Kontext + +- Wird z. B. in `createAndSetDevices.js` verwendet diff --git a/docs/docs/utils/contextMenuUtils.md b/docs/docs/utils/contextMenuUtils.md new file mode 100644 index 000000000..753c40008 --- /dev/null +++ b/docs/docs/utils/contextMenuUtils.md @@ -0,0 +1,14 @@ + + +# 📋 contextMenuUtils.js + +Hilfsfunktionen zur Verwaltung des Kontextmenüs auf Kartenmarkern und Polylinien. + +## Exportierte Funktionen + +- `getPoiContextMenuOptions(marker)` +- `getPolylineContextMenuOptions(line)` + +## Zweck + +- Menüeinträge je nach Zustand und Marker-Art dynamisch generieren diff --git a/docs/docs/utils/devices/createAndSetDevices.md b/docs/docs/utils/devices/createAndSetDevices.md new file mode 100644 index 000000000..62dece85a --- /dev/null +++ b/docs/docs/utils/devices/createAndSetDevices.md @@ -0,0 +1,107 @@ + + +# 🧭 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.local` 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` diff --git a/docs/docs/utils/geometryUtils.md b/docs/docs/utils/geometryUtils.md new file mode 100644 index 000000000..4dd2920f1 --- /dev/null +++ b/docs/docs/utils/geometryUtils.md @@ -0,0 +1,14 @@ + + +# 📐 geometryUtils.js + +Mathematische Funktionen zur Berechnung geometrischer Werte auf der Karte. + +## Funktionen + +- `calculateDistance(latlng1, latlng2)` +- `getMidpoint(coords)` + +## Zweck + +- Interne Hilfsfunktionen für Strecken, Tooltip-Positionen etc. diff --git a/docs/docs/utils/initializeMap.md b/docs/docs/utils/initializeMap.md new file mode 100644 index 000000000..738b33a9f --- /dev/null +++ b/docs/docs/utils/initializeMap.md @@ -0,0 +1,15 @@ + + +# 🗺️ initializeMap.js + +Initialisiert die Leaflet-Karte mit Basislayern, Gruppen und globalen Events. + +## Funktionen + +- `initializeMap(mapElementId)` + +## Verhalten + +- Erstellt LayerGroups (Devices, POIs, Linien) +- Bindet Kontextmenü +- Stellt Default-Zoom und Position ein diff --git a/docs/docs/utils/mapUtils.md b/docs/docs/utils/mapUtils.md new file mode 100644 index 000000000..4db6069a7 --- /dev/null +++ b/docs/docs/utils/mapUtils.md @@ -0,0 +1,10 @@ + + +# 🧰 mapUtils.js + +Allgemeine Hilfsfunktionen für Leaflet (z. B. Zoom, Marker-Checks, Layer-Findung). + +## Funktionen + +- `zoomToBounds(layerGroup)` +- `findLayerById(map, id)` diff --git a/docs/docs/utils/markerUtils.md b/docs/docs/utils/markerUtils.md new file mode 100644 index 000000000..0df242dce --- /dev/null +++ b/docs/docs/utils/markerUtils.md @@ -0,0 +1,14 @@ + + +# 📍 markerUtils.js + +Hilfsfunktionen zur Erstellung und Konfiguration von Leaflet-Markern. + +## Exportierte Funktionen + +- `createIconByType(type)` +- `createMarker(position, icon)` + +## Kontext + +- Wird in `setupDevices.js` und `setupPOIs.js` verwendet diff --git a/docs/docs/utils/mysqlPool.md b/docs/docs/utils/mysqlPool.md new file mode 100644 index 000000000..847f12ae7 --- /dev/null +++ b/docs/docs/utils/mysqlPool.md @@ -0,0 +1,16 @@ + + +# 💾 mysqlPool.js + +MySQL-Verbindungspool für effiziente Datenbankabfragen (z. B. mit `promise-mysql`). + +## Verwendung + +```js +const connection = await pool.getConnection(); +``` + +## Zweck + +- Reuse von Verbindungen +- Fehlervermeidung bei vielen gleichzeitigen Abfragen diff --git a/docs/docs/utils/openInNewTab.md b/docs/docs/utils/openInNewTab.md new file mode 100644 index 000000000..d883d4f63 --- /dev/null +++ b/docs/docs/utils/openInNewTab.md @@ -0,0 +1,15 @@ + + +# 🪟 openInNewTab.js + +Öffnet eine URL in einem neuen Tab und schützt vor Referrer-Leaks. + +## Verwendung + +```js +openInNewTab(url); +``` + +## Intern + +- nutzt `window.open` mit `noopener,noreferrer` diff --git a/docs/docs/utils/openInSameWindow.md b/docs/docs/utils/openInSameWindow.md new file mode 100644 index 000000000..c778e2c18 --- /dev/null +++ b/docs/docs/utils/openInSameWindow.md @@ -0,0 +1,15 @@ + + +# 🚪 openInSameWindow.js + +Öffnet eine URL im aktuellen Tab. + +## Verwendung + +```js +openInSameWindow("/target"); +``` + +## Verhalten + +- `window.location.href = url` diff --git a/docs/docs/utils/poiUtils.md b/docs/docs/utils/poiUtils.md new file mode 100644 index 000000000..aa67c8922 --- /dev/null +++ b/docs/docs/utils/poiUtils.md @@ -0,0 +1,14 @@ + + +# 🧭 poiUtils.js + +Hilfsfunktionen zur Handhabung von POIs (z. B. Icons, Typzuordnung, Interaktion). + +## Funktionen + +- `getIconForPoiType(type)` +- `groupPOIsByType(list)` + +## Verwendung + +- In `setupPOIs.js` und Thunks für POI-Handling diff --git a/docs/docs/utils/polylines/contextMenu.md b/docs/docs/utils/polylines/contextMenu.md new file mode 100644 index 000000000..df9114129 --- /dev/null +++ b/docs/docs/utils/polylines/contextMenu.md @@ -0,0 +1,10 @@ + + +# 📋 contextMenu.js + +Funktionen zum Steuern des Polyline-Kontextmenüs (Schließen, Zurücksetzen, etc.). + +## exportierte Funktionen + +- `closePolylineSelectionAndContextMenu(map)`: Setzt Polyline-Auswahl zurück und schließt das Kontextmenü +- `monitorContextMenu(map)`: Überwacht via `localStorage`, ob das Menü automatisch geschlossen werden soll \ No newline at end of file diff --git a/docs/docs/utils/polylines/eventHandlers.md b/docs/docs/utils/polylines/eventHandlers.md new file mode 100644 index 000000000..e28deb95a --- /dev/null +++ b/docs/docs/utils/polylines/eventHandlers.md @@ -0,0 +1,10 @@ + + +# 🖱️ eventHandlers.js + +Bindet Maus-Events an Polylinien (z. B. Hover-Effekte). + +## exportierte Funktionen + +- `enablePolylineEvents(polylines, lineColors)` +- `disablePolylineEvents(polylines)` \ No newline at end of file diff --git a/docs/docs/utils/polylines/monitorContextMenu.md b/docs/docs/utils/polylines/monitorContextMenu.md new file mode 100644 index 000000000..5e72ebb20 --- /dev/null +++ b/docs/docs/utils/polylines/monitorContextMenu.md @@ -0,0 +1,10 @@ + + +# 🔄 monitorContextMenu.js + +Erweiterte Überwachung des Kontextmenüs über `localStorage`. + +## Funktion + +- Importiert `closePolylineSelectionAndContextMenu` +- Ruft regelmäßig `setTimeout` auf, um `contextMenuExpired` zu prüfen \ No newline at end of file diff --git a/docs/docs/utils/polylines/polylineSubscription.md b/docs/docs/utils/polylines/polylineSubscription.md new file mode 100644 index 000000000..a7374f798 --- /dev/null +++ b/docs/docs/utils/polylines/polylineSubscription.md @@ -0,0 +1,10 @@ + + +# 🧭 polylineSubscription.js + +Abonnement auf den Redux-Store, um auf `forceClose` im Kontextmenü zu reagieren. + +## Verhalten + +- Erkennt `polylineContextMenu.forceClose` +- Ruft `contextmenu.hide()` auf und resetet Redux-Status \ No newline at end of file diff --git a/docs/docs/utils/polylines/redrawPolyline.md b/docs/docs/utils/polylines/redrawPolyline.md new file mode 100644 index 000000000..e7ae9d31f --- /dev/null +++ b/docs/docs/utils/polylines/redrawPolyline.md @@ -0,0 +1,14 @@ + + +# 🔁 redrawPolyline.js + +Zeichnet eine Polyline mit neuen Koordinaten und Tooltip neu. + +## Funktion + +```js +redrawPolyline(lineData, lineColors, tooltipContents, map) +``` + +- Entfernt vorherige Polyline +- Erstellt neue mit Tooltip und Hover-Effekten \ No newline at end of file diff --git a/docs/docs/utils/polylines/setupPolylines.md b/docs/docs/utils/polylines/setupPolylines.md new file mode 100644 index 000000000..1f3c20246 --- /dev/null +++ b/docs/docs/utils/polylines/setupPolylines.md @@ -0,0 +1,76 @@ + + +# 🧭 setupPolylines.js – Polylinien zeichnen und verwalten + +## Zweck + +Diese Datei enthält die zentrale Funktion `setupPolylines`, die in der Kartenkomponente (Leaflet) Polylinien sowie Marker basierend auf Gerätekonfigurationen zeichnet und verwaltet. + +Sie wird verwendet, um: + +- Polylinien basierend auf Koordinaten zu zeichnen +- Stützpunkte visuell als Marker anzuzeigen +- Marker kontextsensitiv mit Optionen (z. B. „Stützpunkt entfernen“, „Koordinaten anzeigen“) auszustatten +- Linien aktualisieren und neue Koordinaten in die Datenbank schreiben +- Kontextmenü-Interaktionen zu ermöglichen + +--- + +## Besonderheiten + +- Marker mit speziellen Icons (Start, Ende, Zwischenpunkt) +- Interaktivität abhängig vom Bearbeitungsmodus (editMode aus `localStorage`) +- Kontextmenü pro Marker und Linie individuell steuerbar +- API-Aufrufe zur Koordinaten-Aktualisierung: + `POST /api/talas_v5_DB/gisLines/updateLineCoordinates` + +--- + +## Dynamische URL mit Port-Steuerung + +Die Datei verwendet **keine feste API-Basis-URL** mehr aus `.env.local`. +Stattdessen wird `NEXT_PUBLIC_API_PORT_MODE` genutzt, um zwischen Entwicklungs- und Produktionsumgebung zu unterscheiden: + +```env +NEXT_PUBLIC_API_PORT_MODE=dev +``` + +### Beispiel im Code: + +```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/`; +``` + +--- + +## Kontextmenüaktionen + +- Station öffnen (neuer Tab) +- Koordinaten anzeigen +- Zoom in/out +- Karte zentrieren +- Stützpunkt hinzufügen/entfernen (wenn editMode) + +--- + +## Speicherorte + +- Polylinien und LineColors werden unter `window.polylines` und `window.lineColors` global gespeichert +- Aktive Redux-Slices: + - `polylineContextMenuSlice` + - `addPoiOnPolylineSlice` + - `polylineLayerVisibleSlice` + +--- + +## Siehe auch + +- API-Aufruf: `/api/talas_v5_DB/gisLines/updateLineCoordinates` +- `utils/geometryUtils.js`, `poiUtils.js`, `eventHandlers.js` +- `redux/slices/polylineContextMenuSlice.js` + +--- + +📄 Pfad: `/docs/frontend/utils/polylines/setupPolylines.md` diff --git a/docs/docs/utils/setupDevices.md b/docs/docs/utils/setupDevices.md new file mode 100644 index 000000000..3297a5cf7 --- /dev/null +++ b/docs/docs/utils/setupDevices.md @@ -0,0 +1,15 @@ + + +# 🔌 setupDevices.js + +Fügt alle Geräte (Devices) zur Karte hinzu. + +## Funktionen + +- `setupDevices(map, deviceList)` + +## Verhalten + +- Marker-Erstellung +- Eventbindung +- Layer-Zuweisung diff --git a/docs/docs/utils/setupPOIs.md b/docs/docs/utils/setupPOIs.md new file mode 100644 index 000000000..c84e09202 --- /dev/null +++ b/docs/docs/utils/setupPOIs.md @@ -0,0 +1,32 @@ + + +# 🧭 `setupPOIs.js` + +## Zweck + +Zeichnet alle POI-Marker auf die Leaflet-Karte basierend auf Datenbankeinträgen. Bindet Popup, Kontextmenü, Drag'n'Drop und Redux-Zustand ein. + +## Parameter + +| Name | Beschreibung | +| ----------------- | ---------------------------------------------------- | +| `map` | Leaflet-Instanz | +| `pois` | Array mit POI-Objekten aus der Datenbank | +| `poiData` | Array mit Iconpfaden: `{ idPoi, path }` | +| `poiTypMap` | Map-Objekt: `idPoiTyp → Name` | +| `poiLayerVisible` | Gibt an, ob Layer überhaupt gezeichnet werden sollen | + +## Besonderheiten + +- Icon wird über `iconMap.get(idPoi)` bezogen +- Fallback bei unbekanntem Icon (`default-icon.png`) +- Rechteprüfung für Drag & Kontextmenü (`userRights.some(...)`) +- Marker können bearbeitet, verschoben, gelöscht werden +- Bei `mouseover` → Redux: `setSelectedPoi(poi)` + +## Beispiel für Testdaten + +```js +const poi = { idPoi: 7, idPoiTyp: 2, position: "POINT(8.5 53.1)", description: "Mast", idLD: 123 }; +const poiData = [{ idPoi: 7, path: "poi-marker-icon-2.png" }]; +``` diff --git a/docs/docs/utils/zoomAndCenterUtils.md b/docs/docs/utils/zoomAndCenterUtils.md new file mode 100644 index 000000000..a2bb75dca --- /dev/null +++ b/docs/docs/utils/zoomAndCenterUtils.md @@ -0,0 +1,10 @@ + + +# 🔍 zoomAndCenterUtils.js + +Hilfsfunktionen zum Zoomen auf Marker oder Linien. + +## Funktionen + +- `zoomToMarker(map, marker)` +- `centerOnCoordinates(map, coords)`