Skip to main content

General

Validation Summary code

Copy the implementation or inspect every file that belongs to this component unit.

resources/views/components/ui/validation-summary.blade.php

@props([
    'messages' => null,
    'title' => 'Please fix the following',
    'icon' => 'warning-circle',
])

@php
    /*
    | Validation summary. Defaults to the session error bag, but accepts an
    | explicit message array/string for inline component rendering and tests.
    |
    | Usage:
    |   <x-ui.validation-summary />
    |   <x-ui.validation-summary :messages="['Email is required.']" />
    */
    $source = $messages;

    if ($source === null) {
        $source = session('errors');
    }

    if ($source instanceof \Illuminate\Support\ViewErrorBag) {
        $source = $source->all();
    } elseif ($source instanceof \Illuminate\Support\MessageBag) {
        $source = $source->all();
    }

    $items = collect(is_array($source) ? $source : ($source ? [$source] : []))
        ->flatten()
        ->filter()
        ->values();
@endphp

@if ($items->isNotEmpty())
    <div {{ $attributes->merge(['class' => 'rounded-2xl border border-red-200 bg-red-50 p-4 text-sm text-red-800 dark:border-red-900/70 dark:bg-red-950/30 dark:text-red-200']) }} role="alert">
        <div class="flex items-start gap-3">
            <x-ui.icon :name="$icon" weight="fill" size="lg" class="mt-0.5 shrink-0 text-red-500 dark:text-red-400" />

            <div class="min-w-0">
                <p class="font-semibold">{{ $title }}</p>
                <ul class="mt-2 list-disc space-y-1 ps-5">
                    @foreach ($items as $message)
                        <li>{{ $message }}</li>
                    @endforeach
                </ul>
            </div>
        </div>
    </div>
@endif