22
33namespace SolutionForest \InspireCms \Filament \Resources \TemplateResource \Pages ;
44
5+ use Filament \Infolists \Components \TextEntry ;
6+ use Filament \Infolists \Infolist ;
57use Filament \Notifications \Notification ;
68use Filament \Support \Facades \FilamentIcon ;
79use Filament \Tables ;
810use Filament \Tables \Table ;
911use Illuminate \Database \Eloquent \Model ;
12+ use Illuminate \Database \Eloquent \SoftDeletingScope ;
1013use SolutionForest \InspireCms \Base \Filament \Resources \Pages \BaseListRecords ;
14+ use SolutionForest \InspireCms \Filament \Resources \ContentResource ;
15+ use SolutionForest \InspireCms \Filament \Resources \DocumentTypeResource ;
1116use SolutionForest \InspireCms \Filament \Resources \Helpers \TemplateResourceHelper ;
1217use SolutionForest \InspireCms \Filament \Resources \TemplateResource ;
1318use SolutionForest \InspireCms \Filament \Widgets \TemplateInfo ;
1419use SolutionForest \InspireCms \Filament \Widgets \ThemeInfo ;
20+ use SolutionForest \InspireCms \Helpers \FilamentResourceHelper ;
21+ use SolutionForest \InspireCms \Helpers \UIHelper ;
1522use SolutionForest \InspireCms \InspireCmsConfig ;
1623use SolutionForest \InspireCms \Models \Contracts \Template ;
1724
@@ -34,6 +41,7 @@ public static function getResource(): string
3441 public function table (Table $ table ): Table
3542 {
3643 return parent ::table ($ table )
44+ ->modifyQueryUsing (fn ($ query ) => $ query ->with (['documentTypes ' , 'contents ' => fn ($ query ) => $ query ->withoutGlobalScopes ([SoftDeletingScope::class])]))
3745 ->headerActions ([
3846 Tables \Actions \SelectAction::make ('theme ' )
3947 ->options (TemplateResourceHelper::getThemeSelectOptions ())
@@ -68,6 +76,61 @@ public function table(Table $table): Table
6876 'theme ' => $ this ->theme ,
6977 'content ' => $ record ->getContent (theme: $ this ->theme ),
7078 ]),
79+ Tables \Actions \DeleteAction::make ()
80+ ->requiresConfirmation ()
81+ ->visible (function (Model | Template $ record ) {
82+ return count ($ record ->documentTypes ?? []) <= 0 &&
83+ count ($ record ->contents ?? []) <= 0 ;
84+ }),
85+ Tables \Actions \Action::make ('viewUsage ' )
86+ ->modalSubmitAction (fn () => false ) // Disable the form submission
87+ ->color ('gray ' )
88+ ->icon (FilamentIcon::resolve ('actions::view-action ' ) ?? 'heroicon-m-eye ' )
89+ ->infolist (fn (Infolist $ infolist ) => $ infolist
90+ ->schema ([
91+ TextEntry::make ('id ' )
92+ ->label (__ ('inspirecms::inspirecms.id ' )),
93+ TextEntry::make ('slug ' )
94+ ->label (__ ('inspirecms::resources/template.slug.label ' ))
95+ ->badge (),
96+ TextEntry::make ('documentTypes ' )
97+ ->label (__ ('inspirecms::inspirecms.document_type ' ))
98+ ->getStateUsing (fn (Template | Model $ record ) => $ record ->documentTypes )
99+ ->formatStateUsing (function ($ state ) {
100+ if (!$ state instanceof Model) {
101+ return __ ('inspirecms::inspirecms.n/a ' );
102+ }
103+ $ url = FilamentResourceHelper::attemptToGetUrl (
104+ InspireCmsConfig::getFilamentResource ('document_type ' , DocumentTypeResource::class),
105+ ['edit ' , 'view ' ],
106+ ['record ' => $ state ],
107+ false
108+ );
109+ return UIHelper::generateLink ($ state ->slug , $ url , [
110+ 'target ' => '_blank ' ,
111+ ]);
112+ })
113+ ->listWithLineBreaks (),
114+ TextEntry::make ('contents ' )
115+ ->label (__ ('inspirecms::inspirecms.content ' ))
116+ ->getStateUsing (fn (Template | Model $ record ) => $ record ->contents )
117+ ->formatStateUsing (function ($ state ) {
118+ if (!$ state instanceof Model) {
119+ return __ ('inspirecms::inspirecms.n/a ' );
120+ }
121+ $ url = FilamentResourceHelper::attemptToGetUrl (
122+ InspireCmsConfig::getFilamentResource ('content ' , ContentResource::class),
123+ ['edit ' , 'view ' ],
124+ ['record ' => $ state ],
125+ false
126+ );
127+ return UIHelper::generateLink ($ state ->slug , $ url , [
128+ 'target ' => '_blank ' ,
129+ ]);
130+ })
131+ ->listWithLineBreaks (),
132+ ])
133+ ),
71134 ]);
72135 }
73136
0 commit comments