fix(components): [tree-select] always focus when using filters (#15768)

This commit is contained in:
yujinpan
2024-02-04 17:58:48 +08:00
committed by GitHub
parent f379af8aab
commit b6987e9705
2 changed files with 39 additions and 0 deletions

View File

@@ -699,4 +699,40 @@ describe('TreeSelect.vue', () => {
select.vm.handleOptionSelect(select.vm.states.options.get(2))
expect(spy2).toBeCalledWith(2)
})
test('always focus when using filters', async () => {
const { tree, select } = createComponent({
props: {
filterable: true,
showCheckbox: true,
checkOnClickNode: true,
data: [
{ value: 1, label: 1 },
{ value: 2, label: 2 },
],
},
})
await nextTick()
const input = select.find('input')
// mock browser blur events
tree.element.addEventListener('click', () => input.element.blur(), true)
input.element.focus()
expect(document.activeElement).toBe(input.element)
// normal click
await tree.find('.el-tree-node__content').trigger('click')
expect(select.vm.modelValue).toBe(1)
expect(document.activeElement).toBe(input.element)
// checkbox click
await tree
.findAll('.el-tree-node__content .el-checkbox')[1]
.trigger('click')
expect(select.vm.modelValue).toBe(2)
expect(document.activeElement).toBe(input.element)
})
})

View File

@@ -176,6 +176,7 @@ export const useTree = (
} else if (props.expandOnClickNode) {
e.proxy.handleExpandIconClick()
}
select.value?.focus()
},
onCheck: (data, params) => {
// ignore when no checkbox, like only `checkOnClickNode` is true
@@ -255,6 +256,8 @@ export const useTree = (
halfCheckedNodes: tree.value.getHalfCheckedNodes(),
})
})
select.value?.focus()
},
// else