# Filtros

# Descripción general

Puedes aplicar filtros en la vista de listado de datos, ya sea para realizar una búsqueda, como por ejemplo filtrar los registros por el valor de un determinado campo:

Filtro

# Aplicar valor por defecto

Se puede aplicar opcionalmente el valor que tendrá inicialmente el filtro mediante la función default():

SelectFilter::make('Es competidor', 'is_competitor')->default(1)

# Search Filter

Se utiliza para realizar una búsqueda de texto en uno o más campos:

Search filter

protected function filters(): array
{
    return [
        SearchFilter::make(['name'])
    ];
}

El primer parámetro recibe un array con los nombres de campos en los que se buscará.

# Select Filter

Es utilizado cuando se necesita filtrar por una de varias opciones disponibles. En el primer parámetro se especifica el label del campo.
En el segundo parámetro, el nombre del campo del modelo.
Mediante la función options se proporciona un array con la clave => valor de las opciones disponibles.

protected function filters(): array
{
    return [
        SelectFilter::make('Color', 'color')->options([
            'red' => 'Rojo',
            'green' => 'Verde',
            'blue' => 'Azul'
        ])
    ];
}

Ésto mostraría un listado de opciones, donde sólo es posible elegir una de ellas:

Select Filter

# Opciones Si / No

Es bastante común mostrar como opciones valores con Si y No.
Para ello, existe un helper llamado booleanOptions():

protected function filters(): array
{
    return [
        SelectFilter::make('Activo', 'active')->booleanOptions();
    ];
}

Automáticamente se crearán las opciones:

Select Filter

# Campo de búsqueda

Por defecto, en los SelectFilter se muestra un campo de búsqueda de las opciones disponibles.
Si no desea ese campo, puede ocultarse mediante searchable(false):

protected function filters(): array
{
    return [
        SelectFilter::make('Activo', 'active')->booleanOptions()->searchable(false)
    ];
}

# Opción Todos

En ocasiones no se desea aplicar ninguna opción de las disponibles.
En ese caso, puede añadirse una opción Todos mediante withAllOption().

protected function filters(): array
{
    return [
        SelectFilter::make('Activo', 'active')->booleanOptions()->withAllOption()
    ];
}

Select Filter

Por defecto, la opción que se mostrará es Todos, pero en algunas ocasiones se desea por ejemplo que sea Todas.
En ese caso se le puede pasar un parámetro a la función withAllOption() con el nombre del label que se quiere mostrar:

protected function filters(): array
{
    return [
        SelectFilter::make('Activo', 'active')->booleanOptions()->withAllOption('Todas')
    ];
}