# 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 (``) - ✅ 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 `