From f884dadb0234905c8b4a56db7624eea9c9312d8a Mon Sep 17 00:00:00 2001 From: sundarshahi Date: Fri, 30 Oct 2026 00:52:41 +0545 Subject: [PATCH 1/4] fix(table-core): add header.getIsPinned() for group headers split across pinned regions A group column split across pinned regions renders one header per region, but header.column.getIsPinned() reports a single region for all of them, so the group header on the end side read 'start'. header.getIsPinned() reads the region shared by the header's own leaf columns (false when mixed). The column-pinning-split example now uses it for its pin buttons. Fixes #4906 --- .changeset/header-get-is-pinned.md | 5 ++ .../react/column-pinning-split/src/main.tsx | 18 +++--- .../column-pinning/columnPinningFeature.ts | 9 +++ .../columnPinningFeature.types.ts | 10 ++++ .../columnPinningFeature.utils.ts | 33 ++++++++++ packages/table-core/src/types/Header.ts | 2 + .../columnPinningFeature.utils.test.ts | 60 +++++++++++++++++++ 7 files changed, 128 insertions(+), 9 deletions(-) create mode 100644 .changeset/header-get-is-pinned.md diff --git a/.changeset/header-get-is-pinned.md b/.changeset/header-get-is-pinned.md new file mode 100644 index 0000000000..2d08d9968e --- /dev/null +++ b/.changeset/header-get-is-pinned.md @@ -0,0 +1,5 @@ +--- +'@tanstack/table-core': minor +--- + +Add `header.getIsPinned()`, which reads the pinned region of a header's own leaf columns. A group column split across pinned regions renders one header per region, and `header.column.getIsPinned()` reported the same region for all of them (#4906). diff --git a/examples/react/column-pinning-split/src/main.tsx b/examples/react/column-pinning-split/src/main.tsx index 747de17796..70a6b33651 100644 --- a/examples/react/column-pinning-split/src/main.tsx +++ b/examples/react/column-pinning-split/src/main.tsx @@ -164,7 +164,7 @@ function App() { {!header.isPlaceholder && header.column.getCanPin() && (
- {header.column.getIsPinned() !== 'start' ? ( + {header.getIsPinned() !== 'start' ? ( ) : null} - {header.column.getIsPinned() ? ( + {header.getIsPinned() ? ( ) : null} - {header.column.getIsPinned() !== 'end' ? ( + {header.getIsPinned() !== 'end' ? (
{!header.isPlaceholder && header.column.getCanPin() && (
- {header.column.getIsPinned() !== 'start' ? ( + {header.getIsPinned() !== 'start' ? ( ) : null} - {header.column.getIsPinned() ? ( + {header.getIsPinned() ? ( ) : null} - {header.column.getIsPinned() !== 'end' ? ( + {header.getIsPinned() !== 'end' ? (
{!header.isPlaceholder && header.column.getCanPin() && (
- {header.column.getIsPinned() !== 'start' ? ( + {header.getIsPinned() !== 'start' ? ( ) : null} - {header.column.getIsPinned() ? ( + {header.getIsPinned() ? ( ) : null} - {header.column.getIsPinned() !== 'end' ? ( + {header.getIsPinned() !== 'end' ? (