UNPKG

@gitlab/ui

Version:
126 lines (115 loc) 4.09 kB
import CloseButton from '../../shared_components/close_button/close_button'; import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js'; const MIN_DURATION = 1000; const DEFAULT_AUTO_HIDE_DELAY = 5000; const hasAnimateSupport = typeof Element !== 'undefined' && Boolean(Element.prototype.animate); var script = { name: 'GlToast', components: { CloseButton }, props: { toastId: { type: String, required: true }, message: { type: String, required: true }, action: { type: Object, required: false, default: null }, autoHideDelay: { type: Number, required: false, default: DEFAULT_AUTO_HIDE_DELAY } }, data() { return { visible: true }; }, computed: { effectiveDelay() { return Math.max(this.autoHideDelay, MIN_DURATION); } }, created() { this.useCssTransition = hasAnimateSupport; this.dismissTimer = null; this.deadline = 0; this.timeRemaining = this.effectiveDelay; this.isHiding = false; }, beforeDestroy() { clearTimeout(this.dismissTimer); }, methods: { startDismissTimer() { clearTimeout(this.dismissTimer); this.deadline = Date.now() + this.timeRemaining; this.dismissTimer = setTimeout(() => this.hide(), this.timeRemaining); }, onPause() { if (!this.dismissTimer) return; clearTimeout(this.dismissTimer); this.dismissTimer = null; this.timeRemaining = Math.max(this.deadline - Date.now(), MIN_DURATION); }, onResume() { if (!this.timeRemaining || this.dismissTimer) return; this.startDismissTimer(); }, hide() { if (this.isHiding) return; this.isHiding = true; clearTimeout(this.dismissTimer); this.dismissTimer = null; this.visible = false; }, onAfterLeave() { this.$emit('hidden', this.toastId); }, onActionClick(e) { if (this.action && this.action.onClick) { this.action.onClick(e, { id: this.toastId, hide: () => this.hide() }); } } } }; /* script */ const __vue_script__ = script; /* template */ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"b-toast b-toast-append",attrs:{"id":(_vm.toastId + "_toast_outer"),"role":"status","aria-live":"polite","aria-atomic":"true"}},[_c('transition',{attrs:{"enter-active-class":"fade","enter-to-class":"show","leave-class":"show","leave-active-class":"fade","appear":"","appear-active-class":"fade","appear-to-class":"show","css":_vm.useCssTransition},on:{"after-appear":_vm.startDismissTimer,"after-leave":_vm.onAfterLeave}},[(_vm.visible)?_c('div',{staticClass:"toast gl-toast",attrs:{"id":_vm.toastId,"tabindex":"0"},on:{"mouseenter":_vm.onPause,"mouseleave":_vm.onResume}},[_c('div',{staticClass:"toast-body"},[_vm._v(_vm._s(_vm.message))]),_vm._v(" "),_c('header',{staticClass:"toast-header"},[(_vm.action)?_c('a',{staticClass:"gl-toast-action",attrs:{"role":_vm.action.href ? undefined : 'button',"href":_vm.action.href},on:{"click":_vm.onActionClick}},[_vm._v(_vm._s(_vm.action.text))]):_vm._e(),_vm._v(" "),_c('close-button',{staticClass:"gl-toast-close-button",on:{"click":_vm.hide}})],1)]):_vm._e()])],1)}; var __vue_staticRenderFns__ = []; /* style */ const __vue_inject_styles__ = undefined; /* scoped */ const __vue_scope_id__ = undefined; /* module identifier */ const __vue_module_identifier__ = undefined; /* functional template */ const __vue_is_functional_template__ = false; /* style inject */ /* style inject SSR */ /* style inject shadow dom */ const __vue_component__ = /*#__PURE__*/__vue_normalize__( { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined ); export { __vue_component__ as default };