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.
73 lines (61 loc) • 1.93 kB
text/typescript
import { Streamable } from 'scrivito_sdk/common';
import { LoadableData } from 'scrivito_sdk/loadable';
import { LoadableState } from 'scrivito_sdk/loadable/loadable_state';
import {
InvalidationCallback,
LoaderCallback,
LoaderCallbackProcess,
} from 'scrivito_sdk/loadable/loader_callback_process';
import { applyOfflineHandling } from 'scrivito_sdk/loadable/offline_handling';
import { StoreEntry } from 'scrivito_sdk/loadable/offline_store';
import { StreamProcess } from 'scrivito_sdk/loadable/stream_process';
import { StateContainer } from 'scrivito_sdk/state';
export type LoaderProcessParams<T> =
| ParamsWithLoader<T>
| ParamsWithStream<T>
| ParamsWithLoadableStream<T>;
export interface ParamsWithLoader<T> {
loader: LoaderCallback<T>;
offlineLoader?: LoaderCallback<T>;
offlineEntry?: StoreEntry<T>;
invalidation?: InvalidationCallback;
loadableStream?: undefined;
stream?: undefined;
}
interface ParamsWithStream<T> {
stream: Streamable<T>;
loadableStream?: undefined;
loader?: undefined;
invalidation?: undefined;
offlineEntry?: undefined;
}
/** package-private, only use inside 'loadable' */
interface ParamsWithLoadableStream<T> {
loadableStream: Streamable<LoadableState<T>>;
stream?: undefined;
loader?: undefined;
invalidation?: undefined;
offlineEntry?: undefined;
}
export function createLoaderProcess<T>(
loadable: LoadableData<T>,
params: LoaderProcessParams<T>,
stateContainer: StateContainer<LoadableState<T>>
) {
if (params.stream) {
return new StreamProcess(
stateContainer,
params.stream.map((value) => ({ meta: {}, value }))
);
}
if (params.loadableStream) {
return new StreamProcess(stateContainer, params.loadableStream);
}
const { loader, onChange } = applyOfflineHandling(loadable, params);
return new LoaderCallbackProcess(
stateContainer,
loader,
params.invalidation,
onChange
);
}