fix(Picker): correct v-model when emit confirm event (#11194)

This commit is contained in:
neverland 2022-10-29 21:55:00 +08:00 committed by GitHub
parent 73b4210118
commit 5d98d5a5d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 12 deletions

View File

@ -17,7 +17,7 @@ test('should emit confirm event correctly', async () => {
}); });
await later(); await later();
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0]).toEqual( expect(wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0]).toEqual(
{ {
selectedOptions: [ selectedOptions: [
@ -90,7 +90,7 @@ test('should render with max-date correctly', async () => {
}); });
await later(); await later();
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect( expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).toEqual(['2010', '01', '10']); ).toEqual(['2010', '01', '10']);
@ -115,7 +115,7 @@ test('should render with min-date correctly', async () => {
}); });
await later(); await later();
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect( expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).toEqual(['2000', '10', '10']); ).toEqual(['2000', '10', '10']);
@ -193,7 +193,7 @@ test('should update value correctly when dynamically change min-date', async ()
minDate: new Date(2020, 11, 20), minDate: new Date(2020, 11, 20),
}); });
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect( expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).toEqual(['2020', '12', '20']); ).toEqual(['2020', '12', '20']);

View File

@ -2,6 +2,7 @@ import {
ref, ref,
watch, watch,
computed, computed,
nextTick,
defineComponent, defineComponent,
type PropType, type PropType,
type ExtractPropTypes, type ExtractPropTypes,
@ -162,7 +163,13 @@ export default defineComponent({
const confirm = () => { const confirm = () => {
children.forEach((child) => child.stopMomentum()); children.forEach((child) => child.stopMomentum());
const params = getEventParams(); const params = getEventParams();
// wait nextTick to ensure the model value is update to date
// when confirm event is emitted
nextTick(() => {
emit('confirm', params); emit('confirm', params);
});
return params; return params;
}; };

View File

@ -48,14 +48,14 @@ const cascadeColumns = [
}, },
]; ];
test('should emit confirm event for cascade picker correctly', () => { test('should emit confirm event for cascade picker correctly', async () => {
const wrapper = mount(Picker, { const wrapper = mount(Picker, {
props: { props: {
columns: cascadeColumns, columns: cascadeColumns,
}, },
}); });
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
const params = wrapper.emitted<PickerConfirmEventParams[]>('confirm')?.[0]; const params = wrapper.emitted<PickerConfirmEventParams[]>('confirm')?.[0];
expect(params?.[0].selectedValues).toEqual(['A1', 'B1', 'C1']); expect(params?.[0].selectedValues).toEqual(['A1', 'B1', 'C1']);

View File

@ -10,7 +10,7 @@ const simpleColumn = [
{ text: '1995', value: '1995' }, { text: '1995', value: '1995' },
]; ];
test('should emit confirm event after clicking the confirm button', () => { test('should emit confirm event after clicking the confirm button', async () => {
const wrapper = mount(Picker, { const wrapper = mount(Picker, {
props: { props: {
showToolbar: true, showToolbar: true,
@ -18,7 +18,7 @@ test('should emit confirm event after clicking the confirm button', () => {
}, },
}); });
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted('confirm')![0]).toEqual([ expect(wrapper.emitted('confirm')![0]).toEqual([
{ {
selectedOptions: [{ text: '1990', value: '1990' }], selectedOptions: [{ text: '1990', value: '1990' }],
@ -178,7 +178,7 @@ test('should allow to update columns props dynamically', async () => {
], ],
}); });
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted<[string, number]>('confirm')![0]).toEqual([ expect(wrapper.emitted<[string, number]>('confirm')![0]).toEqual([
{ selectedOptions: [{ text: '2', value: '2' }], selectedValues: ['2'] }, { selectedOptions: [{ text: '2', value: '2' }], selectedValues: ['2'] },
]); ]);

View File

@ -61,14 +61,14 @@ test('should format options correctly when using formatter prop', async () => {
expect(wrapper.html()).toMatchSnapshot(); expect(wrapper.html()).toMatchSnapshot();
}); });
test('should emit confirm event after clicking the confirm button', () => { test('should emit confirm event after clicking the confirm button', async () => {
const wrapper = mount(TimePicker, { const wrapper = mount(TimePicker, {
props: { props: {
modelValue: ['12', '00'], modelValue: ['12', '00'],
}, },
}); });
wrapper.find('.van-picker__confirm').trigger('click'); await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted('confirm')).toEqual([ expect(wrapper.emitted('confirm')).toEqual([
[ [
{ {