mirror of
https://github.com/imezx/Warp.git
synced 2025-04-24 15:10:03 +00:00
36 lines
991 B
JavaScript
36 lines
991 B
JavaScript
|
import nprogress from 'nprogress';
|
||
|
import { isClient, tryOnScopeDispose } from '@vueuse/shared';
|
||
|
import { ref, computed, watchEffect } from 'vue-demi';
|
||
|
|
||
|
function useNProgress(currentProgress = null, options) {
|
||
|
const progress = ref(currentProgress);
|
||
|
const isLoading = computed({
|
||
|
set: (load) => load ? nprogress.start() : nprogress.done(),
|
||
|
get: () => typeof progress.value === "number" && progress.value < 1
|
||
|
});
|
||
|
if (options)
|
||
|
nprogress.configure(options);
|
||
|
const setProgress = nprogress.set;
|
||
|
nprogress.set = (n) => {
|
||
|
progress.value = n;
|
||
|
return setProgress.call(nprogress, n);
|
||
|
};
|
||
|
watchEffect(() => {
|
||
|
if (typeof progress.value === "number" && isClient)
|
||
|
setProgress.call(nprogress, progress.value);
|
||
|
});
|
||
|
tryOnScopeDispose(nprogress.remove);
|
||
|
return {
|
||
|
isLoading,
|
||
|
progress,
|
||
|
start: nprogress.start,
|
||
|
done: nprogress.done,
|
||
|
remove: () => {
|
||
|
progress.value = null;
|
||
|
nprogress.remove();
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export { useNProgress };
|