recordTitleAttribute('id') ->columns([ TextColumn::make('id') ->label('#'), TextColumn::make('status') ->badge() ->formatStateUsing(fn (ErasureRequestStatus $state) => ucfirst($state->value)) ->color(fn (ErasureRequestStatus $state) => match ($state) { ErasureRequestStatus::Pending => 'warning', ErasureRequestStatus::Cancelled => 'gray', ErasureRequestStatus::Completed => 'success', }), TextColumn::make('requestedBy') ->label('Requested by') ->state(fn (DataErasureRequest $record) => DataErasureRequest::displayNameFor($record->requestedBy)), TextColumn::make('scheduled_for') ->label('Scheduled for') ->dateTime(), TextColumn::make('caused_by_request_id') ->label('Cascade') ->formatStateUsing(fn (?int $state) => $state ? "from #{$state}" : '—'), TextColumn::make('created_at') ->label('Requested at') ->dateTime(), ]) ->defaultSort('created_at', 'desc') ->filters([ SelectFilter::make('status') ->options([ ErasureRequestStatus::Pending->value => 'Pending', ErasureRequestStatus::Cancelled->value => 'Cancelled', ErasureRequestStatus::Completed->value => 'Completed', ]), ]) ->headerActions([]) ->recordActions([ ViewAction::make() ->url(fn (DataErasureRequest $record) => DataErasureRequestResource::getUrl('view', ['record' => $record])), Action::make('cancel') ->label('Cancel') ->icon('heroicon-o-x-circle') ->color('danger') ->requiresConfirmation() ->visible(fn (DataErasureRequest $record) => $record->isPending()) ->action(fn (DataErasureRequest $record, PrivacyService $privacyService) => $privacyService->cancelErasure($record)), ]); } }