query( fn (): Builder => Membership::query() ->with(['member', 'package']) ->latest() ->limit(8) ) ->columns([ TextColumn::make('member.full_name') ->label('Adhérent') ->searchable(['members.firstname', 'members.lastname']), TextColumn::make('package.name') ->label('Package'), TextColumn::make('status') ->label('Statut adhésion') ->formatStateUsing(fn (string $state) => Membership::getAttributeLabel($state)) ->badge() ->color(fn (string $state): string => match ($state) { 'active' => 'success', 'expired' => 'danger', 'pending' => 'warning', default => 'gray', }), TextColumn::make('payment_status') ->label('Paiement') ->formatStateUsing(fn (string $state) => Membership::getAttributeLabel($state)) ->badge() ->color(fn (string $state): string => match ($state) { 'paid' => 'success', 'unpaid' => 'danger', 'partial' => 'warning', default => 'gray', }), TextColumn::make('amount') ->label('Montant') ->money('EUR'), TextColumn::make('created_at') ->label('Créée le') ->dateTime('d/m/Y') ->sortable(), ]) ->recordActions([ Action::make('edit') ->label('Voir') ->icon('heroicon-o-pencil-square') ->url(fn (Membership $record): string => MembershipResource::getUrl('edit', ['record' => $record])), ]) ->paginated(false); } }