docs
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
// /config/appVersion
|
||||
export const APP_VERSION = "1.1.198";
|
||||
export const APP_VERSION = "1.1.199";
|
||||
|
||||
BIN
docs/docs/NodeMap.pdf
Normal file
BIN
docs/docs/NodeMap.pdf
Normal file
Binary file not shown.
14
docs/docs/README.md
Normal file
14
docs/docs/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<!-- /docs/README.md -->
|
||||
|
||||
# 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.
|
||||
90
docs/docs/architecture.md
Normal file
90
docs/docs/architecture.md
Normal file
@@ -0,0 +1,90 @@
|
||||
<!-- /docs/architecture.md -->
|
||||
|
||||
# 🧠 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/)
|
||||
46
docs/docs/build-and-deploy.md
Normal file
46
docs/docs/build-and-deploy.md
Normal file
@@ -0,0 +1,46 @@
|
||||
<!-- /docs/build-amddeploy.md -->
|
||||
|
||||
# 🛠 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
|
||||
```
|
||||
42
docs/docs/checklist.md
Normal file
42
docs/docs/checklist.md
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- /docs/checklist.md -->
|
||||
|
||||
# 🧾 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.
|
||||
77
docs/docs/components/README.md
Normal file
77
docs/docs/components/README.md
Normal file
@@ -0,0 +1,77 @@
|
||||
<!-- /docs/components/README.md -->
|
||||
|
||||
# 🧩 `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
|
||||
44
docs/docs/components/TestScript.md
Normal file
44
docs/docs/components/TestScript.md
Normal file
@@ -0,0 +1,44 @@
|
||||
<!-- /docs/components/TestScript.md -->
|
||||
|
||||
# 🧪 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
|
||||
|
||||
32
docs/docs/components/contextmenu/CoordinatePopup.md
Normal file
32
docs/docs/components/contextmenu/CoordinatePopup.md
Normal file
@@ -0,0 +1,32 @@
|
||||
<!-- /docs/components/contextmenu/CoordinatePopup.md -->
|
||||
|
||||
# 📌 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)
|
||||
43
docs/docs/components/contextmenu/README.md
Normal file
43
docs/docs/components/contextmenu/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
<!-- /docs/components/contextmenu/README.md -->
|
||||
|
||||
# 🖱️ `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)
|
||||
30
docs/docs/components/contextmenu/useMapContextMenu.md
Normal file
30
docs/docs/components/contextmenu/useMapContextMenu.md
Normal file
@@ -0,0 +1,30 @@
|
||||
<!-- /docs/components/contextmenu/useMapContextMenu.md -->
|
||||
|
||||
# 🖱️ 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)
|
||||
34
docs/docs/components/gisPolylines/PolylineContextMenu.md
Normal file
34
docs/docs/components/gisPolylines/PolylineContextMenu.md
Normal file
@@ -0,0 +1,34 @@
|
||||
<!-- /docs/components/gisPolylines/PolylineContextMenu.md -->
|
||||
|
||||
# 📐 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.
|
||||
16
docs/docs/components/gisPolylines/icons/CircleIcon.md
Normal file
16
docs/docs/components/gisPolylines/icons/CircleIcon.md
Normal file
@@ -0,0 +1,16 @@
|
||||
<!-- /docs/components/gisPolylines/icons/CircleIcon.md -->
|
||||
|
||||
# 🔘 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.
|
||||
|
||||
15
docs/docs/components/gisPolylines/icons/EndIcon.md
Normal file
15
docs/docs/components/gisPolylines/icons/EndIcon.md
Normal file
@@ -0,0 +1,15 @@
|
||||
<!-- /docs/components/gisPolylines/icons/EndIcon.md -->
|
||||
|
||||
# 🔲 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]`
|
||||
15
docs/docs/components/gisPolylines/icons/StartIcon.md
Normal file
15
docs/docs/components/gisPolylines/icons/StartIcon.md
Normal file
@@ -0,0 +1,15 @@
|
||||
<!-- /docs/components/gisPolylines/icons/StartIcon.md -->
|
||||
|
||||
# 🔺 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.
|
||||
20
docs/docs/components/gisPolylines/icons/SupportPointIcons.md
Normal file
20
docs/docs/components/gisPolylines/icons/SupportPointIcons.md
Normal file
@@ -0,0 +1,20 @@
|
||||
<!-- /docs/components/gisPolylines/icons/SupportPointIcons.md -->
|
||||
|
||||
# ➕➖ 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ü
|
||||
@@ -0,0 +1,26 @@
|
||||
<!-- /docs/components/icons/devices/overlapping/PlusRoundIcon.md -->
|
||||
|
||||
# ➕ 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
|
||||
71
docs/docs/components/mainComponent/MapComponent.md
Normal file
71
docs/docs/components/mainComponent/MapComponent.md
Normal file
@@ -0,0 +1,71 @@
|
||||
<!-- /docs/components/mainComponent/MapComponent.md -->
|
||||
|
||||
# 🗺️ 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`
|
||||
53
docs/docs/components/mainComponent/hooks/useInitializeMap.md
Normal file
53
docs/docs/components/mainComponent/hooks/useInitializeMap.md
Normal file
@@ -0,0 +1,53 @@
|
||||
<!-- /docs/components/mainComponent/hooks/useInitializeMap.md -->
|
||||
|
||||
# 🪄 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 `<div id="map">` |
|
||||
| `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`
|
||||
28
docs/docs/components/pois/AddPOIModal.md
Normal file
28
docs/docs/components/pois/AddPOIModal.md
Normal file
@@ -0,0 +1,28 @@
|
||||
<!-- /docs/components/pois/AddPOIModal.md -->
|
||||
|
||||
# ➕ 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`
|
||||
|
||||
29
docs/docs/components/pois/PoiUpdateModal.md
Normal file
29
docs/docs/components/pois/PoiUpdateModal.md
Normal file
@@ -0,0 +1,29 @@
|
||||
<!-- /docs/components/pois/PoiUpdateModal.md -->
|
||||
|
||||
# ✏️ 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
|
||||
101
docs/docs/components/uiWidgets/CoordinateInput.md
Normal file
101
docs/docs/components/uiWidgets/CoordinateInput.md
Normal file
@@ -0,0 +1,101 @@
|
||||
<!-- /docs/components/uiWidgets/CoordinateInput.md -->
|
||||
|
||||
# 📍 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
|
||||
<CoordinateInput
|
||||
onCoordinatesSubmit={(coords) => {
|
||||
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
|
||||
|
||||
---
|
||||
92
docs/docs/components/uiWidgets/VersionInfoModal.md
Normal file
92
docs/docs/components/uiWidgets/VersionInfoModal.md
Normal file
@@ -0,0 +1,92 @@
|
||||
<!-- /docs/components/uiWidgets/VersionInfoModal.md -->
|
||||
|
||||
# 🪪 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`
|
||||
|
||||
---
|
||||
@@ -0,0 +1,85 @@
|
||||
<!-- /docs/components/uiWidgets/mapLayersControlPanel/EditModeToggle.md -->
|
||||
|
||||
# ✏️ 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
|
||||
|
||||
---
|
||||
@@ -0,0 +1,150 @@
|
||||
<!-- /docs/components/uiWidgets/mapLayersControlPanel/MapLayersControlPanel.md -->
|
||||
|
||||
# 🧭 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`
|
||||
|
||||
---
|
||||
38
docs/docs/config/README.md
Normal file
38
docs/docs/config/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
<!-- /docs/config/README.md -->
|
||||
|
||||
# ⚙️ 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.
|
||||
16
docs/docs/config/appVersion.md
Normal file
16
docs/docs/config/appVersion.md
Normal file
@@ -0,0 +1,16 @@
|
||||
<!-- /docs/config/appVersion.md -->
|
||||
|
||||
# 📦 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
|
||||
60
docs/docs/config/config.md
Normal file
60
docs/docs/config/config.md
Normal file
@@ -0,0 +1,60 @@
|
||||
<!-- /docs/config/config.md -->
|
||||
|
||||
# ⚙️ 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`
|
||||
21
docs/docs/config/layers.md
Normal file
21
docs/docs/config/layers.md
Normal file
@@ -0,0 +1,21 @@
|
||||
<!-- /docs/config/layers.md -->
|
||||
|
||||
# 🗺️ 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
|
||||
19
docs/docs/config/paths.md
Normal file
19
docs/docs/config/paths.md
Normal file
@@ -0,0 +1,19 @@
|
||||
<!-- /docs/config/paths.md -->
|
||||
|
||||
# 📁 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
|
||||
18
docs/docs/config/urls.md
Normal file
18
docs/docs/config/urls.md
Normal file
@@ -0,0 +1,18 @@
|
||||
<!-- /docs/config/urls.md -->
|
||||
|
||||
# 🌐 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"`).
|
||||
7
docs/docs/env.local..md
Normal file
7
docs/docs/env.local..md
Normal file
@@ -0,0 +1,7 @@
|
||||
<!-- /docs/env.local -->
|
||||
|
||||
### /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
|
||||
13
docs/docs/hooks/layers/useAreaMarkersLayer.md
Normal file
13
docs/docs/hooks/layers/useAreaMarkersLayer.md
Normal file
@@ -0,0 +1,13 @@
|
||||
<!-- /docs/hooks/layers/useAreaMarkersLayer.md -->
|
||||
|
||||
# 🗺️ 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()`
|
||||
11
docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md
Normal file
11
docs/docs/hooks/layers/useCiscoRouterMarkersLayer.md
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- /docs/hooks/layers/useCiscoRouterMarkersLayer.md -->
|
||||
|
||||
# 🌐 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(...)`
|
||||
11
docs/docs/hooks/layers/useDauzMarkersLayer.md
Normal file
11
docs/docs/hooks/layers/useDauzMarkersLayer.md
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- /docs/hooks/layers/useDauzMarkersLayer.md -->
|
||||
|
||||
# 🔧 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
|
||||
11
docs/docs/hooks/layers/useDrawLines.md
Normal file
11
docs/docs/hooks/layers/useDrawLines.md
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- /docs/hooks/layers/useDrawLines.md -->
|
||||
|
||||
# 🧬 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
|
||||
11
docs/docs/hooks/layers/useEciMarkersLayer.md
Normal file
11
docs/docs/hooks/layers/useEciMarkersLayer.md
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- /docs/hooks/layers/useEciMarkersLayer.md -->
|
||||
|
||||
# 🛰️ 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(...)`
|
||||
11
docs/docs/hooks/layers/useGmaMarkersLayer.md
Normal file
11
docs/docs/hooks/layers/useGmaMarkersLayer.md
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- /docs/hooks/layers/useGmaMarkersLayer.md -->
|
||||
|
||||
# 🌡️ 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
|
||||
10
docs/docs/hooks/layers/useLteModemMarkersLayer.md
Normal file
10
docs/docs/hooks/layers/useLteModemMarkersLayer.md
Normal file
@@ -0,0 +1,10 @@
|
||||
<!-- /docs/hooks/layers/useLteModemMarkersLayer.md -->
|
||||
|
||||
# 📶 useLteModemMarkersLayer.js
|
||||
|
||||
Steuert Marker vom Typ LTE-Modem (System-ID: 5)
|
||||
|
||||
## Features
|
||||
|
||||
- Standard-Kontextmenü + Popup
|
||||
- Integration mit OMS und Overlap-Check
|
||||
10
docs/docs/hooks/layers/useMessstellenMarkersLayer.md
Normal file
10
docs/docs/hooks/layers/useMessstellenMarkersLayer.md
Normal file
@@ -0,0 +1,10 @@
|
||||
<!-- /docs/hooks/layers/useMessstellenMarkersLayer.md -->
|
||||
|
||||
# 🧾 useMessstellenMarkersLayer.js
|
||||
|
||||
Für Messstellen-Marker (System-ID: 13)
|
||||
|
||||
## Verhalten
|
||||
|
||||
- Einfache Marker mit Tooltip
|
||||
- Nutzung von `createAndSetDevices(...)` + Kontextmenü
|
||||
10
docs/docs/hooks/layers/useOtdrMarkersLayer.md
Normal file
10
docs/docs/hooks/layers/useOtdrMarkersLayer.md
Normal file
@@ -0,0 +1,10 @@
|
||||
<!-- /docs/hooks/layers/useOtdrMarkersLayer.md -->
|
||||
|
||||
# 🔍 useOtdrMarkersLayer.js
|
||||
|
||||
Darstellung von OTDR-Messpunkten (System-ID: 9)
|
||||
|
||||
## Funktionen
|
||||
|
||||
- Popup-Interaktion beim Hover
|
||||
- Marker mit Kontextmenü via `addContextMenuToMarker`
|
||||
7
docs/docs/hooks/layers/useSiemensMarkersLayer.md
Normal file
7
docs/docs/hooks/layers/useSiemensMarkersLayer.md
Normal file
@@ -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(...)`
|
||||
7
docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md
Normal file
7
docs/docs/hooks/layers/useSmsfunkmodemMarkersLayer.md
Normal file
@@ -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
|
||||
7
docs/docs/hooks/layers/useSonstigeMarkersLayer.md
Normal file
7
docs/docs/hooks/layers/useSonstigeMarkersLayer.md
Normal file
@@ -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(...)`
|
||||
6
docs/docs/hooks/layers/useTalasMarkersLayer.md
Normal file
6
docs/docs/hooks/layers/useTalasMarkersLayer.md
Normal file
@@ -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
|
||||
6
docs/docs/hooks/layers/useTalasiclMarkersLayer.md
Normal file
6
docs/docs/hooks/layers/useTalasiclMarkersLayer.md
Normal file
@@ -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
|
||||
6
docs/docs/hooks/layers/useTkComponentsMarkersLayer.md
Normal file
6
docs/docs/hooks/layers/useTkComponentsMarkersLayer.md
Normal file
@@ -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
|
||||
7
docs/docs/hooks/layers/useUlafMarkersLayer.md
Normal file
7
docs/docs/hooks/layers/useUlafMarkersLayer.md
Normal file
@@ -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
|
||||
6
docs/docs/hooks/layers/useWagoMarkersLayer.md
Normal file
6
docs/docs/hooks/layers/useWagoMarkersLayer.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# 🧰 useWagoMarkersLayer.js
|
||||
|
||||
Für WAGO-Systeme (System-ID: 7).
|
||||
|
||||
- Kontextmenü, Popup, Overlapping-Support
|
||||
- OMS-Integration und Layer-Hinzufügung
|
||||
7
docs/docs/hooks/layers/useWdmMarkersLayer.md
Normal file
7
docs/docs/hooks/layers/useWdmMarkersLayer.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# 🔷 useWdmMarkersLayer.js
|
||||
|
||||
Verwaltet WDM-Marker (System-ID: 10) in Leaflet.
|
||||
|
||||
- Marker mit Kontextmenü
|
||||
- Mouseover-Popup
|
||||
- Nutzung von `createAndSetDevices(...)`
|
||||
17
docs/docs/hooks/useCreateAndSetDevices.md
Normal file
17
docs/docs/hooks/useCreateAndSetDevices.md
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- /docs/hooks/useCreateAndSetDevices.md -->
|
||||
|
||||
# 🛠️ 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
|
||||
17
docs/docs/hooks/useDynamicMarkerLayers.md
Normal file
17
docs/docs/hooks/useDynamicMarkerLayers.md
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- /docs/hooks/useDynamicMarkerLayers.md -->
|
||||
|
||||
# 🔄 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
|
||||
15
docs/docs/hooks/useLayerVisibility.md
Normal file
15
docs/docs/hooks/useLayerVisibility.md
Normal file
@@ -0,0 +1,15 @@
|
||||
<!-- /docs/hooks/useLayerVisibility.md -->
|
||||
|
||||
# 👁️ 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.
|
||||
19
docs/docs/hooks/useLineData.md
Normal file
19
docs/docs/hooks/useLineData.md
Normal file
@@ -0,0 +1,19 @@
|
||||
<!-- /docs/hooks/useLineData.md -->
|
||||
|
||||
# 📊 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
|
||||
18
docs/docs/hooks/useMapComponentState.md
Normal file
18
docs/docs/hooks/useMapComponentState.md
Normal file
@@ -0,0 +1,18 @@
|
||||
<!-- /docs/hooks/useMapComponentState.md -->
|
||||
|
||||
# 🧠 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`
|
||||
16
docs/docs/hooks/useMarkerLayers.md
Normal file
16
docs/docs/hooks/useMarkerLayers.md
Normal file
@@ -0,0 +1,16 @@
|
||||
<!-- /docs/hooks/useMarkerLayers.md -->
|
||||
|
||||
# 📍 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
|
||||
15
docs/docs/hooks/usePolylineTooltipLayer.md
Normal file
15
docs/docs/hooks/usePolylineTooltipLayer.md
Normal file
@@ -0,0 +1,15 @@
|
||||
<!-- /docs/hooks/usePolylineTooltipLayer.md -->
|
||||
|
||||
# 💬 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.
|
||||
56
docs/docs/nssm-exe-installation.md
Normal file
56
docs/docs/nssm-exe-installation.md
Normal file
@@ -0,0 +1,56 @@
|
||||
<!-- /docs/nssm-exe-installation.md -->
|
||||
|
||||
````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
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
26
docs/docs/pages/_app.md
Normal file
26
docs/docs/pages/_app.md
Normal file
@@ -0,0 +1,26 @@
|
||||
<!-- /docs/pages/_app.md -->
|
||||
|
||||
# 🌐 _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
|
||||
<Provider store={store}>
|
||||
<Component {...pageProps} />
|
||||
</Provider>
|
||||
```
|
||||
|
||||
## Pfad
|
||||
|
||||
```bash
|
||||
/pages/_app.js
|
||||
```
|
||||
45
docs/docs/pages/api/[...path].md
Normal file
45
docs/docs/pages/api/[...path].md
Normal file
@@ -0,0 +1,45 @@
|
||||
<!-- /docs/pages/api/[...path].md -->
|
||||
|
||||
# 🌐 [...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
|
||||
```
|
||||
28
docs/docs/pages/api/talas_v5_DB/area/readArea.md
Normal file
28
docs/docs/pages/api/talas_v5_DB/area/readArea.md
Normal file
@@ -0,0 +1,28 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/area/readArea.md -->
|
||||
|
||||
# 📥 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
|
||||
```
|
||||
32
docs/docs/pages/api/talas_v5_DB/area/updateArea.md
Normal file
32
docs/docs/pages/api/talas_v5_DB/area/updateArea.md
Normal file
@@ -0,0 +1,32 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/area/updateArea.md -->
|
||||
|
||||
# 📤 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
|
||||
@@ -0,0 +1,29 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/device/getAllStationsNames.md -->
|
||||
|
||||
# 🧾 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
|
||||
```
|
||||
34
docs/docs/pages/api/talas_v5_DB/device/getDevices.md
Normal file
34
docs/docs/pages/api/talas_v5_DB/device/getDevices.md
Normal file
@@ -0,0 +1,34 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/device/getDevices.md -->
|
||||
|
||||
# 🔌 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
|
||||
```
|
||||
25
docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md
Normal file
25
docs/docs/pages/api/talas_v5_DB/gisLines/readGisLines.md
Normal file
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/gisLines/readGisLines.md -->
|
||||
|
||||
# 🧭 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
|
||||
```
|
||||
@@ -0,0 +1,30 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/gisLines/updateLineCoordinates.md -->
|
||||
|
||||
# ✏️ 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
|
||||
@@ -0,0 +1,26 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/locationDevice/getDeviceId.md -->
|
||||
|
||||
# 🔍 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
|
||||
@@ -0,0 +1,26 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/locationDevice/locationDeviceNameById.md -->
|
||||
|
||||
# 🏷️ 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
|
||||
@@ -0,0 +1,27 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/locationDevice/locationDevices.md -->
|
||||
|
||||
# 🗂️ 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": "...",
|
||||
...
|
||||
}
|
||||
]
|
||||
```
|
||||
36
docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md
Normal file
36
docs/docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md
Normal file
@@ -0,0 +1,36 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/poiTyp/readPoiTyp.md -->
|
||||
|
||||
# 🗂️ 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
|
||||
}
|
||||
]
|
||||
```
|
||||
25
docs/docs/pages/api/talas_v5_DB/pois/addPoi.md
Normal file
25
docs/docs/pages/api/talas_v5_DB/pois/addPoi.md
Normal file
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/addPoi.md -->
|
||||
|
||||
# ➕ 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
|
||||
20
docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md
Normal file
20
docs/docs/pages/api/talas_v5_DB/pois/deletePoi.md
Normal file
@@ -0,0 +1,20 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/deletePoi.md -->
|
||||
|
||||
# ❌ 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
|
||||
21
docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md
Normal file
21
docs/docs/pages/api/talas_v5_DB/pois/getPoiById.md
Normal file
@@ -0,0 +1,21 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/getPoiById.md -->
|
||||
|
||||
# 🔎 getPoiById.js
|
||||
|
||||
Gibt die Beschreibung eines POIs zurück.
|
||||
|
||||
## Methode
|
||||
|
||||
- `GET`
|
||||
|
||||
## Query-Parameter
|
||||
|
||||
| Parameter | Beschreibung |
|
||||
|-----------|--------------|
|
||||
| `idPoi` | POI-ID |
|
||||
|
||||
## Antwort
|
||||
|
||||
```json
|
||||
{ "description": "POI A" }
|
||||
```
|
||||
21
docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md
Normal file
21
docs/docs/pages/api/talas_v5_DB/pois/poi-icons.md
Normal file
@@ -0,0 +1,21 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/poi-icons.md -->
|
||||
|
||||
# 🖼️ 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" }
|
||||
]
|
||||
```
|
||||
17
docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md
Normal file
17
docs/docs/pages/api/talas_v5_DB/pois/readAllPOIs.md
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/readAllPOIs.md -->
|
||||
|
||||
# 📋 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
|
||||
23
docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md
Normal file
23
docs/docs/pages/api/talas_v5_DB/pois/updateLocation.md
Normal file
@@ -0,0 +1,23 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/updateLocation.md -->
|
||||
|
||||
# 🧭 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 }`
|
||||
25
docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md
Normal file
25
docs/docs/pages/api/talas_v5_DB/pois/updatePoi.md
Normal file
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/pois/updatePoi.md -->
|
||||
|
||||
# 📝 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
|
||||
83
docs/docs/pages/api/talas_v5_DB/priorityConfig.md
Normal file
83
docs/docs/pages/api/talas_v5_DB/priorityConfig.md
Normal file
@@ -0,0 +1,83 @@
|
||||
<!-- Datei: /docs/pages/api/talas_v5_DB/priorityConfig.md -->
|
||||
|
||||
# 📊 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
|
||||
@@ -0,0 +1,29 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/station/getAllStationsNames.md -->
|
||||
|
||||
# 🏷️ 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
|
||||
40
docs/docs/pages/api/talas_v5_DB/station/getDevices.md
Normal file
40
docs/docs/pages/api/talas_v5_DB/station/getDevices.md
Normal file
@@ -0,0 +1,40 @@
|
||||
<!-- /docs/pages/api/talas_v5_DB/device/getDevices.md -->
|
||||
|
||||
# 📦 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
|
||||
32
docs/docs/pages/index.md
Normal file
32
docs/docs/pages/index.md
Normal file
@@ -0,0 +1,32 @@
|
||||
<!-- /docs/pages/index.md -->
|
||||
|
||||
# 🏠 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
|
||||
<MapComponentWithNoSSR locations={locations} onAddLocation={handleAddLocation} />
|
||||
<TestScriptWithNoSSR />
|
||||
```
|
||||
|
||||
## Besonderheiten
|
||||
|
||||
- Dynamisches Nachladen der POIs bei Triggeränderung
|
||||
- Fehleranzeige über `addPoiStatus` + `addPoiError`
|
||||
40
docs/docs/redux/slices/database/area/updateAreaSlice.md
Normal file
40
docs/docs/redux/slices/database/area/updateAreaSlice.md
Normal file
@@ -0,0 +1,40 @@
|
||||
<!-- /docs/redux/slices/database/area/updateAreaSlice.md -->
|
||||
|
||||
# 🧩 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.
|
||||
@@ -0,0 +1,45 @@
|
||||
<!-- /docs/redux/slices/database/locationDevicesSlice.md -->
|
||||
|
||||
# 🧩 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
|
||||
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/redux/slices/database/locationDevicesFromDBSlice.md -->
|
||||
|
||||
# 🧩 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
|
||||
```
|
||||
23
docs/docs/redux/slices/database/locationDevicesSlice.md
Normal file
23
docs/docs/redux/slices/database/locationDevicesSlice.md
Normal file
@@ -0,0 +1,23 @@
|
||||
<!-- /docs/redux/slices/database/locationDevicesSlice.md -->
|
||||
|
||||
# 🧩 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`
|
||||
@@ -0,0 +1,3 @@
|
||||
# 🧩 addPoiOnPolylineSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von addPoiOnPolyline.
|
||||
3
docs/docs/redux/slices/database/pois/addPoiSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/addPoiSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 addPoiSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von addPoi.
|
||||
3
docs/docs/redux/slices/database/pois/currentPoiSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/currentPoiSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 currentPoiSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von currentPoi.
|
||||
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiIconsDataSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POIIconsData.
|
||||
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiLayerVisibleSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POILayerVisible.
|
||||
3
docs/docs/redux/slices/database/pois/poiMarkersSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/poiMarkersSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiMarkersSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POIMarkers.
|
||||
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiReadFromDbTriggerSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POIReadFromDbTrigger.
|
||||
3
docs/docs/redux/slices/database/pois/poiTypSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/poiTypSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiTypSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POITyp.
|
||||
3
docs/docs/redux/slices/database/pois/poiTypesSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/poiTypesSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 poiTypesSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von POITypes.
|
||||
@@ -0,0 +1,3 @@
|
||||
# 🧩 readPoiMarkersStoreSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von readPoiMarkersStore.
|
||||
3
docs/docs/redux/slices/database/pois/selectedPoiSlice.md
Normal file
3
docs/docs/redux/slices/database/pois/selectedPoiSlice.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 🧩 selectedPoiSlice.js
|
||||
|
||||
Redux-Slice zur Verwaltung von selectedPoi.
|
||||
25
docs/docs/redux/slices/database/polylines/gisLinesSlice.md
Normal file
25
docs/docs/redux/slices/database/polylines/gisLinesSlice.md
Normal file
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/redux/slices/database/polylines/gisLinesSlice.md -->
|
||||
|
||||
# 🧩 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
|
||||
```
|
||||
@@ -0,0 +1,25 @@
|
||||
<!-- /docs/redux/slices/database/polylines/polylineContextMenuSlice.md -->
|
||||
|
||||
# 🧩 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()`
|
||||
@@ -0,0 +1,16 @@
|
||||
<!-- /docs/redux/slices/database/polylines/polylineEventsDisabledSlice.md -->
|
||||
|
||||
# 🧩 polylineEventsDisabledSlice.js
|
||||
|
||||
Steuert, ob Interaktionen mit Polylinien (z. B. Ziehen, Klicks) temporär deaktiviert sind.
|
||||
|
||||
## Zustand
|
||||
|
||||
```js
|
||||
{ disabled: boolean }
|
||||
```
|
||||
|
||||
## Aktionen
|
||||
|
||||
- `setDisabled(boolean)`
|
||||
- `toggleDisabled()`
|
||||
@@ -0,0 +1,21 @@
|
||||
<!-- /docs/redux/slices/database/polylines/polylineLayerVisibleSlice.md -->
|
||||
|
||||
# 🧩 polylineLayerVisibleSlice.js
|
||||
|
||||
Steuert die Sichtbarkeit des Polylinienlayers auf der Karte.
|
||||
|
||||
## Zustand
|
||||
|
||||
```js
|
||||
{ visible: boolean }
|
||||
```
|
||||
|
||||
## Aktion
|
||||
|
||||
- `setPolylineVisible(boolean)`
|
||||
|
||||
## Selector
|
||||
|
||||
```js
|
||||
selectPolylineVisible = (state) => state.polylineLayerVisible.visible
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user