Skip to content

Commit a4ecb3c

Browse files
feat: upgrade Filament to v4
1 parent f7f0975 commit a4ecb3c

File tree

61 files changed

+2342
-1002
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+2342
-1002
lines changed

app/Filament/Pages/AppSetting.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22

33
namespace App\Filament\Pages;
44

5-
use Filament\Forms\Form;
65
use Filament\Pages\SettingsPage;
6+
use Filament\Schemas\Schema;
77

88
class AppSetting extends SettingsPage
99
{
10-
protected static ?string $navigationIcon = 'heroicon-o-cog-6-tooth';
10+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cog-6-tooth';
1111

12-
protected static ?string $navigationGroup = 'Settings';
12+
protected static string|\UnitEnum|null $navigationGroup = 'Settings';
1313

1414
protected static string $settings = \App\Settings\AppSetting::class;
1515

16-
public function form(Form $form): Form
16+
public function form(Schema $schema): Schema
1717
{
18-
return $form
19-
->schema([
18+
return $schema
19+
->components([
2020
// ...
2121
]);
2222
}

app/Filament/Resources/UserResource/Pages/CreateUser.php renamed to app/Filament/Resources/Users/Pages/CreateUser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?php
22

3-
namespace App\Filament\Resources\UserResource\Pages;
3+
namespace App\Filament\Resources\Users\Pages;
44

5-
use App\Filament\Resources\UserResource;
5+
use App\Filament\Resources\Users\UserResource;
66
use Filament\Resources\Pages\CreateRecord;
77

88
class CreateUser extends CreateRecord

app/Filament/Resources/UserResource/Pages/EditUser.php renamed to app/Filament/Resources/Users/Pages/EditUser.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?php
22

3-
namespace App\Filament\Resources\UserResource\Pages;
3+
namespace App\Filament\Resources\Users\Pages;
44

5-
use App\Filament\Resources\UserResource;
6-
use Filament\Actions;
5+
use App\Filament\Resources\Users\UserResource;
6+
use Filament\Actions\DeleteAction;
77
use Filament\Resources\Pages\EditRecord;
88

99
class EditUser extends EditRecord
@@ -13,7 +13,7 @@ class EditUser extends EditRecord
1313
protected function getHeaderActions(): array
1414
{
1515
return [
16-
Actions\DeleteAction::make(),
16+
DeleteAction::make(),
1717
];
1818
}
1919

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?php
22

3-
namespace App\Filament\Resources\UserResource\Pages;
3+
namespace App\Filament\Resources\Users\Pages;
44

5-
use App\Filament\Resources\UserResource;
6-
use Filament\Actions;
5+
use App\Filament\Resources\Users\UserResource;
6+
use Filament\Actions\CreateAction;
77
use Filament\Resources\Pages\ListRecords;
88

99
class ListUsers extends ListRecords
@@ -13,7 +13,7 @@ class ListUsers extends ListRecords
1313
protected function getHeaderActions(): array
1414
{
1515
return [
16-
Actions\CreateAction::make(),
16+
CreateAction::make(),
1717
];
1818
}
1919
}
Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,54 @@
11
<?php
22

3-
namespace App\Filament\Resources;
3+
namespace App\Filament\Resources\Users;
44

5-
use App\Filament\Resources\UserResource\Pages;
5+
use App\Filament\Resources\Users\Pages\CreateUser;
6+
use App\Filament\Resources\Users\Pages\EditUser;
7+
use App\Filament\Resources\Users\Pages\ListUsers;
68
use App\Models\User;
79
use DateTimeZone;
8-
use Filament\Forms;
9-
use Filament\Forms\Form;
10+
use Filament\Actions\BulkActionGroup;
11+
use Filament\Actions\DeleteBulkAction;
12+
use Filament\Actions\EditAction;
13+
use Filament\Forms\Components\DateTimePicker;
14+
use Filament\Forms\Components\FileUpload;
15+
use Filament\Forms\Components\Select;
16+
use Filament\Forms\Components\TextInput;
1017
use Filament\Resources\Resource;
11-
use Filament\Tables;
18+
use Filament\Schemas\Schema;
19+
use Filament\Tables\Columns\ImageColumn;
20+
use Filament\Tables\Columns\TextColumn;
1221
use Filament\Tables\Table;
1322
use Illuminate\Support\Facades\Hash;
1423

1524
class UserResource extends Resource
1625
{
1726
protected static ?string $model = User::class;
1827

19-
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
28+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-stack';
2029

21-
public static function form(Form $form): Form
30+
public static function form(Schema $schema): Schema
2231
{
23-
return $form
24-
->schema([
25-
Forms\Components\TextInput::make('name')
32+
return $schema
33+
->components([
34+
TextInput::make('name')
2635
->required()
2736
->maxLength(255),
28-
Forms\Components\TextInput::make('email')
37+
TextInput::make('email')
2938
->email()
3039
->required()
3140
->maxLength(255),
32-
Forms\Components\FileUpload::make('avatar')
41+
FileUpload::make('avatar')
3342
->disk('public')
3443
->directory('avatars')
3544
->avatar(),
36-
Forms\Components\Select::make('timezone')
45+
Select::make('timezone')
3746
->options(
3847
array_combine(DateTimeZone::listIdentifiers(), DateTimeZone::listIdentifiers())
3948
)
4049
->searchable(),
41-
Forms\Components\DateTimePicker::make('email_verified_at'),
42-
Forms\Components\TextInput::make('password')
50+
DateTimePicker::make('email_verified_at'),
51+
TextInput::make('password')
4352
->password()
4453
->maxLength(255)
4554
->required(fn ($component, $get, $livewire, $model, $record, $set, $state): bool => $record === null)
@@ -51,22 +60,22 @@ public static function table(Table $table): Table
5160
{
5261
return $table
5362
->columns([
54-
Tables\Columns\TextColumn::make('id')
63+
TextColumn::make('id')
5564
->searchable(),
56-
Tables\Columns\TextColumn::make('name')
65+
TextColumn::make('name')
5766
->searchable(),
58-
Tables\Columns\TextColumn::make('email')
67+
TextColumn::make('email')
5968
->searchable(),
60-
Tables\Columns\ImageColumn::make('avatar')
69+
ImageColumn::make('avatar')
6170
->circular(),
62-
Tables\Columns\TextColumn::make('email_verified_at')
71+
TextColumn::make('email_verified_at')
6372
->dateTime()
6473
->sortable(),
65-
Tables\Columns\TextColumn::make('created_at')
74+
TextColumn::make('created_at')
6675
->dateTime()
6776
->sortable()
6877
->toggleable(isToggledHiddenByDefault: true),
69-
Tables\Columns\TextColumn::make('updated_at')
78+
TextColumn::make('updated_at')
7079
->dateTime()
7180
->sortable()
7281
->toggleable(isToggledHiddenByDefault: true),
@@ -75,12 +84,12 @@ public static function table(Table $table): Table
7584
->filters([
7685
//
7786
])
78-
->actions([
79-
Tables\Actions\EditAction::make(),
87+
->recordActions([
88+
EditAction::make(),
8089
])
81-
->bulkActions([
82-
Tables\Actions\BulkActionGroup::make([
83-
Tables\Actions\DeleteBulkAction::make(),
90+
->toolbarActions([
91+
BulkActionGroup::make([
92+
DeleteBulkAction::make(),
8493
]),
8594
]);
8695
}
@@ -95,9 +104,9 @@ public static function getRelations(): array
95104
public static function getPages(): array
96105
{
97106
return [
98-
'index' => Pages\ListUsers::route('/'),
99-
'create' => Pages\CreateUser::route('/create'),
100-
'edit' => Pages\EditUser::route('/{record}/edit'),
107+
'index' => ListUsers::route('/'),
108+
'create' => CreateUser::route('/create'),
109+
'edit' => EditUser::route('/{record}/edit'),
101110
];
102111
}
103112
}

app/Models/User.php

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,56 @@
22

33
namespace App\Models;
44

5+
use App\Notifications\VerifyEmail;
6+
use Database\Factories\UserFactory;
57
use Filament\Models\Contracts\FilamentUser;
68
use Filament\Models\Contracts\HasAvatar;
79
use Filament\Panel;
810
use Illuminate\Auth\MustVerifyEmail as AuthMustVerifyEmail;
911
use Illuminate\Contracts\Auth\MustVerifyEmail;
12+
use Illuminate\Database\Eloquent\Builder;
1013
use Illuminate\Database\Eloquent\Factories\HasFactory;
1114
use Illuminate\Foundation\Auth\User as Authenticatable;
15+
use Illuminate\Notifications\DatabaseNotification;
16+
use Illuminate\Notifications\DatabaseNotificationCollection;
1217
use Illuminate\Notifications\Notifiable;
18+
use Illuminate\Support\Carbon;
1319
use Spatie\Permission\Traits\HasRoles;
1420

1521
/**
1622
* @property int $id
1723
* @property string $name
1824
* @property string $email
1925
* @property string|null $avatar
20-
* @property \Illuminate\Support\Carbon|null $email_verified_at
26+
* @property Carbon|null $email_verified_at
2127
* @property string $password
2228
* @property string|null $remember_token
2329
* @property string|null $timezone +7 or Asia/Ho_Chi_Minh
24-
* @property \Illuminate\Support\Carbon|null $created_at
25-
* @property \Illuminate\Support\Carbon|null $updated_at
26-
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
30+
* @property Carbon|null $created_at
31+
* @property Carbon|null $updated_at
32+
* @property-read DatabaseNotificationCollection<int, DatabaseNotification> $notifications
2733
* @property-read int|null $notifications_count
34+
* @property-read \Illuminate\Database\Eloquent\Collection<int, \Spatie\Permission\Models\Permission> $permissions
35+
* @property-read int|null $permissions_count
36+
* @property-read \Illuminate\Database\Eloquent\Collection<int, \Spatie\Permission\Models\Role> $roles
37+
* @property-read int|null $roles_count
2838
*
2939
* @method static \Database\Factories\UserFactory factory($count = null, $state = [])
30-
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newModelQuery()
31-
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newQuery()
32-
* @method static \Illuminate\Database\Eloquent\Builder<static>|User query()
40+
* @method static Builder<static>|User newModelQuery()
41+
* @method static Builder<static>|User newQuery()
42+
* @method static Builder<static>|User permission($permissions, $without = false)
43+
* @method static Builder<static>|User query()
44+
* @method static Builder<static>|User role($roles, $guard = null, $without = false)
45+
* @method static Builder<static>|User withoutPermission($permissions)
46+
* @method static Builder<static>|User withoutRole($roles, $guard = null)
3347
*
3448
* @mixin \Illuminate\Database\Eloquent\Model
3549
*/
3650
class User extends Authenticatable implements FilamentUser, HasAvatar, MustVerifyEmail
3751
{
3852
use AuthMustVerifyEmail;
3953

40-
/** @use HasFactory<\Database\Factories\UserFactory> */
54+
/** @use HasFactory<UserFactory> */
4155
use HasFactory;
4256

4357
use HasRoles;
@@ -103,6 +117,6 @@ public function getFilamentAvatarUrl(): ?string
103117
*/
104118
public function sendEmailVerificationNotification(): void
105119
{
106-
$this->notify(new \App\Notifications\VerifyEmail);
120+
$this->notify(new VerifyEmail);
107121
}
108122
}

app/Providers/Filament/AdminPanelProvider.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
use Filament\Http\Middleware\Authenticate;
77
use Filament\Http\Middleware\DisableBladeIconComponents;
88
use Filament\Http\Middleware\DispatchServingFilamentEvent;
9-
use Filament\Pages;
9+
use Filament\Pages\Dashboard;
1010
use Filament\Panel;
1111
use Filament\PanelProvider;
1212
use Filament\Support\Colors\Color;
13-
use Filament\Widgets;
13+
use Filament\Widgets\AccountWidget;
14+
use Filament\Widgets\FilamentInfoWidget;
1415
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
1516
use Illuminate\Cookie\Middleware\EncryptCookies;
1617
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
@@ -34,12 +35,12 @@ public function panel(Panel $panel): Panel
3435
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
3536
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
3637
->pages([
37-
Pages\Dashboard::class,
38+
Dashboard::class,
3839
])
3940
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
4041
->widgets([
41-
Widgets\AccountWidget::class,
42-
Widgets\FilamentInfoWidget::class,
42+
AccountWidget::class,
43+
FilamentInfoWidget::class,
4344
])
4445
->plugin(FilamentSpatieRolesPermissionsPlugin::make())
4546
->middleware([

app/Settings/AppSetting.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66

77
class AppSetting extends Settings
88
{
9-
109
public static function group(): string
1110
{
1211
return 'app';
1312
}
14-
}
13+
}

composer.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
"license": "MIT",
1111
"require": {
1212
"php": "^8.2",
13-
"althinect/filament-spatie-roles-permissions": "^2.3",
14-
"filament/filament": "^3.3",
15-
"filament/spatie-laravel-settings-plugin": "^3.3",
13+
"althinect/filament-spatie-roles-permissions": "^3.x-dev",
14+
"filament/filament": "^4.0",
15+
"filament/spatie-laravel-settings-plugin": "^4.0",
1616
"laravel/framework": "^12.0",
1717
"laravel/tinker": "^2.10.1",
1818
"spatie/laravel-permission": "^6.21",
@@ -23,6 +23,7 @@
2323
"barryvdh/laravel-ide-helper": "^3.5",
2424
"driftingly/rector-laravel": "^2.0",
2525
"fakerphp/faker": "^1.24",
26+
"filament/upgrade": "^4.0",
2627
"larastan/larastan": "^3.2",
2728
"laravel/pail": "^1.2",
2829
"laravel/pint": "^1.21",
@@ -70,7 +71,7 @@
7071
"ide": [
7172
"php artisan ide-helper:models --write --reset",
7273
"./vendor/bin/rector",
73-
"./vendor/bin/pint"
74+
"./vendor/bin/pint --parallel"
7475
],
7576
"latest": [
7677
"composer show --no-dev --direct --name-only | xargs composer require"

0 commit comments

Comments
 (0)