@props([ 'categories' => [], 'multiple' => false, 'name' => 'category_id', // form field name 'selected' => [], // pre-selected IDs 'placeholder' => null, 'label' => null, 'required' => false, 'error' => null, ]) @php $placeholder = $placeholder ?? ($multiple ? __('Select categories…') : __('Select a category…')); // Flatten tree to build a lookup map id => name $flatMap = []; $flatten = function ($nodes) use (&$flatten, &$flatMap) { foreach ($nodes as $node) { $flatMap[$node->id] = $node->name; if (!empty($node->children)) { $flatten($node->children); } } }; $flatten($categories); $selectedIds = array_filter((array) $selected); $selectedNames = array_values(array_filter( array_map(fn($id) => $flatMap[$id] ?? null, $selectedIds) )); // Encode for Alpine init $initIds = json_encode(array_map('intval', $selectedIds)); $initNames = json_encode($selectedNames); $flatJson = json_encode($flatMap); @endphp
{{ $error }}
@endif {{-- ── Dropdown ─────────────────────────────────────────────── --}}{{ __('No categories available.') }}
@else {{-- Pass selectCategory callback to the tree --}}