Skip to content

Commit 37ea0b2

Browse files
authored
Merge pull request #18 from KilianTrunk/f4
feat: migrate to f4
2 parents 2b08899 + d43a0bb commit 37ea0b2

40 files changed

+975
-476
lines changed

.github/workflows/test-runner.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
name: Tests
22

33
on:
4-
# Run testing on all push and pull requests for the main branch that have committed changes in PHP files
4+
# Run testing on all push and pull requests that have committed changes in PHP files
55
push:
6-
branches: [ "main" ]
76
paths:
8-
- '**.php'
7+
- '**/*.php'
98
pull_request:
10-
branches: [ "main" ]
119
paths:
12-
- '**.php'
10+
- '**/*.php'
1311
# Make it possible to run the workflow manually
1412
workflow_dispatch:
1513

composer.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@
4141
},
4242
"require": {
4343
"php": "^8.2",
44-
"bezhansalleh/filament-shield": "^3.3",
44+
"bezhansalleh/filament-shield": "^4.0",
4545
"datalinx/php-utils": "^2.5",
4646
"eclipsephp/common": "dev-main",
47-
"filament/filament": "^3.3",
48-
"filament/spatie-laravel-translatable-plugin": "^3.3",
47+
"filament/filament": "^4.0",
48+
"lara-zeus/spatie-translatable": "^1.0",
4949
"laravel/framework": "^11.0|^12.0",
5050
"spatie/laravel-package-tools": "^1.19",
5151
"spatie/laravel-translatable": "^6.11"
@@ -88,8 +88,5 @@
8888
"Eclipse\\World\\EclipseWorldServiceProvider"
8989
]
9090
}
91-
},
92-
"suggest": {
93-
"tangodev-it/filament-emoji-picker": "Show a emoji picker for country flag input"
9491
}
9592
}

config/filament-shield.php

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
return [
4+
'shield_resource' => [
5+
'slug' => 'shield/roles',
6+
'show_model_path' => true,
7+
'cluster' => null,
8+
'tabs' => [
9+
'pages' => true,
10+
'widgets' => true,
11+
'resources' => true,
12+
'custom_permissions' => true,
13+
],
14+
],
15+
16+
'tenant_model' => \Eclipse\Core\Models\Site::class,
17+
18+
'auth_provider_model' => \Eclipse\Core\Models\User::class,
19+
20+
'super_admin' => [
21+
'enabled' => true,
22+
'name' => 'super_admin',
23+
'define_via_gate' => false,
24+
'intercept_gate' => 'before',
25+
],
26+
27+
'panel_user' => [
28+
'enabled' => true,
29+
'name' => 'panel_user',
30+
],
31+
32+
'permissions' => [
33+
'separator' => '_',
34+
'case' => 'lower_snake',
35+
'generate' => true,
36+
],
37+
38+
'policies' => [
39+
'path' => app_path('Policies'),
40+
'merge' => false,
41+
'generate' => true,
42+
'methods' => [
43+
'viewAny', 'view', 'create', 'update', 'restore', 'restoreAny',
44+
'replicate', 'reorder', 'delete', 'deleteAny', 'forceDelete', 'forceDeleteAny',
45+
],
46+
'single_parameter_methods' => [
47+
'viewAny', 'create', 'deleteAny', 'forceDeleteAny', 'restoreAny', 'reorder',
48+
],
49+
],
50+
51+
'localization' => [
52+
'enabled' => false,
53+
'key' => 'filament-shield::filament-shield',
54+
],
55+
56+
'resources' => [
57+
'subject' => 'model',
58+
'manage' => [],
59+
'exclude' => [],
60+
],
61+
62+
'pages' => [
63+
'subject' => 'class',
64+
'prefix' => 'view',
65+
'exclude' => [
66+
],
67+
],
68+
69+
'widgets' => [
70+
'subject' => 'class',
71+
'prefix' => 'view',
72+
'exclude' => [
73+
],
74+
],
75+
76+
'custom_permissions' => [
77+
],
78+
79+
'discovery' => [
80+
'discover_all_resources' => false,
81+
'discover_all_widgets' => false,
82+
'discover_all_pages' => false,
83+
],
84+
85+
'register_role_policy' => true,
86+
];

src/EclipseWorldServiceProvider.php

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
use Eclipse\World\Console\Commands\ImportCommand;
66
use Eclipse\World\Console\Commands\ImportPostsCommand;
77
use Eclipse\World\Console\Commands\ImportTariffCodesCommand;
8+
use Eclipse\World\Filament\Resources\CountryResource;
9+
use Eclipse\World\Filament\Resources\CurrencyResource;
10+
use Eclipse\World\Filament\Resources\PostResource;
11+
use Eclipse\World\Filament\Resources\RegionResource;
12+
use Eclipse\World\Filament\Resources\TariffCodeResource;
813
use Spatie\LaravelPackageTools\Package;
914
use Spatie\LaravelPackageTools\PackageServiceProvider;
1015

@@ -25,4 +30,80 @@ public function configurePackage(Package $package): void
2530
->discoversMigrations()
2631
->runsMigrations();
2732
}
33+
34+
public function boot(): void
35+
{
36+
parent::boot();
37+
38+
// Merge per-resource abilities into the effective config
39+
$this->app->booted(function () {
40+
$manage = config('filament-shield.resources.manage', []);
41+
42+
$pluginManage = [
43+
CountryResource::class => [
44+
'viewAny',
45+
'view',
46+
'create',
47+
'update',
48+
'restore',
49+
'restoreAny',
50+
'delete',
51+
'deleteAny',
52+
'forceDelete',
53+
'forceDeleteAny',
54+
],
55+
RegionResource::class => [
56+
'viewAny',
57+
'view',
58+
'create',
59+
'update',
60+
'restore',
61+
'restoreAny',
62+
'delete',
63+
'deleteAny',
64+
'forceDelete',
65+
'forceDeleteAny',
66+
],
67+
CurrencyResource::class => [
68+
'viewAny',
69+
'view',
70+
'create',
71+
'update',
72+
'restore',
73+
'restoreAny',
74+
'delete',
75+
'deleteAny',
76+
'forceDelete',
77+
'forceDeleteAny',
78+
],
79+
TariffCodeResource::class => [
80+
'viewAny',
81+
'view',
82+
'create',
83+
'update',
84+
'restore',
85+
'restoreAny',
86+
'delete',
87+
'deleteAny',
88+
'forceDelete',
89+
'forceDeleteAny',
90+
],
91+
PostResource::class => [
92+
'viewAny',
93+
'view',
94+
'create',
95+
'update',
96+
'restore',
97+
'restoreAny',
98+
'delete',
99+
'deleteAny',
100+
'forceDelete',
101+
'forceDeleteAny',
102+
],
103+
];
104+
105+
$manage = array_replace_recursive($manage, $pluginManage);
106+
config()->set('filament-shield.resources.manage', $manage);
107+
});
108+
}
28109
}

src/Filament/Clusters/World.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
class World extends Cluster
88
{
9-
protected static ?string $navigationIcon = 'heroicon-s-map';
9+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-s-map';
1010

1111
public static function getNavigationLabel(): string
1212
{

src/Filament/Clusters/World/Resources/CountryResource.php

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,49 @@
22

33
namespace Eclipse\World\Filament\Clusters\World\Resources;
44

5-
use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions;
5+
use Closure;
66
use Eclipse\World\Filament\Clusters\World;
7-
use Eclipse\World\Filament\Clusters\World\Resources\CountryResource\Pages;
7+
use Eclipse\World\Filament\Clusters\World\Resources\CountryResource\Pages\ListCountries;
88
use Eclipse\World\Models\Country;
9+
use Eclipse\World\Models\CountryInSpecialRegion;
10+
use Eclipse\World\Models\Region;
11+
use Filament\Actions\ActionGroup;
12+
use Filament\Actions\BulkActionGroup;
13+
use Filament\Actions\DeleteAction;
14+
use Filament\Actions\DeleteBulkAction;
15+
use Filament\Actions\EditAction;
16+
use Filament\Actions\ForceDeleteAction;
17+
use Filament\Actions\ForceDeleteBulkAction;
18+
use Filament\Actions\RestoreAction;
19+
use Filament\Actions\RestoreBulkAction;
920
use Filament\Forms\Components\DatePicker;
1021
use Filament\Forms\Components\Repeater;
1122
use Filament\Forms\Components\Select;
1223
use Filament\Forms\Components\TextInput;
13-
use Filament\Forms\Form;
1424
use Filament\Resources\Resource;
15-
use Filament\Tables\Actions\ActionGroup;
16-
use Filament\Tables\Actions\BulkActionGroup;
17-
use Filament\Tables\Actions\DeleteAction;
18-
use Filament\Tables\Actions\DeleteBulkAction;
19-
use Filament\Tables\Actions\EditAction;
20-
use Filament\Tables\Actions\ForceDeleteAction;
21-
use Filament\Tables\Actions\ForceDeleteBulkAction;
22-
use Filament\Tables\Actions\RestoreAction;
23-
use Filament\Tables\Actions\RestoreBulkAction;
25+
use Filament\Schemas\Schema;
2426
use Filament\Tables\Columns\TextColumn;
2527
use Filament\Tables\Filters\SelectFilter;
2628
use Filament\Tables\Filters\TrashedFilter;
2729
use Filament\Tables\Table;
2830
use Illuminate\Database\Eloquent\Builder;
2931
use Illuminate\Database\Eloquent\SoftDeletingScope;
32+
use TangoDevIt\FilamentEmojiPicker\EmojiPickerAction;
3033

31-
class CountryResource extends Resource implements HasShieldPermissions
34+
class CountryResource extends Resource
3235
{
3336
protected static ?string $model = Country::class;
3437

3538
protected static ?string $slug = 'countries';
3639

37-
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
40+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-stack';
3841

3942
protected static ?string $cluster = World::class;
4043

41-
public static function form(Form $form): Form
44+
public static function form(Schema $schema): Schema
4245
{
43-
return $form
44-
->schema([
46+
return $schema
47+
->components([
4548
TextInput::make('id')
4649
->required()
4750
->length(2)
@@ -57,7 +60,7 @@ public static function form(Form $form): Form
5760
->label(__('eclipse-world::countries.form.flag.label'))
5861
->suffixAction(function () {
5962
if (class_exists('\TangoDevIt\FilamentEmojiPicker\EmojiPickerAction')) {
60-
return \TangoDevIt\FilamentEmojiPicker\EmojiPickerAction::make('emoji-flag');
63+
return EmojiPickerAction::make('emoji-flag');
6164
}
6265

6366
return null;
@@ -98,7 +101,7 @@ public static function form(Form $form): Form
98101
->label(__('eclipse-world::countries.form.special_regions.region_label'))
99102
->rules([
100103
function ($get) {
101-
return function (string $attribute, $value, \Closure $fail) use ($get) {
104+
return function (string $attribute, $value, Closure $fail) use ($get) {
102105
if (! $value) {
103106
return;
104107
}
@@ -111,7 +114,7 @@ function ($get) {
111114
}
112115

113116
// Check for any existing membership with same country and region
114-
$query = \Eclipse\World\Models\CountryInSpecialRegion::where('country_id', $countryId)
117+
$query = CountryInSpecialRegion::where('country_id', $countryId)
115118
->where('region_id', $value);
116119

117120
// Exclude current record when editing
@@ -120,7 +123,7 @@ function ($get) {
120123
}
121124

122125
if ($query->exists()) {
123-
$regionName = \Eclipse\World\Models\Region::find($value)?->name ?? __('eclipse-world::countries.validation.unknown_region');
126+
$regionName = Region::find($value)?->name ?? __('eclipse-world::countries.validation.unknown_region');
124127
$fail(__('eclipse-world::countries.validation.duplicate_special_region_membership', [
125128
'region' => $regionName,
126129
]));
@@ -195,7 +198,7 @@ public static function table(Table $table): Table
195198
SelectFilter::make('special_regions')
196199
->label(__('eclipse-world::countries.filters.special_region.label'))
197200
->options(function () {
198-
return \Eclipse\World\Models\Region::where('is_special', true)
201+
return Region::where('is_special', true)
199202
->pluck('name', 'id')
200203
->toArray();
201204
})
@@ -217,7 +220,7 @@ public static function table(Table $table): Table
217220
->preload(),
218221
TrashedFilter::make(),
219222
])
220-
->actions([
223+
->recordActions([
221224
EditAction::make()
222225
->label(__('eclipse-world::countries.actions.edit.label'))
223226
->modalHeading(__('eclipse-world::countries.actions.edit.heading')),
@@ -236,7 +239,7 @@ public static function table(Table $table): Table
236239
])),
237240
]),
238241
])
239-
->bulkActions([
242+
->toolbarActions([
240243
BulkActionGroup::make([
241244
DeleteBulkAction::make()
242245
->label(__('eclipse-world::countries.actions.delete.label')),
@@ -251,7 +254,7 @@ public static function table(Table $table): Table
251254
public static function getPages(): array
252255
{
253256
return [
254-
'index' => Pages\ListCountries::route('/'),
257+
'index' => ListCountries::route('/'),
255258
];
256259
}
257260

@@ -263,21 +266,6 @@ public static function getEloquentQuery(): Builder
263266
]);
264267
}
265268

266-
public static function getPermissionPrefixes(): array
267-
{
268-
return [
269-
'view_any',
270-
'create',
271-
'update',
272-
'restore',
273-
'restore_any',
274-
'delete',
275-
'delete_any',
276-
'force_delete',
277-
'force_delete_any',
278-
];
279-
}
280-
281269
public static function getNavigationLabel(): string
282270
{
283271
return __('eclipse-world::countries.nav_label');

0 commit comments

Comments
 (0)