From d8e088dc4ed9758f7406cb0156ce021ee55c23c4 Mon Sep 17 00:00:00 2001 From: Javey Date: Mon, 29 Jan 2024 17:54:06 +0800 Subject: [PATCH] fix(Cascader): value is uncorrect on select the second value, close #957 --- components/cascader/index.spec.ts | 41 +++++++++++++++++++++++++++++++ components/cascader/useValue.ts | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/components/cascader/index.spec.ts b/components/cascader/index.spec.ts index 419ae761b..52e3df995 100644 --- a/components/cascader/index.spec.ts +++ b/components/cascader/index.spec.ts @@ -261,4 +261,45 @@ describe('Cascader', () => { expect(element.innerHTML).to.matchSnapshot(); expect(instance.get('value')).to.eql(['beijing', 'haidian']); }); + + it('should select correct value', async () => { + class Demo extends Component { + static template = ` + const {Cascader} = this; + + `; + static defaults() { + return { + value: ['beijing', 'haidian'], + data: [ + { + value: 'beijing', + label: '北京', + children: [ + { + value: 'haidian', + label: '海淀区' + }, + ] + }, + { + value: 'hunan', + label: '湖南', + }, + ] + } + } + private Cascader = Cascader; + } + + const [instance, element] = mount(Demo); + dispatchEvent(element, 'click'); + await wait(); + + const [dropdown1, dropdown2] = getElements('.k-cascader-menu'); + const [item1, item2] = dropdown1.querySelectorAll(':scope > .k-dropdown-item'); + dispatchEvent(item2, 'click'); + await wait(); + expect(instance.get('value')).to.eql(['hunan']); + }); }); diff --git a/components/cascader/useValue.ts b/components/cascader/useValue.ts index e6ab8cc97..e18c6ecbe 100644 --- a/components/cascader/useValue.ts +++ b/components/cascader/useValue.ts @@ -80,7 +80,7 @@ export function useValue() { // maybe the showedValue has the leaf value when we set it on show menu, // if we select by clicking, the showedValue has not the leaf value, // no matter which case, we set the last value by level - const newValue = showedValue.value.slice(0); + const newValue = showedValue.value.slice(0, level); newValue[level] = value; setValue(newValue); }