Tags input
Introducción
El componente tags input te permite interactuar con una lista de etiquetas.
Por defecto, las etiquetas se almacenan en JSON:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
Si estás guardando las etiquetas JSON usando Eloquent, debes asegurarte de añadir un cast array a la propiedad del modelo:
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* @return array<string, string>
*/
protected function casts(): array
{
return [
'tags' => 'array',
];
}
// ...
}
Filament también soporta spatie/laravel-tags. Consulta nuestra documentación de plugin para más información.
Etiquetas separadas por comas
Puedes permitir que las etiquetas se almacenen en un string separado, en lugar de JSON. Para configurar esto, pasa el carácter separador al método separator():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->separator(',')
Details
Inyección de utilidades
Además de permitir un valor estático, el métodoseparator() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Autocompletar sugerencias de etiquetas
Los tags inputs pueden tener sugerencias de autocompletado. Para habilitar esto, pasa un array de sugerencias al método suggestions():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->suggestions([
'tailwindcss',
'alpinejs',
'laravel',
'livewire',
])
Details
Inyección de utilidades
Además de permitir un array estático, el métodosuggestions() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Definir teclas de división
Las teclas de división te permiten mapear botones específicos en el teclado de tu usuario para crear una nueva etiqueta. Por defecto, cuando el usuario presiona "Enter", se crea una nueva etiqueta en el input. También puedes definir otras teclas para crear nuevas etiquetas, como "Tab" o " ". Para hacer esto, pasa un array de teclas al método splitKeys():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->splitKeys(['Tab', ' '])
Puedes leer más sobre las opciones posibles para las teclas.
Details
Inyección de utilidades
Además de permitir un array estático, el métodosplitKeys() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Añadir un prefijo y sufijo a etiquetas individuales
Puedes añadir prefijo y sufijo a las etiquetas sin modificar el estado real del campo. Esto puede ser útil si necesitas mostrar formato de presentación a los usuarios sin guardarlo. Esto se hace con el método tagPrefix() o tagSuffix():
use Filament\Forms\Components\TagsInput;
TagsInput::make('percentages')
->tagSuffix('%')
Details
Inyección de utilidades
Además de permitir valores estáticos, los métodostagPrefix() y tagSuffix() también aceptan funciones para calcularlos dinámicamente. Puedes inyectar varias utilidades en las funciones como parámetros.Reordenar etiquetas
Puedes permitir que el usuario reordene las etiquetas dentro del campo usando el método reorderable():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->reorderable()
Opcionalmente, puedes pasar un valor booleano para controlar si las etiquetas deben ser reordenables o no:
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->reorderable(FeatureFlag::active())
Details
Inyección de utilidades
Además de permitir un valor estático, el métodoreorderable() 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 las etiquetas
Puedes cambiar el color de las etiquetas pasando un color al método color():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->color('danger')
Details
Inyección de utilidades
Además de permitir un valor estático, el métodocolor() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.Recortar espacios en blanco
Puedes recortar automáticamente los espacios en blanco del principio y el final de cada etiqueta usando el método trim():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->trim()
Puede que desees habilitar el recorte globalmente para todos los tags inputs, similar al middleware TrimStrings de Laravel. Puedes hacer esto en un service provider usando el método configureUsing():
use Filament\Forms\Components\TagsInput;
TagsInput::configureUsing(function (TagsInput $component): void {
$component->trim();
});
Validación de etiquetas
Puedes añadir reglas de validación para cada etiqueta pasando un array de reglas al método nestedRecursiveRules():
use Filament\Forms\Components\TagsInput;
TagsInput::make('tags')
->nestedRecursiveRules([
'min:3',
'max:255',
])