Skip to content

Commit 25ca823

Browse files
committed
Add ReplyResource
1 parent 6e29252 commit 25ca823

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed
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: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
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 $record): ?string => $record->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+
50+
TextColumn::make('created_at')
51+
->label('Created on')
52+
->dateTime()
53+
->sortable()
54+
->toggleable(isToggledHiddenByDefault: true),
55+
56+
TextColumn::make('updated_at')
57+
->label('Last updated on')
58+
->dateTime()
59+
->toggleable(isToggledHiddenByDefault: true),
60+
])
61+
->filters([
62+
TrashedFilter::make(),
63+
64+
TernaryFilter::make('updated_by')
65+
->label('Updated')
66+
->nullable()
67+
])
68+
->recordActions([
69+
Action::make('view')
70+
->url(fn(Reply $record): string => route('thread', $record->replyAble()->slug()) . '#' . $record->id())
71+
->openUrlInNewTab()
72+
->icon('heroicon-s-eye'),
73+
74+
DeleteAction::make(),
75+
])
76+
->toolbarActions([
77+
BulkActionGroup::make([
78+
DeleteBulkAction::make(),
79+
ForceDeleteBulkAction::make(),
80+
RestoreBulkAction::make(),
81+
]),
82+
]);
83+
}
84+
}

0 commit comments

Comments
 (0)