From a672fc76e4005b370664aac095adce93335a7875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Gla=CC=88ser?= Date: Sat, 19 Sep 2026 12:39:05 +0200 Subject: [PATCH] Add shared editable action card pattern --- .../ui_foundation/editable-action-card.md | 43 +++++++ modules/shared/auth/ui/home.php | 24 ++-- public/scripts/shared-editable-action-card.js | 116 ++++++++++++++++++ 3 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 docs/modules/shared/ui_foundation/editable-action-card.md create mode 100644 public/scripts/shared-editable-action-card.js diff --git a/docs/modules/shared/ui_foundation/editable-action-card.md b/docs/modules/shared/ui_foundation/editable-action-card.md new file mode 100644 index 0000000..4904db3 --- /dev/null +++ b/docs/modules/shared/ui_foundation/editable-action-card.md @@ -0,0 +1,43 @@ +# Editable Action Card + +## Zweck + +`Editable Action Card` ist ein fachlich neutrales UI-Pattern fuer Karten mit +Titelaktionen, Lesemodus und optionalem Bearbeitungsmodus. + +Das Pattern kapselt nur die technische Interaktion: + +- Umschalten zwischen Lese- und Bearbeitungsansicht +- Abbrechen einer Bearbeitung +- optionale Loeschbestaetigung mit konfigurierbarem Token +- Deaktivieren der Loeschaktion bis zur gueltigen Bestaetigung +- gleichzeitiges Bearbeiten mehrerer Karten + +Fachliche Aktionen, API-Aufrufe, Validierung und die Aktualisierung fachlicher +Daten bleiben beim owning Modul. + +## Markup-Vertrag + +Eine Karte wird mit `data-shared-editable-action-card` markiert. Die +Bedienelemente verwenden folgende Attribute: + +- `data-shared-editable-card-edit` +- `data-shared-editable-card-cancel` +- `data-shared-editable-card-read` +- `data-shared-editable-card-form` +- optional `data-shared-editable-card-delete` +- optional `data-shared-editable-card-delete-confirmation` +- optional `data-shared-editable-card-delete-input` +- optional `data-shared-editable-card-delete-submit` +- optional `data-shared-editable-card-delete-cancel` + +Das Loesch-Token wird je Karte mit +`data-shared-editable-delete-token` konfiguriert. Die Standardaktion fuer das +Loeschen bleibt im owning Modul und verwendet den bestehenden fachlichen +Handler. + +## Nutzung im Lager + +Im Lager-Drawer verwenden die aktive Charge und offene Chargen das Pattern. +Rein lesende Karten, insbesondere historische und virtuelle Chargen, bleiben +beim bestehenden Content-Card-Pattern. diff --git a/modules/shared/auth/ui/home.php b/modules/shared/auth/ui/home.php index b1cfbcf..66dc3af 100644 --- a/modules/shared/auth/ui/home.php +++ b/modules/shared/auth/ui/home.php @@ -476,9 +476,9 @@ function auth_render_lager_open_lots(array $lagerProducts, string $manufacturerO && trim((string) ($lot['purchase_date'] ?? '')) !== '' && (float) ($lot['qty_net'] ?? 0) > 0; $selectButton = ''; - $html[] = '
' - . '
Offene Charge
' . $selectButton . '
' - . '

Auswahl: ' . auth_escape_html($selectedText) . '
Naurua-Chargennummer: ' . auth_escape_html((string) ($lot['lot_number'] ?? 'Nicht hinterlegt')) . '
' + $html[] = '

' + . '
Offene Charge
' . $selectButton . '
' + . '

Auswahl: ' . auth_escape_html($selectedText) . '
Naurua-Chargennummer: ' . auth_escape_html((string) ($lot['lot_number'] ?? 'Nicht hinterlegt')) . '
' . 'Status: Vorbereitet
' . 'Bestand: ' . auth_format_lager_quantity((float) ($lot['qty_net'] ?? 0)) . '
' . 'Eingangsmenge: ' . auth_format_lager_quantity((float) ($lot['qty_in'] ?? 0)) . '
' @@ -487,7 +487,7 @@ function auth_render_lager_open_lots(array $lagerProducts, string $manufacturerO . 'Herstellungsdatum: ' . auth_format_lager_date($lot['mfg_date'] ?? null) . '
' . 'MHD: ' . auth_format_lager_date($lot['expiry_date'] ?? null) . '
' . 'Einkaufsdatum: ' . auth_format_lager_date($lot['purchase_date'] ?? null) . '

' - . '
' + . '

' . '' - . ''; + . ''; } $html[] = ''; } @@ -566,10 +566,10 @@ function auth_render_lager_content(array $lagerProducts, array $lagerArtikel, ar . '' . '' . '
' . auth_render_lager_open_lots($lagerProducts, $manufacturerOptions) . '
' - . '
' - . '
Aktive Charge
' - . '

Naurua-Chargennummer:
Aktueller Bestand:
Eingangsmenge:
Hersteller:
Hersteller-Chargennummer:
Herstellungsdatum:
MHD:
Einkaufsdatum:

' - . '
' . '
' . auth_render_lager_historical_lots($lagerProducts) . '
' @@ -823,6 +823,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best echo ''; echo ''; echo ''; + echo ''; echo '