defaultSort('submitted_at', 'desc') ->columns([ TextColumn::make('submitted_at') ->label(__('admin.identity_verification_requests.fields.submitted_at')) ->dateTime() ->sortable(), TextColumn::make('status') ->label(__('admin.identity_verification_requests.fields.status')) ->badge() ->sortable(), TextColumn::make('user.email') ->label(__('admin.identity_verification_requests.fields.user')) ->searchable(), TextColumn::make('reviewed_at') ->label(__('admin.identity_verification_requests.fields.reviewed_at')) ->dateTime() ->sortable() ->placeholder(__('admin.identity_verification_requests.placeholders.empty')), ]) ->filters([ SelectFilter::make('status') ->label(__('admin.identity_verification_requests.fields.status')) ->options(IdentityVerificationStatus::class), ]) ->recordActions([ ViewAction::make(), self::approveAction(), self::rejectAction(), ]); } public static function approveAction(): Action { return Action::make('approve') ->label(__('admin.identity_verification_requests.actions.approve')) ->color('success') ->requiresConfirmation() ->visible(fn (IdentityVerificationRequest $record): bool => $record->status === IdentityVerificationStatus::PENDING) ->action(function (IdentityVerificationRequest $record): void { app(ReviewIdentityVerification::class)->execute( $record, IdentityVerificationStatus::APPROVED, self::reviewer(), ); }); } public static function rejectAction(): Action { return Action::make('reject') ->label(__('admin.identity_verification_requests.actions.reject')) ->color('danger') ->schema([ Textarea::make('reason') ->label(__('admin.identity_verification_requests.fields.rejection_reason')) ->required() ->maxLength(2000), ]) ->visible(fn (IdentityVerificationRequest $record): bool => $record->status === IdentityVerificationStatus::PENDING) ->action(function (array $data, IdentityVerificationRequest $record): void { app(ReviewIdentityVerification::class)->execute( $record, IdentityVerificationStatus::REJECTED, self::reviewer(), $data['reason'], ); }); } private static function reviewer(): User { $reviewer = auth()->user(); abort_unless($reviewer instanceof User, 403); return $reviewer; } }