From 044f0afc1eb5535e16dacb4b694a05101c52c080 Mon Sep 17 00:00:00 2001 From: qiang Date: Thu, 29 Aug 2024 19:06:41 +0800 Subject: [PATCH] fix(components): [select] switching single/multiple generates an error (#18030) closed #17890 --- .../components/select/__tests__/select.test.ts | 10 ++++++++++ packages/components/select/src/useSelect.ts | 18 ++++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/components/select/__tests__/select.test.ts b/packages/components/select/__tests__/select.test.ts index bc32a82ef9..b62545e778 100644 --- a/packages/components/select/__tests__/select.test.ts +++ b/packages/components/select/__tests__/select.test.ts @@ -2741,4 +2741,14 @@ describe('Select', () => { await wrapper.find(`.${WRAPPER_CLASS_NAME}`).trigger('click') expect(handleClick).toHaveBeenCalledOnce() }) + + test('should be run normally when switching multiple', async () => { + wrapper = getSelectVm({ multiple: false }) + const vm = wrapper.vm as any + + await (vm.value = undefined) + await (vm.multiple = true) + await (vm.multiple = false) + expect(vm.value).toBe(undefined) + }) }) diff --git a/packages/components/select/src/useSelect.ts b/packages/components/select/src/useSelect.ts index 6183f27500..c34ec40f07 100644 --- a/packages/components/select/src/useSelect.ts +++ b/packages/components/select/src/useSelect.ts @@ -66,7 +66,7 @@ export const useSelect = (props: ISelectProps, emit) => { cachedOptions: new Map(), disabledOptions: new Map(), optionValues: [] as any[], // sorted value of options - selected: props.multiple ? [] : ({} as any), + selected: [] as any[], selectionWidth: 0, calculatorWidth: 0, collapseItemWidth: 0, @@ -406,7 +406,7 @@ export const useSelect = (props: ISelectProps, emit) => { : props.modelValue const option = getOption(value) states.selectedLabel = option.currentLabel - states.selected = option + states.selected = [option] return } else { states.selectedLabel = '' @@ -456,17 +456,11 @@ export const useSelect = (props: ISelectProps, emit) => { } const updateHoveringIndex = () => { - if (!props.multiple) { - states.hoveringIndex = optionsArray.value.findIndex((item) => { - return getValueKey(item) === getValueKey(states.selected) - }) - } else { - states.hoveringIndex = optionsArray.value.findIndex((item) => - states.selected.some( - (selected) => getValueKey(selected) === getValueKey(item) - ) + states.hoveringIndex = optionsArray.value.findIndex((item) => + states.selected.some( + (selected) => getValueKey(selected) === getValueKey(item) ) - } + ) } const resetSelectionWidth = () => {