Skip to content

Commit fe05f7c

Browse files
feat: add User resource with listing and viewing capabilities, including user information schema and table configuration
1 parent 2ffa9b4 commit fe05f7c

5 files changed

Lines changed: 180 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Users\Pages;
4+
5+
use App\Filament\Resources\Users\UserResource;
6+
use Filament\Actions\CreateAction;
7+
use Filament\Resources\Pages\ListRecords;
8+
9+
class ListUsers extends ListRecords
10+
{
11+
protected static string $resource = UserResource::class;
12+
13+
protected function getHeaderActions(): array
14+
{
15+
return [
16+
CreateAction::make(),
17+
];
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Users\Pages;
4+
5+
use App\Filament\Resources\Users\UserResource;
6+
use Filament\Resources\Pages\ViewRecord;
7+
8+
class ViewUser extends ViewRecord
9+
{
10+
protected static string $resource = UserResource::class;
11+
12+
protected function getHeaderActions(): array
13+
{
14+
return [
15+
//
16+
];
17+
}
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Users\Schemas;
4+
5+
use Filament\Infolists\Components\TextEntry;
6+
use Filament\Schemas\Schema;
7+
8+
class UserInfolist
9+
{
10+
public static function configure(Schema $schema): Schema
11+
{
12+
return $schema
13+
->components([
14+
TextEntry::make('name'),
15+
TextEntry::make('email')
16+
->label('Email address'),
17+
TextEntry::make('email_verified_at')
18+
->dateTime()
19+
->placeholder('-'),
20+
TextEntry::make('created_at')
21+
->dateTime()
22+
->placeholder('-'),
23+
TextEntry::make('updated_at')
24+
->dateTime()
25+
->placeholder('-'),
26+
]);
27+
}
28+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Users\Tables;
4+
5+
use Filament\Actions\ViewAction;
6+
use Filament\Tables\Columns\TextColumn;
7+
use Filament\Tables\Enums\FiltersLayout;
8+
use Filament\Tables\Filters\SelectFilter;
9+
use Filament\Tables\Table;
10+
11+
class UsersTable
12+
{
13+
public static function configure(Table $table): Table
14+
{
15+
return $table
16+
->columns([
17+
TextColumn::make('name')
18+
->searchable()
19+
->toggleable(),
20+
TextColumn::make('email')
21+
->label('Email address')
22+
->searchable()
23+
->toggleable(),
24+
TextColumn::make('email_verified_at')
25+
->dateTime()
26+
->sortable()
27+
->toggleable(),
28+
TextColumn::make('created_at')
29+
->dateTime()
30+
->sortable()
31+
->toggleable(isToggledHiddenByDefault: true),
32+
TextColumn::make('updated_at')
33+
->dateTime()
34+
->sortable()
35+
->toggleable(isToggledHiddenByDefault: true),
36+
])
37+
->filters([
38+
SelectFilter::make('email_verified_status')
39+
->label('Email verified status')
40+
->options([
41+
'verified' => 'Verified',
42+
'unverified' => 'Unverified',
43+
])
44+
->query(function ($query, $state) {
45+
return match ($state['value']) {
46+
'verified' => $query->whereNotNull('email_verified_at'),
47+
'unverified' => $query->whereNull('email_verified_at'),
48+
default => $query,
49+
};
50+
}),
51+
], FiltersLayout::Modal)
52+
->recordActions([
53+
ViewAction::make(),
54+
])
55+
->toolbarActions([
56+
//
57+
]);
58+
}
59+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Users;
4+
5+
use App\Filament\Resources\Users\Pages\ListUsers;
6+
use App\Filament\Resources\Users\Pages\ViewUser;
7+
use App\Filament\Resources\Users\Schemas\UserForm;
8+
use App\Filament\Resources\Users\Schemas\UserInfolist;
9+
use App\Filament\Resources\Users\Tables\UsersTable;
10+
use App\Models\User;
11+
use BackedEnum;
12+
use Filament\Resources\Resource;
13+
use Filament\Schemas\Schema;
14+
use Filament\Support\Icons\Heroicon;
15+
use Filament\Tables\Table;
16+
17+
class UserResource extends Resource
18+
{
19+
protected static ?string $model = User::class;
20+
21+
protected static string|BackedEnum|null $navigationIcon = Heroicon::UserGroup;
22+
23+
protected static ?string $modelLabel = 'Students';
24+
25+
protected static ?string $recordTitleAttribute = 'name';
26+
27+
public static function form(Schema $schema): Schema
28+
{
29+
return UserForm::configure($schema);
30+
}
31+
32+
public static function infolist(Schema $schema): Schema
33+
{
34+
return UserInfolist::configure($schema);
35+
}
36+
37+
public static function table(Table $table): Table
38+
{
39+
return UsersTable::configure($table);
40+
}
41+
42+
public static function getRelations(): array
43+
{
44+
return [
45+
//
46+
];
47+
}
48+
49+
public static function getPages(): array
50+
{
51+
return [
52+
'index' => ListUsers::route('/'),
53+
'view' => ViewUser::route('/{record}'),
54+
];
55+
}
56+
}

0 commit comments

Comments
 (0)