Toggle buttons
Introducción
El input de toggle buttons proporciona un grupo de botones para seleccionar un único valor, o múltiples valores, de una lista de opciones predefinidas:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published'
])
Details
Inyección de utilidades
Además de permitir un array estático, el métodooptions() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Cambiar el color de los botones de opción
Puedes cambiar el color de los botones de opción usando el método colors(). Cada clave del array debe corresponder a un valor de opción:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published'
])
->colors([
'draft' => 'info',
'scheduled' => 'warning',
'published' => 'success',
])
Si estás usando un enum para las opciones, puedes usar la interfaz HasColor para definir colores en su lugar.
Details
Inyección de utilidades
Además de permitir un array estático, el métodocolors() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Añadir iconos a los botones de opción
Puedes añadir icono a los botones de opción usando el método icons(). Cada clave del array debe corresponder a un valor de opción, y el valor puede ser cualquier icono válido:
use Filament\Forms\Components\ToggleButtons;
use Filament\Support\Icons\Heroicon;
ToggleButtons::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published'
])
->icons([
'draft' => Heroicon::OutlinedPencil,
'scheduled' => Heroicon::OutlinedClock,
'published' => Heroicon::OutlinedCheckCircle,
])
Details
Inyección de utilidades
Además de permitir un array estático, el métodoicons() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Si estás usando un enum para las opciones, puedes usar la interfaz HasIcon para definir iconos en su lugar.
Si quieres mostrar solo iconos, puedes usar hiddenButtonLabels() para ocultar las etiquetas de las opciones.
Opciones booleanas
Si quieres un grupo de botones booleano simple, con opciones "Yes" y "No", puedes usar el método boolean():
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean()
Las opciones tendrán colores e iconos configurados automáticamente, pero puedes sobrescribirlos con colors() o icons().
Para personalizar la etiqueta de "Yes", puedes usar el argumento trueLabel en el método boolean():
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean(trueLabel: 'Absolutely!')
Para personalizar la etiqueta de "No", puedes usar el argumento falseLabel en el método boolean():
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean(falseLabel: 'Not at all!')
Posicionar las opciones en línea entre sí
Puede que desees mostrar los botones inline() entre sí:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean()
->inline()
Opcionalmente, puedes pasar un valor booleano para controlar si los botones deben estar en línea o no:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean()
->inline(FeatureFlag::active())
Details
Inyección de utilidades
Además de permitir un valor estático, el métodoinline() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Agrupar botones de opción
Puede que desees agrupar botones de opción para que sean más compactos, usando el método grouped(). Esto también hace que aparezcan horizontalmente en línea entre sí:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean()
->grouped()
Opcionalmente, puedes pasar un valor booleano para controlar si los botones deben agruparse o no:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('feedback')
->label('Like this post?')
->boolean()
->grouped(FeatureFlag::active())
Details
Inyección de utilidades
Además de permitir un valor estático, el métodogrouped() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Seleccionar múltiples botones
El método multiple() en el componente ToggleButtons te permite seleccionar múltiples valores de la lista de opciones:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('technologies')
->multiple()
->options([
'tailwind' => 'Tailwind CSS',
'alpine' => 'Alpine.js',
'laravel' => 'Laravel',
'livewire' => 'Laravel Livewire',
])
Estas opciones se devuelven en formato JSON. Si las estás guardando usando Eloquent, debes asegurarte de añadir un cast array a la propiedad del modelo:
use Illuminate\Database\Eloquent\Model;
class App extends Model
{
/**
* @return array<string, string>
*/
protected function casts(): array
{
return [
'technologies' => 'array',
];
}
// ...
}
Opcionalmente, puedes pasar un valor booleano para controlar si los botones deben permitir selecciones múltiples o no:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('technologies')
->multiple(FeatureFlag::active())
->options([
'tailwind' => 'Tailwind CSS',
'alpine' => 'Alpine.js',
'laravel' => 'Laravel',
'livewire' => 'Laravel Livewire',
])
Details
Inyección de utilidades
Además de permitir un valor estático, el métodomultiple() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Dividir opciones en columnas
Puedes dividir opciones en columnas usando el método columns():
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('technologies')
->options([
// ...
])
->columns(2)
Details
Inyección de utilidades
Además de permitir un valor estático, el métodocolumns() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Este método acepta las mismas opciones que el método columns() del grid. Esto te permite personalizar responsivamente el número de columnas en varios breakpoints.
Establecer la dirección de la cuadrícula
Por defecto, cuando organizas botones en columnas, se listarán en orden vertical. Si quieres listarlos horizontalmente, puedes usar el método gridDirection(GridDirection::Row):
use Filament\Forms\Components\ToggleButtons;
use Filament\Support\Enums\GridDirection;
ToggleButtons::make('technologies')
->options([
// ...
])
->columns(2)
->gridDirection(GridDirection::Row)
Details
Inyección de utilidades
Además de permitir un valor estático, el métodogridDirection() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Deshabilitar opciones específicas
Puedes deshabilitar opciones específicas usando el método disableOptionWhen(). Acepta un closure, en el que puedes comprobar si la opción con un $value específico debe estar deshabilitada:
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published',
])
->disableOptionWhen(fn (string $value): bool => $value === 'published')
Details
Inyección de utilidades
Puedes inyectar varias utilidades en la función como parámetros.Si quieres recuperar las opciones que no han sido deshabilitadas, por ejemplo, para propósitos de validación, puedes hacerlo usando getEnabledOptions():
use Filament\Forms\Components\ToggleButtons;
ToggleButtons::make('status')
->options([
'draft' => 'Draft',
'scheduled' => 'Scheduled',
'published' => 'Published',
])
->disableOptionWhen(fn (string $value): bool => $value === 'published')
->in(fn (ToggleButtons $component): array => array_keys($component->getEnabledOptions()))
Para más información sobre la función in(), consulta la documentación de Validación.