Rebrand Hub+Flux
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run

This commit is contained in:
Kevin Adametz 2026-05-20 15:44:15 +02:00
parent 0a3e52d603
commit 9b47296cea
130 changed files with 9357 additions and 3345 deletions

View file

@ -0,0 +1,136 @@
# Phase 4I — Admin „Pressemitteilungen" Mockup-Patterns
> Folgepäckchen zu 4H. Überträgt die in der Customer-PM-Liste
> entwickelten Mockup-Patterns auf die Admin-Seite. Die
> CSS-Komponenten existieren bereits.
**Status**: ✅ abgeschlossen · **Aufwand**: ~½ Tag · **Risiko**: niedrig
---
## Anlass
Nach 4H matched `customer/press-releases/index.blade.php` das
Mockup zu ~90 %. Die gleichen Patterns gehören in die
Admin-Liste — das ist der zentrale Editorial-Workflow.
## Aktueller Stand
`admin/press-releases/index.blade.php` ist bei ~60 % Match:
- ✅ Page-Header (Hub-Stil)
- ✅ 4-KPI-Reihe (`<x-portal.stat-card>`)
- ✅ Filter-Panel (search/status/portal/language/category +
3 entity-comboboxes)
- ✅ Tabellen-Panel + Empty-State (Hub-styled)
- ✅ Modals (publish/reject/archive) — test-kritisch
- ❌ Saved-Views-Tabs
- ❌ Active-Chips für aktive Filter
- ❌ Portal-Pills (statt Text)
- ❌ Row-Tinting (review/rejected)
- ❌ Inline-Actions („Veröffentlichen →", „Ablehnen →" neben Status)
- ❌ Reichere Sub-Zeilen (PM-{id} + Datum + Status-Kontext)
## Scope
### 1. Saved-Views-Tabs
Tab-Leiste zwischen KPI-Reihe und Filter:
`Alle · Veröffentlicht · In Prüfung · Entwürfe · Abgelehnt · Archiv`
Counter-Pille pro Tab basierend auf erweiterten `stats`.
### 2. Active-Chips
Sichtbarkeit aller aktiven Filter (Status, Portal, Sprache,
Kategorie, User, Firma, Kontakt, Suche), jeweils mit `×`.
### 3. Portal-Pills
Statt „Presseecho"/„Businessportal24"/„Beide" als Text:
Portal-Pills mit farbigem Dot. Bei `Portal::Both` zwei
Pills nebeneinander.
### 4. Row-Tinting
`is-row-warn` für review, `is-row-err` für rejected.
### 5. Inline-Actions
**Zusätzlich** zu den bestehenden Action-Buttons + Modals:
| Status | Inline-Action |
|---|---|
| Review | `Freigeben →` + `Ablehnen →` (öffnet die Modals) |
| Published | `Archivieren →` (öffnet Modal) |
Die Inline-Actions sind **nur** Trigger für die bestehenden
Modals (keine direkte Wire-Methode), damit die existierenden
Test-Modal-Strings („Pressemitteilung veröffentlichen?")
weiter angezeigt werden. Action-Buttons in der `Aktionen`-
Spalte bleiben als Backup für Power-User.
### 6. Reichere Sub-Zeilen
In Titel-Zelle: `PM-{id}` als Sub. In Datum-Zelle: Hauptdatum
+ Status-Kontext (`erstellt · 11:02`, `veröffentlicht · 14:30`, …).
### 7. Counter-Strip ausgelassen
KPI-Reihe ist bereits 4-spaltig (Gesamt, Veröffentlicht, In
Prüfung, Entwürfe) und voll funktional. Counter-Strip wäre
redundant. Bleibt bei KPI-Cards.
## Was bleibt unangetastet
- **Volt-Methoden** (`publish`, `reject`, `archive`, `sort`,
`with`, `clearUserFilter`, …)
- **Bestehende Modals** mit Strings „Pressemitteilung
veröffentlichen?", „Pressemitteilung ablehnen?",
„Pressemitteilung archivieren?" (Test-kritisch)
- **Filter-Panel-Struktur** (Entity-Comboboxes erhalten,
kein Reduktionsexperiment)
- **`stats`-Cache-Methode** (`AdminPerformanceCache`)
## Erweiterung
- `pressReleaseStats()` erweitert um `rejected` und `archived`
Counter, damit alle 6 Saved-Views-Tabs ihre Counter haben
## Tests
- `AdminPressReleaseActionsTest` (3 Tests, prüft auf Modal-Strings)
- `PressReleaseWorkflowTest` (mehrere Tests, prüft auf
`publish`/`reject`-Methoden + Audit-Logs)
- Volle Suite muss weiter sauber laufen (modulo
pre-existing `ApiDocumentationTest`)
## Akzeptanzkriterien
- [x] Plan
- [x] Volt: `stats` um `rejected` + `archived` erweitert
- [x] Volt: `setView()` + `resetFilters()` ergänzt
- [x] Saved-Views-Tabs eingebaut (6 Stück inkl. Counter)
- [x] Active-Chips eingebaut (8 Filter-Typen)
- [x] Portal-Pills statt Text (incl. Both → 2 Pills)
- [x] Row-Tinting (review → warn, rejected → err)
- [x] Inline-Actions als Modal-Trigger
(Freigeben/Ablehnen/Archivieren) zusätzlich neben Badge
- [x] Sub-Zeilen: PM-ID + Firma + Sprache, Datum + Status-Kontext
- [x] Empty-State 2-stufig (mit/ohne Filter)
- [x] Build + Pint + Tests grün (16/16 PR + 230/231 voll)
- [x] PROGRESS.md + 03-WEITERE-PHASEN.md aktualisiert
## Lessons Learned
- `@php(...)` Inline-Form führte beim Compile zu einem
Syntax-Fehler im kompilierten View (führte zu
`<?php($var = ...)` ohne Whitespace), obwohl alle Klammern
balanced waren. Vermutung: Konflikt der Klammer-Zählung
mit Methoden-Calls. Lösung: alle drei `@php(...)`
Statements zu `@php ... @endphp` umgewandelt.
- Tabellen-Spalten reduziert (8 → 7), weil die rechte
„Aktionen"-Spalte mit den Status-Icons inhaltlich
redundant zur neuen Inline-Action in der Status-Spalte
war. Die linke „Aktionen"-Spalte (view/edit) blieb.