@props([
'id' => '', // unique ID
'class' => '', // extra CSS classes
'name' => '', // select name
'options' => [], // array of options, optgroups, or rich option defs
'selected' => null, // selected value (falls back to old())
'placeholder' => '', // optional placeholder option (disabled)
'style' => '', // raw style string
'required' => false, // true/false or truthy value
'autocomplete' => '',
])
@php
// prefer old() value if present, otherwise selected prop
$current = old($name, $selected);
$isSelected = function ($value) use ($current) {
// cast to string so '1' and 1 match
return (string) $value === (string) $current;
};
$renderOption = function ($value, $label, $attrs = []) use ($isSelected) {
$attrString = collect($attrs)->map(function ($v, $k) {
if (is_bool($v)) return $v ? $k : '';
return $k.'="'.e($v).'"';
})->filter()->implode(' ');
$selectedAttr = $isSelected($value) ? ' selected' : '';
return '';
};
@endphp