// Utils import { createNamespace, isDef } from '../utils'; import { lockClick } from './lock-click'; // Mixins import { PopupMixin } from '../mixins/popup'; // Components import Icon from '../icon'; import Loading from '../loading'; var _createNamespace = createNamespace('toast'), createComponent = _createNamespace[0], bem = _createNamespace[1]; export default createComponent({ mixins: [PopupMixin()], props: { icon: String, className: null, iconPrefix: String, loadingType: String, forbidClick: Boolean, closeOnClick: Boolean, message: [Number, String], type: { type: String, default: 'text' }, position: { type: String, default: 'middle' }, transition: { type: String, default: 'van-fade' }, lockScroll: { type: Boolean, default: false } }, data: function data() { return { clickable: false }; }, mounted: function mounted() { this.toggleClickable(); }, destroyed: function destroyed() { this.toggleClickable(); }, watch: { value: 'toggleClickable', forbidClick: 'toggleClickable' }, methods: { onClick: function onClick() { if (this.closeOnClick) { this.close(); } }, toggleClickable: function toggleClickable() { var clickable = this.value && this.forbidClick; if (this.clickable !== clickable) { this.clickable = clickable; lockClick(clickable); } }, /* istanbul ignore next */ onAfterEnter: function onAfterEnter() { this.$emit('opened'); if (this.onOpened) { this.onOpened(); } }, onAfterLeave: function onAfterLeave() { this.$emit('closed'); }, genIcon: function genIcon() { var h = this.$createElement; var icon = this.icon, type = this.type, iconPrefix = this.iconPrefix, loadingType = this.loadingType; var hasIcon = icon || type === 'success' || type === 'fail'; if (hasIcon) { return h(Icon, { "class": bem('icon'), "attrs": { "classPrefix": iconPrefix, "name": icon || type } }); } if (type === 'loading') { return h(Loading, { "class": bem('loading'), "attrs": { "type": loadingType } }); } }, genMessage: function genMessage() { var h = this.$createElement; var type = this.type, message = this.message; if (!isDef(message) || message === '') { return; } if (type === 'html') { return h("div", { "class": bem('text'), "domProps": { "innerHTML": message } }); } return h("div", { "class": bem('text') }, [message]); } }, render: function render() { var _ref; var h = arguments[0]; return h("transition", { "attrs": { "name": this.transition }, "on": { "afterEnter": this.onAfterEnter, "afterLeave": this.onAfterLeave } }, [h("div", { "directives": [{ name: "show", value: this.value }], "class": [bem([this.position, (_ref = {}, _ref[this.type] = !this.icon, _ref)]), this.className], "on": { "click": this.onClick } }, [this.genIcon(), this.genMessage()])]); } });