Skip to content

Commit 06db65e

Browse files
simonhampclaude
andcommitted
Add status filter tabs to admin Support Tickets list
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f693007 commit 06db65e

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

app/Filament/Resources/SupportTicketResource/Pages/ListSupportTickets.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,25 @@
33
namespace App\Filament\Resources\SupportTicketResource\Pages;
44

55
use App\Filament\Resources\SupportTicketResource;
6+
use App\SupportTicket\Status;
67
use Filament\Resources\Pages\ListRecords;
8+
use Filament\Schemas\Components\Tabs\Tab;
9+
use Illuminate\Database\Eloquent\Builder;
710

811
class ListSupportTickets extends ListRecords
912
{
1013
protected static string $resource = SupportTicketResource::class;
14+
15+
public function getTabs(): array
16+
{
17+
return [
18+
'all' => Tab::make('All'),
19+
'new' => Tab::make('New')
20+
->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::OPEN)),
21+
'in_progress' => Tab::make('In Progress')
22+
->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::IN_PROGRESS)),
23+
'on_hold' => Tab::make('On Hold')
24+
->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::ON_HOLD)),
25+
];
26+
}
1127
}

tests/Feature/SupportTicketTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Tests\Feature;
44

55
use App\Filament\Resources\SupportTicketResource;
6+
use App\Filament\Resources\SupportTicketResource\Pages\ListSupportTickets;
67
use App\Filament\Resources\SupportTicketResource\Pages\ViewSupportTicket;
78
use App\Filament\Resources\SupportTicketResource\Widgets\TicketRepliesWidget;
89
use App\Livewire\Customer\Support\Create;
@@ -1238,6 +1239,30 @@ public function only_internal_notes_can_be_pinned(): void
12381239
->call('togglePin', $reply->id);
12391240
}
12401241

1242+
#[Test]
1243+
public function admin_list_page_tabs_filter_tickets_by_status(): void
1244+
{
1245+
$admin = User::factory()->create(['email' => 'admin@test.com']);
1246+
config(['filament.users' => ['admin@test.com']]);
1247+
1248+
$openTicket = SupportTicket::factory()->create(['status' => Status::OPEN]);
1249+
$inProgressTicket = SupportTicket::factory()->create(['status' => Status::IN_PROGRESS]);
1250+
$onHoldTicket = SupportTicket::factory()->create(['status' => Status::ON_HOLD]);
1251+
1252+
Livewire::actingAs($admin)
1253+
->test(ListSupportTickets::class)
1254+
->assertCanSeeTableRecords([$openTicket, $inProgressTicket, $onHoldTicket])
1255+
->set('activeTab', 'new')
1256+
->assertCanSeeTableRecords([$openTicket])
1257+
->assertCanNotSeeTableRecords([$inProgressTicket, $onHoldTicket])
1258+
->set('activeTab', 'in_progress')
1259+
->assertCanSeeTableRecords([$inProgressTicket])
1260+
->assertCanNotSeeTableRecords([$openTicket, $onHoldTicket])
1261+
->set('activeTab', 'on_hold')
1262+
->assertCanSeeTableRecords([$onHoldTicket])
1263+
->assertCanNotSeeTableRecords([$openTicket, $inProgressTicket]);
1264+
}
1265+
12411266
#[Test]
12421267
public function admin_view_page_shows_user_email_when_name_is_null(): void
12431268
{

0 commit comments

Comments
 (0)