Skip to content

Commit 5b85454

Browse files
Filament admin (#1344)
1 parent 580a4ab commit 5b85454

37 files changed

+3147
-786
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Articles;
4+
5+
use App\Filament\Resources\Articles\Pages\ListArticles;
6+
use App\Filament\Resources\Articles\Tables\ArticlesTable;
7+
use App\Models\Article;
8+
use BackedEnum;
9+
use Filament\Resources\Resource;
10+
use Filament\Support\Icons\Heroicon;
11+
use Filament\Tables\Table;
12+
13+
class ArticleResource extends Resource
14+
{
15+
protected static ?string $model = Article::class;
16+
17+
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedNewspaper;
18+
19+
protected static ?string $recordTitleAttribute = 'title';
20+
21+
public static function table(Table $table): Table
22+
{
23+
return ArticlesTable::configure($table);
24+
}
25+
26+
public static function getRelations(): array
27+
{
28+
return [
29+
//
30+
];
31+
}
32+
33+
public static function getPages(): array
34+
{
35+
return [
36+
'index' => ListArticles::route('/')
37+
];
38+
}
39+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Articles\Pages;
4+
5+
use App\Filament\Resources\Articles\ArticleResource;
6+
use Filament\Resources\Pages\ListRecords;
7+
8+
class ListArticles extends ListRecords
9+
{
10+
protected static string $resource = ArticleResource::class;
11+
12+
protected function getHeaderActions(): array
13+
{
14+
return [];
15+
}
16+
}
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\Articles\Tables;
4+
5+
use App\Models\Article;
6+
use Filament\Actions\Action;
7+
use Filament\Actions\BulkActionGroup;
8+
use Filament\Actions\DeleteBulkAction;
9+
use Filament\Tables\Columns\ImageColumn;
10+
use Filament\Tables\Columns\TextColumn;
11+
use Filament\Tables\Filters\Filter;
12+
use Filament\Tables\Table;
13+
use Illuminate\Database\Eloquent\Builder;
14+
15+
class ArticlesTable
16+
{
17+
public static function configure(Table $table): Table
18+
{
19+
return $table
20+
->defaultSort('submitted_at', 'desc')
21+
->openRecordUrlInNewTab()
22+
->columns([
23+
ImageColumn::make('authorRelation.github_id')
24+
->label('Author')
25+
->circular()
26+
->width('1%')
27+
->defaultImageUrl(fn(?string $state): string => $state ? sprintf('https://avatars.githubusercontent.com/u/%s', $state) : asset('images/laravelio-icon-gray.svg')),
28+
29+
TextColumn::make('authorRelation.name')
30+
->label('')
31+
->description(fn(Article $article): ?string => $article->authorRelation->username),
32+
33+
TextColumn::make('title')
34+
->searchable(['title', 'slug', 'body']),
35+
36+
TextColumn::make('submitted_at')
37+
->label('Submitted on')
38+
->dateTime()
39+
->sortable(),
40+
])
41+
->filters([
42+
Filter::make('awaiting_approvals')
43+
->query(fn(Builder $query): Builder => $query->awaitingApproval())
44+
->default()
45+
])
46+
->recordActions([
47+
Action::make('view')
48+
->url(fn(Article $article): string => route('articles.show', $article->slug()))
49+
->openUrlInNewTab()
50+
->icon('heroicon-s-eye'),
51+
])
52+
->toolbarActions([
53+
//
54+
]);
55+
}
56+
}
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\Replies\Pages;
4+
5+
use App\Filament\Resources\Replies\ReplyResource;
6+
use Filament\Resources\Pages\ListRecords;
7+
8+
class ListReplies extends ListRecords
9+
{
10+
protected static string $resource = ReplyResource::class;
11+
12+
protected function getHeaderActions(): array
13+
{
14+
return [
15+
// CreateAction::make(),
16+
];
17+
}
18+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Replies;
4+
5+
use App\Filament\Resources\Replies\Pages\ListReplies;
6+
use App\Filament\Resources\Replies\Tables\RepliesTable;
7+
use App\Models\Reply;
8+
use BackedEnum;
9+
use Filament\Resources\Resource;
10+
use Filament\Support\Icons\Heroicon;
11+
use Filament\Tables\Table;
12+
use Illuminate\Database\Eloquent\Builder;
13+
use Illuminate\Database\Eloquent\SoftDeletingScope;
14+
15+
class ReplyResource extends Resource
16+
{
17+
protected static ?string $model = Reply::class;
18+
19+
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
20+
21+
protected static ?string $recordTitleAttribute = 'thread';
22+
23+
public static function table(Table $table): Table
24+
{
25+
return RepliesTable::configure($table);
26+
}
27+
28+
public static function getRelations(): array
29+
{
30+
return [
31+
//
32+
];
33+
}
34+
35+
public static function getPages(): array
36+
{
37+
return [
38+
'index' => ListReplies::route('/'),
39+
];
40+
}
41+
42+
public static function getRecordRouteBindingEloquentQuery(): Builder
43+
{
44+
return parent::getRecordRouteBindingEloquentQuery()
45+
->withoutGlobalScopes([
46+
SoftDeletingScope::class,
47+
]);
48+
}
49+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Replies\Tables;
4+
5+
use App\Models\Reply;
6+
use Filament\Actions\Action;
7+
use Filament\Actions\BulkActionGroup;
8+
use Filament\Actions\DeleteAction;
9+
use Filament\Actions\DeleteBulkAction;
10+
use Filament\Actions\ForceDeleteBulkAction;
11+
use Filament\Actions\RestoreBulkAction;
12+
use Filament\Tables\Columns\IconColumn;
13+
use Filament\Tables\Columns\ImageColumn;
14+
use Filament\Tables\Columns\TextColumn;
15+
use Filament\Tables\Filters\TernaryFilter;
16+
use Filament\Tables\Filters\TrashedFilter;
17+
use Filament\Tables\Table;
18+
19+
class RepliesTable
20+
{
21+
public static function configure(Table $table): Table
22+
{
23+
return $table
24+
->defaultSort('updated_at', 'desc')
25+
->openRecordUrlInNewTab()
26+
->columns([
27+
ImageColumn::make('authorRelation.github_id')
28+
->label('Author')
29+
->circular()
30+
->defaultImageUrl(fn(?string $state): string => $state ? sprintf('https://avatars.githubusercontent.com/u/%s', $state) : asset('images/laravelio-icon-gray.svg')),
31+
32+
TextColumn::make('authorRelation.name')
33+
->label('')
34+
->description(fn(Reply $reply): ?string => $reply->authorRelation->username),
35+
36+
TextColumn::make('replyAbleRelation.subject')
37+
->label('Thread')
38+
->searchable(),
39+
40+
TextColumn::make('body')
41+
->label('Content')
42+
->limit(250)
43+
->wrap()
44+
->searchable(),
45+
46+
IconColumn::make('updated_by')
47+
->label('Updated')
48+
->boolean()
49+
->default(false),
50+
51+
TextColumn::make('created_at')
52+
->label('Created on')
53+
->dateTime()
54+
->sortable()
55+
->toggleable(isToggledHiddenByDefault: true),
56+
57+
TextColumn::make('updated_at')
58+
->label('Last updated on')
59+
->dateTime()
60+
->toggleable(isToggledHiddenByDefault: true),
61+
])
62+
->filters([
63+
TrashedFilter::make(),
64+
65+
TernaryFilter::make('updated_by')
66+
->label('Updated')
67+
->nullable()
68+
])
69+
->recordActions([
70+
Action::make('view')
71+
->url(fn(Reply $reply): string => route('thread', $reply->replyAble()->slug()) . '#' . $reply->id())
72+
->openUrlInNewTab()
73+
->icon('heroicon-s-eye'),
74+
75+
DeleteAction::make(),
76+
])
77+
->toolbarActions([
78+
BulkActionGroup::make([
79+
DeleteBulkAction::make(),
80+
ForceDeleteBulkAction::make(),
81+
RestoreBulkAction::make(),
82+
]),
83+
]);
84+
}
85+
}
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\ListRecords;
7+
8+
class ListUsers extends ListRecords
9+
{
10+
protected static string $resource = UserResource::class;
11+
12+
protected function getHeaderActions(): array
13+
{
14+
return [
15+
// CreateAction::make(),
16+
];
17+
}
18+
}

0 commit comments

Comments
 (0)