|
5 | 5 | use App\Filament\Server\Pages\ServerFormPage; |
6 | 6 | use App\Models\Server; |
7 | 7 | use App\Repositories\Daemon\DaemonServerRepository; |
| 8 | +use App\Services\Servers\ServerDeletionService; |
8 | 9 | use Boy132\UserCreatableServers\Filament\App\Widgets\UserResourceLimitsOverview; |
9 | 10 | use Boy132\UserCreatableServers\Models\UserResourceLimits; |
| 11 | +use Exception; |
10 | 12 | use Filament\Actions\Action; |
11 | 13 | use Filament\Facades\Filament; |
12 | 14 | use Filament\Forms\Components\TextInput; |
@@ -103,12 +105,46 @@ protected function getHeaderWidgets(): array |
103 | 105 |
|
104 | 106 | protected function getHeaderActions(): array |
105 | 107 | { |
| 108 | + /** @var Server $server */ |
| 109 | + $server = Filament::getTenant(); |
| 110 | + |
106 | 111 | return [ |
107 | 112 | Action::make('save') |
108 | | - ->label(__('filament-panels::resources/pages/edit-record.form.actions.save.label')) |
| 113 | + ->label(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) |
109 | 114 | ->submit('save') |
110 | 115 | ->formId('form') |
111 | 116 | ->keyBindings(['mod+s']), |
| 117 | + Action::make('delete_server') |
| 118 | + ->visible(fn () => config('user-creatable-servers.can_users_delete_servers')) |
| 119 | + ->authorize(fn () => $server->owner_id === auth()->user()->id || auth()->user()->can('delete server', $server)) |
| 120 | + ->label(trans('user-creatable-servers::strings.delete_server')) |
| 121 | + ->color('danger') |
| 122 | + ->icon('tabler-trash') |
| 123 | + ->requiresConfirmation() |
| 124 | + ->modalHeading(trans('user-creatable-servers::strings.delete_server_confirm')) |
| 125 | + ->modalDescription(trans('user-creatable-servers::strings.delete_server_warning')) |
| 126 | + ->modalSubmitActionLabel(trans('user-creatable-servers::strings.delete_server')) |
| 127 | + ->action(function (ServerDeletionService $service) use ($server) { |
| 128 | + try { |
| 129 | + $service->handle($server); |
| 130 | + |
| 131 | + Notification::make() |
| 132 | + ->title(trans('user-creatable-servers::strings.server_deleted')) |
| 133 | + ->body(trans('user-creatable-servers::strings.server_deleted_success')) |
| 134 | + ->success() |
| 135 | + ->send(); |
| 136 | + |
| 137 | + redirect(Filament::getDefaultPanel()->getUrl()); |
| 138 | + } catch (Exception $exception) { |
| 139 | + report($exception); |
| 140 | + |
| 141 | + Notification::make() |
| 142 | + ->title(trans('user-creatable-servers::strings.server_delete_error')) |
| 143 | + ->body($exception->getMessage()) |
| 144 | + ->danger() |
| 145 | + ->send(); |
| 146 | + } |
| 147 | + }), |
112 | 148 | ]; |
113 | 149 | } |
114 | 150 |
|
|
0 commit comments