maz-ui
Version:
A standalone components library for Vue.Js 3 & Nuxt.Js 3
1 lines • 1.09 kB
JavaScript
import{computed,ref}from"vue";var 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)}var 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)}var WaitHandler=class{_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))}};var waitInstance=new WaitHandler;var WaitPlugin={install:app=>{app.provide(`mazWait`,waitInstance),app.config.globalProperties.$mazWait=waitInstance}};export{WaitHandler,WaitPlugin,waitInstance};