mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
fix(Popup): should not call before-close when show prop becomes false (#9291)
This commit is contained in:
parent
c934710906
commit
91aaddca3d
@ -1,4 +1,4 @@
|
|||||||
import { ref, PropType, reactive, defineComponent } from 'vue';
|
import { PropType, reactive, defineComponent } from 'vue';
|
||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
import {
|
import {
|
||||||
@ -68,16 +68,10 @@ export default defineComponent({
|
|||||||
cancel: false,
|
cancel: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const popupRef = ref();
|
|
||||||
|
|
||||||
const updateShow = (value: boolean) => emit('update:show', value);
|
const updateShow = (value: boolean) => emit('update:show', value);
|
||||||
|
|
||||||
const close = (action: DialogAction) => {
|
const close = (action: DialogAction) => {
|
||||||
if (popupRef.value) {
|
updateShow(false);
|
||||||
popupRef.value.triggerClose();
|
|
||||||
} else {
|
|
||||||
updateShow(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (props.callback) {
|
if (props.callback) {
|
||||||
props.callback(action);
|
props.callback(action);
|
||||||
@ -228,7 +222,6 @@ export default defineComponent({
|
|||||||
const { width, title, theme, message, className } = props;
|
const { width, title, theme, message, className } = props;
|
||||||
return (
|
return (
|
||||||
<Popup
|
<Popup
|
||||||
ref={popupRef}
|
|
||||||
role="dialog"
|
role="dialog"
|
||||||
class={[bem([theme]), className]}
|
class={[bem([theme]), className]}
|
||||||
style={{ width: addUnit(width) }}
|
style={{ width: addUnit(width) }}
|
||||||
|
@ -215,7 +215,6 @@ test('before close prop', async () => {
|
|||||||
expect(wrapper.emitted('close')).toBeFalsy();
|
expect(wrapper.emitted('close')).toBeFalsy();
|
||||||
|
|
||||||
await wrapper.setProps({ show: false });
|
await wrapper.setProps({ show: false });
|
||||||
expect(wrapper.emitted('update:show')![0]).toBeTruthy();
|
|
||||||
expect(wrapper.emitted('close')![0]).toBeTruthy();
|
expect(wrapper.emitted('close')![0]).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -115,17 +115,15 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const triggerClose = () => {
|
|
||||||
opened = false;
|
|
||||||
emit('close');
|
|
||||||
emit('update:show', false);
|
|
||||||
};
|
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
if (opened) {
|
if (opened) {
|
||||||
callInterceptor({
|
callInterceptor({
|
||||||
interceptor: props.beforeClose,
|
interceptor: props.beforeClose,
|
||||||
done: triggerClose,
|
done() {
|
||||||
|
opened = false;
|
||||||
|
emit('close');
|
||||||
|
emit('update:show', false);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -224,12 +222,13 @@ export default defineComponent({
|
|||||||
if (value) {
|
if (value) {
|
||||||
open();
|
open();
|
||||||
} else {
|
} else {
|
||||||
close();
|
opened = false;
|
||||||
|
emit('close');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
useExpose({ popupRef, triggerClose });
|
useExpose({ popupRef });
|
||||||
|
|
||||||
useLockScroll(popupRef, () => props.show && props.lockScroll);
|
useLockScroll(popupRef, () => props.show && props.lockScroll);
|
||||||
|
|
||||||
|
@ -230,3 +230,16 @@ test('should allow to prevent close with before-close prop', async () => {
|
|||||||
await wrapper.find('.van-overlay').trigger('click');
|
await wrapper.find('.van-overlay').trigger('click');
|
||||||
expect(wrapper.emitted('update:show')[0]).toEqual([false]);
|
expect(wrapper.emitted('update:show')[0]).toEqual([false]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should not call before-close when show prop becomes false', async () => {
|
||||||
|
const beforeClose = jest.fn();
|
||||||
|
const wrapper = mount(Popup, {
|
||||||
|
props: {
|
||||||
|
show: true,
|
||||||
|
beforeClose,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await wrapper.setProps({ show: false });
|
||||||
|
expect(beforeClose).toHaveBeenCalledTimes(0);
|
||||||
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user