MAD Lab
/
Tutor > Campos de formulário > Seleção

Seleção

Campos de formulário

mad-select-field mad-radio-field mad-checkbox-field mad-checkbox-group-field mad-switch-field mad-select-check-field mad-sort-list-field mad-checklist-field
Select

mad-select-field com options fixas (:items).

Options fixas via :items — sem ida ao banco (compare com mad-dbselect-field no grupo DB).

resources/views/tutor/examples/forms-selecao/select.blade.php
<mad-select-field name="prioridade" label="Prioridade" placeholder="Selecione..."
    :items="['baixa' => 'Baixa', 'media' => 'Média', 'alta' => 'Alta', 'critica' => 'Crítica']"
    hint="Options fixas via :items — sem ida ao banco (compare com mad-dbselect-field no grupo DB)." />
Radio

mad-radio-field inline e na variante as=button (toggle segmentado).

Tipo de pessoa

inline deixa as opções lado a lado.

Período

as=button vira um toggle segmentado, visual de mad-segmented.

resources/views/tutor/examples/forms-selecao/radio.blade.php
<mad-form-grid :cols="2">
    <mad-radio-field name="tipo_pessoa" label="Tipo de pessoa" inline
        :options="['F' => 'Física', 'J' => 'Jurídica']"
        hint="inline deixa as opções lado a lado." />

    <mad-radio-field name="periodo" label="Período" as="button"
        :options="['dia' => 'Dia', 'sem' => 'Semana', 'mes' => 'Mês']"
        hint="as=button vira um toggle segmentado, visual de mad-segmented." />
</mad-form-grid>
Checkbox + Switch

mad-checkbox-field (booleano simples) e mad-switch-field (toggle) lado a lado.

Boolean simples — marca ou desmarca (value/value-off default 1/0).

Receber notificações

Mesma ideia do checkbox, em visual de toggle on/off.

resources/views/tutor/examples/forms-selecao/checkbox-switch.blade.php
<mad-form-grid :cols="2">
    <mad-checkbox-field name="aceite_termos" label="Aceito os termos de uso"
        hint="Boolean simples — marca ou desmarca (value/value-off default 1/0)." />

    <mad-switch-field name="notificacoes" label="Receber notificações" variant="primary"
        hint="Mesma ideia do checkbox, em visual de toggle on/off." />
</mad-form-grid>
Grupo de checkboxes

mad-checkbox-group-field com várias opções fixas marcáveis ao mesmo tempo.

Permissões

Várias opções fixas marcáveis ao mesmo tempo — layout=horizontal alinha lado a lado.

resources/views/tutor/examples/forms-selecao/checkbox-group.blade.php
<mad-checkbox-group-field name="permissoes" label="Permissões" layout="horizontal"
    :options="['read' => 'Ler', 'write' => 'Escrever', 'delete' => 'Excluir', 'export' => 'Exportar']"
    hint="Várias opções fixas marcáveis ao mesmo tempo — layout=horizontal alinha lado a lado." />
Select com checkboxes

mad-select-check-field: multi-seleção compacta com contador '+X itens'.

mode=comma (padrão): control compacto mostra os N primeiros + '+X itens' (max-display=2 aqui).

resources/views/tutor/examples/forms-selecao/select-check.blade.php
<mad-select-check-field name="categorias_interesse" label="Categorias de interesse"
    :options="['eletronicos' => 'Eletrônicos', 'papelaria' => 'Papelaria', 'moveis' => 'Móveis', 'vestuario' => 'Vestuário', 'alimentos' => 'Alimentos', 'ferramentas' => 'Ferramentas']"
    :selected="['eletronicos', 'papelaria']"
    :max-display="2"
    hint="mode=comma (padrão): control compacto mostra os N primeiros + '+X itens' (max-display=2 aqui)." />
Lista ordenável

mad-sort-list-field: arraste para reordenar.

Ordem das etapas do pedido
Recebido
Em separação
Enviado
Entregue

Arraste para reordenar. :items aqui é um mapa chave => rótulo — diferente do formato de linhas do mad-checklist-field abaixo.

resources/views/tutor/examples/forms-selecao/sort-list.blade.php
<mad-sort-list-field name="ordem_etapas" label="Ordem das etapas do pedido"
    :items="['recebido' => 'Recebido', 'separacao' => 'Em separação', 'enviado' => 'Enviado', 'entregue' => 'Entregue']"
    :selected="['recebido', 'separacao', 'enviado', 'entregue']"
    hint="Arraste para reordenar. :items aqui é um mapa chave => rótulo — diferente do formato de linhas do mad-checklist-field abaixo." />
Checklist com colunas

mad-checklist-field: lista com busca, contador e colunas customizadas (mad-col).

Categorias favoritas
Categoria Departamento

items é uma LISTA DE LINHAS (cada uma precisa de 'id') — as colunas vêm dos mad-col filhos, com busca e contador prontos.

resources/views/tutor/examples/forms-selecao/checklist.blade.php
@php
    // GOTCHA do compilador: <mad-checklist-field> com filhos <mad-col> passa
    // por uma extração via regex que corta a tag no PRIMEIRO ">" que encontrar
    // — inclusive o "=>" de um array PHP escrito inline em :items="[...]".
    // Por isso os itens vêm de uma variável (:items="$tutorSelecaoCategorias"),
    // sem nenhum "=>" na lista de atributos da tag.
    $tutorSelecaoCategorias = [
        ['id' => 1, 'nome' => 'Eletrônicos', 'depto' => 'Bens duráveis'],
        ['id' => 2, 'nome' => 'Papelaria', 'depto' => 'Consumo'],
        ['id' => 3, 'nome' => 'Móveis', 'depto' => 'Bens duráveis'],
        ['id' => 4, 'nome' => 'Vestuário', 'depto' => 'Consumo'],
        ['id' => 5, 'nome' => 'Ferramentas', 'depto' => 'Bens duráveis'],
    ];
@endphp
<mad-checklist-field name="categorias_check" label="Categorias favoritas" height="220px"
    :items="$tutorSelecaoCategorias" :selected="['1', '3']"
    hint="items é uma LISTA DE LINHAS (cada uma precisa de 'id') — as colunas vêm dos mad-col filhos, com busca e contador prontos.">
    <mad-col field="nome" label="Categoria" />
    <mad-col field="depto" label="Departamento" />
</mad-checklist-field>
Ação wire

mad-form com submit real — dispara TutorFormsSelecao::onSubmitDemo.

Marcar como urgente

resources/views/tutor/examples/forms-selecao/wire-submit.blade.php
<mad-form submit="onSubmitDemo">
    <mad-form-grid :cols="2">
        <mad-select-field name="prioridade_wire" label="Prioridade"
            :items="['baixa' => 'Baixa', 'alta' => 'Alta']" required />
        <mad-switch-field name="urgente_wire" label="Marcar como urgente" />
    </mad-form-grid>
    <mad-form-actions align="right">
        <mad-btn type="submit" variant="primary" icon="send">Enviar (onSubmitDemo)</mad-btn>
    </mad-form-actions>
</mad-form>
app/control/Tutor/TutorFormsSelecao.php
/**
 * Submit do exemplo "Ação wire" — lê $this->form->getData() e devolve um
 * toast com o payload recebido (arrays de multi-seleção viram "a+b").
 */
public function onSubmitDemo(): MadResponse
{
    $data = $this->form->getData();

    $preenchidos = [];
    foreach ((array) $data as $campo => $valor) {
        if (is_array($valor)) {
            $valor = implode('+', $valor);
        }
        $valor = trim((string) $valor);
        if ($valor !== '') {
            $preenchidos[] = "{$campo}={$valor}";
        }
    }

    $resumo = $preenchidos !== [] ? implode(' | ', $preenchidos) : 'nenhum campo preenchido';

    return (new MadResponse())
        ->toast("Form recebido: {$resumo}", 'success', 'onSubmitDemo');
}
Código-fonte completo da página
app/control/Tutor/TutorFormsSelecao.php
<?php

namespace App\Control\Tutor;

use App\Support\Tutor\TutorPage;
use Mad\Form\MadForm;
use Mad\Http\MadResponse;

/**
 * TutorFormsSelecao — página "Seleção" do catálogo (grupo forms).
 *
 * Cobre os 8 campos de seleção do catálogo: mad-select-field, mad-radio-field,
 * mad-checkbox-field, mad-checkbox-group-field, mad-switch-field,
 * mad-select-check-field, mad-sort-list-field e mad-checklist-field.
 */
class TutorFormsSelecao extends TutorPage
{
    protected string $catalogKey = 'forms_selecao';

    public MadForm $form;

    public function mount(array $params = []): void
    {
        $this->form = new MadForm('tutor_forms_selecao');
    }

    /**
     * Submit do exemplo "Ação wire" — lê $this->form->getData() e devolve um
     * toast com o payload recebido (arrays de multi-seleção viram "a+b").
     */
    public function onSubmitDemo(): MadResponse
    {
        $data = $this->form->getData();

        $preenchidos = [];
        foreach ((array) $data as $campo => $valor) {
            if (is_array($valor)) {
                $valor = implode('+', $valor);
            }
            $valor = trim((string) $valor);
            if ($valor !== '') {
                $preenchidos[] = "{$campo}={$valor}";
            }
        }

        $resumo = $preenchidos !== [] ? implode(' | ', $preenchidos) : 'nenhum campo preenchido';

        return (new MadResponse())
            ->toast("Form recebido: {$resumo}", 'success', 'onSubmitDemo');
    }
}
resources/views/tutor/forms/selecao.blade.php
<x-tutor-page page="forms_selecao">
    <x-tutor-demo demo="tutor.examples.forms-selecao.select"
        title="Select" desc="mad-select-field com options fixas (:items)." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.radio"
        title="Radio" desc="mad-radio-field inline e na variante as=button (toggle segmentado)." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.checkbox-switch"
        title="Checkbox + Switch" desc="mad-checkbox-field (booleano simples) e mad-switch-field (toggle) lado a lado." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.checkbox-group"
        title="Grupo de checkboxes" desc="mad-checkbox-group-field com várias opções fixas marcáveis ao mesmo tempo." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.select-check"
        title="Select com checkboxes" desc="mad-select-check-field: multi-seleção compacta com contador '+X itens'." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.sort-list"
        title="Lista ordenável" desc="mad-sort-list-field: arraste para reordenar." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.checklist"
        title="Checklist com colunas" desc="mad-checklist-field: lista com busca, contador e colunas customizadas (mad-col)." />

    <x-tutor-demo demo="tutor.examples.forms-selecao.wire-submit"
        title="Ação wire" desc="mad-form com submit real — dispara TutorFormsSelecao::onSubmitDemo."
        php="TutorFormsSelecao::onSubmitDemo" />
</x-tutor-page>