Skip to content

Commit 70bb600

Browse files
cybersoldattechChri$
and
Chri$
authored
feat:[LAR-70] Add discussions table in admin cpanel and add feature t… (#163)
Co-authored-by: Chri$ <chris@learn.edu>
1 parent 0adffa9 commit 70bb600

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources;
6+
7+
use App\Filament\Resources\DiscussionResource\Pages;
8+
use App\Models\Discussion;
9+
use Filament\Resources\Resource;
10+
use Filament\Tables;
11+
use Filament\Tables\Columns\TextColumn;
12+
use Filament\Tables\Filters\Filter;
13+
use Filament\Tables\Table;
14+
use Illuminate\Database\Eloquent\Builder;
15+
16+
final class DiscussionResource extends Resource
17+
{
18+
protected static ?string $model = Discussion::class;
19+
20+
protected static ?string $navigationIcon = 'heroicon-o-chat-bubble-bottom-center-text';
21+
22+
public static function table(Table $table): Table
23+
{
24+
return $table
25+
->columns([
26+
TextColumn::make('title')
27+
->label('Titre')
28+
->sortable(),
29+
TextColumn::make('locked')
30+
->label('Vérrouillé')
31+
->getStateUsing(fn ($record) => ($record->locked) ? 'Oui' : 'Non')
32+
->colors([
33+
'success' => 'Oui',
34+
'danger' => 'Non',
35+
])
36+
->badge(),
37+
TextColumn::make('is_pinned')
38+
->label('Epinglé')
39+
->getStateUsing(fn ($record) => ($record->is_pinned) ? 'Oui' : 'Non')
40+
->colors([
41+
'success' => 'Oui',
42+
'danger' => 'Non',
43+
])
44+
->badge(),
45+
TextColumn::make('created_at')
46+
->label('Date de création')
47+
->dateTime(),
48+
TextColumn::make('user.name')
49+
->label('Auteur'),
50+
])
51+
->filters([
52+
Filter::make('is_pinned')->query(fn (Builder $query) => $query->where('is_pinned', true))->label('Epinglé'),
53+
Filter::make('is_locked')->query(fn (Builder $query) => $query->where('locked', true))->label('Vérrouillé'),
54+
])
55+
->actions([
56+
Tables\Actions\DeleteAction::make(),
57+
])
58+
->bulkActions([
59+
Tables\Actions\BulkActionGroup::make([
60+
Tables\Actions\DeleteBulkAction::make(),
61+
]),
62+
]);
63+
}
64+
65+
public static function getPages(): array
66+
{
67+
return [
68+
'index' => Pages\ListDiscussions::route('/'),
69+
];
70+
}
71+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\DiscussionResource\Pages;
6+
7+
use App\Filament\Resources\DiscussionResource;
8+
use Filament\Resources\Pages\ListRecords;
9+
10+
final class ListDiscussions extends ListRecords
11+
{
12+
protected static string $resource = DiscussionResource::class;
13+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Filament\Resources\DiscussionResource;
6+
use App\Filament\Resources\DiscussionResource\Pages\ListDiscussions;
7+
use App\Models\Discussion;
8+
use Illuminate\Database\Eloquent\Factories\Sequence;
9+
use Livewire\Livewire;
10+
11+
beforeEach(function (): void {
12+
$this->user = $this->login();
13+
$this->discussions = Discussion::factory()
14+
->count(10)
15+
->state(new Sequence(
16+
['is_pinned' => true, 'locked' => false],
17+
['is_pinned' => false, 'locked' => true],
18+
))
19+
->create();
20+
});
21+
22+
describe(DiscussionResource::class, function (): void {
23+
24+
it('page can display table with records', function (): void {
25+
Livewire::test(ListDiscussions::class)
26+
->assertCanSeeTableRecords($this->discussions);
27+
});
28+
29+
it('admin user can filter discussion by `is_pinned`', function (): void {
30+
Livewire::test(ListDiscussions::class)
31+
->assertCanSeeTableRecords($this->discussions)
32+
->filterTable('is_pinned')
33+
->assertCountTableRecords(5);
34+
});
35+
36+
it('admin user can filter discussion by `locked`', function (): void {
37+
Livewire::test(ListDiscussions::class)
38+
->assertCanSeeTableRecords($this->discussions)
39+
->filterTable('is_locked')
40+
->assertCountTableRecords(5);
41+
});
42+
})->group('discussions');

0 commit comments

Comments
 (0)