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.
43 lines (34 loc) • 1.02 kB
text/typescript
// @rewire
import { equalsBestEffort } from 'scrivito_sdk/common';
import { LoadingSubscriber, capture } from 'scrivito_sdk/loadable';
import { observeSync, trackStateAccess } from 'scrivito_sdk/state';
interface SyncAndLoadObservation {
unsubscribe(): void;
}
export function observeSyncAndLoad<T>(
observedExpression: () => T,
listener: (value: T) => void,
): SyncAndLoadObservation {
const loadingSubscriber = new LoadingSubscriber();
let lastResult = trackStateAccess(observedExpression).result;
const subscription = observeSync(
() => capture(observedExpression),
(captured) => {
captured.subscribeLoading(loadingSubscriber);
const nextResult = captured.result;
if (
lastResult === undefined ||
!equalsBestEffort(nextResult, lastResult)
) {
listener(nextResult);
lastResult = nextResult;
}
},
);
return {
unsubscribe: () => {
subscription.unsubscribe();
loadingSubscriber.unsubscribe();
},
};
}