Skip to content

Commit 00f3c81

Browse files
committed
feat: install filament 4
1 parent 9737b8e commit 00f3c81

File tree

66 files changed

+1559
-755
lines changed

Some content is hidden

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

66 files changed

+1559
-755
lines changed

app-modules/gamify/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"version": "1.1.0",
66
"license": "proprietary",
77
"require": {
8-
"filament/filament": "^3.2"
8+
"php": "^8.3"
99
},
1010
"require-dev": {
1111
"pestphp/pest": "^2.32",

app/Contracts/HasCachedMediaInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
namespace App\Contracts;
66

7+
use DateTimeInterface;
8+
79
interface HasCachedMediaInterface
810
{
911
public function getCacheKey(string $collection): string;
1012

11-
public function getCacheTtl(): \DateTimeInterface;
13+
public function getCacheTtl(): DateTimeInterface;
1214

1315
public function flushMediaCache(?string $collection = null): void;
1416

app/Exceptions/CannotUpdateApprovedArticle.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@
44

55
namespace App\Exceptions;
66

7-
final class CannotUpdateApprovedArticle extends \Exception {}
7+
use Exception;
8+
9+
final class CannotUpdateApprovedArticle extends Exception {}

app/Filament/Resources/ArticleResource.php

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44

55
namespace App\Filament\Resources;
66

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;
719
use App\Actions\Article\ApprovedArticleAction;
820
use App\Actions\Article\DeclineArticleAction;
921
use App\Filament\Resources\ArticleResource\Pages;
@@ -13,9 +25,7 @@
1325
use Filament\Forms\Components\Textarea;
1426
use Filament\Notifications\Notification;
1527
use Filament\Resources\Resource;
16-
use Filament\Support\Enums\MaxWidth;
1728
use Filament\Tables;
18-
use Filament\Tables\Actions\BulkAction;
1929
use Filament\Tables\Enums\FiltersLayout;
2030
use Filament\Tables\Table;
2131
use Illuminate\Database\Eloquent\Builder;
@@ -26,7 +36,7 @@ final class ArticleResource extends Resource
2636
{
2737
protected static ?string $model = Article::class;
2838

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

3141
public static function getNavigationGroup(): string
3242
{
@@ -38,13 +48,13 @@ public static function table(Table $table): Table
3848
return $table
3949
->modifyQueryUsing(fn (Builder $query): Builder => $query->latest())
4050
->columns([
41-
Tables\Columns\SpatieMediaLibraryImageColumn::make('media')
51+
SpatieMediaLibraryImageColumn::make('media')
4252
->collection('media')
4353
->label('Image'),
44-
Tables\Columns\TextColumn::make('title')
54+
TextColumn::make('title')
4555
->label('Titre')
4656
->limit(50)
47-
->tooltip(function (Tables\Columns\TextColumn $column): ?string {
57+
->tooltip(function (TextColumn $column): ?string {
4858
$state = $column->getState();
4959

5060
if (strlen($state) <= $column->getCharacterLimit()) {
@@ -55,18 +65,18 @@ public static function table(Table $table): Table
5565
})
5666
->sortable()
5767
->searchable(),
58-
Tables\Columns\TextColumn::make('user.name')
68+
TextColumn::make('user.name')
5969
->label('Auteur')
6070
->sortable()
6171
->searchable(),
62-
Tables\Columns\TextColumn::make('created_at')
72+
TextColumn::make('created_at')
6373
->label(__('Date de création'))
6474
->date(),
65-
Tables\Columns\IconColumn::make('published_at')
75+
IconColumn::make('published_at')
6676
->label('Publié')
6777
->getStateUsing(fn (Article $record): bool => $record->isPublished())
6878
->boolean(),
69-
Tables\Columns\TextColumn::make('submitted_at')
79+
TextColumn::make('submitted_at')
7080
->label('Soumission')
7181
->placeholder('N/A')
7282
->date(),
@@ -102,9 +112,9 @@ public static function table(Table $table): Table
102112
})
103113
->sortable(),
104114
])
105-
->actions([
106-
Tables\Actions\ActionGroup::make([
107-
Tables\Actions\Action::make('approved')
115+
->recordActions([
116+
ActionGroup::make([
117+
Action::make('approved')
108118
->visible(fn (Article $record): bool => $record->isAwaitingApproval())
109119
->label('Approuver')
110120
->icon('heroicon-s-check')
@@ -118,12 +128,12 @@ public static function table(Table $table): Table
118128

119129
app(ApprovedArticleAction::class)->execute($record);
120130
}),
121-
Tables\Actions\Action::make('declined')
131+
Action::make('declined')
122132
->visible(fn (Article $record): bool => $record->isAwaitingApproval())
123133
->label('Décliner')
124134
->icon('heroicon-s-x-mark')
125135
->color('warning')
126-
->form([
136+
->schema([
127137
Textarea::make('reason')
128138
->label(__('Raison du refus'))
129139
->maxLength(255)
@@ -145,16 +155,16 @@ public static function table(Table $table): Table
145155
->success()
146156
->send();
147157
}),
148-
Tables\Actions\Action::make('show')
158+
Action::make('show')
149159
->icon('untitledui-eye')
150160
->url(fn (Article $record): string => route('articles.show', $record))
151161
->openUrlInNewTab()
152162
->label('Afficher'),
153-
Tables\Actions\DeleteAction::make(),
163+
DeleteAction::make(),
154164
]),
155165
])
156-
->bulkActions([
157-
Tables\Actions\BulkActionGroup::make([
166+
->toolbarActions([
167+
BulkActionGroup::make([
158168
BulkAction::make('declined')
159169
->label('Décliner la sélection')
160170
->icon('heroicon-s-x-mark')
@@ -166,28 +176,28 @@ public static function table(Table $table): Table
166176
->modalHeading('Décliner')
167177
->modalDescription('Voulez-vous vraiment décliner ces articles ?')
168178
->modalSubmitActionLabel('Confirmer'),
169-
Tables\Actions\DeleteBulkAction::make(),
179+
DeleteBulkAction::make(),
170180
]),
171181
])
172182
->filters([
173-
Tables\Filters\TernaryFilter::make('submitted_at')
183+
TernaryFilter::make('submitted_at')
174184
->label('Soumis')
175185
->nullable(),
176-
Tables\Filters\TernaryFilter::make('declined_at')
186+
TernaryFilter::make('declined_at')
177187
->label('Décliner')
178188
->nullable(),
179-
Tables\Filters\TernaryFilter::make('approved_at')
189+
TernaryFilter::make('approved_at')
180190
->label('Approuver')
181191
->nullable(),
182192
], layout: FiltersLayout::AboveContentCollapsible)
183193
->filtersFormColumns(4)
184-
->filtersFormWidth(MaxWidth::FourExtraLarge);
194+
->filtersFormWidth(Width::FourExtraLarge);
185195
}
186196

187197
public static function getPages(): array
188198
{
189199
return [
190-
'index' => Pages\ListArticles::route('/'),
200+
'index' => ListArticles::route('/'),
191201
];
192202
}
193203
}

app/Filament/Resources/ArticleResource/Pages/ListArticles.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace App\Filament\Resources\ArticleResource\Pages;
66

7+
use Filament\Schemas\Components\Tabs\Tab;
78
use App\Filament\Resources\ArticleResource;
89
use App\Models\Article;
910
use Closure;
10-
use Filament\Resources\Components\Tab;
1111
use Filament\Resources\Pages\ListRecords;
1212

1313
final class ListArticles extends ListRecords

app/Filament/Resources/ChannelResource.php

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,23 @@
44

55
namespace App\Filament\Resources;
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;
721
use App\Filament\Resources\ChannelResource\Pages;
822
use App\Models\Channel;
923
use Filament\Forms;
10-
use Filament\Forms\Form;
11-
use Filament\Resources\Concerns\Translatable;
1224
use Filament\Resources\Resource;
1325
use Filament\Tables;
1426
use Filament\Tables\Table;
@@ -21,27 +33,27 @@ final class ChannelResource extends Resource
2133

2234
protected static ?string $model = Channel::class;
2335

24-
protected static ?string $navigationIcon = 'untitledui-git-branch';
36+
protected static string | \BackedEnum | null $navigationIcon = 'untitledui-git-branch';
2537

2638
public static function getNavigationGroup(): string
2739
{
2840
return __('Forum');
2941
}
3042

31-
public static function form(Form $form): Form
43+
public static function form(Schema $schema): Schema
3244
{
33-
return $form
34-
->schema([
35-
Forms\Components\TextInput::make('name')
45+
return $schema
46+
->components([
47+
TextInput::make('name')
3648
->required()
3749
->live(onBlur: true)
38-
->afterStateUpdated(fn ($state, Forms\Set $set): mixed => $set('slug', Str::slug($state)))
50+
->afterStateUpdated(fn ($state, Set $set): mixed => $set('slug', Str::slug($state)))
3951
->columnSpanFull(),
40-
Forms\Components\TextInput::make('slug')
52+
TextInput::make('slug')
4153
->readOnly()
4254
->required()
4355
->columnSpanFull(),
44-
Forms\Components\Select::make('parent_id')
56+
Select::make('parent_id')
4557
->relationship(
4658
name: 'parent',
4759
titleAttribute: 'name',
@@ -50,13 +62,13 @@ public static function form(Form $form): Form
5062
->live()
5163
->default(null)
5264
->columnSpanFull(),
53-
Forms\Components\ColorPicker::make('color')
65+
ColorPicker::make('color')
5466
->label('Couleur')
5567
->hex()
5668
->live()
5769
->columnSpanFull()
58-
->required(fn (Forms\Get $get): bool => $get('parent_id') === null),
59-
Forms\Components\Textarea::make('description')
70+
->required(fn (Get $get): bool => $get('parent_id') === null),
71+
Textarea::make('description')
6072
->rows(4)
6173
->columnSpanFull(),
6274
]);
@@ -66,39 +78,39 @@ public static function table(Table $table): Table
6678
{
6779
return $table
6880
->columns([
69-
Tables\Columns\TextColumn::make('name')
81+
TextColumn::make('name')
7082
->label('Nom')
7183
->searchable(),
72-
Tables\Columns\TextColumn::make('parent.name')
84+
TextColumn::make('parent.name')
7385
->label('Parent')
7486
->placeholder('N/A')
7587
->sortable(),
76-
Tables\Columns\TextColumn::make('thread_number')
88+
TextColumn::make('thread_number')
7789
->label('Nombre de sujets')
7890
->getStateUsing(fn ($record) => $record->threads()->count()),
79-
Tables\Columns\ColorColumn::make('color')
91+
ColorColumn::make('color')
8092
->label('Couleur')
8193
->placeholder('N/A'),
82-
Tables\Columns\TextColumn::make('created_at')
94+
TextColumn::make('created_at')
8395
->label('Date')
8496
->date()
8597
->sortable()
8698
->toggleable(isToggledHiddenByDefault: true),
8799
])
88-
->actions([
89-
Tables\Actions\EditAction::make(),
90-
Tables\Actions\DeleteAction::make()
100+
->recordActions([
101+
EditAction::make(),
102+
DeleteAction::make()
91103
->iconButton(),
92104
])
93-
->bulkActions([
94-
Tables\Actions\DeleteBulkAction::make(),
105+
->toolbarActions([
106+
DeleteBulkAction::make(),
95107
]);
96108
}
97109

98110
public static function getPages(): array
99111
{
100112
return [
101-
'index' => Pages\ListChannels::route('/'),
113+
'index' => ListChannels::route('/'),
102114
];
103115
}
104116
}

app/Filament/Resources/ChannelResource/Pages/ListChannels.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,27 @@
44

55
namespace App\Filament\Resources\ChannelResource\Pages;
66

7+
use LaraZeus\SpatieTranslatable\Resources\Pages\ListRecords\Concerns\Translatable;
8+
use LaraZeus\SpatieTranslatable\Actions\LocaleSwitcher;
9+
use Filament\Actions\CreateAction;
10+
use Filament\Support\Enums\Width;
711
use App\Filament\Resources\ChannelResource;
812
use Filament\Actions;
913
use Filament\Resources\Pages\ListRecords;
10-
use Filament\Support\Enums\MaxWidth;
1114

1215
final class ListChannels extends ListRecords
1316
{
14-
use ListRecords\Concerns\Translatable;
17+
use Translatable;
1518

1619
protected static string $resource = ChannelResource::class;
1720

1821
protected function getHeaderActions(): array
1922
{
2023
return [
21-
Actions\LocaleSwitcher::make(),
22-
Actions\CreateAction::make()
24+
LocaleSwitcher::make(),
25+
CreateAction::make()
2326
->slideOver()
24-
->modalWidth(MaxWidth::Large),
27+
->modalWidth(Width::Large),
2528
];
2629
}
2730
}

0 commit comments

Comments
 (0)