-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Lenny P. edited this page Jan 9, 2026
·
1 revision
Welcome to the PenguTables wiki!
Example Usage:
<?php
namespace App\Livewire;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use RealZone22\PenguTables\Livewire\PenguTable;
use RealZone22\PenguTables\Table\Action;
use RealZone22\PenguTables\Table\BulkAction;
use RealZone22\PenguTables\Table\Column;
use RealZone22\PenguTables\Table\ExportTypes;
use RealZone22\PenguTables\Table\Filters\BooleanFilter;
use RealZone22\PenguTables\Table\Filters\DateFilter;
use RealZone22\PenguTables\Table\Filters\SelectFilter;
use RealZone22\PenguTables\Table\Filters\TextFilter;
use RealZone22\PenguTables\Table\Header;
use RealZone22\PenguTables\Table\Options;
use RealZone22\PenguTables\Traits\WithExport;
class Test extends PenguTable
{
use WithExport;
protected function setupOptions(): Options
{
return parent::setupOptions()->withExport(true, ExportTypes::CSV_SELECTED, ExportTypes::CSV_ALL, ExportTypes::XLSX_SELECTED, ExportTypes::XLSX_ALL)->setPerPage(2000);
}
public function query(): Builder
{
return User::query();
}
public function header(): array
{
return [
Header::make('<x-button>Hello World</x-button>'),
Header::make('<x-button>Hello World 1</x-button>'),
];
}
public function bulkActions(): array
{
return [
BulkAction::make('Test', fn($row) => dd($row)),
BulkAction::make('Test1', fn($row) => dd($row)),
BulkAction::make('Test2', fn($row) => dd($row)),
];
}
public function filters(): array
{
return [
BooleanFilter::make('email_verified_at')
->label('Email Verified')
->trueLabel('Yes')
->falseLabel('No'),
DateFilter::make('created_at')
->label('Created At')
->filter(fn(Builder $query, $value) => $query->whereDate('created_at', $value)),
SelectFilter::make('email')
->label('Email')
->options([
'gmail.com' => 'Gmail',
'example.com' => 'Example.com',
'example.net' => 'Example.net',
])
->filter(function (Builder $query, $value) {
if (!empty($value)) {
$query->where('email', 'like', '%' . $value . '%');
}
}),
TextFilter::make('name')
->label('Name')
->filter(function (Builder $query, $value) {
if (!empty($value)) {
$query->where('name', 'like', '%' . $value . '%');
}
}),
];
}
public function columns(): array
{
return [
Column::make('ID', 'id')
->sortable()
->searchable(),
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('EMail', 'email')
->sortable()
->searchable(),
Column::make('EMailVerifiedAt', 'email_verified_at')
->format(function ($value) {
if ($value) {
return '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-check" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l5 5l10 -10" /></svg> ' . date('d.m.Y H:i:s', strtotime($value));
}
return '';
})
->html()
->sortable()
->searchable(),
Column::make('Created At', 'created_at')
->format(fn($value) => date('d.m.Y H:i:s', strtotime($value)))
->sortable()
->searchable(),
Column::make('Updated At', 'updated_at')
->format(fn($value) => date('d.m.Y H:i:s', strtotime($value)))
->sortable()
->searchable(),
Column::actions('Actions', function ($row) {
return [
Action::make('<a href="/users/' . $row->id . '/edit" class="btn btn-sm btn-primary">Edit</a>'),
Action::make('<button onclick="deleteUser(' . $row->id . ')" class="btn btn-sm btn-danger">Delete</button>')
];
})
];
}
}