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.

111 lines (93 loc) 3.15 kB
import { getDataClassOrThrow } from 'scrivito_sdk/data_integration'; import { DataItem, DataItemPojo, DataScope, DataScopeError, DataScopePojo, EmptyDataScopePojo, PresentDataScopePojo, } from 'scrivito_sdk/data_integration/data_class'; import { EmptyDataScope } from 'scrivito_sdk/data_integration/empty_data_scope'; export type DataStack = Array<DataStackElement>; export type DataStackElement = DataItemPojo | DataScopePojo; export function isDataItemPojo( element: DataStackElement ): element is DataItemPojo { return !!(element as DataItemPojo)._id; } export function isSingleItemElement( element: DataStackElement ): element is DataItemPojo | PresentDataScopePojo { return isDataItemPojo(element) || isSingleItemDataScopePojo(element); } export function isMultiItemDataScopePojo( element: DataStackElement ): element is PresentDataScopePojo { return isPresentDataScopePojo(element) && !element?.filters?._id; } function isSingleItemDataScopePojo( element: DataStackElement ): element is PresentDataScopePojo { return isPresentDataScopePojo(element) && !!element?.filters?._id; } function isPresentDataScopePojo( element: DataStackElement ): element is PresentDataScopePojo { return isDataScopePojo(element) && !isEmptyDataScopePojo(element); } function isEmptyDataScopePojo(pojo: DataScopePojo): pojo is EmptyDataScopePojo { return 'isEmpty' in pojo && pojo.isEmpty === true; } function isDataScopePojo(element: DataStackElement): element is DataScopePojo { return !isDataItemPojo(element); } export function deserializeDataStackElement( element: DataStackElement ): DataScope | DataItem | undefined { return isDataItemPojo(element) ? deserializeDataItem(element) : deserializeDataScope(element); } export function findItemInDataStack( dataClassName: string, dataStack: DataStack ): DataItemPojo | undefined { const itemElements = dataStack.filter(isDataItemPojo); return itemElements.find((element) => element._class === dataClassName); } export function findScopeInDataStack( dataClassName: string, dataStack: DataStack ): DataScopePojo | undefined { const element = dataStack.find((el) => el._class === dataClassName); if (element && isDataScopePojo(element)) return element; } export function deserializeDataScope({ _class: dataClassName, ...dataScopeParams }: DataScopePojo): DataScope | undefined { if (dataClassName) { const dataClass = getDataClassOrThrow(dataClassName); if ('isEmpty' in dataScopeParams) { const error = dataScopeParams._error ? new DataScopeError(dataScopeParams._error) : undefined; return new EmptyDataScope({ dataClass, error, isDataItem: dataScopeParams.isDataItem, }); } const attributeName = ('_attribute' in dataScopeParams && dataScopeParams._attribute) || undefined; return dataClass.all().transform({ ...dataScopeParams, attributeName }); } } export function deserializeDataItem({ _class: dataClass, _id: dataId, }: DataItemPojo): DataItem | undefined { return getDataClassOrThrow(dataClass).get(dataId) || undefined; }