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();
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0]).toEqual(
{
selectedOptions: [
@ -90,7 +90,7 @@ test('should render with max-date correctly', async () => {
});
await later();
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).toEqual(['2010', '01', '10']);
@ -115,7 +115,7 @@ test('should render with min-date correctly', async () => {
});
await later();
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).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),
});
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
expect(
wrapper.emitted<[PickerConfirmEventParams]>('confirm')![0][0].selectedValues
).toEqual(['2020', '12', '20']);

View File

@ -2,6 +2,7 @@ import {
ref,
watch,
computed,
nextTick,
defineComponent,
type PropType,
type ExtractPropTypes,
@ -162,7 +163,13 @@ export default defineComponent({
const confirm = () => {
children.forEach((child) => child.stopMomentum());
const params = getEventParams();
emit('confirm', params);
// wait nextTick to ensure the model value is update to date
// when confirm event is emitted
nextTick(() => {
emit('confirm', 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, {
props: {
columns: cascadeColumns,
},
});
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
const params = wrapper.emitted<PickerConfirmEventParams[]>('confirm')?.[0];
expect(params?.[0].selectedValues).toEqual(['A1', 'B1', 'C1']);

View File

@ -10,7 +10,7 @@ const simpleColumn = [
{ 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, {
props: {
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([
{
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([
{ 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();
});
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, {
props: {
modelValue: ['12', '00'],
},
});
wrapper.find('.van-picker__confirm').trigger('click');
await wrapper.find('.van-picker__confirm').trigger('click');
expect(wrapper.emitted('confirm')).toEqual([
[
{