@itwin/presentation-common
Version:
Common pieces for iModel.js presentation packages
94 lines • 3.96 kB
TypeScript
/** @packageDocumentation
* @module Core
*/
import { StrippedRelationshipPath } from "./EC.js";
/**
* Definition of an instance filter that can be used to filter content or hierarchy levels.
*
* Example:
*
* ```json
* {
* selectClassName: "MySchema:MyClass",
* expression: "this.MyProperty = 1 AND other.OtherProperty = 2",
* relatedInstances: [{
* pathFromSelectToPropertyClass: [{
* sourceClassName: "MySchema:MyClass",
* relationshipName: "MySchema:RelationshipFromMyToOtherClass",
* isForwardRelationship: true,
* targetClassName: "MySchema:OtherClass",
* }],
* alias: "other",
* }],
* }
* ```
*
* @public
*/
export interface InstanceFilterDefinition {
/**
* Select class filter used to select only instances of specific class.
* The [[relatedInstances]] attribute, when used, should specify paths from this class.
* Also, the [[expression]] attribute's `this` symbol points to instances of this class.
*
* The format is full class name: `SchemaName:ClassName`.
*/
selectClassName: string;
/**
* Specifies relationship paths pointing to related instances used in the [[expression]] attribute.
*
* Sometimes there's a need to filter on a related instance property. In that case, the relationship
* needs to be named by specifying the path and alias for the target (or the relationship). Then, the
* related instance's symbol context can be accessed through the root symbol named as specified in the
* [[alias]] (or [[relationshipAlias]]) attribute.
*/
relatedInstances?: InstanceFilterRelatedInstanceDefinition[];
/**
* [ECExpression]($docs/presentation/advanced/ECExpressions.md) for filtering the select instances.
*/
expression: string;
}
/**
* Related instance definition for accessing properties of a related instance in [[InstanceFilterDefinition.expression]].
* @public
*/
export type InstanceFilterRelatedInstanceDefinition = InstanceFilterRelatedInstancePath & (InstanceFilterRelatedInstanceTargetAlias | InstanceFilterRelatedInstanceRelationshipAlias);
/**
* Partial definition of common attributes for [[InstanceFilterRelatedInstanceDefinition]].
* @public
*/
export interface InstanceFilterRelatedInstancePath {
/**
* A relationship path from select class (either specified through [[InstanceFilterDefinition.selectClassName]] or taken from context)
* to the target related instance containing the properties used in [[InstanceFilterDefinition.expression]].
*/
pathFromSelectToPropertyClass: StrippedRelationshipPath;
/**
* An optional flag indicating that the target instance must exist. Setting this allows to filter out all
* select instances that don't have a related instance by following the [[pathFromSelectToPropertyClass]] path.
*/
isRequired?: boolean;
}
/**
* Partial definition of [[InstanceFilterRelatedInstanceDefinition]] for the case when referencing the target class.
* @public
*/
export interface InstanceFilterRelatedInstanceTargetAlias {
/**
* An alias for the target class in the [[InstanceFilterRelatedInstancePath.pathFromSelectToPropertyClass]] path. This alias can be used to
* access related instance symbols context in the [[InstanceFilterDefinition.expression]].
*/
alias: string;
}
/**
* Partial definition of [[InstanceFilterRelatedInstanceDefinition]] for the case when referencing the relationship class.
* @public
*/
export interface InstanceFilterRelatedInstanceRelationshipAlias {
/**
* An alias for the relationship in the last step of the [[InstanceFilterRelatedInstancePath.pathFromSelectToPropertyClass]] path. This alias can be
* used to access the relationship instance symbols context in the [[InstanceFilterDefinition.expression]].
*/
relationshipAlias: string;
}
//# sourceMappingURL=InstanceFilterDefinition.d.ts.map