diff --git a/app/Filament/Admin/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php b/app/Filament/Admin/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php index 3c3b29a5d..de4426fdb 100644 --- a/app/Filament/Admin/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php +++ b/app/Filament/Admin/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php @@ -6,7 +6,7 @@ use Exception; use Filament\Actions\DeleteAction; use Filament\Actions\ViewAction; use Filament\Schemas\Schema; -use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; +use App\Filament\Components\Actions\RotateDatabasePasswordAction; use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Models\Database; use Filament\Forms\Components\TextInput; diff --git a/app/Filament/Admin/Resources/EggResource/Pages/ListEggs.php b/app/Filament/Admin/Resources/EggResource/Pages/ListEggs.php index 7597b81df..f867ad4f5 100644 --- a/app/Filament/Admin/Resources/EggResource/Pages/ListEggs.php +++ b/app/Filament/Admin/Resources/EggResource/Pages/ListEggs.php @@ -4,11 +4,10 @@ namespace App\Filament\Admin\Resources\EggResource\Pages; use Exception; use App\Filament\Admin\Resources\EggResource; -use App\Filament\Components\Actions\ImportEggAction as ImportEggHeaderAction; -use App\Filament\Components\Tables\Actions\ExportEggAction; -use App\Filament\Components\Tables\Actions\ImportEggAction; -use App\Filament\Components\Tables\Actions\UpdateEggAction; -use App\Filament\Components\Tables\Actions\UpdateEggBulkAction; +use App\Filament\Components\Actions\ExportEggAction; +use App\Filament\Components\Actions\ImportEggAction; +use App\Filament\Components\Actions\UpdateEggAction; +use App\Filament\Components\Actions\UpdateEggBulkAction; use App\Filament\Components\Tables\Filters\TagsFilter; use App\Models\Egg; use App\Traits\Filament\CanCustomizeHeaderActions; @@ -16,7 +15,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\CreateAction; -use Filament\Actions\CreateAction as CreateHeaderAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ReplicateAction; @@ -111,9 +109,9 @@ class ListEggs extends ListRecords protected function getDefaultHeaderActions(): array { return [ - ImportEggHeaderAction::make() + ImportEggAction::make() ->multiple(), - CreateHeaderAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php b/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php index a76002d77..7b64cc744 100644 --- a/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php +++ b/app/Filament/Admin/Resources/ServerResource/Pages/EditServer.php @@ -5,8 +5,8 @@ namespace App\Filament\Admin\Resources\ServerResource\Pages; use App\Enums\SuspendAction; use App\Filament\Admin\Resources\ServerResource; use App\Filament\Admin\Resources\ServerResource\RelationManagers\AllocationsRelationManager; -use App\Filament\Components\Forms\Actions\PreviewStartupAction; -use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; +use App\Filament\Components\Actions\PreviewStartupAction; +use App\Filament\Components\Actions\RotateDatabasePasswordAction; use App\Filament\Server\Pages\Console; use App\Models\Allocation; use App\Models\Database; @@ -754,7 +754,7 @@ class EditServer extends EditRecord ->password() ->revealable() ->columnSpan(1) - //->hintAction(RotateDatabasePasswordAction::make()) + ->hintAction(RotateDatabasePasswordAction::make()) //TODO ->suffixAction(fn (string $state) => request()->isSecure() ? CopyAction::make()->copyable($state) : null) ->formatStateUsing(fn (Database $database) => $database->password), TextInput::make('remote') diff --git a/app/Filament/Components/Forms/Actions/PreviewStartupAction.php b/app/Filament/Components/Actions/PreviewStartupAction.php similarity index 93% rename from app/Filament/Components/Forms/Actions/PreviewStartupAction.php rename to app/Filament/Components/Actions/PreviewStartupAction.php index ff4755e3e..ab9bfd915 100644 --- a/app/Filament/Components/Forms/Actions/PreviewStartupAction.php +++ b/app/Filament/Components/Actions/PreviewStartupAction.php @@ -1,6 +1,6 @@ label(trans('filament-actions::export.modal.actions.export.label')); - - $this->icon('tabler-download'); - - $this->authorize(fn () => auth()->user()->can('export egg')); - - $this->action(fn (EggExporterService $service, Egg $egg) => response()->streamDownload(function () use ($service, $egg) { - echo $service->handle($egg->id); - }, 'egg-' . $egg->getKebabName() . '.json')); - } -} diff --git a/app/Filament/Components/Tables/Actions/ImportEggAction.php b/app/Filament/Components/Tables/Actions/ImportEggAction.php deleted file mode 100644 index e6208af30..000000000 --- a/app/Filament/Components/Tables/Actions/ImportEggAction.php +++ /dev/null @@ -1,143 +0,0 @@ -label(trans('filament-actions::import.modal.actions.import.label')); - - $this->authorize(fn () => auth()->user()->can('import egg')); - - $this->action(function (array $data, EggImporterService $eggImportService): void { - $eggs = array_merge(collect($data['urls'])->flatten()->whereNotNull()->unique()->all(), Arr::wrap($data['files'])); - if (empty($eggs)) { - return; - } - - [$success, $failed] = [collect(), collect()]; - - foreach ($eggs as $egg) { - if ($egg instanceof TemporaryUploadedFile) { - $name = str($egg->getClientOriginalName())->afterLast('egg-')->before('.json')->headline(); - $method = 'fromFile'; - } else { - $egg = str($egg); - $egg = $egg->contains('github.com') ? $egg->replaceFirst('blob', 'raw') : $egg; - $name = $egg->afterLast('/egg-')->before('.json')->headline(); - $method = 'fromUrl'; - } - try { - $eggImportService->$method($egg); - $success->push($name); - } catch (Exception $exception) { - $failed->push($name); - report($exception); - } - } - - if ($failed->count() > 0) { - Notification::make() - ->title(trans('admin/egg.import.import_failed')) - ->body($failed->join(', ')) - ->danger() - ->send(); - } - if ($success->count() > 0) { - Notification::make() - ->title(trans('admin/egg.import.import_success')) - ->body($success->join(', ')) - ->success() - ->send(); - } - }); - } - - public function multiple(bool|Closure $condition = true): static - { - $isMultiple = (bool) $this->evaluate($condition); - $this->schema([ - Tabs::make('Tabs') - ->contained(false) - ->tabs([ - Tab::make(trans('admin/egg.import.file')) - ->icon('tabler-file-upload') - ->schema([ - FileUpload::make('files') - ->label(trans('admin/egg.model_label')) - ->hint(trans('admin/egg.import.egg_help')) - ->acceptedFileTypes(['application/json']) - ->preserveFilenames() - ->previewable(false) - ->storeFiles(false) - ->multiple($isMultiple), - ]), - Tab::make(trans('admin/egg.import.url')) - ->icon('tabler-world-upload') - ->schema([ - Select::make('github') - ->label(trans('admin/egg.import.github')) - ->options(cache('eggs.index')) - ->selectablePlaceholder(false) - ->searchable() - ->preload() - ->live() - ->afterStateUpdated(function ($state, Set $set, Get $get) use ($isMultiple) { - if ($state) { - $urls = $isMultiple ? $get('urls') : []; - $urls[Str::uuid()->toString()] = ['url' => $state]; - $set('urls', $urls); - $set('github', null); - } - }), - Repeater::make('urls') - ->itemLabel(fn (array $state) => str($state['url'])->afterLast('/egg-')->before('.json')->headline()) - ->hint(trans('admin/egg.import.url_help')) - ->addActionLabel(trans('admin/egg.import.add_url')) - ->grid($isMultiple ? 2 : null) - ->reorderable(false) - ->addable($isMultiple) - ->deletable(fn (array $state) => count($state) > 1) - ->schema([ - TextInput::make('url') - ->default(fn (Egg $egg) => $egg->update_url) - ->live() - ->label(trans('admin/egg.import.url')) - ->placeholder('https://github.com/pelican-eggs/generic/blob/main/nodejs/egg-node-js-generic.json') - ->url() - ->endsWith('.json') - ->validationAttribute(trans('admin/egg.import.url')), - ]), - ]), - ]), - ]); - - return $this; - } -} diff --git a/app/Filament/Server/Pages/Startup.php b/app/Filament/Server/Pages/Startup.php index 7207029df..53def387d 100644 --- a/app/Filament/Server/Pages/Startup.php +++ b/app/Filament/Server/Pages/Startup.php @@ -4,7 +4,7 @@ namespace App\Filament\Server\Pages; use Exception; use App\Facades\Activity; -use App\Filament\Components\Forms\Actions\PreviewStartupAction; +use App\Filament\Components\Actions\PreviewStartupAction; use App\Models\Permission; use App\Models\Server; use App\Models\ServerVariable; diff --git a/app/Filament/Server/Resources/DatabaseResource.php b/app/Filament/Server/Resources/DatabaseResource.php index 1c7975586..d3fc52ccf 100644 --- a/app/Filament/Server/Resources/DatabaseResource.php +++ b/app/Filament/Server/Resources/DatabaseResource.php @@ -2,8 +2,8 @@ namespace App\Filament\Server\Resources; +use App\Filament\Components\Actions\RotateDatabasePasswordAction; use App\Filament\Server\Resources\DatabaseResource\Pages\ListDatabases; -use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction; use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Models\Database; use App\Models\Permission; diff --git a/tests/Filament/Admin/ListNodesTest.php b/tests/Filament/Admin/ListNodesTest.php index 9f7115556..d5db43deb 100644 --- a/tests/Filament/Admin/ListNodesTest.php +++ b/tests/Filament/Admin/ListNodesTest.php @@ -7,7 +7,6 @@ use App\Models\Permission; use App\Models\Role; use App\Models\Server; use Filament\Actions\CreateAction; -use Filament\Tables\Actions\CreateAction as TableCreateAction; use function Pest\Livewire\livewire; @@ -63,5 +62,5 @@ it('displays the create button in the table instead of the header when 0 nodes', livewire(ListNodes::class) ->assertSuccessful() ->assertHeaderMissing(CreateAction::class) - ->assertActionExists(TableCreateAction::class); + ->assertActionExists(CreateAction::class); });