diff --git a/packages/tables/src/Concerns/CanSortRecords.php b/packages/tables/src/Concerns/CanSortRecords.php index 0704145..6aa3ddc 100644 --- a/packages/tables/src/Concerns/CanSortRecords.php +++ b/packages/tables/src/Concerns/CanSortRecords.php @@ -89,7 +89,8 @@ trait CanSortRecords if ( $tableSortColumn && - $column = $this->getTable()->getSortableVisibleColumn($tableSortColumn) + ($column = $this->getTable()->getSortableVisibleColumn($tableSortColumn)) && + (! $column->isToggledHidden()) ) { $sortDirection = $this->getTableSortDirection() === 'desc' ? 'desc' : 'asc'; diff --git a/tests/src/Fixtures/Livewire/UsersTable.php b/tests/src/Fixtures/Livewire/UsersTable.php index 63eda5e..c2b0bf5 100644 --- a/tests/src/Fixtures/Livewire/UsersTable.php +++ b/tests/src/Fixtures/Livewire/UsersTable.php @@ -86,7 +86,9 @@ class UsersTable extends Component implements HasActions, HasSchemas, Tables\Con ->sortable() ->searchable(), Tables\Columns\TextColumn::make('posts_count') - ->counts('posts'), + ->counts('posts') + ->sortable() + ->toggleable(), ]); } diff --git a/tests/src/Tables/ColumnTest.php b/tests/src/Tables/ColumnTest.php index 198f971..f158211 100644 --- a/tests/src/Tables/ColumnTest.php +++ b/tests/src/Tables/ColumnTest.php @@ -239,6 +239,27 @@ describe('rendering and sorting', function (): void { ->sortTable('author.json.bar.baz', 'desc') ->assertCanSeeTableRecords($sortedDesc, inOrder: true); }); + + it('ignores the sort of a `counts()` column while it is toggled hidden', function (): void { + $users = collect([3, 1, 2])->map( + fn (int $postsCount): User => User::factory() + ->has(Post::factory()->count($postsCount)) + ->create(), + ); + + $component = livewire(UsersTable::class) + ->sortTable('posts_count') + ->assertCanSeeTableRecords([$users[1], $users[2], $users[0]], inOrder: true) + ->toggleAllTableColumns(false); + + expect($component->instance()->getFilteredSortedTableQuery()->toSql()) + ->not->toContain('posts_count'); + + $component + ->assertCanSeeTableRecords($users, inOrder: true) + ->toggleAllTableColumns() + ->assertCanSeeTableRecords([$users[1], $users[2], $users[0]], inOrder: true); + }); }); describe('searching', function (): void {