UNPKG

scrivito

Version:

Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.

53 lines (45 loc) 1.07 kB
import { Deferred, InternalError, nextTick, onReset, } from 'scrivito_sdk/common'; type Unregister = () => void; let loadingCount: number = 0; let deferred: Deferred<void> | undefined; /** @public */ export function finishLoading(): Promise<void> { if (!deferred) { deferred = new Deferred(); nextTick(updateLoadingState); } return deferred.promise; } export function registerLoadingActivity(): Unregister { loadingCount += 1; return createUnregister(); } function createUnregister(): Unregister { let unregisterHasBeenCalled: boolean = false; return function unregister(): void { if (unregisterHasBeenCalled) { // Unregister must not be called twice throw new InternalError(); } loadingCount -= 1; unregisterHasBeenCalled = true; if (loadingCount === 0) { nextTick(updateLoadingState); } }; } function updateLoadingState(): void { if (deferred && loadingCount === 0) { deferred.resolve(); deferred = undefined; } } onReset(() => { deferred = undefined; loadingCount = 0; });