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();