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.

62 lines (52 loc) 1.76 kB
import { assumeString } from 'scrivito_sdk/common'; import { getDataClassOrThrow } from 'scrivito_sdk/data_integration'; import { DataItemPojo, DataScopePojo, itemPojoToScopePojo, } from 'scrivito_sdk/data_integration/data_class'; import { ExternalDataItem } from 'scrivito_sdk/data_integration/external_data_class'; import { createStateContainer } from 'scrivito_sdk/state'; const globalContextState = createStateContainer<Record<string, string>>(); export function provideGlobalData(dataItem: ExternalDataItem): void { const dataClassName = assumeString(dataItem.dataClassName()); const dataItemId = dataItem.id(); globalContextState.set({ ...globalContextState.get(), [dataClassName]: dataItemId, }); } export function getGlobalDataItems(): ExternalDataItem[] { const globalContext = globalContextState.get(); return globalContext ? Object.entries(globalContext) .map(([dataClassName, dataId]) => getDataClassOrThrow(dataClassName).get(dataId), ) .filter( (maybeDataItem): maybeDataItem is ExternalDataItem => !!maybeDataItem, ) : []; } export function getDefaultItemIdForDataClass( dataClassName: string, ): string | null { return globalContextState.get()?.[dataClassName] || null; } export function findItemInGlobalData( dataClassName: string, ): DataItemPojo | undefined { const defaultItemId = getDefaultItemIdForDataClass(dataClassName); if (defaultItemId) { return { _class: dataClassName, _id: defaultItemId, }; } } export function findScopeInGlobalData( dataClassName: string, ): DataScopePojo | undefined { const itemPojo = findItemInGlobalData(dataClassName); if (itemPojo) return itemPojoToScopePojo(itemPojo); }