diff --git a/app/Filament/Resources/TemplateGenerations/Actions/RetryGenerationAction.php b/app/Filament/Resources/TemplateGenerations/Actions/RetryGenerationAction.php new file mode 100644 index 0000000..ad57e9b --- /dev/null +++ b/app/Filament/Resources/TemplateGenerations/Actions/RetryGenerationAction.php @@ -0,0 +1,41 @@ +label('تلاش دوباره') + ->icon(Heroicon::OutlinedArrowPath) + ->color('warning') + ->requiresConfirmation() + ->modalDescription('فایل پاورپوینت با همان محتوایی که قبلاً (از جمله متن‌های تولیدشده با هوش مصنوعی) ذخیره شده، دوباره ساخته می‌شود. نیازی به تماس مجدد با هوش مصنوعی نیست.') + ->visible(fn (TemplateGeneration $record): bool => $record->status === TemplateGenerationStatus::Failed) + ->action(function (TemplateGeneration $record): void { + $record->update([ + 'status' => TemplateGenerationStatus::Pending, + 'error_message' => null, + ]); + + GenerateTemplateJob::dispatch($record); + + Notification::make() + ->title('درخواست دوباره ارسال شد') + ->success() + ->send(); + }); + } +} diff --git a/app/Filament/Resources/TemplateGenerations/Schemas/TemplateGenerationInfolist.php b/app/Filament/Resources/TemplateGenerations/Schemas/TemplateGenerationInfolist.php new file mode 100644 index 0000000..c75a093 --- /dev/null +++ b/app/Filament/Resources/TemplateGenerations/Schemas/TemplateGenerationInfolist.php @@ -0,0 +1,48 @@ +components([ + TextEntry::make('uuid') + ->label('شناسه') + ->copyable(), + TextEntry::make('template.title') + ->label('قالب'), + TextEntry::make('status') + ->label('وضعیت') + ->badge() + ->formatStateUsing(fn (TemplateGenerationStatus $state): string => $state->label()) + ->color(fn (TemplateGenerationStatus $state): string => match ($state) { + TemplateGenerationStatus::Pending => 'gray', + TemplateGenerationStatus::Processing => 'warning', + TemplateGenerationStatus::Completed => 'success', + TemplateGenerationStatus::Failed => 'danger', + }), + TextEntry::make('requester.name') + ->label('درخواست‌دهنده') + ->placeholder('—'), + TextEntry::make('error_message') + ->label('پیام خطا') + ->placeholder('—') + ->columnSpanFull(), + KeyValueEntry::make('values') + ->label('محتوای ذخیره‌شده (از جمله متن‌های تولیدشده با هوش مصنوعی)') + ->keyLabel('کلید') + ->valueLabel('مقدار') + ->columnSpanFull(), + TextEntry::make('created_at') + ->label('تاریخ ایجاد') + ->dateTime(), + ]); + } +} diff --git a/app/Filament/Resources/TemplateGenerations/Tables/TemplateGenerationsTable.php b/app/Filament/Resources/TemplateGenerations/Tables/TemplateGenerationsTable.php index bc5d144..c0d46f7 100644 --- a/app/Filament/Resources/TemplateGenerations/Tables/TemplateGenerationsTable.php +++ b/app/Filament/Resources/TemplateGenerations/Tables/TemplateGenerationsTable.php @@ -4,6 +4,7 @@ namespace App\Filament\Resources\TemplateGenerations\Tables; use App\Enums\TemplateGenerationStatus; use App\Filament\Resources\TemplateGenerations\Actions\DownloadGenerationAction; +use App\Filament\Resources\TemplateGenerations\Actions\RetryGenerationAction; use Filament\Actions\ViewAction; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; @@ -60,6 +61,7 @@ class TemplateGenerationsTable ->recordActions([ ViewAction::make(), DownloadGenerationAction::make(), + RetryGenerationAction::make(), ]); } } diff --git a/app/Filament/Resources/TemplateGenerations/TemplateGenerationResource.php b/app/Filament/Resources/TemplateGenerations/TemplateGenerationResource.php index b62a782..b72d469 100644 --- a/app/Filament/Resources/TemplateGenerations/TemplateGenerationResource.php +++ b/app/Filament/Resources/TemplateGenerations/TemplateGenerationResource.php @@ -4,10 +4,12 @@ namespace App\Filament\Resources\TemplateGenerations; use App\Filament\Resources\TemplateGenerations\Pages\ListTemplateGenerations; use App\Filament\Resources\TemplateGenerations\Pages\ViewTemplateGeneration; +use App\Filament\Resources\TemplateGenerations\Schemas\TemplateGenerationInfolist; use App\Filament\Resources\TemplateGenerations\Tables\TemplateGenerationsTable; use App\Models\TemplateGeneration; use BackedEnum; use Filament\Resources\Resource; +use Filament\Schemas\Schema; use Filament\Support\Icons\Heroicon; use Filament\Tables\Table; use UnitEnum; @@ -35,6 +37,11 @@ class TemplateGenerationResource extends Resource return TemplateGenerationsTable::configure($table); } + public static function infolist(Schema $schema): Schema + { + return TemplateGenerationInfolist::configure($schema); + } + public static function getPages(): array { return [ diff --git a/app/Filament/Resources/Templates/RelationManagers/GenerationsRelationManager.php b/app/Filament/Resources/Templates/RelationManagers/GenerationsRelationManager.php index 22609ca..06c6eb1 100644 --- a/app/Filament/Resources/Templates/RelationManagers/GenerationsRelationManager.php +++ b/app/Filament/Resources/Templates/RelationManagers/GenerationsRelationManager.php @@ -4,6 +4,7 @@ namespace App\Filament\Resources\Templates\RelationManagers; use App\Enums\TemplateGenerationStatus; use App\Filament\Resources\TemplateGenerations\Actions\DownloadGenerationAction; +use App\Filament\Resources\TemplateGenerations\Actions\RetryGenerationAction; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\SelectFilter; @@ -63,6 +64,7 @@ class GenerationsRelationManager extends RelationManager ]) ->recordActions([ DownloadGenerationAction::make(), + RetryGenerationAction::make(), ]) ->toolbarActions([]); }