presseportale/resources/views/components/portal/pr-error-summary.blade.php
Kevin Adametz f11e8aab7c PM-Editor UX: Kategorie in die Schreibfläche, Bild-Upload als Modal-Flow
Kategorie-Pflichtfeld direkt unter die Firma statt in die Sidebar.
Titelbild-Upload öffnet ein Modal: erst Bild wählen, dann erscheinen
die gestrafften Schritte (Herkunft & Bildnachweis mit Vorschlag aus
dem Urheber, Personen & Rechte, Bestätigung), Optionales eingeklappt.
Bildrechte-Checkbox im Einreichen-Modal nur noch mit eigenem Titelbild.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 13:55:21 +00:00

42 lines
1.7 KiB
PHP

{{--
Persistente Fehler-Zusammenfassung der PM-Editoren.
Der Danger-Toast verschwindet nach wenigen Sekunden und die Feld-Errors
verteilen sich über Schreibfläche und Sidebar — diese Box bleibt direkt
bei den Speichern-Buttons stehen, bis alle Fehler behoben sind. Jeder
Eintrag scrollt per Klick zum zugehörigen Panel (data-error-anchor).
Verwendung: <x-portal.pr-error-summary :errors="$errors" />
--}}
@props(['errors'])
@php
/** Fehler-Keys ohne eigenes Panel springen zum Panel ihres Themas. */
$anchorAliases = [
'scheduledDate' => 'scheduledAt',
'scheduledTime' => 'scheduledAt',
'publishMode' => 'scheduledAt',
'language' => 'backlinkUrl',
'keywords' => 'backlinkUrl',
];
@endphp
@if ($errors->any())
<div class="pr-error-summary" role="alert" x-data>
<div class="head">
<flux:icon name="exclamation-circle" variant="mini" class="size-4 flex-shrink-0" />
<span>{{ trans_choice('{1}Speichern nicht möglich — bitte korrigiere:|[2,*]Speichern nicht möglich — bitte korrigiere :count Felder:', count($errors->keys())) }}</span>
</div>
<ul>
@foreach ($errors->keys() as $errorKey)
@php($anchor = $anchorAliases[$errorKey] ?? $errorKey)
<li wire:key="pr-error-summary-{{ $errorKey }}">
<button
type="button"
x-on:click="document.querySelector('[data-error-anchor={{ $anchor }}]')?.scrollIntoView({ behavior: 'smooth', block: 'center' })"
>{{ $errors->first($errorKey) }}</button>
</li>
@endforeach
</ul>
</div>
@endif