columns([ TextColumn::make('user.name') ->label('Client') ->searchable() ->sortable(), TextColumn::make('user.email') ->label('Email') ->searchable() ->sortable(), TextColumn::make('created_at') ->label('Generated') ->dateTime() ->sortable(), TextColumn::make('expires_at') ->label('Expires') ->dateTime() ->sortable(), TextColumn::make('last_validated_at') ->label('Last validated') ->dateTime() ->sortable(), TextColumn::make('revoked_at') ->label('Revoked at') ->dateTime() ->sortable(), BadgeColumn::make('status') ->label('Status') ->getStateUsing(fn (SupportPin $record) => $record->revoked_at ? 'Revoked' : ($record->expires_at->isPast() ? 'Expired' : 'Active') ) ->colors([ 'success' => fn ($state) => $state === 'Active', 'warning' => fn ($state) => $state === 'Expired', 'danger' => fn ($state) => $state === 'Revoked', ]), ]) ->filters([ Filter::make('active') ->label('Active only') ->query(fn ($query) => $query->whereNull('revoked_at')->where('expires_at', '>', now())), ]) ->actions([ Action::make('revoke') ->label('Revoke') ->icon('heroicon-o-no-symbol') ->color('danger') ->requiresConfirmation() ->visible(fn (SupportPin $record) => is_null($record->revoked_at) && !$record->expires_at->isPast()) ->action(fn (SupportPin $record) => app(\Paymenter\Extensions\Others\ComplianceTools\Services\SupportPinService::class) ->revoke($record, auth()->user()) ), ]); } public static function getPages(): array { return [ 'index' => ListSupportPins::route('/'), ]; } }