@props([ 'title' => null, 'action' => null, 'active' => [], 'paginator' => null, 'advancedOpen' => false, ]) @php // `GET` é o único método: o filtro é URL compartilhável/recarregável e não muta nada. O alvo // (`action`) é a **rota** da tela — “limpar” volta para ela sem perder o caminho, e remover um // filtro preserva os demais parâmetros da query (inclusive ordenação/paginação futura). $target = $action ?? url()->current(); $query = request()->query(); unset($query['page']); $chips = []; foreach (is_array($active) ? $active : [] as $filter) { if (! is_array($filter) || ! isset($filter['key'], $filter['label'])) { continue; } $rest = $query; unset($rest[$filter['key']]); $chips[] = [ 'label' => (string) $filter['label'], 'value' => (string) ($filter['value'] ?? ''), 'url' => (string) ($filter['url'] ?? ($target.($rest === [] ? '' : '?'.http_build_query($rest)))), ]; } $total = is_object($paginator) ? (int) $paginator->total() : 0; $from = $total > 0 ? (int) ($paginator->firstItem() ?? 0) : 0; $to = $total > 0 ? (int) ($paginator->lastItem() ?? 0) : 0; $lastPage = is_object($paginator) ? (int) $paginator->lastPage() : 1; $currentPage = is_object($paginator) ? (int) $paginator->currentPage() : 1; @endphp
@if (filled($title))

{{ $title }}

@endif
{{-- A busca fica sempre visível: é o filtro que o operador usa em primeiro lugar. --}} @if (isset($advanced)) {{-- Filtros avançados em `
` nativo: sem JS o operador abre o grupo e os campos continuam sendo enviados (um `
` fechado não desabilita os controles). --}}
{{ __('layout::shell.advanced_filters') }}
{{ $advanced }}
@endif @if ($chips !== [])

{{ __('layout::shell.active_filters') }}

@endif

@if ($total > 0) {{ __('layout::shell.results_range', ['from' => $from, 'to' => $to, 'total' => $total]) }} @if ($lastPage > 1) {{ __('layout::shell.page_of', ['current' => $currentPage, 'last' => $lastPage]) }} @endif @endif

{{ __('layout::shell.clear_filters') }}