maz-ui
Version:
A standalone components library for Vue.Js 3 & Nuxt.Js 3
44 lines (43 loc) • 1.29 kB
JavaScript
import { ref, computed } from "vue";
const DEFAULT_LOADER = "maz-wait-default-loader";
function uniq(array) {
return array.filter((el, index, arr) => index === arr.indexOf(el));
}
function contains(array) {
return (predicate = DEFAULT_LOADER) => array.includes(predicate);
}
const hasItems = (array) => array.length > 0;
function push(array) {
return (item = DEFAULT_LOADER) => uniq([...array, item]);
}
function pop(array) {
return (item = DEFAULT_LOADER) => array.filter((_item) => _item !== item);
}
class WaitHandler {
_loaders = ref([]);
get loaders() {
return computed(() => this._loaders.value);
}
stop(loaderId = DEFAULT_LOADER) {
return this._loaders.value = pop(this._loaders.value)(loaderId), this;
}
start(loaderId = DEFAULT_LOADER) {
return this._loaders.value = push(this._loaders.value)(loaderId), this;
}
isLoading(loaderId = DEFAULT_LOADER) {
return computed(() => contains(this._loaders.value)(loaderId)).value;
}
get anyLoading() {
return computed(() => hasItems(this._loaders.value));
}
}
const waitInstance = new WaitHandler(), WaitPlugin = {
install: (app) => {
app.provide("mazWait", waitInstance), app.config.globalProperties.$mazWait = waitInstance;
}
};
export {
WaitHandler,
WaitPlugin,
waitInstance
};