UNPKG

maz-ui

Version:

A standalone components library for Vue.Js 3 & Nuxt.Js 3

44 lines (43 loc) 1.29 kB
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 };