From 5af1fe398ddfc8d5c04b649a1d94d4e11aa7ac78 Mon Sep 17 00:00:00 2001 From: hangboss1761 <1240123692@qq.com> Date: Wed, 10 Aug 2022 18:34:54 +0800 Subject: [PATCH] fix(comp:tree-select): do not deselect when reclicked --- .../src/composables/useSelectedState.ts | 3 +++ .../tree-select/src/content/Content.tsx | 6 +++-- .../components/tree/__tests__/tree.spec.ts | 22 ------------------- .../tree/src/composables/useSelectable.ts | 2 +- packages/components/tree/src/types.ts | 4 ---- 5 files changed, 8 insertions(+), 29 deletions(-) diff --git a/packages/components/tree-select/src/composables/useSelectedState.ts b/packages/components/tree-select/src/composables/useSelectedState.ts index 6cd17f22a..e6c9f859e 100644 --- a/packages/components/tree-select/src/composables/useSelectedState.ts +++ b/packages/components/tree-select/src/composables/useSelectedState.ts @@ -47,6 +47,9 @@ export function useSelectedState( } const changeSelected = (value: VKey[]) => { + if (!props.multiple && !value.length) { + return + } setValue(value) } diff --git a/packages/components/tree-select/src/content/Content.tsx b/packages/components/tree-select/src/content/Content.tsx index 5ad47f749..11bf5ec85 100644 --- a/packages/components/tree-select/src/content/Content.tsx +++ b/packages/components/tree-select/src/content/Content.tsx @@ -74,7 +74,10 @@ export default defineComponent({ const handleSelect = (selected: boolean, node: TreeSelectNode) => { const { onSelect } = props - callEmit(onSelect, selected, node) + + if (!props.multiple && selectedValue.value?.[0] !== node.key) { + callEmit(onSelect, selected, node) + } handleNodeClick() } @@ -196,7 +199,6 @@ export default defineComponent({ virtual={virtual} selectable={multiple ? 'multiple' : true} selectedKeys={selectedValue.value} - selectedClearable={false} searchValue={searchFn !== false ? inputValue.value : undefined} searchFn={isFunction(searchFn) ? searchFn : undefined} showLine={showLine} diff --git a/packages/components/tree/__tests__/tree.spec.ts b/packages/components/tree/__tests__/tree.spec.ts index 11a8c10c4..2ba8cf4c6 100644 --- a/packages/components/tree/__tests__/tree.spec.ts +++ b/packages/components/tree/__tests__/tree.spec.ts @@ -462,28 +462,6 @@ describe('Tree', () => { expect(allNodes[1].classes()).toContain('ix-tree-node-selected') }) - test('selectedClearable work', async () => { - const onUpdateSelectedKeys = vi.fn() - const wrapper = TreeMount({ - props: { - dataSource: simpleDataSource, - selectable: true, - selectedKeys: ['0'], - checkable: false, - 'onUpdate:selectedKeys': onUpdateSelectedKeys, - selectedClearable: true, - }, - }) - - const allNodes = wrapper.findAll('.ix-tree-node') - await allNodes[0].find('.ix-tree-node-content').trigger('click') - expect(onUpdateSelectedKeys).toBeCalledWith([]) - - await wrapper.setProps({ selectedClearable: false, selectedKeys: ['0'] }) - await allNodes[0].find('.ix-tree-node-content').trigger('click') - expect(onUpdateSelectedKeys).toBeCalledWith(['0']) - }) - test('blocked work', async () => { const wrapper = TreeMount({ props: { blocked: true }, diff --git a/packages/components/tree/src/composables/useSelectable.ts b/packages/components/tree/src/composables/useSelectable.ts index 552e16307..d8bd767ea 100644 --- a/packages/components/tree/src/composables/useSelectable.ts +++ b/packages/components/tree/src/composables/useSelectable.ts @@ -52,7 +52,7 @@ export function useSelectable(props: TreeProps, mergedNodeMap: ComputedRef, default: true, }, - selectedClearable: { - type: Boolean, - default: true, - }, showLine: { type: Boolean, default: undefined,