label(__('filament.actions.models.wiki.optimize_image.name')); $this->icon(Heroicon::ArrowPathRoundedSquare); $this->visible(fn (Image $record) => Auth::user()->can('forceDelete', $record)); $this->action(fn (Image $record, array $data) => $this->handle($record, $data)); } public function handle(Image $image, array $fields): void { $extension = Arr::get($fields, 'extension'); $width = ($value = Arr::get($fields, 'width')) !== null ? (int) $value : null; $height = ($value = Arr::get($fields, 'height')) !== null ? (int) $value : null; $action = new OptimizeImage($image, $extension, $width, $height); $actionResult = $action->handle(); if ($actionResult->hasFailed()) { $this->failedLog($actionResult->getMessage()); } } public function getSchema(Schema $schema): Schema { return $schema ->components([ Select::make('extension') ->label(__('filament.actions.models.wiki.optimize_image.extension.name')) ->helperText(__('filament.actions.models.wiki.optimize_image.extension.help')) ->options([ 'avif' => 'avif', ]) ->default('avif'), TextInput::make('width') ->label(__('filament.actions.models.wiki.optimize_image.width.name')) ->helperText(__('filament.actions.models.wiki.optimize_image.width.help')) ->integer(), TextInput::make('height') ->label(__('filament.actions.models.wiki.optimize_image.height.name')) ->helperText(__('filament.actions.models.wiki.optimize_image.height.help')) ->integer(), ]) ->columns(1); } }