40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
|
|
import { isClient, toRef, tryOnScopeDispose } from "@vueuse/shared";
|
||
|
|
import { computed, watchEffect } from "vue";
|
||
|
|
import nprogress from "nprogress";
|
||
|
|
|
||
|
|
//#region useNProgress/index.ts
|
||
|
|
/**
|
||
|
|
* Reactive progress bar.
|
||
|
|
*
|
||
|
|
* @see https://vueuse.org/useNProgress
|
||
|
|
*/
|
||
|
|
function useNProgress(currentProgress = null, options) {
|
||
|
|
const progress = toRef(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();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
//#endregion
|
||
|
|
export { useNProgress as t };
|