diff --git a/packages/components/table/__tests__/row.events.test.tsx b/packages/components/table/__tests__/row.events.test.tsx
index 5ce48869e2..c5a111b118 100644
--- a/packages/components/table/__tests__/row.events.test.tsx
+++ b/packages/components/table/__tests__/row.events.test.tsx
@@ -96,3 +96,28 @@ TABLES.forEach((TTable) => {
});
});
});
+
+describe('PrimaryTable row selection', () => {
+ it('select all skips rows disabled by checkProps', () => {
+ const fn = vi.fn();
+ const columns = [
+ {
+ colKey: 'row-select',
+ type: 'multiple' as const,
+ checkProps: ({ row }) => ({ disabled: row.index === 101 }),
+ },
+ ...SIMPLE_COLUMNS,
+ ];
+
+ const { container } = render(
+ ,
+ );
+
+ fireEvent.click(container.querySelector('thead .t-checkbox'));
+
+ expect(fn).toHaveBeenCalledWith(
+ [100, 102, 103, 104],
+ expect.objectContaining({ currentRowKey: 'CHECK_ALL_BOX', type: 'check' }),
+ );
+ });
+});
diff --git a/packages/components/table/hooks/useRowSelect.tsx b/packages/components/table/hooks/useRowSelect.tsx
index 6519ed34a2..f966233cb7 100644
--- a/packages/components/table/hooks/useRowSelect.tsx
+++ b/packages/components/table/hooks/useRowSelect.tsx
@@ -2,7 +2,6 @@
import React, { useEffect, useState, MouseEvent, useMemo } from 'react';
import { intersection, get, isFunction } from 'lodash-es';
-import { isRowSelectedDisabled } from '@tdesign/common-js/table/utils';
import log from '@tdesign/common-js/log/index';
import useControlled from '../../hooks/useControlled';
import {
@@ -31,7 +30,8 @@ export default function useRowSelect(
const [tSelectedRowKeys, setTSelectedRowKeys] = useControlled(props, 'selectedRowKeys', props.onSelectChange, {
defaultSelectedRowKeys: props.defaultSelectedRowKeys || [],
});
- const selectColumn = columns.find(({ type }) => ['multiple', 'single'].includes(type));
+ const selectColumnIndex = columns.findIndex(({ type }) => ['multiple', 'single'].includes(type));
+ const selectColumn = columns[selectColumnIndex];
const canSelectedRows = useMemo(() => {
const currentData = reserveSelectedRowOnPaginate ? data : currentPaginateData;
@@ -78,7 +78,8 @@ export default function useRowSelect(
);
function isDisabled(row: Record, rowIndex: number): boolean {
- return isRowSelectedDisabled(selectColumn, row, rowIndex);
+ if (!selectColumn) return false;
+ return getRowSelectDisabledData({ row, rowIndex, col: selectColumn, colIndex: selectColumnIndex }).disabled;
}
function getSelectedHeader() {
@@ -109,7 +110,7 @@ export default function useRowSelect(
const disabled: boolean = typeof col.disabled === 'function' ? col.disabled({ row, rowIndex }) : col.disabled;
const checkProps = isFunction(col.checkProps) ? col.checkProps({ row, rowIndex }) : col.checkProps;
return {
- disabled: disabled || checkProps?.disabled,
+ disabled: Boolean(disabled || checkProps?.disabled),
checkProps,
};
}