Skip to content

Commit 5aa65f2

Browse files
committed
pxlrbt/filament-excel integration
1 parent f49470c commit 5aa65f2

File tree

10 files changed

+820
-23
lines changed

10 files changed

+820
-23
lines changed

app/Http/Livewire/Administration/Companies.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Models\Company;
66
use App\Tables\Columns\UserColumn;
7+
use Carbon\Carbon;
78
use Filament\Tables\Actions\Action;
89
use Filament\Tables\Columns\BooleanColumn;
910
use Filament\Tables\Columns\ImageColumn;
@@ -15,6 +16,10 @@
1516
use Illuminate\Database\Eloquent\Relations\Relation;
1617
use Illuminate\Support\HtmlString;
1718
use Livewire\Component;
19+
use Maatwebsite\Excel\Excel;
20+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
21+
use pxlrbt\FilamentExcel\Columns\Column;
22+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
1823

1924
class Companies extends Component implements HasTable
2025
{
@@ -108,6 +113,41 @@ protected function getTableActions(): array
108113
];
109114
}
110115

116+
/**
117+
* Table header actions definition
118+
*
119+
* @return array
120+
*/
121+
protected function getTableHeaderActions(): array
122+
{
123+
return [
124+
ExportAction::make()
125+
->label(__('Export'))
126+
->color('success')
127+
->icon('heroicon-o-document-download')
128+
->exports([
129+
ExcelExport::make()
130+
->askForWriterType()
131+
->withFilename('companies-export')
132+
->withColumns([
133+
Column::make('name')
134+
->heading(__('Company name')),
135+
Column::make('responsible.name')
136+
->heading(__('Responsible')),
137+
Column::make('is_disabled')
138+
->heading(__('Company activated'))
139+
->formatStateUsing(fn (bool $state) => $state ? __('No') : __('Yes')),
140+
Column::make('users')
141+
->heading(__('Company users'))
142+
->formatStateUsing(fn (Company $record) => $record->users->pluck('name')->join(', ')),
143+
Column::make('created_at')
144+
->heading(__('Created at'))
145+
->formatStateUsing(fn (Carbon $state) => $state->format(__('Y-m-d g:i A'))),
146+
])
147+
])
148+
];
149+
}
150+
111151
/**
112152
* Table default sort column definition
113153
*

app/Http/Livewire/Administration/Roles.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace App\Http\Livewire\Administration;
44

5+
use App\Models\Company;
6+
use Carbon\Carbon;
57
use Filament\Notifications\Notification;
68
use Filament\Tables\Actions\Action;
79
use Filament\Tables\Columns\TextColumn;
@@ -11,6 +13,9 @@
1113
use Illuminate\Database\Eloquent\Builder;
1214
use Illuminate\Database\Eloquent\Relations\Relation;
1315
use Livewire\Component;
16+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
17+
use pxlrbt\FilamentExcel\Columns\Column;
18+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
1419
use Spatie\Permission\Models\Role;
1520

1621
class Roles extends Component implements HasTable
@@ -76,6 +81,38 @@ protected function getTableActions(): array
7681
];
7782
}
7883

84+
/**
85+
* Table header actions definition
86+
*
87+
* @return array
88+
*/
89+
protected function getTableHeaderActions(): array
90+
{
91+
return [
92+
ExportAction::make()
93+
->label(__('Export'))
94+
->color('success')
95+
->icon('heroicon-o-document-download')
96+
->exports([
97+
ExcelExport::make()
98+
->askForWriterType()
99+
->withFilename('user-roles-export')
100+
->withColumns([
101+
Column::make('name')
102+
->heading(__('Role name')),
103+
Column::make('permissions')
104+
->heading(__('Permissions'))
105+
->formatStateUsing(
106+
fn (Role $record) => $record->permissions->pluck('name')->join(', ')
107+
),
108+
Column::make('created_at')
109+
->heading(__('Created at'))
110+
->formatStateUsing(fn (Carbon $state) => $state->format(__('Y-m-d g:i A'))),
111+
])
112+
])
113+
];
114+
}
115+
79116
/**
80117
* Table default sort column definition
81118
*

app/Http/Livewire/Administration/TicketPriorities.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace App\Http\Livewire\Administration;
44

55
use App\Models\TicketPriority;
6+
use App\Models\User;
7+
use Carbon\Carbon;
68
use Filament\Tables\Actions\Action;
79
use Filament\Tables\Columns\TextColumn;
810
use Filament\Tables\Concerns\InteractsWithTable;
@@ -11,6 +13,9 @@
1113
use Illuminate\Database\Eloquent\Relations\Relation;
1214
use Illuminate\Support\HtmlString;
1315
use Livewire\Component;
16+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
17+
use pxlrbt\FilamentExcel\Columns\Column;
18+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
1419

1520
class TicketPriorities extends Component implements HasTable
1621
{
@@ -80,6 +85,33 @@ protected function getTableActions(): array
8085
];
8186
}
8287

88+
/**
89+
* Table header actions definition
90+
*
91+
* @return array
92+
*/
93+
protected function getTableHeaderActions(): array
94+
{
95+
return [
96+
ExportAction::make()
97+
->label(__('Export'))
98+
->color('success')
99+
->icon('heroicon-o-document-download')
100+
->exports([
101+
ExcelExport::make()
102+
->askForWriterType()
103+
->withFilename('ticket-priorities-export')
104+
->withColumns([
105+
Column::make('title')
106+
->heading(__('Title')),
107+
Column::make('created_at')
108+
->heading(__('Created at'))
109+
->formatStateUsing(fn(Carbon $state) => $state->format(__('Y-m-d g:i A'))),
110+
])
111+
])
112+
];
113+
}
114+
83115
/**
84116
* Table default sort column definition
85117
*

app/Http/Livewire/Administration/TicketStatuses.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Livewire\Administration;
44

55
use App\Models\TicketStatus;
6+
use Carbon\Carbon;
67
use Filament\Tables\Actions\Action;
78
use Filament\Tables\Columns\BooleanColumn;
89
use Filament\Tables\Columns\TextColumn;
@@ -12,6 +13,9 @@
1213
use Illuminate\Database\Eloquent\Relations\Relation;
1314
use Illuminate\Support\HtmlString;
1415
use Livewire\Component;
16+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
17+
use pxlrbt\FilamentExcel\Columns\Column;
18+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
1519

1620
class TicketStatuses extends Component implements HasTable
1721
{
@@ -84,6 +88,33 @@ protected function getTableActions(): array
8488
];
8589
}
8690

91+
/**
92+
* Table header actions definition
93+
*
94+
* @return array
95+
*/
96+
protected function getTableHeaderActions(): array
97+
{
98+
return [
99+
ExportAction::make()
100+
->label(__('Export'))
101+
->color('success')
102+
->icon('heroicon-o-document-download')
103+
->exports([
104+
ExcelExport::make()
105+
->askForWriterType()
106+
->withFilename('ticket-statuses-export')
107+
->withColumns([
108+
Column::make('title')
109+
->heading(__('Title')),
110+
Column::make('created_at')
111+
->heading(__('Created at'))
112+
->formatStateUsing(fn(Carbon $state) => $state->format(__('Y-m-d g:i A'))),
113+
])
114+
])
115+
];
116+
}
117+
87118
/**
88119
* Table default sort column definition
89120
*

app/Http/Livewire/Administration/TicketTypes.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Livewire\Administration;
44

55
use App\Models\TicketType;
6+
use Carbon\Carbon;
67
use Filament\Tables\Actions\Action;
78
use Filament\Tables\Columns\TextColumn;
89
use Filament\Tables\Concerns\InteractsWithTable;
@@ -11,6 +12,9 @@
1112
use Illuminate\Database\Eloquent\Relations\Relation;
1213
use Illuminate\Support\HtmlString;
1314
use Livewire\Component;
15+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
16+
use pxlrbt\FilamentExcel\Columns\Column;
17+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
1418

1519
class TicketTypes extends Component implements HasTable
1620
{
@@ -80,6 +84,33 @@ protected function getTableActions(): array
8084
];
8185
}
8286

87+
/**
88+
* Table header actions definition
89+
*
90+
* @return array
91+
*/
92+
protected function getTableHeaderActions(): array
93+
{
94+
return [
95+
ExportAction::make()
96+
->label(__('Export'))
97+
->color('success')
98+
->icon('heroicon-o-document-download')
99+
->exports([
100+
ExcelExport::make()
101+
->askForWriterType()
102+
->withFilename('ticket-types-export')
103+
->withColumns([
104+
Column::make('title')
105+
->heading(__('Title')),
106+
Column::make('created_at')
107+
->heading(__('Created at'))
108+
->formatStateUsing(fn(Carbon $state) => $state->format(__('Y-m-d g:i A'))),
109+
])
110+
])
111+
];
112+
}
113+
83114
/**
84115
* Table default sort column definition
85116
*

app/Http/Livewire/Administration/Users.php

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
namespace App\Http\Livewire\Administration;
44

5-
use App\Models\Company;
65
use App\Models\User;
76
use App\Notifications\UserCreatedNotification;
8-
use Filament\Forms\Components\TagsInput;
7+
use Carbon\Carbon;
98
use Filament\Notifications\Notification;
109
use Filament\Tables\Actions\Action;
11-
use Filament\Tables\Columns\BadgeColumn;
1210
use Filament\Tables\Columns\BooleanColumn;
1311
use Filament\Tables\Columns\TagsColumn;
1412
use Filament\Tables\Columns\TextColumn;
@@ -18,6 +16,9 @@
1816
use Illuminate\Database\Eloquent\Builder;
1917
use Illuminate\Database\Eloquent\Relations\Relation;
2018
use Livewire\Component;
19+
use pxlrbt\FilamentExcel\Actions\Tables\ExportAction;
20+
use pxlrbt\FilamentExcel\Columns\Column;
21+
use pxlrbt\FilamentExcel\Exports\ExcelExport;
2122

2223
class Users extends Component implements HasTable
2324
{
@@ -43,11 +44,10 @@ protected function getTableQuery(): Builder|Relation
4344
if (auth()->user()->can('View company users') && !auth()->user()->can('View all users')) {
4445
$query->whereHas(
4546
'companies',
46-
fn ($query) =>
47-
$query->whereIn(
48-
'companies.id',
49-
auth()->user()->ownCompanies->pluck('id')->toArray()
50-
)
47+
fn($query) => $query->whereIn(
48+
'companies.id',
49+
auth()->user()->ownCompanies->pluck('id')->toArray()
50+
)
5151
);
5252
} elseif (!auth()->user()->can('View all users')) {
5353
// Get empty list
@@ -75,7 +75,7 @@ protected function getTableColumns(): array
7575
TagsColumn::make('roles.name')
7676
->label(__('User roles'))
7777
->limit(1)
78-
->visible(fn () => auth()->user()->can('Assign permissions'))
78+
->visible(fn() => auth()->user()->can('Assign permissions'))
7979
->searchable()
8080
->sortable(),
8181

@@ -113,11 +113,48 @@ protected function getTableActions(): array
113113
->icon('heroicon-o-pencil')
114114
->link()
115115
->label(__('Edit user'))
116-
->visible(fn () => auth()->user()->can('Update users'))
116+
->visible(fn() => auth()->user()->can('Update users'))
117117
->action(fn(User $record) => $this->updateUser($record->id))
118118
];
119119
}
120120

121+
/**
122+
* Table header actions definition
123+
*
124+
* @return array
125+
*/
126+
protected function getTableHeaderActions(): array
127+
{
128+
return [
129+
ExportAction::make()
130+
->label(__('Export'))
131+
->color('success')
132+
->icon('heroicon-o-document-download')
133+
->exports([
134+
ExcelExport::make()
135+
->askForWriterType()
136+
->withFilename('users-export')
137+
->withColumns([
138+
Column::make('name')
139+
->heading(__('Full name')),
140+
Column::make('companies')
141+
->heading(__('Companies'))
142+
->formatStateUsing(
143+
fn(User $record) => $record->companies->pluck('name')->join(', ')
144+
),
145+
Column::make('roles')
146+
->heading(__('User roles'))
147+
->formatStateUsing(
148+
fn(User $record) => $record->roles->pluck('name')->join(', ')
149+
),
150+
Column::make('created_at')
151+
->heading(__('Created at'))
152+
->formatStateUsing(fn(Carbon $state) => $state->format(__('Y-m-d g:i A'))),
153+
])
154+
])
155+
];
156+
}
157+
121158
/**
122159
* Table default sort column definition
123160
*

0 commit comments

Comments
 (0)