Files
filamentphp-filament/tests/src/Fixtures/Livewire/UsersTable.php
T

98 lines
4.0 KiB
PHP

<?php
namespace Filament\Tests\Fixtures\Livewire;
use Filament\Actions\Concerns\InteractsWithActions;
use Filament\Actions\Contracts\HasActions;
use Filament\Schemas\Concerns\InteractsWithSchemas;
use Filament\Schemas\Contracts\HasSchemas;
use Filament\Tables;
use Filament\Tables\Table;
use Filament\Tests\Fixtures\Models\User;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class UsersTable extends Component implements HasActions, HasSchemas, Tables\Contracts\HasTable
{
use InteractsWithActions;
use InteractsWithSchemas;
use Tables\Concerns\InteractsWithTable;
public function table(Table $table): Table
{
return $table
->query(User::query())
->groups(fn () => [
Tables\Grouping\Group::make('name'),
Tables\Grouping\Group::make('profile.bio'),
Tables\Grouping\Group::make('profile.company.name'),
Tables\Grouping\Group::make('profile.setting.theme'),
Tables\Grouping\Group::make('image.url'),
Tables\Grouping\Group::make('setting.theme'),
Tables\Grouping\Group::make('setting.language.name'),
Tables\Grouping\Group::make('setting.languageWithTrashed.name'),
Tables\Grouping\Group::make('company.name'),
Tables\Grouping\Group::make('publishedPost.title'),
])
->columns([
Tables\Columns\TextColumn::make('name')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('email')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('profile.bio')
->label('Profile Bio')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('profile.company.name')
->label('Company')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('profile.setting.theme')
->label('Theme')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('profile.setting.language')
->label('Language')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('image.url')
->label('Image URL')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('setting.theme')
->label('Setting Theme (HasOneThrough)')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('setting.language')
->label('Setting Language (HasOneThrough)')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('setting.language.name')
->label('Setting Language Name (HasOneThrough -> BelongsTo)')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('setting.languageWithTrashed.name')
->label('Setting Language With Trashed (HasOneThrough -> BelongsTo with withTrashed)')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('company.name')
->label('Company (BelongsToThrough)')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('publishedPost.title')
->label('Published Post Title (HasOne with where())')
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('posts_count')
->counts('posts'),
]);
}
public function render(): View
{
return view('livewire.table');
}
}