33namespace App \Http \Livewire \Administration ;
44
55use App \Models \TicketPriority ;
6- use Filament \Forms \Components \Grid ;
7- use Filament \Forms \Components \TextInput ;
8- use Filament \Forms \Concerns \InteractsWithForms ;
9- use Filament \Forms \Contracts \HasForms ;
6+ use Filament \Tables \Actions \Action ;
7+ use Filament \Tables \Columns \TextColumn ;
8+ use Filament \Tables \Concerns \InteractsWithTable ;
9+ use Filament \Tables \Contracts \HasTable ;
10+ use Illuminate \Database \Eloquent \Builder ;
11+ use Illuminate \Database \Eloquent \Relations \Relation ;
12+ use Illuminate \Support \HtmlString ;
1013use Livewire \Component ;
1114
12- class TicketPriorities extends Component implements HasForms
15+ class TicketPriorities extends Component implements HasTable
1316{
14- use InteractsWithForms ;
17+ use InteractsWithTable ;
1518
16- public $ search ;
1719 public $ selectedPriority ;
1820
1921 protected $ listeners = ['prioritySaved ' , 'priorityDeleted ' ];
2022
21- public function mount (): void
23+ public function render ()
2224 {
23- $ this -> form -> fill ( );
25+ return view ( ' livewire.administration.ticket-priorities ' );
2426 }
2527
26- public function render ()
28+ /**
29+ * Table query definition
30+ *
31+ * @return Builder|Relation
32+ */
33+ protected function getTableQuery (): Builder |Relation
2734 {
28- $ query = TicketPriority::query ();
29- if ($ this ->search ) {
30- $ query ->where ('title ' , 'like ' , '% ' . $ this ->search . '% ' )
31- ->orWhere ('text_color ' , 'like ' , '% ' . $ this ->search . '% ' )
32- ->orWhere ('bg_color ' , 'like ' , '% ' . $ this ->search . '% ' )
33- ->orWhere ('icon ' , 'like ' , '% ' . $ this ->search . '% ' );
34- }
35- $ priorities = $ query ->paginate ();
36- return view ('livewire.administration.ticket-priorities ' , compact ('priorities ' ));
35+ return TicketPriority::query ();
3736 }
3837
3938 /**
40- * Form schema definition
39+ * Table definition
4140 *
4241 * @return array
4342 */
44- protected function getFormSchema (): array
43+ protected function getTableColumns (): array
4544 {
4645 return [
47- Grid::make (1 )
48- ->schema ([
49- TextInput::make ('search ' )
50- ->label (__ ('Search for tickets priorities ' ))
51- ->disableLabel ()
52- ->type ('search ' )
53- ->placeholder (__ ('Search for tickets priorities ' )),
54- ]),
46+ TextColumn::make ('title ' )
47+ ->label (__ ('Title ' ))
48+ ->searchable ()
49+ ->sortable ()
50+ ->formatStateUsing (fn (TicketPriority $ record ) => new HtmlString ('
51+ <span class="px-2 py-1 rounded-full text-sm flex items-center gap-2" style="color: ' . $ record ->text_color . '; background-color: ' . $ record ->bg_color . '">
52+ <i class="fa ' . $ record ->icon . '"></i> ' . $ record ->title . '
53+ </span>
54+ ' )),
55+
56+ TextColumn::make ('created_at ' )
57+ ->label (__ ('Created at ' ))
58+ ->sortable ()
59+ ->searchable ()
60+ ->dateTime (),
5561 ];
5662 }
5763
5864 /**
59- * Search for tickets priorities
65+ * Table actions definition
6066 *
61- * @return void
67+ * @return array
68+ */
69+ protected function getTableActions (): array
70+ {
71+ return [
72+ Action::make ('edit ' )
73+ ->icon ('heroicon-o-pencil ' )
74+ ->link ()
75+ ->label (__ ('Edit priority ' ))
76+ ->action (fn (TicketPriority $ record ) => $ this ->updatePriority ($ record ->id ))
77+ ];
78+ }
79+
80+ /**
81+ * Table default sort column definition
82+ *
83+ * @return string|null
84+ */
85+ protected function getDefaultTableSortColumn (): ?string
86+ {
87+ return 'created_at ' ;
88+ }
89+
90+ /**
91+ * Table default sort direction definition
92+ *
93+ * @return string|null
6294 */
63- public function search (): void
95+ protected function getDefaultTableSortDirection (): ? string
6496 {
65- $ data = $ this ->form ->getState ();
66- $ this ->search = $ data ['search ' ] ?? null ;
97+ return 'desc ' ;
6798 }
6899
69100 /**
@@ -105,8 +136,8 @@ public function cancelPriority()
105136 *
106137 * @return void
107138 */
108- public function prioritySaved () {
109- $ this -> search ();
139+ public function prioritySaved ()
140+ {
110141 $ this ->cancelPriority ();
111142 }
112143
@@ -115,7 +146,8 @@ public function prioritySaved() {
115146 *
116147 * @return void
117148 */
118- public function priorityDeleted () {
149+ public function priorityDeleted ()
150+ {
119151 $ this ->prioritySaved ();
120152 }
121153}
0 commit comments