fix(Picker): make sure confirm params' behavior consistent (#13423) (#13425)

Signed-off-by: Kayne <w.zengkai@gmail.com>
This commit is contained in:
KayneWang
2025-04-20 22:11:03 +09:00
committed by GitHub
parent e343c7a970
commit ea75a968ce
2 changed files with 49 additions and 18 deletions

View File

@@ -147,7 +147,9 @@ export default defineComponent({
};
const getEventParams = () => ({
selectedValues: selectedValues.value.slice(0),
selectedValues: selectedValues.value.length
? selectedValues.value.slice(0)
: resetSelectedValues(currentColumns.value),
selectedOptions: selectedOptions.value,
selectedIndexes: selectedIndexes.value,
});
@@ -268,23 +270,20 @@ export default defineComponent({
}
};
watch(
currentColumns,
(columns) => {
const resetSelectedValues = (columns: PickerColumn[]) => {
columns.forEach((options, index) => {
if (
options.length &&
!isOptionExist(options, selectedValues.value[index], fields.value)
) {
setValue(
index,
getFirstEnabledOption(options)![fields.value.value],
);
setValue(index, getFirstEnabledOption(options)![fields.value.value]);
}
});
},
{ immediate: true },
);
};
watch(currentColumns, (columns) => resetSelectedValues(columns), {
immediate: true,
});
// preserve last emitted model value
// when props.modelValue is updated by parent component,

View File

@@ -489,3 +489,35 @@ test('should emit correct values when clicking confirm button during column scro
},
]);
});
test('should emit default values when clear modelValue', async () => {
const columns = [
{ text: '1', value: '1' },
{ text: '2', value: '2' },
];
const wrapper = mount({
setup() {
const modelValue = ref(['1']);
return () => (
<>
<button
class="clear-button"
onClick={() => (modelValue.value = [])}
/>
<Picker v-model={modelValue.value} columns={columns} />
</>
);
},
});
const button = wrapper.find('.clear-button');
await button.trigger('click');
const picker = wrapper.findComponent(Picker);
await picker.find('.van-picker__confirm').trigger('click');
expect(picker.emitted('confirm')![0]).toEqual([
{
selectedOptions: [{ text: '1', value: '1' }],
selectedValues: ['1'],
selectedIndexes: [0],
},
]);
});