@props([ 'status', // OrderStatus enum instance or string value 'orderStatus' => null, // Optional order_status field (for legacy compatibility) 'size' => 'default', // 'sm', 'default', 'lg' 'showIcon' => false, ]) @php // Normalize status to OrderStatus enum if (is_string($status)) { try { $statusEnum = \App\Enums\OrderStatus::from($status); } catch (\ValueError $e) { // Fallback for unknown statuses $statusEnum = null; } } elseif ($status instanceof \App\Enums\OrderStatus) { $statusEnum = $status; } else { $statusEnum = null; } // Determine badge classes based on status $badgeClasses = match($statusEnum) { \App\Enums\OrderStatus::PLACED => 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300', \App\Enums\OrderStatus::CONFIRMED => 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400', \App\Enums\OrderStatus::PREPARING => 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400', \App\Enums\OrderStatus::READY_FOR_PICKUP => 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400', \App\Enums\OrderStatus::OUT_FOR_DELIVERY => 'bg-indigo-100 text-indigo-800 dark:bg-indigo-900/30 dark:text-indigo-400', \App\Enums\OrderStatus::SERVED, \App\Enums\OrderStatus::DELIVERED => 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400', \App\Enums\OrderStatus::CANCELLED => 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400', default => 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300', }; // Size classes $sizeClasses = match($size) { 'sm' => 'px-2 py-0.5 text-xs', 'lg' => 'px-4 py-2 text-base', default => 'px-2.5 py-1 text-sm', }; // Status label $label = $statusEnum ? $statusEnum->label() : (is_string($status) ? Str::title(str_replace('_', ' ', $status)) : 'Unknown'); @endphp merge(['class' => "inline-flex items-center gap-1.5 font-medium rounded-full {$badgeClasses} {$sizeClasses}"]) }}> @if($showIcon && $statusEnum) @switch($statusEnum) @case(\App\Enums\OrderStatus::PLACED) @break @case(\App\Enums\OrderStatus::CONFIRMED) @break @case(\App\Enums\OrderStatus::PREPARING) @break @case(\App\Enums\OrderStatus::READY_FOR_PICKUP) @case(\App\Enums\OrderStatus::OUT_FOR_DELIVERY) @break @case(\App\Enums\OrderStatus::SERVED) @case(\App\Enums\OrderStatus::DELIVERED) @break @case(\App\Enums\OrderStatus::CANCELLED) @break @endswitch @endif {{ $label }}