From 1300c134d11132455f5e259b98fc5bf9f7d17aa4 Mon Sep 17 00:00:00 2001 From: Liuzj <530604689@qq.com> Date: Tue, 3 Jan 2023 14:27:35 +0800 Subject: [PATCH] fix(comp:table): can't reverse select, when multiple of selectable is false (#1383) --- .../__snapshots__/datePanel.spec.ts.snap | 4 ++-- .../table/src/main/body/BodyCell.tsx | 21 ++++++++++++++----- .../transfer/__tests__/proTransfer.spec.ts | 20 +++++++++--------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap b/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap index 6729961b1..f21faebd6 100644 --- a/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap +++ b/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap @@ -632,12 +632,12 @@ exports[`DatePanel > year type disabledDate work 1`] = ` - +
2022
- +
2023
diff --git a/packages/components/table/src/main/body/BodyCell.tsx b/packages/components/table/src/main/body/BodyCell.tsx index f4ae2be85..28b516ad0 100644 --- a/packages/components/table/src/main/body/BodyCell.tsx +++ b/packages/components/table/src/main/body/BodyCell.tsx @@ -214,7 +214,7 @@ function renderSelectableChildren( mergedPagination: ComputedRef, ) { const { selected: checked, indeterminate, disabled, isHover, handleSelect: onChange } = props - const { showIndex, multiple, customCell } = selectable.value! + const { showIndex, multiple, customCell, trigger } = selectable.value! if (!checked && !isHover && showIndex) { return renderIndexableChildren(props, slots, config.columnIndexable as TableColumnIndexable, mergedPagination) @@ -222,11 +222,22 @@ function renderSelectableChildren( const customRender = isString(customCell) ? slots[customCell] : customCell if (multiple) { - const checkboxProps = { checked, disabled, indeterminate, onChange, onClick } - return customRender ? customRender(checkboxProps) : + // 存在trigger时将事件代理到bodyCell进行处理 + const exitTriggerCheckboxProps = { checked, disabled, indeterminate } + const checkboxProps = { ...exitTriggerCheckboxProps, onChange, onClick } + return customRender ? ( + customRender(trigger ? exitTriggerCheckboxProps : checkboxProps) + ) : ( + + ) } else { - const radioProps = { checked, disabled, onChange, onClick } - return customRender ? customRender(radioProps) : + const exitTriggerRadioProps = { checked, disabled } + const radioProps = { ...exitTriggerRadioProps, onChange, onClick } + return customRender ? ( + customRender(radioProps) + ) : ( + + ) } } diff --git a/packages/pro/transfer/__tests__/proTransfer.spec.ts b/packages/pro/transfer/__tests__/proTransfer.spec.ts index f6b5bbd87..906e2558f 100644 --- a/packages/pro/transfer/__tests__/proTransfer.spec.ts +++ b/packages/pro/transfer/__tests__/proTransfer.spec.ts @@ -143,19 +143,19 @@ describe('ProTransfer', () => { .findAll('tr:not(.ix-table-measure-row)')[0] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await sourceTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[1] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await sourceTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[2] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await appendTrigger.trigger('click') expect(onChange).toBeCalledWith([0, 1, 2, 3, 4, 5, 7], [0, 1, 2, 3, 4]) @@ -165,19 +165,19 @@ describe('ProTransfer', () => { .findAll('tr:not(.ix-table-measure-row)')[0] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await targetTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[1] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await targetTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[2] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await removeTrigger.trigger('click') expect(onChange).toBeCalledWith([1, 3, 4], [0, 1, 2, 3, 4]) }) @@ -219,25 +219,25 @@ describe('ProTransfer', () => { .findAll('tr:not(.ix-table-measure-row)')[0] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await sourceTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[1] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await sourceTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[2] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') await sourceTable .find('tbody') .findAll('tr:not(.ix-table-measure-row)')[3] .find('.ix-checkbox') .find('input') - .setValue(true) + .trigger('click') const [, targetTable] = wrapper.findAll('.ix-table')