1212use Filament \Forms \Components \Select ;
1313use Filament \Forms \Components \Textarea ;
1414use Filament \Forms \Components \TextInput ;
15- use Filament \Forms \Components \Toggle ;
1615use Filament \Forms \Form ;
1716use Filament \Resources \Resource ;
1817use Filament \Tables \Actions \BulkActionGroup ;
1918use Filament \Tables \Actions \DeleteBulkAction ;
2019use Filament \Tables \Actions \EditAction ;
2120use Filament \Tables \Columns \TextColumn ;
21+ use Filament \Tables \Columns \IconColumn ;
2222use Filament \Tables \Table ;
23+ use Filament \Tables \Filters \Filter ;
24+ use Filament \Tables \Filters \SelectFilter ;
25+ use Illuminate \Database \Eloquent \Builder ;
2326
2427final class PostResource extends Resource
2528{
@@ -37,53 +40,70 @@ public static function form(Form $form): Form
3740 ->maxLength (self ::INPUT_MAX_LENGTH ),
3841 TextInput::make ('slug ' )
3942 ->required ()
40- ->maxLength (self ::INPUT_MAX_LENGTH ),
41- TextInput::make ('legacy_id ' )
42- ->numeric (),
43+ ->maxLength (self ::INPUT_MAX_LENGTH )
44+ ->unique (Post::class, 'slug ' , ignoreRecord: true ),
4345 Textarea::make ('body ' )
4446 ->required ()
4547 ->columnSpanFull (),
4648 Textarea::make ('more_inside ' )
4749 ->columnSpanFull (),
48- TextInput::make ('state ' )
49- ->required ()
50- ->maxLength (self ::INPUT_MAX_LENGTH ),
5150 Select::make ('subsite_id ' )
5251 ->relationship ('subsite ' , 'name ' )
5352 ->required (),
5453 Select::make ('user_id ' )
5554 ->relationship ('user ' , 'name ' )
55+ ->searchable ()
56+ ->preload ()
5657 ->required (),
57- TextInput::make ('uuid ' )
58- ->label ('UUID ' )
59- ->maxLength (36 ),
6058 DateTimePicker::make ('published_at ' ),
61- Toggle::make ('is_published ' )
62- ->required (),
63- Toggle::make ('is_current ' )
64- ->required (),
65- TextInput::make ('publisher_type ' )
66- ->maxLength (self ::INPUT_MAX_LENGTH ),
67- TextInput::make ('publisher_id ' )
68- ->numeric (),
6959 ]);
7060 }
7161
62+ public static function getEloquentQuery (): Builder
63+ {
64+ return Post::current ();
65+ }
66+
7267 public static function table (Table $ table ): Table
7368 {
7469 return $ table
7570 ->columns ([
7671 TextColumn::make ('title ' )
77- ->searchable (),
72+ ->searchable ()
73+ ->sortable ()
74+ ->limit (50 ),
75+ TextColumn::make ('slug ' )
76+ ->searchable ()
77+ ->toggleable (isToggledHiddenByDefault: true ),
78+ IconColumn::make ('is_published ' )
79+ ->boolean ()
80+ ->label ('Published ' )
81+ ->sortable (),
7882 TextColumn::make ('subsite.name ' )
79- ->numeric ( )
83+ ->label ( ' Subsite ' )
8084 ->sortable (),
8185 TextColumn::make ('user.name ' )
82- ->numeric ()
86+ ->label ('Author ' )
87+ ->searchable ()
8388 ->sortable (),
89+ TextColumn::make ('published_at ' )
90+ ->dateTime ()
91+ ->sortable ()
92+ ->toggleable (),
93+ TextColumn::make ('created_at ' )
94+ ->dateTime ()
95+ ->sortable ()
96+ ->toggleable (isToggledHiddenByDefault: true ),
8497 ])
8598 ->filters ([
86- //
99+ Filter::make ('hide_drafts ' )
100+ ->label ('Hide drafts ' )
101+ ->baseQuery (fn (Builder $ query ): Builder => $ query ->withoutDrafts ())
102+ ->default (false ),
103+ SelectFilter::make ('subsite_id ' )
104+ ->relationship ('subsite ' , 'name ' )
105+ ->searchable ()
106+ ->preload (),
87107 ])
88108 ->actions ([
89109 EditAction::make (),
0 commit comments