Skip to content

Commit e9b0c6d

Browse files
TheAbhishekINabhi-conceptlzdriesvints
authored
Add Threads resource in filament admin (#1396)
* Add Threads resource in filament admin * wip --------- Co-authored-by: Abhishek Sharma <[email protected]> Co-authored-by: Dries Vints <[email protected]>
1 parent 57c1555 commit e9b0c6d

File tree

3 files changed

+118
-0
lines changed

3 files changed

+118
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Threads\Pages;
4+
5+
use App\Filament\Resources\Threads\ThreadResource;
6+
use Filament\Actions\CreateAction;
7+
use Filament\Resources\Pages\ListRecords;
8+
9+
class ListThreads extends ListRecords
10+
{
11+
protected static string $resource = ThreadResource::class;
12+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Threads\Tables;
4+
5+
use App\Models\Thread;
6+
use Filament\Actions\BulkActionGroup;
7+
use Filament\Actions\DeleteBulkAction;
8+
use Filament\Actions\Action;
9+
use Filament\Tables\Columns\TextColumn;
10+
use Filament\Tables\Columns\ImageColumn;
11+
use Filament\Tables\Table;
12+
13+
class ThreadsTable
14+
{
15+
public static function configure(Table $table): Table
16+
{
17+
return $table
18+
->columns([
19+
ImageColumn::make('authorRelation.github_id')
20+
->label('Author')
21+
->circular()
22+
->defaultImageUrl(fn(?string $state): string => $state ? sprintf('https://avatars.githubusercontent.com/u/%s', $state) : asset('images/laravelio-icon-gray.svg')),
23+
24+
TextColumn::make('authorRelation.name')
25+
->label('')
26+
->description(fn(Thread $thread): ?string => $thread->authorRelation->username)
27+
->searchable(),
28+
29+
TextColumn::make('subject')
30+
->searchable(),
31+
32+
TextColumn::make('last_activity_at')
33+
->dateTime()
34+
->sortable(),
35+
36+
TextColumn::make('locked_at')
37+
->dateTime()
38+
->sortable(),
39+
40+
TextColumn::make('created_at')
41+
->dateTime()
42+
->sortable()
43+
->toggleable(isToggledHiddenByDefault: true),
44+
45+
TextColumn::make('updated_at')
46+
->dateTime()
47+
->sortable()
48+
->toggleable(isToggledHiddenByDefault: true),
49+
])
50+
->recordActions([
51+
Action::make('view')
52+
->url(fn(Thread $thread): string => route('thread', $thread->slug()))
53+
->openUrlInNewTab()
54+
->icon('heroicon-s-eye'),
55+
56+
])
57+
->toolbarActions([
58+
BulkActionGroup::make([
59+
DeleteBulkAction::make(),
60+
]),
61+
]);
62+
}
63+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Threads;
4+
5+
use App\Filament\Resources\Threads\Pages\CreateThread;
6+
use App\Filament\Resources\Threads\Pages\EditThread;
7+
use App\Filament\Resources\Threads\Pages\ListThreads;
8+
use App\Filament\Resources\Threads\Schemas\ThreadForm;
9+
use App\Filament\Resources\Threads\Tables\ThreadsTable;
10+
use App\Models\Thread;
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 ThreadResource extends Resource
18+
{
19+
protected static ?string $model = Thread::class;
20+
21+
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedChatBubbleLeftRight;
22+
23+
protected static ?string $recordTitleAttribute = 'Threads';
24+
25+
public static function table(Table $table): Table
26+
{
27+
return ThreadsTable::configure($table);
28+
}
29+
30+
public static function getRelations(): array
31+
{
32+
return [
33+
//
34+
];
35+
}
36+
37+
public static function getPages(): array
38+
{
39+
return [
40+
'index' => ListThreads::route('/'),
41+
];
42+
}
43+
}

0 commit comments

Comments
 (0)