From fe1de7ac7ee40cbb97e0e5dda21cc9e9e52d6aa8 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Thu, 26 Mar 2026 18:08:10 +0000 Subject: [PATCH] Fix Filament v5 Get/Set type hint namespace in resource forms Update closures in Filament resource forms to use the new Filament\Schemas\Components\Utilities\Get and Set classes instead of the removed Filament\Forms\Get and Filament\Forms\Set. Fixes #46 Co-Authored-By: Claude Opus 4.6 --- app/Filament/Resources/ArticleResource.php | 2 +- .../Resources/PluginBundleResource.php | 2 +- app/Filament/Resources/ProductResource.php | 2 +- app/Filament/Resources/ShowcaseResource.php | 4 +- .../WallOfLoveSubmissionResource.php | 4 +- .../WallOfLoveSubmissionResourceTest.php | 62 +++++++++++++++++++ 6 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 tests/Feature/Filament/WallOfLoveSubmissionResourceTest.php diff --git a/app/Filament/Resources/ArticleResource.php b/app/Filament/Resources/ArticleResource.php index df8154ba..c78b61ad 100644 --- a/app/Filament/Resources/ArticleResource.php +++ b/app/Filament/Resources/ArticleResource.php @@ -12,8 +12,8 @@ use Filament\Forms\Components\MarkdownEditor; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; -use Filament\Forms\Set; use Filament\Resources\Resource; +use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; diff --git a/app/Filament/Resources/PluginBundleResource.php b/app/Filament/Resources/PluginBundleResource.php index b1bea7a7..45b45329 100644 --- a/app/Filament/Resources/PluginBundleResource.php +++ b/app/Filament/Resources/PluginBundleResource.php @@ -42,7 +42,7 @@ public static function form(Schema $schema): Schema ->required() ->maxLength(255) ->live(onBlur: true) - ->afterStateUpdated(function (string $state, Forms\Set $set): void { + ->afterStateUpdated(function (string $state, Schemas\Components\Utilities\Set $set): void { $set('slug', Str::slug($state)); }), diff --git a/app/Filament/Resources/ProductResource.php b/app/Filament/Resources/ProductResource.php index 9803a291..4d72fdb3 100644 --- a/app/Filament/Resources/ProductResource.php +++ b/app/Filament/Resources/ProductResource.php @@ -40,7 +40,7 @@ public static function form(Schema $schema): Schema ->required() ->maxLength(255) ->live(onBlur: true) - ->afterStateUpdated(function (string $state, Forms\Set $set): void { + ->afterStateUpdated(function (string $state, Schemas\Components\Utilities\Set $set): void { $set('slug', Str::slug($state)); }), diff --git a/app/Filament/Resources/ShowcaseResource.php b/app/Filament/Resources/ShowcaseResource.php index 89fe6f60..f44e379d 100644 --- a/app/Filament/Resources/ShowcaseResource.php +++ b/app/Filament/Resources/ShowcaseResource.php @@ -72,7 +72,7 @@ public static function form(Schema $schema): Schema ->live(), Schemas\Components\Fieldset::make('Mobile Links') - ->visible(fn (Forms\Get $get) => $get('has_mobile')) + ->visible(fn (Schemas\Components\Utilities\Get $get) => $get('has_mobile')) ->schema([ Forms\Components\TextInput::make('app_store_url') ->label('App Store URL') @@ -86,7 +86,7 @@ public static function form(Schema $schema): Schema ]), Schemas\Components\Fieldset::make('Desktop Downloads') - ->visible(fn (Forms\Get $get) => $get('has_desktop')) + ->visible(fn (Schemas\Components\Utilities\Get $get) => $get('has_desktop')) ->schema([ Forms\Components\TextInput::make('windows_download_url') ->label('Windows Download URL') diff --git a/app/Filament/Resources/WallOfLoveSubmissionResource.php b/app/Filament/Resources/WallOfLoveSubmissionResource.php index 216e40cb..5f077f23 100644 --- a/app/Filament/Resources/WallOfLoveSubmissionResource.php +++ b/app/Filament/Resources/WallOfLoveSubmissionResource.php @@ -83,14 +83,14 @@ public static function form(Schema $schema): Schema Forms\Components\Toggle::make('promoted') ->label('Promoted to Homepage') ->helperText('Promoted submissions appear in the feedback section on the homepage.') - ->visible(fn (Forms\Get $get) => $get('is_approved')) + ->visible(fn (Schemas\Components\Utilities\Get $get) => $get('is_approved')) ->live(), Forms\Components\Textarea::make('promoted_testimonial') ->label('Promoted Testimonial (optional override)') ->helperText('Leave empty to use the original testimonial, or enter a clipped version for the homepage.') ->rows(4) - ->visible(fn (Forms\Get $get) => $get('is_approved') && $get('promoted')), + ->visible(fn (Schemas\Components\Utilities\Get $get) => $get('is_approved') && $get('promoted')), ]) ->columns(1), ]); diff --git a/tests/Feature/Filament/WallOfLoveSubmissionResourceTest.php b/tests/Feature/Filament/WallOfLoveSubmissionResourceTest.php new file mode 100644 index 00000000..895675ae --- /dev/null +++ b/tests/Feature/Filament/WallOfLoveSubmissionResourceTest.php @@ -0,0 +1,62 @@ +admin = User::factory()->create(['email' => 'admin@test.com']); + config(['filament.users' => ['admin@test.com']]); + } + + public function test_list_page_renders_successfully(): void + { + WallOfLoveSubmission::factory()->count(3)->create(); + + Livewire::actingAs($this->admin) + ->test(ListWallOfLoveSubmissions::class) + ->assertSuccessful(); + } + + public function test_edit_page_renders_for_approved_submission(): void + { + $submission = WallOfLoveSubmission::factory()->approved()->create(); + + Livewire::actingAs($this->admin) + ->test(EditWallOfLoveSubmission::class, ['record' => $submission->getRouteKey()]) + ->assertSuccessful(); + } + + public function test_edit_page_renders_for_pending_submission(): void + { + $submission = WallOfLoveSubmission::factory()->pending()->create(); + + Livewire::actingAs($this->admin) + ->test(EditWallOfLoveSubmission::class, ['record' => $submission->getRouteKey()]) + ->assertSuccessful(); + } + + public function test_edit_page_renders_for_promoted_submission(): void + { + $submission = WallOfLoveSubmission::factory()->approved()->promoted()->create(); + + Livewire::actingAs($this->admin) + ->test(EditWallOfLoveSubmission::class, ['record' => $submission->getRouteKey()]) + ->assertSuccessful(); + } +}