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.

106 lines (86 loc) 2.53 kB
import { Configuration, getConfiguration, } from 'scrivito_sdk/app_support/configure'; import { isRunningInBrowser } from 'scrivito_sdk/app_support/node_adapter'; import { uiAdapter } from 'scrivito_sdk/app_support/ui_adapter'; import { ScrivitoError, getConfiguredTenant, onReset, reload, } from 'scrivito_sdk/common'; import { deleteOfflineStoreCaches, isOfflineStoreEnabled, setOfflineMode, waitUntilWritingFinished, } from 'scrivito_sdk/loadable'; let offlineMode: boolean | undefined; export function initOfflineMode(): void { setOfflineMode( (async () => determineOfflineMode(await getConfiguration()))() ); } /** @beta */ export function enterOfflineMode(): void { if (!isInOfflineMode()) { if (!isOfflineStoreEnabled()) { throw new ScrivitoError( 'Offline store has not been enabled: Forgot to call Scrivito.enabledOfflineStore()?' ); } window.localStorage.setItem(getOfflineModeStorageKey(), 'true'); waitUntilWritingFinishedAndReload(); } } async function waitUntilWritingFinishedAndReload() { await waitUntilWritingFinished(); reload(); } /** @beta */ export function leaveOfflineMode(): void { if (isInOfflineMode()) { window.localStorage.removeItem(getOfflineModeStorageKey()); reload(); } } /** @beta */ export function isInOfflineMode(): boolean { if (offlineMode === undefined) { throw new ScrivitoError( 'Offline mode has not been allowed in the editing config' ); } return offlineMode; } export function getOfflineMode(): boolean | undefined { return offlineMode; } /** @beta */ export async function deleteOfflineStore(): Promise<void> { if (isInOfflineMode()) { throw new ScrivitoError('Cannot delete the offline store in offline mode'); } return deleteOfflineStoreCaches(); } function determineOfflineMode(config: Configuration) { if (offlineMode === undefined) offlineMode = calculateOfflineMode(config); return offlineMode; } function calculateOfflineMode(config: Configuration) { if (!config.unstable?.allowOfflineMode) return false; if (!!uiAdapter || !isRunningInBrowser()) return false; return !!getOfflineModeFromStorage(); } function getOfflineModeFromStorage() { return window.localStorage.getItem(getOfflineModeStorageKey()); } function getOfflineModeStorageKey() { return `SCRIVITO.${getConfiguredTenant()}.OFFLINE_MODE`; } onReset(resetOfflineMode); // For test purposes only export function resetOfflineMode(): void { offlineMode = undefined; }