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.
126 lines (108 loc) • 3.05 kB
text/typescript
import {
DataLocatorFilter,
DataLocatorJson,
DataLocatorOperatorFilter,
DataLocatorQuery,
DataLocatorValueFilter,
DataLocatorValueVia,
DataLocatorValueViaFilter,
EqOpCode,
FilterValue,
OrderByItem,
ViaRef,
isDataLocatorOperatorFilter,
isDataLocatorValueFilter,
} from 'scrivito_sdk/client';
import { isObject } from 'scrivito_sdk/common';
interface DataLocatorParams extends Omit<DataLocatorJson, 'class'> {
class: string | null;
}
export type DataLocatorTransformFilter =
| DataLocatorFilter
| DataLocatorEqFilter;
export interface DataLocatorEqFilter {
field: string;
operator: EqOpCode;
value: FilterValue;
}
/** @public */
export class DataLocator {
private readonly _class: string | null;
private readonly _field?: string;
private readonly _viaRef?: ViaRef;
private readonly _query?: DataLocatorQuery;
private readonly _order_by?: OrderByItem[];
private readonly _size?: number;
/** @internal */
constructor(params: DataLocatorParams) {
this._class = params.class;
this._field = params.field;
this._viaRef = params.via_ref;
this._query = params.query;
this._order_by = params.order_by;
this._size = params.size;
}
/** @internal */
class(): string | null {
return this._class;
}
/** @internal */
field(): string | undefined {
return this._field;
}
/** @internal */
viaRef(): ViaRef | undefined {
const viaRef = this._viaRef;
if (typeof viaRef === 'boolean') return 'multi';
return viaRef;
}
/** @internal */
query(): DataLocatorQuery | undefined {
if (this._query) return [...this._query];
}
/** @internal */
orderBy(): OrderByItem[] | undefined {
if (this._order_by) return [...this._order_by];
}
/** @internal */
size(): number | undefined {
return this._size;
}
/** @internal */
toPojo(): DataLocatorJson | null {
if (this._class === null) return null;
return {
class: this._class,
...(this._field && { field: this._field }),
...(this.query() && { query: this.query() }),
...(this.orderBy() && { order_by: this.orderBy() }),
...(this._size !== undefined && { size: this._size }),
...(this._viaRef && { via_ref: this._viaRef }),
};
}
}
export function isDataLocatorValueViaFilter(
filter: unknown
): filter is DataLocatorValueViaFilter {
return (
isObject(filter) &&
typeof (filter as DataLocatorValueViaFilter).field === 'string' &&
isDataLocatorValueVia((filter as DataLocatorValueViaFilter).value_via)
);
}
export function isDataLocatorValueVia(
valueVia: unknown
): valueVia is DataLocatorValueVia {
return (
isObject(valueVia) &&
typeof (valueVia as DataLocatorValueVia).class === 'string' &&
typeof (valueVia as DataLocatorValueVia).field === 'string'
);
}
export function isDataLocatorValueOrOperatorFilter(
filter: unknown
): filter is DataLocatorValueFilter | DataLocatorOperatorFilter {
return (
isDataLocatorValueFilter(filter) || isDataLocatorOperatorFilter(filter)
);
}