@php /** * Componente Blade para renderizar um campo de seleção (select) em um formulário. * Este componente é altamente configurável e suporta validação, tooltips, e estilos personalizados. * Além dos parametros padrão, qualquer outra keyword será passada para o elemento select. * ** SUPORTA MULTIPLE SELECT ** * * Parâmetros: * * @param string $class Classe CSS para o container do campo. Padrão: 'col-12 col-sm-12 col-md-auto'. * @param string|null $id ID único para o campo select. Se omitido o id será o mesmo que o nome do campo. * @param string $name Nome do campo select. Padrão: 'selectfield'. * @param string|null $tooltip Texto do tooltip exibido ao passar o mouse sobre o label. Padrão: sem tooltip. * @param mixed $value Valor do campo. Se omitido será usado o mesmo que o nome do campo ($item->$name) * @param array $items Lista de opções para o campo select no formato [chave => valor]. Padrão: []. * @param string|null $controlClass Classe CSS adicional para o elemento select. Exemplo: disableSelect2 * @param array|null $controlProperties Propriedades adicionais para o elemento select. * @param string|null $errorName Nome do campo para validação de erros. Só é necessário informar se for diferente de $name. * @param bool $required Indica se o campo é obrigatório. Se for será exibido um asterisco. * @param array|null $canAny Permissões para exibir o campo, baseado no Gate::any(). Padrão: todos os usuários têm acesso. * @param string $placeholder se fornecido indica o texto de placeholder enquanto o select estiver vazio. * @param bool $allowclear permite limpar todos os valores selecionados. * * Variáveis disponíveis via @aware: * @param mixed|null $item Objeto associado ao formulário, que representa o item atual. Ex: médico, usuários, etc. * * Slots: * - $slot: Label do campo select. * - $postSlot (opcional): Conteúdo adicional renderizado abaixo do campo select. * * Funcionalidades: * - Suporte a validação de erros com mensagens exibidas abaixo do campo. * - Tooltip configurável para o label. * - Estilização condicional para campos obrigatórios e com erros. * - Suporte a permissões condicionais via Gate::any(). * - Renderização opcional de estilo confidencial com alerta. */ @endphp {{-- componente de campo de select para form --}} @props([ 'class' => 'col-12 col-sm-12 col-md-auto', 'id' => null, 'name' => 'selectfield', 'tooltip' => null, 'value' => isset($name) ? old($name) : null, 'items' => [], 'controlClass' => null, 'controlProperties' => null, 'errorName' => $errorName ?? $name, //nome do error Bag 'helpText' => null, // texto que aparece abaixo do campo, small e muted 'required' => false, 'canAny' => null, 'confidential' => false, // se true cria caixa e icone em volta 'placeholder' => null, 'allowClear' => false, ]) @aware(['item' => null]) {{-- @php // Detecta se é parte de um form liveWire $isLiveWire = collect($attributes->getAttributes()) ->filter(fn($value, $key) => str_starts_with($key, 'wire:'))->isNotEmpty(); @endphp --}} @section('scripts') @parent @if ($placeholder) {{-- suporte a placeholder de select2 --}} @endif @endsection @if (($canAny && Gate::any($canAny)) || !$canAny) @php if (!isset($value)) { // popular padrão do campo $value = old($name) ?? ($item->$name ?? null); } $propertiesArray = ['id' => $id ?? $name]; if ($controlProperties) { $propertiesArray += $controlProperties; } if ($controlClass) { $propertiesArray += ['class' => 'form-control ' . $controlClass . ($errors->has($errorName) ? ' is-invalid ' : '')]; } else { $propertiesArray += ['class' => 'form-control ' . ($errors->has($errorName) ? ' is-invalid ' : '')]; } @endphp @if ($confidential) @endif @endif {{-- eoCanany --}}