Skip to content

Commit 4b4a13a

Browse files
committed
feat: migrate filament v3 to v4
1 parent 00f3c81 commit 4b4a13a

Some content is hidden

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

55 files changed

+391
-429
lines changed

.env.example

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ DB_PASSWORD=password
3434

3535
BROADCAST_DRIVER=log
3636
MEDIA_DISK=media
37-
FILESYSTEM_DISK=${MEDIA_DISK}
38-
FILAMENT_FILESYSTEM_DISK=${MEDIA_DISK}
37+
FILESYSTEM_DISK="${MEDIA_DISK}"
3938
FILAMENT_PATH=cpanel
4039

4140
QUEUE_CONNECTION=database

app/Actions/Article/ApprovedArticleAction.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ final class ApprovedArticleAction
1111
{
1212
public function execute(Article $article): Article
1313
{
14-
$article->approved_at = now();
15-
$article->save();
14+
$article->update(['approved_at' => now()]);
1615

1716
givePoint(new ArticlePublished($article));
1817

app/Actions/Forum/CreateReplyAction.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public function execute(string $body, ReplyInterface|Reply $model): void
2424
$reply->save();
2525

2626
givePoint(new ReplyCreated($model, $user));
27+
2728
event(new ReplyWasCreated($reply));
2829
}
2930
}

app/Actions/Forum/UpdateThreadAction.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ final class UpdateThreadAction
1212
public function execute(array $formValues, Thread $thread): Thread
1313
{
1414
return DB::transaction(function () use ($formValues, $thread): Thread {
15-
1615
$thread->update($formValues);
1716

1817
return $thread;

app/Actions/GetGithubRepositoriesAction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function __invoke(): Collection
2929

3030
return Cache::remember(
3131
key: 'github-repositories',
32-
ttl: now()->addWeek(),
32+
ttl: now()->addMonth(),
3333
callback: fn () => collect($response->json())
3434
->reject(fn (array $value): bool => $value['fork'] === true || ! in_array($value['name'], $only))
3535
->map(fn (array $data): RepositoryData => RepositoryData::from($data))

app/Filament/Resources/ArticleResource.php renamed to app/Filament/Resources/Articles/ArticleResource.php

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

33
declare(strict_types=1);
44

5-
namespace App\Filament\Resources;
6-
7-
use Filament\Tables\Columns\SpatieMediaLibraryImageColumn;
8-
use Filament\Tables\Columns\TextColumn;
9-
use Filament\Tables\Columns\IconColumn;
10-
use Filament\Actions\ActionGroup;
11-
use Filament\Actions\Action;
12-
use Filament\Actions\DeleteAction;
13-
use Filament\Actions\BulkActionGroup;
14-
use Filament\Actions\BulkAction;
15-
use Filament\Actions\DeleteBulkAction;
16-
use Filament\Tables\Filters\TernaryFilter;
17-
use Filament\Support\Enums\Width;
18-
use App\Filament\Resources\ArticleResource\Pages\ListArticles;
5+
namespace App\Filament\Resources\Articles;
6+
197
use App\Actions\Article\ApprovedArticleAction;
208
use App\Actions\Article\DeclineArticleAction;
21-
use App\Filament\Resources\ArticleResource\Pages;
229
use App\Models\Article;
23-
use Awcodes\FilamentBadgeableColumn\Components\Badge;
24-
use Awcodes\FilamentBadgeableColumn\Components\BadgeableColumn;
10+
use Awcodes\BadgeableColumn\Components\Badge;
11+
use Awcodes\BadgeableColumn\Components\BadgeableColumn;
12+
use Filament\Actions;
2513
use Filament\Forms\Components\Textarea;
2614
use Filament\Notifications\Notification;
2715
use Filament\Resources\Resource;
28-
use Filament\Tables;
16+
use Filament\Support\Enums\Width;
17+
use Filament\Tables\Columns;
2918
use Filament\Tables\Enums\FiltersLayout;
19+
use Filament\Tables\Filters;
3020
use Filament\Tables\Table;
3121
use Illuminate\Database\Eloquent\Builder;
3222
use Illuminate\Database\Eloquent\Collection;
@@ -36,7 +26,7 @@ final class ArticleResource extends Resource
3626
{
3727
protected static ?string $model = Article::class;
3828

39-
protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-newspaper';
29+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-newspaper';
4030

4131
public static function getNavigationGroup(): string
4232
{
@@ -48,13 +38,13 @@ public static function table(Table $table): Table
4838
return $table
4939
->modifyQueryUsing(fn (Builder $query): Builder => $query->latest())
5040
->columns([
51-
SpatieMediaLibraryImageColumn::make('media')
41+
Columns\SpatieMediaLibraryImageColumn::make('media')
5242
->collection('media')
5343
->label('Image'),
54-
TextColumn::make('title')
44+
Columns\TextColumn::make('title')
5545
->label('Titre')
5646
->limit(50)
57-
->tooltip(function (TextColumn $column): ?string {
47+
->tooltip(function (Columns\TextColumn $column): ?string {
5848
$state = $column->getState();
5949

6050
if (strlen($state) <= $column->getCharacterLimit()) {
@@ -65,24 +55,24 @@ public static function table(Table $table): Table
6555
})
6656
->sortable()
6757
->searchable(),
68-
TextColumn::make('user.name')
58+
Columns\TextColumn::make('user.name')
6959
->label('Auteur')
7060
->sortable()
7161
->searchable(),
72-
TextColumn::make('created_at')
62+
Columns\TextColumn::make('created_at')
7363
->label(__('Date de création'))
7464
->date(),
75-
IconColumn::make('published_at')
65+
Columns\IconColumn::make('published_at')
7666
->label('Publié')
7767
->getStateUsing(fn (Article $record): bool => $record->isPublished())
7868
->boolean(),
79-
TextColumn::make('submitted_at')
69+
Columns\TextColumn::make('submitted_at')
8070
->label('Soumission')
8171
->placeholder('N/A')
8272
->date(),
8373
BadgeableColumn::make('status')
8474
->label('Statut')
85-
->getStateUsing(function ($record) {
75+
->getStateUsing(function ($record): string {
8676
if ($record->approved_at) {
8777
return $record->approved_at->format('d/m/Y');
8878
}
@@ -93,28 +83,26 @@ public static function table(Table $table): Table
9383

9484
return '';
9585
})
96-
->prefixBadges(function ($record): array|string {
86+
->prefixBadges(function ($record): array {
9787
if ($record->approved_at) {
9888
return [
99-
Badge::make('Approuvé')
100-
->color('success'),
89+
Badge::make('Approuvé')->color('success'),
10190
];
10291
}
10392

10493
if ($record->declined_at) {
10594
return [
106-
Badge::make('Décliné')
107-
->color('danger'),
95+
Badge::make('Décliné')->color('danger'),
10896
];
10997
}
11098

111-
return '';
99+
return [];
112100
})
113101
->sortable(),
114102
])
115103
->recordActions([
116-
ActionGroup::make([
117-
Action::make('approved')
104+
Actions\ActionGroup::make([
105+
Actions\Action::make('approved')
118106
->visible(fn (Article $record): bool => $record->isAwaitingApproval())
119107
->label('Approuver')
120108
->icon('heroicon-s-check')
@@ -123,12 +111,12 @@ public static function table(Table $table): Table
123111
->successNotificationTitle(__('Opération effectuée avec succès'))
124112
->requiresConfirmation()
125113
->modalIcon('heroicon-s-check')
126-
->action(function ($record): void {
114+
->action(function (Article $record): void {
127115
Gate::authorize('approve', $record);
128116

129117
app(ApprovedArticleAction::class)->execute($record);
130118
}),
131-
Action::make('declined')
119+
Actions\Action::make('declined')
132120
->visible(fn (Article $record): bool => $record->isAwaitingApproval())
133121
->label('Décliner')
134122
->icon('heroicon-s-x-mark')
@@ -155,17 +143,17 @@ public static function table(Table $table): Table
155143
->success()
156144
->send();
157145
}),
158-
Action::make('show')
146+
Actions\Action::make('show')
159147
->icon('untitledui-eye')
160148
->url(fn (Article $record): string => route('articles.show', $record))
161149
->openUrlInNewTab()
162150
->label('Afficher'),
163-
DeleteAction::make(),
151+
Actions\DeleteAction::make(),
164152
]),
165153
])
166154
->toolbarActions([
167-
BulkActionGroup::make([
168-
BulkAction::make('declined')
155+
Actions\BulkActionGroup::make([
156+
Actions\BulkAction::make('declined')
169157
->label('Décliner la sélection')
170158
->icon('heroicon-s-x-mark')
171159
->color('warning')
@@ -176,17 +164,17 @@ public static function table(Table $table): Table
176164
->modalHeading('Décliner')
177165
->modalDescription('Voulez-vous vraiment décliner ces articles ?')
178166
->modalSubmitActionLabel('Confirmer'),
179-
DeleteBulkAction::make(),
167+
Actions\DeleteBulkAction::make(),
180168
]),
181169
])
182170
->filters([
183-
TernaryFilter::make('submitted_at')
171+
Filters\TernaryFilter::make('submitted_at')
184172
->label('Soumis')
185173
->nullable(),
186-
TernaryFilter::make('declined_at')
174+
Filters\TernaryFilter::make('declined_at')
187175
->label('Décliner')
188176
->nullable(),
189-
TernaryFilter::make('approved_at')
177+
Filters\TernaryFilter::make('approved_at')
190178
->label('Approuver')
191179
->nullable(),
192180
], layout: FiltersLayout::AboveContentCollapsible)
@@ -197,7 +185,7 @@ public static function table(Table $table): Table
197185
public static function getPages(): array
198186
{
199187
return [
200-
'index' => ListArticles::route('/'),
188+
'index' => Pages\ListArticles::route('/'),
201189
];
202190
}
203191
}

app/Filament/Resources/ArticleResource/Pages/ListArticles.php renamed to app/Filament/Resources/Articles/Pages/ListArticles.php

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

33
declare(strict_types=1);
44

5-
namespace App\Filament\Resources\ArticleResource\Pages;
5+
namespace App\Filament\Resources\Articles\Pages;
66

7-
use Filament\Schemas\Components\Tabs\Tab;
8-
use App\Filament\Resources\ArticleResource;
7+
use App\Filament\Resources\Articles\ArticleResource;
98
use App\Models\Article;
109
use Closure;
1110
use Filament\Resources\Pages\ListRecords;
11+
use Filament\Schemas\Components\Tabs\Tab;
1212

1313
final class ListArticles extends ListRecords
1414
{

app/Filament/Resources/ChannelResource.php renamed to app/Filament/Resources/Channels/ChannelResource.php

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,27 @@
22

33
declare(strict_types=1);
44

5-
namespace App\Filament\Resources;
5+
namespace App\Filament\Resources\Channels;
66

7-
use LaraZeus\SpatieTranslatable\Resources\Concerns\Translatable;
8-
use Filament\Schemas\Schema;
9-
use Filament\Forms\Components\TextInput;
10-
use Filament\Schemas\Components\Utilities\Set;
11-
use Filament\Forms\Components\Select;
12-
use Filament\Forms\Components\ColorPicker;
13-
use Filament\Schemas\Components\Utilities\Get;
14-
use Filament\Forms\Components\Textarea;
15-
use Filament\Tables\Columns\TextColumn;
16-
use Filament\Tables\Columns\ColorColumn;
17-
use Filament\Actions\EditAction;
18-
use Filament\Actions\DeleteAction;
19-
use Filament\Actions\DeleteBulkAction;
20-
use App\Filament\Resources\ChannelResource\Pages\ListChannels;
21-
use App\Filament\Resources\ChannelResource\Pages;
227
use App\Models\Channel;
23-
use Filament\Forms;
8+
use Filament\Actions;
9+
use Filament\Forms\Components;
2410
use Filament\Resources\Resource;
25-
use Filament\Tables;
11+
use Filament\Schemas\Components\Utilities;
12+
use Filament\Schemas\Schema;
13+
use Filament\Tables\Columns;
2614
use Filament\Tables\Table;
2715
use Illuminate\Database\Eloquent\Builder;
2816
use Illuminate\Support\Str;
17+
use LaraZeus\SpatieTranslatable\Resources\Concerns\Translatable;
2918

3019
final class ChannelResource extends Resource
3120
{
3221
use Translatable;
3322

3423
protected static ?string $model = Channel::class;
3524

36-
protected static string | \BackedEnum | null $navigationIcon = 'untitledui-git-branch';
25+
protected static string|\BackedEnum|null $navigationIcon = 'untitledui-git-branch';
3726

3827
public static function getNavigationGroup(): string
3928
{
@@ -44,16 +33,16 @@ public static function form(Schema $schema): Schema
4433
{
4534
return $schema
4635
->components([
47-
TextInput::make('name')
36+
Components\TextInput::make('name')
4837
->required()
4938
->live(onBlur: true)
50-
->afterStateUpdated(fn ($state, Set $set): mixed => $set('slug', Str::slug($state)))
39+
->afterStateUpdated(fn ($state, Utilities\Set $set): mixed => $set('slug', Str::slug($state)))
5140
->columnSpanFull(),
52-
TextInput::make('slug')
41+
Components\TextInput::make('slug')
5342
->readOnly()
5443
->required()
5544
->columnSpanFull(),
56-
Select::make('parent_id')
45+
Components\Select::make('parent_id')
5746
->relationship(
5847
name: 'parent',
5948
titleAttribute: 'name',
@@ -62,13 +51,13 @@ public static function form(Schema $schema): Schema
6251
->live()
6352
->default(null)
6453
->columnSpanFull(),
65-
ColorPicker::make('color')
54+
Components\ColorPicker::make('color')
6655
->label('Couleur')
6756
->hex()
6857
->live()
6958
->columnSpanFull()
70-
->required(fn (Get $get): bool => $get('parent_id') === null),
71-
Textarea::make('description')
59+
->required(fn (Utilities\Get $get): bool => $get('parent_id') === null),
60+
Components\Textarea::make('description')
7261
->rows(4)
7362
->columnSpanFull(),
7463
]);
@@ -78,39 +67,38 @@ public static function table(Table $table): Table
7867
{
7968
return $table
8069
->columns([
81-
TextColumn::make('name')
70+
Columns\TextColumn::make('name')
8271
->label('Nom')
8372
->searchable(),
84-
TextColumn::make('parent.name')
73+
Columns\TextColumn::make('parent.name')
8574
->label('Parent')
8675
->placeholder('N/A')
8776
->sortable(),
88-
TextColumn::make('thread_number')
77+
Columns\TextColumn::make('thread_number')
8978
->label('Nombre de sujets')
9079
->getStateUsing(fn ($record) => $record->threads()->count()),
91-
ColorColumn::make('color')
80+
Columns\ColorColumn::make('color')
9281
->label('Couleur')
9382
->placeholder('N/A'),
94-
TextColumn::make('created_at')
83+
Columns\TextColumn::make('created_at')
9584
->label('Date')
9685
->date()
9786
->sortable()
9887
->toggleable(isToggledHiddenByDefault: true),
9988
])
10089
->recordActions([
101-
EditAction::make(),
102-
DeleteAction::make()
103-
->iconButton(),
90+
Actions\EditAction::make(),
91+
Actions\DeleteAction::make()->iconButton(),
10492
])
10593
->toolbarActions([
106-
DeleteBulkAction::make(),
94+
Actions\DeleteBulkAction::make(),
10795
]);
10896
}
10997

11098
public static function getPages(): array
11199
{
112100
return [
113-
'index' => ListChannels::route('/'),
101+
'index' => Pages\ListChannels::route('/'),
114102
];
115103
}
116104
}

0 commit comments

Comments
 (0)