Saltar al contenido principal

Agrupación de filas

Introducción​

Puedes permitir que los usuarios agrupen filas de tabla por un atributo común. Esto es útil para mostrar grandes cantidades de datos de manera más organizada.

Los grupos pueden configurarse usando el nombre del atributo (ej. 'status'), o un objeto Group que permite personalizar el comportamiento de ese grupo (ej. Group::make('status')->collapsible()).

Agrupando filas por defecto​

Puedes agrupar siempre por un atributo específico usando defaultGroup():

use Filament\Tables\Table;

public function table(Table $table): Table
{
return $table
->defaultGroup('status');
}

Permitir que el usuario elija entre agrupaciones​

Puedes dejar que el usuario seleccione entre diferentes grupos con groups():

public function table(Table $table): Table
{
return $table
->groups([
'status',
'category',
]);
}

Puedes combinar groups() y defaultGroup():

public function table(Table $table): Table
{
return $table
->groups([
'status',
'category',
])
->defaultGroup('status');
}

Agrupar por atributo de relación​

Es posible agrupar usando atributos de relaciones con notación de puntos:

public function table(Table $table): Table
{
return $table
->groups([
'author.name',
]);
}

Configurar etiqueta de agrupación​

Usa label():

use Filament\Tables\Grouping\Group;

public function table(Table $table): Table
{
return $table
->groups([
Group::make('author.name')
->label('Nombre del autor'),
]);
}

Configurar título de grupo​

Por defecto, el título es el valor del atributo. Puedes personalizarlo con getTitleFromRecordUsing():

Group::make('status')
->getTitleFromRecordUsing(fn (Post $record): string => ucfirst($record->status->getLabel())),

Deshabilitar el prefijo de la etiqueta​

Group::make('status')
->titlePrefixedWithLabel(false),

Configurar descripción del grupo​

Puedes añadir descripciones con getDescriptionFromRecordUsing():

Group::make('status')
->getDescriptionFromRecordUsing(fn (Post $record): string => $record->status->getDescription()),

Clave del grupo​

Personalizar la clave con getKeyFromRecordUsing():

Group::make('status')
->getKeyFromRecordUsing(fn (Post $record): string => $record->status->value),

Grupos de fecha​

Para agrupar por fecha y omitir la hora:

Group::make('created_at')->date(),

Grupos colapsables​

Puedes habilitar collapsible():

Group::make('author.name')->collapsible(),

Resúmenes en grupos​

Puedes usar resúmenes en grupos. También puedes ocultar filas y mostrar solo el resumen con groupsOnly():

public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('views_count')
->summarize(Sum::make()),
TextColumn::make('likes_count')
->summarize(Sum::make()),
])
->defaultGroup('category')
->groupsOnly();
}

Personalizar ordenamiento por grupo​

Group::make('status')
->orderQueryUsing(fn (Builder $query, string $direction) => $query->orderBy('status', $direction)),

Personalizar scoping por grupo​

Group::make('status')
->scopeQueryByKeyUsing(fn (Builder $query, string $key) => $query->where('status', $key)),

Personalizar agrupamiento en query​

Group::make('status')
->groupQueryUsing(fn (Builder $query) => $query->groupBy('status')),

Personalizar el botón de trigger del dropdown de grupos​

->groupRecordsTriggerAction(
fn (Action $action) => $action
->button()
->label('Agrupar registros'),
)

Usar dropdown de agrupación en escritorio​

->groupingSettingsInDropdownOnDesktop();

Ocultar configuraciones de agrupación​

->defaultGroup('status')
->groupingSettingsHidden();

Ocultar configuración de dirección de agrupación​

->defaultGroup('status')
->groupingDirectionSettingHidden();