@redocly/theme
Version:
Shared UI components lib
26 lines (20 loc) • 628 B
text/typescript
import nprogress from 'nprogress';
nprogress.configure({
trickleSpeed: 100,
template: '<div class="bar" role="bar"><div class="peg"></div></div>',
});
// Only the last caller should be able to call nprogress.done()
let lastCalledBy: symbol;
export async function withLoadProgress<T>(loadTarget: Promise<T>): Promise<T> {
const callIdentifier = Symbol();
lastCalledBy = callIdentifier;
// Cancel any existing progress and restart
nprogress.done();
nprogress.start();
return loadTarget.finally(() => {
if (lastCalledBy === callIdentifier) {
nprogress.done();
nprogress.remove();
}
});
}