feat: subscriptions
This commit is contained in:
+98
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\IdentityVerificationRequests\Tables;
|
||||
|
||||
use App\Actions\ReviewIdentityVerification;
|
||||
use App\Enums\IdentityVerificationStatus;
|
||||
use App\Models\IdentityVerificationRequest;
|
||||
use App\Models\User;
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Actions\ViewAction;
|
||||
use Filament\Forms\Components\Textarea;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Filters\SelectFilter;
|
||||
use Filament\Tables\Table;
|
||||
|
||||
class IdentityVerificationRequestsTable
|
||||
{
|
||||
public static function configure(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user