PHP code example of idkwhoami / flux-tables
1. Go to this page and download the library: Download idkwhoami/flux-tables library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
idkwhoami / flux-tables example snippets
$filters = [
\Idkwhoami\FluxTables\Concretes\Filter\DeletedFilter::make('deleted')
->label('Deletion State')
->default(\Idkwhoami\FluxTables\Enums\DeletionState::WithoutDeleted->value),
\Idkwhoami\FluxTables\Concretes\Filter\DateRangeFilter::make('created')
->property('created_at')
->label('Created'),
\Idkwhoami\FluxTables\Concretes\Filter\ValuePresentFilter::make('email_verified')
->property('email_verified_at')
->label('Exclude unverified')
->description('Hide all users that haven\'t verified their email address.')
->pillContent('Unverified excluded'),
\Idkwhoami\FluxTables\Concretes\Filter\BooleanFilter::make('banned')
->property('banned'),
];
$columns = [
\Idkwhoami\FluxTables\Concretes\Column\ComponentColumn::make('name')
->label('Username')
->sortable()
->searchable()
->component('columns.user-name-input')
->property('name'),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('created')
->humanReadable()
->label("Created")
->sortable()
->property('created_at'),
\Idkwhoami\FluxTables\Concretes\Column\TextColumn::make('posts')
->count()
->label('Posts')
->relation('posts')
->property('posts_count'),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('email_verified')
->label("Email Verified At")
->sortable()
->property('email_verified_at'),
\Idkwhoami\FluxTables\Concretes\Column\BooleanColumn::make('banned')
->label('Banned')
->property('banned'),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('deleted')
->label("Deleted")
->default('n/a')
->property('deleted_at'),
\Idkwhoami\FluxTables\Concretes\Column\ActionColumn::make('actions')
->actions([
Idkwhoami\FluxTables\Abstracts\Action\ModalAction::make('open')
->label('Open')
->icon('arrow-top-right-on-square')
->link()
->component('user-delete-confirmation'),
Idkwhoami\FluxTables\Abstracts\Action\DirectAction::make('delete')
->visible(fn(\Illuminate\Database\Eloquent\Model $model) => auth()->user()->isNot($model) && !$model->deleted_at)
->label('Delete')
->icon('trash-2')
->operation(\Idkwhoami\FluxTables\Concretes\Operation\DeleteOperation::make('delete')),
Idkwhoami\FluxTables\Abstracts\Action\DirectAction::make('restore')
->visible(fn(\Illuminate\Database\Eloquent\Model $model) => auth()->user()->isNot($model) && $model->deleted_at)
->label('Restore')
->icon('rotate-ccw')
->operation(\Idkwhoami\FluxTables\Concretes\Operation\RestoreOperation::make('restore')),
]),
];
namespace App\Livewire;
use App\Models\User;
use Idkwhoami\FluxTables\Abstracts\Table\Table;
use Idkwhoami\FluxTables\Concretes\Table\EloquentTable;
use Idkwhoami\FluxTables\Traits\HasEloquentTable;
use Idkwhoami\FluxTables\Traits\HasFilters;
use Idkwhoami\FluxTables\Traits\HasSearch;
use Idkwhoami\FluxTables\Traits\HasSorting;
use Idkwhoami\FluxTables\Traits\HasActions;
use Idkwhoami\FluxTables\Traits\HasToggleableColumns;
use Idkwhoami\FluxTables\Traits\HasDynamicPagination;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Contracts\View\View;
use Livewire\Attributes\Computed;
use Livewire\Component;
use Livewire\WithPagination;
class CustomUserTable extends Component
{
use HasEloquentTable;
use HasFilters;
use HasSorting;
use HasSearch;
use HasActions;
use HasToggleableColumns;
use HasDynamicPagination;
use WithPagination;
public string $search = '';
public function mount(): void
{
// Livewire automatically calls trait mount methods
// No manual initialization needed
}
public function render(): View
{
return view('livewire.custom-user-table');
}
#[Computed]
public function models(): LengthAwarePaginator
{
return $this->getQuery()->paginate($this->getPaginationValue());
}
public function getQuery(): Builder
{
$query = User::query();
// Apply the modular functionality
$this->applySearch($query);
$this->applyFilters($query);
$this->applySorting($query);
$this->applyRelations($query);
$this->applyColumns($query);
return $query;
}
protected function getColumns(): array
{
return [
\Idkwhoami\FluxTables\Concretes\Column\TextColumn::make('name')
->label('Name')
->property('name')
->searchable()
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\TextColumn::make('email')
->label('Email')
->property('email')
->searchable()
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\ComponentColumn::make('avatar')
->label('Avatar')
->component('columns.user-avatar')
->property('avatar_url')
->toggleable(false), // Always visible
\Idkwhoami\FluxTables\Concretes\Column\TextColumn::make('posts')
->count()
->label('Posts')
->relation('posts')
->property('posts_count')
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('created_at')
->label('Created')
->property('created_at')
->humanReadable()
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('email_verified_at')
->label('Email Verified')
->property('email_verified_at')
->default('Not verified')
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\BooleanColumn::make('banned')
->label('Banned')
->property('banned')
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\JsonColumn::make('preferences')
->label('Theme')
->property('preferences')
->path(['ui', 'theme'])
->type(\Idkwhoami\FluxTables\Enums\JsonPropertyType::Text)
->default('default'),
\Idkwhoami\FluxTables\Concretes\Column\DatetimeColumn::make('deleted_at')
->label('Deleted')
->property('deleted_at')
->default('n/a')
->sortable(),
\Idkwhoami\FluxTables\Concretes\Column\ActionColumn::make('actions')
->label('Actions')
->actions([
\Idkwhoami\FluxTables\Abstracts\Action\ModalAction::make('edit')
->label('Edit')
->icon('pencil')
->link()
->component('user-edit-modal'),
\Idkwhoami\FluxTables\Abstracts\Action\ModalAction::make('view')
->label('View Details')
->icon('eye')
->variant('outline')
->component('user-details-modal'),
\Idkwhoami\FluxTables\Abstracts\Action\DirectAction::make('ban')
->visible(fn(\Illuminate\Database\Eloquent\Model $model) =>
auth()->user()->isNot($model) && !$model->banned && !$model->deleted_at)
->label('Ban')
->icon('user-x')
->variant('danger')
->operation(\Idkwhoami\FluxTables\Concretes\Operation\RouteOperation::make('ban')
->route('admin.users.ban')
->parameters(['user' => fn($model) => $model->id])),
\Idkwhoami\FluxTables\Abstracts\Action\DirectAction::make('delete')
->visible(fn(\Illuminate\Database\Eloquent\Model $model) =>
auth()->user()->isNot($model) && !$model->deleted_at)
->label('Delete')
->icon('trash-2')
->variant('danger')
->operation(\Idkwhoami\FluxTables\Concretes\Operation\DeleteOperation::make('delete')),
\Idkwhoami\FluxTables\Abstracts\Action\DirectAction::make('restore')
->visible(fn(\Illuminate\Database\Eloquent\Model $model) =>
auth()->user()->isNot($model) && $model->deleted_at)
->label('Restore')
->icon('rotate-ccw')
->operation(\Idkwhoami\FluxTables\Concretes\Operation\RestoreOperation::make('restore')),
]),
];
}
protected function getFilters(): array
{
return [
\Idkwhoami\FluxTables\Concretes\Filter\DeletedFilter::make('deleted')
->label('Deletion State')
->default(\Idkwhoami\FluxTables\Enums\DeletionState::WithoutDeleted->value),
\Idkwhoami\FluxTables\Concretes\Filter\ValuePresentFilter::make('verified')
->label('Email Verified')
->property('email_verified_at')
->description('Show only verified users')
->pillContent('Verified only'),
\Idkwhoami\FluxTables\Concretes\Filter\BooleanFilter::make('banned')
->label('Banned Status')
->property('banned'),
\Idkwhoami\FluxTables\Concretes\Filter\DateRangeFilter::make('created')
->label('Registration Date')
->property('created_at'),
\Idkwhoami\FluxTables\Concretes\Filter\SelectFilter::make('role')
->label('User Role')
->property('role')
->options([
'admin' => 'Administrator',
'moderator' => 'Moderator',
'user' => 'Regular User',
]),
];
}
// Required by HasSorting trait
public function defaultSortingColumn(): string
{
return 'created_at';
}
public function defaultSortingDirection(): string
{
return 'desc';
}
// Required by HasToggleableColumns trait
public function defaultToggledColumns(): array
{
return ['name', 'email', 'created_at', 'actions']; // Default visible columns
}
// Required by HasDynamicPagination trait
public function defaultPaginationValue(): int
{
return 15;
}
public function getPaginationOptions(): array
{
return [10, 15, 25, 50, 100];
}
}
use Livewire\Livewire;
public function boot(): void
{
Livewire::component('custom-user-table', CustomUserTable::class);
}
bash
php artisan flux-tables:install