44
55use App \Domains \Auth \Models \User ;
66use Illuminate \Database \Eloquent \Builder ;
7- use Rappasoft \LaravelLivewireTables \TableComponent ;
8- use Rappasoft \LaravelLivewireTables \Traits \HtmlComponents ;
7+ use Rappasoft \LaravelLivewireTables \DataTableComponent ;
98use Rappasoft \LaravelLivewireTables \Views \Column ;
9+ use Rappasoft \LaravelLivewireTables \Views \Filter ;
1010
1111/**
1212 * Class UsersTable.
1313 */
14- class UsersTable extends TableComponent
14+ class UsersTable extends DataTableComponent
1515{
16- use HtmlComponents;
17-
1816 /**
19- * @var string
17+ * @var
2018 */
21- public $ sortField = ' name ' ;
19+ public $ status ;
2220
2321 /**
24- * @var string
22+ * @var array| string[]
2523 */
26- public $ status ;
24+ public array $ sortNames = [
25+ 'email_verified_at ' => 'Verified ' ,
26+ 'two_factor_auth_count ' => '2FA ' ,
27+ ];
2728
2829 /**
29- * @var array
30+ * @var array|string[]
3031 */
31- protected $ options = [
32- 'bootstrap.container ' => false ,
33- 'bootstrap.classes.table ' => 'table table-striped ' ,
32+ public array $ filterNames = [
33+ 'type ' => ' User Type ' ,
34+ 'verified ' => 'E-mail Verified ' ,
3435 ];
3536
3637 /**
@@ -46,18 +47,48 @@ public function mount($status = 'active'): void
4647 */
4748 public function query (): Builder
4849 {
49- $ query = User::with ('roles ' , 'twoFactorAuth ' )
50- ->withCount ('twoFactorAuth ' );
50+ $ query = User::with ('roles ' , 'twoFactorAuth ' )->withCount ('twoFactorAuth ' );
5151
5252 if ($ this ->status === 'deleted ' ) {
53- return $ query ->onlyTrashed ();
53+ $ query = $ query ->onlyTrashed ();
54+ } elseif ($ this ->status === 'deactivated ' ) {
55+ $ query = $ query ->onlyDeactivated ();
56+ } else {
57+ $ query = $ query ->onlyActive ();
5458 }
5559
56- if ($ this ->status === 'deactivated ' ) {
57- return $ query ->onlyDeactivated ();
58- }
60+ return $ query
61+ ->when ($ this ->getFilter ('search ' ), fn ($ query , $ term ) => $ query ->search ($ term ))
62+ ->when ($ this ->getFilter ('type ' ), fn ($ query , $ type ) => $ query ->where ('type ' , $ type ))
63+ ->when ($ this ->getFilter ('active ' ), fn ($ query , $ active ) => $ query ->where ('active ' , $ active === 'yes ' ))
64+ ->when ($ this ->getFilter ('verified ' ), fn ($ query , $ verified ) => $ verified === 'yes ' ? $ query ->whereNotNull ('email_verified_at ' ) : $ query ->whereNull ('email_verified_at ' ));
65+ }
5966
60- return $ query ->onlyActive ();
67+ /**
68+ * @return array
69+ */
70+ public function filters (): array
71+ {
72+ return [
73+ 'type ' => Filter::make ('User Type ' )
74+ ->select ([
75+ '' => 'Any ' ,
76+ User::TYPE_ADMIN => 'Administrators ' ,
77+ User::TYPE_USER => 'Users ' ,
78+ ]),
79+ 'active ' => Filter::make ('Active ' )
80+ ->select ([
81+ '' => 'Any ' ,
82+ 'yes ' => 'Yes ' ,
83+ 'no ' => 'No ' ,
84+ ]),
85+ 'verified ' => Filter::make ('E-mail Verified ' )
86+ ->select ([
87+ '' => 'Any ' ,
88+ 'yes ' => 'Yes ' ,
89+ 'no ' => 'No ' ,
90+ ]),
91+ ];
6192 }
6293
6394 /**
@@ -66,54 +97,27 @@ public function query(): Builder
6697 public function columns (): array
6798 {
6899 return [
69- Column::make (__ ('Type ' ), 'type ' )
70- ->sortable ()
71- ->format (function (User $ model ) {
72- return view ('backend.auth.user.includes.type ' , ['user ' => $ model ]);
73- }),
74- Column::make (__ ('Name ' ), 'name ' )
75- ->searchable ()
100+ Column::make (__ ('Type ' ))
101+ ->sortable (),
102+ Column::make (__ ('Name ' ))
76103 ->sortable (),
77104 Column::make (__ ('E-mail ' ), 'email ' )
78- ->searchable ()
79- ->sortable ()
80- ->format (function (User $ model ) {
81- return $ this ->mailto ($ model ->email );
82- }),
105+ ->sortable (),
83106 Column::make (__ ('Verified ' ), 'email_verified_at ' )
84- ->sortable ()
85- ->format (function (User $ model ) {
86- return view ('backend.auth.user.includes.verified ' , ['user ' => $ model ]);
87- }),
88- Column::make (__ ('2FA ' ))
89- ->sortable (function ($ builder , $ direction ) {
90- return $ builder ->orderBy ('two_factor_auth_count ' , $ direction );
91- })
92- ->format (function (User $ model ) {
93- return view ('backend.auth.user.includes.2fa ' , ['user ' => $ model ]);
94- }),
95- Column::make (__ ('Roles ' ), 'roles_label ' )
96- ->searchable (function ($ builder , $ term ) {
97- return $ builder ->orWhereHas ('roles ' , function ($ query ) use ($ term ) {
98- return $ query ->where ('name ' , 'like ' , '% ' .$ term .'% ' );
99- });
100- })
101- ->format (function (User $ model ) {
102- return $ this ->html ($ model ->roles_label );
103- }),
104- Column::make (__ ('Additional Permissions ' ), 'permissions_label ' )
105- ->searchable (function ($ builder , $ term ) {
106- return $ builder ->orWhereHas ('permissions ' , function ($ query ) use ($ term ) {
107- return $ query ->where ('name ' , 'like ' , '% ' .$ term .'% ' );
108- });
109- })
110- ->format (function (User $ model ) {
111- return $ this ->html ($ model ->permissions_label );
112- }),
113- Column::make (__ ('Actions ' ))
114- ->format (function (User $ model ) {
115- return view ('backend.auth.user.includes.actions ' , ['user ' => $ model ]);
116- }),
107+ ->sortable (),
108+ Column::make (__ ('2FA ' ), 'two_factor_auth_count ' )
109+ ->sortable (),
110+ Column::make (__ ('Roles ' )),
111+ Column::make (__ ('Additional Permissions ' )),
112+ Column::make (__ ('Actions ' )),
117113 ];
118114 }
115+
116+ /**
117+ * @return string
118+ */
119+ public function rowView (): string
120+ {
121+ return 'backend.auth.user.includes.row ' ;
122+ }
119123}
0 commit comments