diff --git a/frontend/vue/vendor/bootstrapVue.js b/frontend/vue/vendor/bootstrapVue.js index a9395a91c..86833e816 100644 --- a/frontend/vue/vendor/bootstrapVue.js +++ b/frontend/vue/vendor/bootstrapVue.js @@ -1,108 +1,111 @@ -import Vue - from 'vue'; -import { BootstrapVue } from 'bootstrap-vue'; +import Vue from 'vue'; +import {BootstrapVue} from 'bootstrap-vue'; import 'bootstrap-vue/dist/bootstrap-vue.css'; Vue.use(BootstrapVue); const BootstrapVueNotifiers = { - install (Vue, opts) { - Vue.prototype.$notify = function (message = null, options = {}) { - const defaults = { - variant: 'default', - toaster: 'b-toaster-top-right', - autoHideDelay: 3000, - solid: true - }; + install(Vue, opts) { + Vue.prototype.$notify = function (message = null, options = {}) { + if (!!document.hidden) { + return; + } + + const defaults = { + variant: 'default', + toaster: 'b-toaster-top-right', + autoHideDelay: 3000, + solid: true + }; - this.$bvToast.toast(message, { ...defaults, ...options }); - }; + this.$bvToast.toast(message, {...defaults, ...options}); + }; - Vue.prototype.$notifyError = function (message = null, options = {}) { - if (message === null) { - message = this.$gettext('An error occurred and your request could not be completed.'); - } + Vue.prototype.$notifyError = function (message = null, options = {}) { + if (message === null) { + message = this.$gettext('An error occurred and your request could not be completed.'); + } - const defaults = { - variant: 'danger', - title: this.$gettext('Error') - }; + const defaults = { + variant: 'danger', + title: this.$gettext('Error') + }; - this.$notify(message, { ...defaults, ...options }); + this.$notify(message, {...defaults, ...options}); - return message; - }; + return message; + }; - Vue.prototype.$notifySuccess = function (message = null, options = {}) { - if (message === null) { - message = this.$gettext('Changes saved.'); - } + Vue.prototype.$notifySuccess = function (message = null, options = {}) { + if (message === null) { + message = this.$gettext('Changes saved.'); + } - const defaults = { - variant: 'success', - title: this.$gettext('Success') - }; + const defaults = { + variant: 'success', + title: this.$gettext('Success') + }; - this.$notify(message, { ...defaults, ...options }); + this.$notify(message, {...defaults, ...options}); - return message; - }; + return message; + }; - const LOADING_TOAST_ID = 'toast-loading'; + const LOADING_TOAST_ID = 'toast-loading'; - Vue.prototype.$showLoading = function (message = null, options = {}) { - if (message === null) { - message = this.$gettext('Applying changes...'); - } + Vue.prototype.$showLoading = function (message = null, options = {}) { + if (message === null) { + message = this.$gettext('Applying changes...'); + } - const defaults = { - id: LOADING_TOAST_ID, - variant: 'warning', - title: this.$gettext('Please wait...'), - autoHideDelay: 10000, - isStatus: true - }; + const defaults = { + id: LOADING_TOAST_ID, + variant: 'warning', + title: this.$gettext('Please wait...'), + autoHideDelay: 10000, + isStatus: true + }; - this.$notify(message, { ...defaults, ...options }); - return message; - }; + this.$notify(message, {...defaults, ...options}); + return message; + }; - Vue.prototype.$hideLoading = function () { - this.$bvToast.hide(LOADING_TOAST_ID); - }; + Vue.prototype.$hideLoading = function () { + this.$bvToast.hide(LOADING_TOAST_ID); + }; - let $isAxiosLoading = false; - let $axiosLoadCount = 0; + let $isAxiosLoading = false; + let $axiosLoadCount = 0; - Vue.prototype.$setLoading = function (isLoading) { - let prevIsLoading = $isAxiosLoading; - if (isLoading) { - $axiosLoadCount++; - $isAxiosLoading = true; - } else if ($axiosLoadCount > 0) { - $axiosLoadCount--; - $isAxiosLoading = ($axiosLoadCount > 0); - } + Vue.prototype.$setLoading = function (isLoading) { + let prevIsLoading = $isAxiosLoading; + if (isLoading) { + $axiosLoadCount++; + $isAxiosLoading = true; + } else if ($axiosLoadCount > 0) { + $axiosLoadCount--; + $isAxiosLoading = ($axiosLoadCount > 0); + } - // Handle state changes - if (!prevIsLoading && $isAxiosLoading) { - this.$showLoading(); - } else if (prevIsLoading && !$isAxiosLoading) { - this.$hideLoading(); - } - }; + // Handle state changes + if (!prevIsLoading && $isAxiosLoading) { + this.$showLoading(); + } else if (prevIsLoading && !$isAxiosLoading) { + this.$hideLoading(); + } + }; - Vue.prototype.$wrapWithLoading = function (promise) { - this.$setLoading(true); + Vue.prototype.$wrapWithLoading = function (promise) { + this.$setLoading(true); - promise.finally(() => { - this.$setLoading(false); - }); + promise.finally(() => { + this.$setLoading(false); + }); - return promise; - }; - } + return promise; + }; + } }; Vue.use(BootstrapVueNotifiers);