@extends('layouts.app') @section('title', 'Produtos — '.config('app.name')) @section('content')

Produtos

O que a sua arena vende no balcão.

@can('create', App\Models\Product::class) Novo produto @endcan
@include('partials.status')
{{-- Filtro por categoria no MESMO form da busca: os dois viajam juntos na query string, então filtrar não descarta o termo buscado nem o contrário. O `onchange` submete na hora — é o comportamento esperado de um filtro, e o botão Buscar continua servindo para quem chegou pelo teclado. --}}
@if (filled($search) || $categoryId !== null) @endif
@forelse ($products as $product) @empty @endforelse
Imagem Produto Categoria Preço Ativo Ações
@if ($product->imageUrl()) Imagem de {{ $product->name }} @else @endif {{ $product->name }} {{-- O `?? '—'` não é decorativo: a coluna é NOT NULL, mas a relação ainda pode vir nula se a categoria for excluída por fora da tela. Um traço é melhor que um erro de propriedade em null numa listagem inteira. --}} {{ $product->category?->name ?? '—' }} {{ $product->formattedPrice() }} @can('update', $product)
@csrf active) onchange="this.form.submit()" aria-label="Situação de {{ $product->name }}">
@else {{ $product->active ? 'Ativo' : 'Inativo' }} @endcan
@include('partials.row-actions', [ 'label' => $product->name, 'editUrl' => auth()->user()->can('update', $product) ? route('products.edit', $product) : null, 'deleteUrl' => auth()->user()->can('delete', $product) ? route('products.destroy', $product) : null, 'inline' => true, ])
@if (filled($search)) Nenhum produto encontrado para "{{ $search }}". @else Nenhum produto cadastrado ainda. @endif
{{ $products->links() }}
@endsection