fix(Toast): closeOnClickOverlay not work (#8044)

* fix(Toast): closeOnClickOverlay not work

* fix: demo
This commit is contained in:
neverland 2021-01-31 16:11:49 +08:00 committed by GitHub
parent 6a3d716f6e
commit 0f3610bafe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 17 deletions

View File

@ -25,6 +25,7 @@ export default createComponent({
overlayClass: null,
overlayStyle: Object,
closeOnClick: Boolean,
closeOnClickOverlay: Boolean,
type: {
type: String,
default: 'text',
@ -63,6 +64,10 @@ export default createComponent({
clearTimeout(timer);
};
const toggle = (show) => {
emit('update:show', show);
};
const renderIcon = () => {
const { icon, type, iconPrefix, loadingType } = props;
const hasIcon = icon || type === 'success' || type === 'fail';
@ -119,8 +124,10 @@ export default createComponent({
transition={props.transition}
overlayClass={props.overlayClass}
overlayStyle={props.overlayStyle}
closeOnClickOverlay={props.closeOnClickOverlay}
onClick={onClick}
onClosed={clearTimer}
{...{ 'onUpdate:show': toggle }}
>
{renderIcon()}
{renderMessage()}

View File

@ -166,23 +166,6 @@ test('should trigger onClose callback after closed', () => {
Toast.allowMultiple(false);
});
test('closeOnClick option', async () => {
Toast.allowMultiple();
const toast = Toast({
message: 'toast',
});
await later();
toast.$el.click();
expect(toast.value).toBeTruthy();
toast.closeOnClick = true;
toast.$el.click();
expect(toast.value).toBeFalsy();
Toast.allowMultiple(false);
});
test('register component', () => {
Vue.use(Toast);
expect(Vue.component(ToastVue.name)).toBeTruthy();

View File

@ -15,3 +15,27 @@ test('should change overlay style after using overlay-style prop', async () => {
await later();
expect(wrapper.find('.van-overlay').element.style.background).toEqual('red');
});
test('should close Toast when using closeOnClick prop and clicked', () => {
const wrapper = mount(Toast, {
props: {
show: true,
closeOnClick: true,
},
});
wrapper.find('.van-toast').trigger('click');
expect(wrapper.emitted('update:show')[0][0]).toEqual(false);
});
test('should close Toast when using closeOnClickOverlay prop and overlay is clicked', () => {
const wrapper = mount(Toast, {
props: {
show: true,
closeOnClickOverlay: true,
},
});
wrapper.find('.van-overlay').trigger('click');
expect(wrapper.emitted('update:show')[0][0]).toEqual(false);
});