presseportale/dev/frontend/hub-flux/15-PHASE-4I-ADMIN-PRESS-RELEASES.md
Kevin Adametz 9b47296cea
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Rebrand Hub+Flux
2026-05-20 15:44:15 +02:00

4.5 KiB
Raw Blame History

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

  • Plan
  • Volt: stats um rejected + archived erweitert
  • Volt: setView() + resetFilters() ergänzt
  • Saved-Views-Tabs eingebaut (6 Stück inkl. Counter)
  • Active-Chips eingebaut (8 Filter-Typen)
  • Portal-Pills statt Text (incl. Both → 2 Pills)
  • Row-Tinting (review → warn, rejected → err)
  • Inline-Actions als Modal-Trigger (Freigeben/Ablehnen/Archivieren) zusätzlich neben Badge
  • Sub-Zeilen: PM-ID + Firma + Sprache, Datum + Status-Kontext
  • Empty-State 2-stufig (mit/ohne Filter)
  • Build + Pint + Tests grün (16/16 PR + 230/231 voll)
  • 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.