From 91aaddca3d6c5f1ca007558638223a9e27a17dfd Mon Sep 17 00:00:00 2001 From: neverland Date: Thu, 19 Aug 2021 19:24:32 +0800 Subject: [PATCH] fix(Popup): should not call before-close when show prop becomes false (#9291) --- src/dialog/Dialog.tsx | 11 ++--------- src/image-preview/test/index.spec.ts | 1 - src/popup/Popup.tsx | 17 ++++++++--------- src/popup/test/index.spec.js | 13 +++++++++++++ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/dialog/Dialog.tsx b/src/dialog/Dialog.tsx index 01903911f..0ad1f156b 100644 --- a/src/dialog/Dialog.tsx +++ b/src/dialog/Dialog.tsx @@ -1,4 +1,4 @@ -import { ref, PropType, reactive, defineComponent } from 'vue'; +import { PropType, reactive, defineComponent } from 'vue'; // Utils import { @@ -68,16 +68,10 @@ export default defineComponent({ cancel: false, }); - const popupRef = ref(); - const updateShow = (value: boolean) => emit('update:show', value); const close = (action: DialogAction) => { - if (popupRef.value) { - popupRef.value.triggerClose(); - } else { - updateShow(false); - } + updateShow(false); if (props.callback) { props.callback(action); @@ -228,7 +222,6 @@ export default defineComponent({ const { width, title, theme, message, className } = props; return ( { expect(wrapper.emitted('close')).toBeFalsy(); await wrapper.setProps({ show: false }); - expect(wrapper.emitted('update:show')![0]).toBeTruthy(); expect(wrapper.emitted('close')![0]).toBeTruthy(); }); diff --git a/src/popup/Popup.tsx b/src/popup/Popup.tsx index 6137bbe48..4339a3e52 100644 --- a/src/popup/Popup.tsx +++ b/src/popup/Popup.tsx @@ -115,17 +115,15 @@ export default defineComponent({ } }; - const triggerClose = () => { - opened = false; - emit('close'); - emit('update:show', false); - }; - const close = () => { if (opened) { callInterceptor({ interceptor: props.beforeClose, - done: triggerClose, + done() { + opened = false; + emit('close'); + emit('update:show', false); + }, }); } }; @@ -224,12 +222,13 @@ export default defineComponent({ if (value) { open(); } else { - close(); + opened = false; + emit('close'); } } ); - useExpose({ popupRef, triggerClose }); + useExpose({ popupRef }); useLockScroll(popupRef, () => props.show && props.lockScroll); diff --git a/src/popup/test/index.spec.js b/src/popup/test/index.spec.js index 287c9dfe0..955bbc930 100644 --- a/src/popup/test/index.spec.js +++ b/src/popup/test/index.spec.js @@ -230,3 +230,16 @@ test('should allow to prevent close with before-close prop', async () => { await wrapper.find('.van-overlay').trigger('click'); 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); +});