Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/toggle-all-columns-visible-noop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/table-core': patch
---

Skip `onColumnVisibilityChange` when `table.toggleAllColumnsVisible()` is called with the visibility state every leaf column is already in. This matches the no-op guards `table.toggleAllRowsExpanded()` already has.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: table_getIsAllColumnsVisible
function table_getIsAllColumnsVisible<TFeatures, TData>(table): boolean;
```

Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:360](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L360)
Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:373](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L373)

Checks whether every leaf column is currently visible.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: table_getIsSomeColumnsVisible
function table_getIsSomeColumnsVisible<TFeatures, TData>(table): boolean;
```

Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:382](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L382)
Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:395](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L395)

Checks whether at least one leaf column is currently visible.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: table_getToggleAllColumnsVisibilityHandler
function table_getToggleAllColumnsVisibilityHandler<TFeatures, TData>(table): (e) => void;
```

Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:404](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L404)
Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:417](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L417)

Creates a checkbox-style handler that shows or hides all columns.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@ title: table_toggleAllColumnsVisible
function table_toggleAllColumnsVisible<TFeatures, TData>(table, value?): void;
```

Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:333](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L333)
Defined in: [features/column-visibility/columnVisibilityFeature.utils.ts:336](https://github.com/TanStack/table/blob/main/packages/table-core/src/features/column-visibility/columnVisibilityFeature.utils.ts#L336)

Shows or hides every hideable leaf column.

Columns that cannot hide stay visible when toggling all columns off.

The call is a no-op (no `onColumnVisibilityChange`) when every leaf column is
already in the requested visibility state.

## Type Parameters

### TFeatures
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,9 @@ export function table_resetColumnVisibility<
*
* Columns that cannot hide stay visible when toggling all columns off.
*
* The call is a no-op (no `onColumnVisibilityChange`) when every leaf column is
* already in the requested visibility state.
*
* @example
* ```ts
* table_toggleAllColumnsVisible(table)
Expand All @@ -343,6 +346,16 @@ export function table_toggleAllColumnsVisible<
visibility[column.id] = !value ? !column_getCanHide(column) : value
}

if (
leafColumns.every(
(column) =>
visibility[column.id] ===
callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),
)
) {
return
}

table_setColumnVisibility(table, visibility)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,11 @@ describe('columnVisibilityFeature.utils', () => {
const onColumnVisibilityChange = vi.fn()
const table = makeTable(1, {
onColumnVisibilityChange,
initialState: {
columnVisibility: {
firstName: false,
},
},
})

table_toggleAllColumnsVisible(table, true)
Expand Down Expand Up @@ -389,6 +394,36 @@ describe('columnVisibilityFeature.utils', () => {
allColumnIds.map((id) => [id, false]),
)
})

it('should be a no-op when all columns are already visible', () => {
const onColumnVisibilityChange = vi.fn()
const table = makeTable(1, {
onColumnVisibilityChange,
})

table_toggleAllColumnsVisible(table, true)

expect(onColumnVisibilityChange).not.toHaveBeenCalled()
})

it('should be a no-op when all hideable columns are already hidden', () => {
const onColumnVisibilityChange = vi.fn()
const allColumnIds = makeTable(1)
.getAllLeafColumns()
.map((col) => col.id)
const table = makeTable(1, {
onColumnVisibilityChange,
initialState: {
columnVisibility: Object.fromEntries(
allColumnIds.map((id) => [id, false]),
),
},
})

table_toggleAllColumnsVisible(table, false)

expect(onColumnVisibilityChange).not.toHaveBeenCalled()
})
})

describe('table_getIsAllColumnsVisible', () => {
Expand Down Expand Up @@ -454,6 +489,11 @@ describe('columnVisibilityFeature.utils', () => {
const onColumnVisibilityChange = vi.fn()
const table = makeTable(1, {
onColumnVisibilityChange,
initialState: {
columnVisibility: {
firstName: false,
},
},
})
const handler = table_getToggleAllColumnsVisibilityHandler(table)

Expand Down