Skip to content

Commit 614efb3

Browse files
authored
Merge pull request #71 from devaslanphp/dev
filament/tables integration
2 parents 600dfbf + cb13ccb commit 614efb3

23 files changed

Lines changed: 918 additions & 583 deletions

app/Http/Livewire/Administration/TicketPriorities.php

Lines changed: 69 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,98 @@
33
namespace App\Http\Livewire\Administration;
44

55
use App\Models\TicketPriority;
6-
use Filament\Forms\Components\Grid;
7-
use Filament\Forms\Components\TextInput;
8-
use Filament\Forms\Concerns\InteractsWithForms;
9-
use Filament\Forms\Contracts\HasForms;
6+
use Filament\Tables\Actions\Action;
7+
use Filament\Tables\Columns\TextColumn;
8+
use Filament\Tables\Concerns\InteractsWithTable;
9+
use Filament\Tables\Contracts\HasTable;
10+
use Illuminate\Database\Eloquent\Builder;
11+
use Illuminate\Database\Eloquent\Relations\Relation;
12+
use Illuminate\Support\HtmlString;
1013
use Livewire\Component;
1114

12-
class TicketPriorities extends Component implements HasForms
15+
class TicketPriorities extends Component implements HasTable
1316
{
14-
use InteractsWithForms;
17+
use InteractsWithTable;
1518

16-
public $search;
1719
public $selectedPriority;
1820

1921
protected $listeners = ['prioritySaved', 'priorityDeleted'];
2022

21-
public function mount(): void
23+
public function render()
2224
{
23-
$this->form->fill();
25+
return view('livewire.administration.ticket-priorities');
2426
}
2527

26-
public function render()
28+
/**
29+
* Table query definition
30+
*
31+
* @return Builder|Relation
32+
*/
33+
protected function getTableQuery(): Builder|Relation
2734
{
28-
$query = TicketPriority::query();
29-
if ($this->search) {
30-
$query->where('title', 'like', '%' . $this->search . '%')
31-
->orWhere('text_color', 'like', '%' . $this->search . '%')
32-
->orWhere('bg_color', 'like', '%' . $this->search . '%')
33-
->orWhere('icon', 'like', '%' . $this->search . '%');
34-
}
35-
$priorities = $query->paginate();
36-
return view('livewire.administration.ticket-priorities', compact('priorities'));
35+
return TicketPriority::query();
3736
}
3837

3938
/**
40-
* Form schema definition
39+
* Table definition
4140
*
4241
* @return array
4342
*/
44-
protected function getFormSchema(): array
43+
protected function getTableColumns(): array
4544
{
4645
return [
47-
Grid::make(1)
48-
->schema([
49-
TextInput::make('search')
50-
->label(__('Search for tickets priorities'))
51-
->disableLabel()
52-
->type('search')
53-
->placeholder(__('Search for tickets priorities')),
54-
]),
46+
TextColumn::make('title')
47+
->label(__('Title'))
48+
->searchable()
49+
->sortable()
50+
->formatStateUsing(fn(TicketPriority $record) => new HtmlString('
51+
<span class="px-2 py-1 rounded-full text-sm flex items-center gap-2" style="color: ' . $record->text_color . '; background-color: ' . $record->bg_color . '">
52+
<i class="fa ' . $record->icon . '"></i>' . $record->title . '
53+
</span>
54+
')),
55+
56+
TextColumn::make('created_at')
57+
->label(__('Created at'))
58+
->sortable()
59+
->searchable()
60+
->dateTime(),
5561
];
5662
}
5763

5864
/**
59-
* Search for tickets priorities
65+
* Table actions definition
6066
*
61-
* @return void
67+
* @return array
68+
*/
69+
protected function getTableActions(): array
70+
{
71+
return [
72+
Action::make('edit')
73+
->icon('heroicon-o-pencil')
74+
->link()
75+
->label(__('Edit priority'))
76+
->action(fn(TicketPriority $record) => $this->updatePriority($record->id))
77+
];
78+
}
79+
80+
/**
81+
* Table default sort column definition
82+
*
83+
* @return string|null
84+
*/
85+
protected function getDefaultTableSortColumn(): ?string
86+
{
87+
return 'created_at';
88+
}
89+
90+
/**
91+
* Table default sort direction definition
92+
*
93+
* @return string|null
6294
*/
63-
public function search(): void
95+
protected function getDefaultTableSortDirection(): ?string
6496
{
65-
$data = $this->form->getState();
66-
$this->search = $data['search'] ?? null;
97+
return 'desc';
6798
}
6899

69100
/**
@@ -105,8 +136,8 @@ public function cancelPriority()
105136
*
106137
* @return void
107138
*/
108-
public function prioritySaved() {
109-
$this->search();
139+
public function prioritySaved()
140+
{
110141
$this->cancelPriority();
111142
}
112143

@@ -115,7 +146,8 @@ public function prioritySaved() {
115146
*
116147
* @return void
117148
*/
118-
public function priorityDeleted() {
149+
public function priorityDeleted()
150+
{
119151
$this->prioritySaved();
120152
}
121153
}

app/Http/Livewire/Administration/TicketStatuses.php

Lines changed: 71 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,66 +3,108 @@
33
namespace App\Http\Livewire\Administration;
44

55
use App\Models\TicketStatus;
6+
use App\Models\User;
67
use Filament\Forms\Components\Grid;
78
use Filament\Forms\Components\TextInput;
89
use Filament\Forms\Concerns\InteractsWithForms;
910
use Filament\Forms\Contracts\HasForms;
11+
use Filament\Tables\Actions\Action;
12+
use Filament\Tables\Columns\BadgeColumn;
13+
use Filament\Tables\Columns\BooleanColumn;
14+
use Filament\Tables\Columns\TextColumn;
15+
use Filament\Tables\Concerns\InteractsWithTable;
16+
use Filament\Tables\Contracts\HasTable;
17+
use Illuminate\Database\Eloquent\Builder;
18+
use Illuminate\Database\Eloquent\Relations\Relation;
19+
use Illuminate\Support\HtmlString;
1020
use Livewire\Component;
1121

12-
class TicketStatuses extends Component implements HasForms
22+
class TicketStatuses extends Component implements HasTable
1323
{
14-
use InteractsWithForms;
24+
use InteractsWithTable;
1525

16-
public $search;
1726
public $selectedStatus;
1827

1928
protected $listeners = ['statusSaved', 'statusDeleted'];
2029

21-
public function mount(): void
30+
public function render()
2231
{
23-
$this->form->fill();
32+
return view('livewire.administration.ticket-statuses');
2433
}
2534

26-
public function render()
35+
/**
36+
* Table query definition
37+
*
38+
* @return Builder|Relation
39+
*/
40+
protected function getTableQuery(): Builder|Relation
2741
{
28-
$query = TicketStatus::query();
29-
if ($this->search) {
30-
$query->where('title', 'like', '%' . $this->search . '%')
31-
->orWhere('text_color', 'like', '%' . $this->search . '%')
32-
->orWhere('bg_color', 'like', '%' . $this->search . '%');
33-
}
34-
$statuses = $query->paginate();
35-
return view('livewire.administration.ticket-statuses', compact('statuses'));
42+
return TicketStatus::query();
3643
}
3744

3845
/**
39-
* Form schema definition
46+
* Table definition
4047
*
4148
* @return array
4249
*/
43-
protected function getFormSchema(): array
50+
protected function getTableColumns(): array
4451
{
4552
return [
46-
Grid::make(1)
47-
->schema([
48-
TextInput::make('search')
49-
->label(__('Search for tickets statuses'))
50-
->disableLabel()
51-
->type('search')
52-
->placeholder(__('Search for tickets statuses')),
53-
]),
53+
TextColumn::make('title')
54+
->label(__('Title'))
55+
->searchable()
56+
->sortable()
57+
->formatStateUsing(fn (TicketStatus $record) => new HtmlString('
58+
<span class="px-2 py-1 rounded-full text-sm" style="color: ' . $record->text_color . '; background-color: ' . $record->bg_color . '">' . $record->title . '</span>
59+
')),
60+
61+
BooleanColumn::make('default')
62+
->label(__('Default status'))
63+
->sortable()
64+
->searchable(),
65+
66+
TextColumn::make('created_at')
67+
->label(__('Created at'))
68+
->sortable()
69+
->searchable()
70+
->dateTime(),
5471
];
5572
}
5673

5774
/**
58-
* Search for tickets statuses
75+
* Table actions definition
5976
*
60-
* @return void
77+
* @return array
78+
*/
79+
protected function getTableActions(): array
80+
{
81+
return [
82+
Action::make('edit')
83+
->icon('heroicon-o-pencil')
84+
->link()
85+
->label(__('Edit status'))
86+
->action(fn(TicketStatus $record) => $this->updateStatus($record->id))
87+
];
88+
}
89+
90+
/**
91+
* Table default sort column definition
92+
*
93+
* @return string|null
94+
*/
95+
protected function getDefaultTableSortColumn(): ?string
96+
{
97+
return 'created_at';
98+
}
99+
100+
/**
101+
* Table default sort direction definition
102+
*
103+
* @return string|null
61104
*/
62-
public function search(): void
105+
protected function getDefaultTableSortDirection(): ?string
63106
{
64-
$data = $this->form->getState();
65-
$this->search = $data['search'] ?? null;
107+
return 'desc';
66108
}
67109

68110
/**
@@ -105,7 +147,6 @@ public function cancelStatus()
105147
* @return void
106148
*/
107149
public function statusSaved() {
108-
$this->search();
109150
$this->cancelStatus();
110151
}
111152

0 commit comments

Comments
 (0)