From 82ee0994d2f16970f627300f3b82f64de7755c8d Mon Sep 17 00:00:00 2001 From: Joel 'Aaron' Cohen Date: Mon, 4 Nov 2024 16:54:31 -0500 Subject: [PATCH 1/5] Add failing test showing row is selected with no selectable subRows --- .../table-core/tests/RowSelection.test.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/table-core/tests/RowSelection.test.ts b/packages/table-core/tests/RowSelection.test.ts index 38bdfb7dcb..fce795af08 100644 --- a/packages/table-core/tests/RowSelection.test.ts +++ b/packages/table-core/tests/RowSelection.test.ts @@ -201,6 +201,34 @@ describe('RowSelection', () => { expect(result).toEqual(false) }) + it('should return false if no sub-rows are selectable', () => { + const data = makeData(3, 2) + const columns = generateColumns(data) + + const table = createTable({ + enableRowSelection: false, + onStateChange() {}, + renderFallbackValue: '', + data, + getSubRows: row => row.subRows, + state: { + rowSelection: {}, + }, + columns, + getCoreRowModel: getCoreRowModel(), + }) + + const firstRow = table.getCoreRowModel().rows[0] + + const result = RowSelection.isSubRowSelected( + firstRow, + table.getState().rowSelection, + table + ) + + expect(result).toEqual(false) + }) + it('should return some if some sub-rows are selected', () => { const data = makeData(3, 2) const columns = generateColumns(data) From 2ae44a7aa27788ce76d312d3b292e2ff7509051a Mon Sep 17 00:00:00 2001 From: Joel 'Aaron' Cohen Date: Mon, 4 Nov 2024 16:55:10 -0500 Subject: [PATCH 2/5] Ensure isSubRowSelected returns false if no subRows are selectable --- packages/table-core/src/features/RowSelection.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/table-core/src/features/RowSelection.ts b/packages/table-core/src/features/RowSelection.ts index 90166823aa..e591951d70 100644 --- a/packages/table-core/src/features/RowSelection.ts +++ b/packages/table-core/src/features/RowSelection.ts @@ -635,6 +635,7 @@ export function isSubRowSelected( let allChildrenSelected = true let someSelected = false + let someSelectable = false row.subRows.forEach(subRow => { // Bail out early if we know both of these @@ -643,6 +644,7 @@ export function isSubRowSelected( } if (subRow.getCanSelect()) { + someSelectable = true if (isRowSelected(subRow, selection)) { someSelected = true } else { @@ -664,5 +666,7 @@ export function isSubRowSelected( } }) + if (!someSelectable) return false + return allChildrenSelected ? 'all' : someSelected ? 'some' : false } From 7e70cfdcbf0296ac9fc4261df8edb8a8422a92d5 Mon Sep 17 00:00:00 2001 From: Joel 'Aaron' Cohen Date: Tue, 5 Nov 2024 12:47:14 -0500 Subject: [PATCH 3/5] Add failing test for a grandchild being selectable while all children aren't --- .../table-core/tests/RowSelection.test.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/table-core/tests/RowSelection.test.ts b/packages/table-core/tests/RowSelection.test.ts index fce795af08..3050acb29b 100644 --- a/packages/table-core/tests/RowSelection.test.ts +++ b/packages/table-core/tests/RowSelection.test.ts @@ -229,6 +229,34 @@ describe('RowSelection', () => { expect(result).toEqual(false) }) + it('should return some if no children are selectable, but a grand-child is and is selected', () => { + const data = makeData(3, 2, 2) + const columns = generateColumns(data) + + const table = createTable({ + enableRowSelection: (row) => row.id === '0.0.1', + onStateChange() {}, + renderFallbackValue: '', + data, + getSubRows: row => row.subRows, + state: { + rowSelection: { '0.0.1': true }, + }, + columns, + getCoreRowModel: getCoreRowModel(), + }) + + const firstRow = table.getCoreRowModel().rows[0] + + const result = RowSelection.isSubRowSelected( + firstRow, + table.getState().rowSelection, + table + ) + + expect(result).toEqual('some') + }) + it('should return some if some sub-rows are selected', () => { const data = makeData(3, 2) const columns = generateColumns(data) From 220d8d37b10c22600044579103068cbc589722d2 Mon Sep 17 00:00:00 2001 From: Joel 'Aaron' Cohen Date: Tue, 5 Nov 2024 12:50:28 -0500 Subject: [PATCH 4/5] Ensure isSubRowSelected returns true when all children aren't selectable but a grandchild is --- packages/table-core/src/features/RowSelection.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/table-core/src/features/RowSelection.ts b/packages/table-core/src/features/RowSelection.ts index e591951d70..e5a91d392e 100644 --- a/packages/table-core/src/features/RowSelection.ts +++ b/packages/table-core/src/features/RowSelection.ts @@ -657,9 +657,11 @@ export function isSubRowSelected( const subRowChildrenSelected = isSubRowSelected(subRow, selection, table) if (subRowChildrenSelected === 'all') { someSelected = true + someSelectable = true } else if (subRowChildrenSelected === 'some') { someSelected = true allChildrenSelected = false + someSelectable = true } else { allChildrenSelected = false } From d87e9bcc4e2e9ed5f008ce704dcb449c73bc1995 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 01:29:02 +0000 Subject: [PATCH 5/5] ci: apply automated fixes --- packages/table-core/tests/RowSelection.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/table-core/tests/RowSelection.test.ts b/packages/table-core/tests/RowSelection.test.ts index 3050acb29b..78c6579799 100644 --- a/packages/table-core/tests/RowSelection.test.ts +++ b/packages/table-core/tests/RowSelection.test.ts @@ -234,7 +234,7 @@ describe('RowSelection', () => { const columns = generateColumns(data) const table = createTable({ - enableRowSelection: (row) => row.id === '0.0.1', + enableRowSelection: row => row.id === '0.0.1', onStateChange() {}, renderFallbackValue: '', data,