@itwin/presentation-shared 2.0.0-alpha.1 → 2.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +296 -1
- package/README.md +27 -9
- package/lib/cjs/presentation-shared.d.ts +18 -10
- package/lib/cjs/presentation-shared.d.ts.map +1 -1
- package/lib/cjs/presentation-shared.js +11 -6
- package/lib/cjs/presentation-shared.js.map +1 -1
- package/lib/cjs/shared/ConcatenatedValue.d.ts +1 -1
- package/lib/cjs/shared/ConcatenatedValue.d.ts.map +1 -1
- package/lib/cjs/shared/ECSqlCore.d.ts +7 -2
- package/lib/cjs/shared/ECSqlCore.d.ts.map +1 -1
- package/lib/cjs/shared/Event.d.ts +20 -2
- package/lib/cjs/shared/Event.d.ts.map +1 -1
- package/lib/cjs/shared/Formatting.d.ts +1 -1
- package/lib/cjs/shared/Formatting.d.ts.map +1 -1
- package/lib/cjs/shared/Formatting.js +10 -6
- package/lib/cjs/shared/Formatting.js.map +1 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +5 -65
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +0 -136
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +1 -1
- package/lib/cjs/shared/Logging.js +2 -1
- package/lib/cjs/shared/Logging.js.map +1 -1
- package/lib/cjs/shared/MappedTypes.d.ts +3 -13
- package/lib/cjs/shared/MappedTypes.d.ts.map +1 -1
- package/lib/cjs/shared/Metadata.d.ts +225 -11
- package/lib/cjs/shared/Metadata.d.ts.map +1 -1
- package/lib/cjs/shared/Metadata.js +4 -1
- package/lib/cjs/shared/Metadata.js.map +1 -1
- package/lib/cjs/shared/Utils.d.ts +12 -1
- package/lib/cjs/shared/Utils.d.ts.map +1 -1
- package/lib/cjs/shared/Utils.js +37 -11
- package/lib/cjs/shared/Utils.js.map +1 -1
- package/lib/cjs/shared/Values.d.ts +27 -13
- package/lib/cjs/shared/Values.d.ts.map +1 -1
- package/lib/cjs/shared/Values.js +13 -51
- package/lib/cjs/shared/Values.js.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +20 -5
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +56 -25
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +12 -3
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +21 -6
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/index.d.ts +1 -1
- package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +1 -1
- package/lib/cjs/shared/ecsql-snippets/index.js +2 -1
- package/lib/cjs/shared/ecsql-snippets/index.js.map +1 -1
- package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
- package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +54 -0
- package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
- package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +63 -0
- package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
- package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +40 -0
- package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js +10 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +336 -0
- package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/Utils.d.ts +7 -0
- package/lib/cjs/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
- package/lib/cjs/shared/instance-label-factory-impls/Utils.js +26 -0
- package/lib/cjs/shared/instance-label-factory-impls/Utils.js.map +1 -0
- package/lib/esm/presentation-shared.d.ts +18 -10
- package/lib/esm/presentation-shared.d.ts.map +1 -1
- package/lib/esm/presentation-shared.js +7 -4
- package/lib/esm/presentation-shared.js.map +1 -1
- package/lib/esm/shared/ConcatenatedValue.d.ts +1 -1
- package/lib/esm/shared/ConcatenatedValue.d.ts.map +1 -1
- package/lib/esm/shared/ECSqlCore.d.ts +7 -2
- package/lib/esm/shared/ECSqlCore.d.ts.map +1 -1
- package/lib/esm/shared/Event.d.ts +20 -2
- package/lib/esm/shared/Event.d.ts.map +1 -1
- package/lib/esm/shared/Formatting.d.ts +1 -1
- package/lib/esm/shared/Formatting.d.ts.map +1 -1
- package/lib/esm/shared/Formatting.js +10 -6
- package/lib/esm/shared/Formatting.js.map +1 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts +5 -65
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +0 -133
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +1 -1
- package/lib/esm/shared/Logging.js +2 -1
- package/lib/esm/shared/Logging.js.map +1 -1
- package/lib/esm/shared/MappedTypes.d.ts +3 -13
- package/lib/esm/shared/MappedTypes.d.ts.map +1 -1
- package/lib/esm/shared/Metadata.d.ts +225 -11
- package/lib/esm/shared/Metadata.d.ts.map +1 -1
- package/lib/esm/shared/Metadata.js +4 -1
- package/lib/esm/shared/Metadata.js.map +1 -1
- package/lib/esm/shared/Utils.d.ts +12 -1
- package/lib/esm/shared/Utils.d.ts.map +1 -1
- package/lib/esm/shared/Utils.js +36 -11
- package/lib/esm/shared/Utils.js.map +1 -1
- package/lib/esm/shared/Values.d.ts +27 -13
- package/lib/esm/shared/Values.d.ts.map +1 -1
- package/lib/esm/shared/Values.js +13 -51
- package/lib/esm/shared/Values.js.map +1 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +20 -5
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +56 -25
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +12 -3
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +20 -6
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -1
- package/lib/esm/shared/ecsql-snippets/index.d.ts +1 -1
- package/lib/esm/shared/ecsql-snippets/index.d.ts.map +1 -1
- package/lib/esm/shared/ecsql-snippets/index.js +1 -1
- package/lib/esm/shared/ecsql-snippets/index.js.map +1 -1
- package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
- package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +51 -0
- package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
- package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +60 -0
- package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
- package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +37 -0
- package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js +9 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +333 -0
- package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/Utils.d.ts +7 -0
- package/lib/esm/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
- package/lib/esm/shared/instance-label-factory-impls/Utils.js +21 -0
- package/lib/esm/shared/instance-label-factory-impls/Utils.js.map +1 -0
- package/package.json +16 -24
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createBisInstanceLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory;
|
|
8
|
+
const ECSqlValueSelectorSnippets_js_1 = require("../ecsql-snippets/ECSqlValueSelectorSnippets.js");
|
|
9
|
+
const ClassBasedInstanceLabelSelectClauseFactory_js_1 = require("./ClassBasedInstanceLabelSelectClauseFactory.js");
|
|
10
|
+
const Utils_js_1 = require("./Utils.js");
|
|
11
|
+
/**
|
|
12
|
+
* Creates a label select clause according to BIS instance label rules.
|
|
13
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
function createBisInstanceLabelSelectClauseFactory(props) {
|
|
17
|
+
const clauses = [];
|
|
18
|
+
const factory = (0, ClassBasedInstanceLabelSelectClauseFactory_js_1.createClassBasedInstanceLabelSelectClauseFactory)({
|
|
19
|
+
classHierarchyInspector: props.classHierarchyInspector,
|
|
20
|
+
clauses,
|
|
21
|
+
});
|
|
22
|
+
clauses.push({
|
|
23
|
+
className: "BisCore.GeometricElement",
|
|
24
|
+
clause: async ({ classAlias, ...rest }) => `
|
|
25
|
+
COALESCE(
|
|
26
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "CodeValue")},
|
|
27
|
+
${(0, Utils_js_1.concatenate)(rest, [
|
|
28
|
+
{ selector: (0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "UserLabel") },
|
|
29
|
+
...(0, Utils_js_1.createECInstanceIdSuffixSelectors)(classAlias),
|
|
30
|
+
], `${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "UserLabel")} IS NOT NULL`)}
|
|
31
|
+
)
|
|
32
|
+
`,
|
|
33
|
+
}, {
|
|
34
|
+
className: "BisCore.Element",
|
|
35
|
+
clause: async ({ classAlias }) => `
|
|
36
|
+
COALESCE(
|
|
37
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "UserLabel")},
|
|
38
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "CodeValue")}
|
|
39
|
+
)
|
|
40
|
+
`,
|
|
41
|
+
}, {
|
|
42
|
+
className: "BisCore.Model",
|
|
43
|
+
clause: async ({ classAlias, ...rest }) => {
|
|
44
|
+
const elementAlias = `${Utils_js_1.ALIAS_PREFIX}e`;
|
|
45
|
+
return `(
|
|
46
|
+
SELECT ${await factory.createSelectClause({ ...rest, classAlias: elementAlias, className: "BisCore.Element" })}
|
|
47
|
+
FROM [bis].[Element] AS ${elementAlias}
|
|
48
|
+
WHERE ${elementAlias}.[ECInstanceId] = ${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(classAlias, "ModeledElement", "Id")}
|
|
49
|
+
)`;
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
return factory;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=BisInstanceLabelSelectClauseFactory.js.map
|
package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BisInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAuBhG,8FA+CC;AApED,mGAAiG;AACjG,mHAAmH;AACnH,yCAA0F;AAc1F;;;;GAIG;AACH,SAAgB,yCAAyC,CACvD,KAA+C;IAE/C,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAA,gGAAgD,EAAC;QAC/D,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,OAAO;KACR,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CACV;QACE,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC;;YAErC,IAAA,8DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC;YACvD,IAAA,sBAAW,EACX,IAAI,EACJ;YACE,EAAE,QAAQ,EAAE,IAAA,8DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC,EAAE;YACrE,GAAG,IAAA,4CAAiC,EAAC,UAAU,CAAC;SACjD,EACD,GAAG,IAAA,8DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC,cAAc,CACzE;;OAEJ;KACF,EACD;QACE,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;;YAE5B,IAAA,8DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC;YACvD,IAAA,8DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC;;OAE5D;KACF,EACD;QACE,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;YACxC,MAAM,YAAY,GAAG,GAAG,uBAAY,GAAG,CAAC;YACxC,OAAO;iBACE,MAAM,OAAO,CAAC,kBAAkB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;kCACpF,YAAY;gBAC9B,YAAY,qBAAqB,IAAA,8DAA8B,EAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC;QAC3G,CAAC;QACH,CAAC;KACF,CACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CreateInstanceLabelSelectClauseProps, IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
2
|
+
import type { EC, ECClassHierarchyInspector } from "../Metadata.js";
|
|
3
|
+
/**
|
|
4
|
+
* An association of a class and an instance label select clause factory method.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export interface ClassBasedLabelSelectClause {
|
|
8
|
+
/** Full class name */
|
|
9
|
+
className: EC.FullClassName;
|
|
10
|
+
/** A factory method to create an instance label select clause */
|
|
11
|
+
clause: (props: CreateInstanceLabelSelectClauseProps) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for `createClassBasedInstanceLabelSelectClauseFactory`.
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export interface ClassBasedInstanceLabelSelectClauseFactoryProps {
|
|
18
|
+
/** Access to ECClass hierarchy in the iModel. */
|
|
19
|
+
classHierarchyInspector: ECClassHierarchyInspector;
|
|
20
|
+
/**
|
|
21
|
+
* A prioritized list of instance label selectors associated to classes they should be applied to.
|
|
22
|
+
*
|
|
23
|
+
* Because the list may contain clauses for classes in the same class hierarchy, and the factory
|
|
24
|
+
* handles them in given order, the order of clauses should be from the most specific class to the
|
|
25
|
+
* most general one.
|
|
26
|
+
*/
|
|
27
|
+
clauses: ClassBasedLabelSelectClause[];
|
|
28
|
+
/**
|
|
29
|
+
* A fallback label clause factory for when class-based factory doesn't produce a label.
|
|
30
|
+
* Defaults to the result of `createDefaultInstanceLabelSelectClauseFactory`.
|
|
31
|
+
*/
|
|
32
|
+
defaultClauseFactory?: IInstanceLabelSelectClauseFactory;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates an instance label select clause based on its class.
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export declare function createClassBasedInstanceLabelSelectClauseFactory(props: ClassBasedInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
39
|
+
//# sourceMappingURL=ClassBasedInstanceLabelSelectClauseFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassBasedInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,oCAAoC,EACpC,iCAAiC,EAClC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,EAAE,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,sBAAsB;IACtB,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC;IAC5B,iEAAiE;IACjE,MAAM,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,+CAA+C;IAC9D,iDAAiD;IACjD,uBAAuB,EAAE,yBAAyB,CAAC;IAEnD;;;;;;OAMG;IACH,OAAO,EAAE,2BAA2B,EAAE,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,iCAAiC,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,gDAAgD,CAC9D,KAAK,EAAE,+CAA+C,GACrD,iCAAiC,CAyDnC"}
|
package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createClassBasedInstanceLabelSelectClauseFactory = createClassBasedInstanceLabelSelectClauseFactory;
|
|
8
|
+
const ECSqlValueSelectorSnippets_js_1 = require("../ecsql-snippets/ECSqlValueSelectorSnippets.js");
|
|
9
|
+
const DefaultInstanceLabelSelectClauseFactory_js_1 = require("./DefaultInstanceLabelSelectClauseFactory.js");
|
|
10
|
+
/**
|
|
11
|
+
* Creates an instance label select clause based on its class.
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
function createClassBasedInstanceLabelSelectClauseFactory(props) {
|
|
15
|
+
const { classHierarchyInspector, clauses: labelClausesByClass } = props;
|
|
16
|
+
const defaultClauseFactory = props.defaultClauseFactory ?? (0, DefaultInstanceLabelSelectClauseFactory_js_1.createDefaultInstanceLabelSelectClauseFactory)();
|
|
17
|
+
async function getLabelClausesForClass(queryClassName) {
|
|
18
|
+
const matchingLabelClauses = await Promise.all(labelClausesByClass.map(async (entry) => {
|
|
19
|
+
if (await classHierarchyInspector.classDerivesFrom(entry.className, queryClassName)) {
|
|
20
|
+
// label selector is intended for a more specific class than we're selecting from - need to include it
|
|
21
|
+
// as query results (on polymorphic select) are going to include more specific class instances too
|
|
22
|
+
return entry;
|
|
23
|
+
}
|
|
24
|
+
if (await classHierarchyInspector.classDerivesFrom(queryClassName, entry.className)) {
|
|
25
|
+
// label selector is intended for a base class of what query is selecting - need to include it as
|
|
26
|
+
// we want base class label selectors to apply to subclass instances
|
|
27
|
+
return entry;
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}));
|
|
31
|
+
function filterNotUndefined(x) {
|
|
32
|
+
return !!x;
|
|
33
|
+
}
|
|
34
|
+
return matchingLabelClauses.filter(filterNotUndefined);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
async createSelectClause(clauseProps) {
|
|
38
|
+
if (labelClausesByClass.length === 0) {
|
|
39
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
40
|
+
}
|
|
41
|
+
const labelClausePromises = clauseProps.className
|
|
42
|
+
? await getLabelClausesForClass(clauseProps.className)
|
|
43
|
+
: labelClausesByClass;
|
|
44
|
+
if (labelClausePromises.length === 0) {
|
|
45
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
46
|
+
}
|
|
47
|
+
const labelClauses = await Promise.all(labelClausePromises.map(async ({ className, clause }) => ({ className, clause: await clause(clauseProps) })));
|
|
48
|
+
return `COALESCE(
|
|
49
|
+
${labelClauses
|
|
50
|
+
.map(({ className, clause }) => `
|
|
51
|
+
IIF(
|
|
52
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(clauseProps.classAlias, "ECClassId")} IS (${className}),
|
|
53
|
+
${clause.trim()},
|
|
54
|
+
NULL
|
|
55
|
+
)
|
|
56
|
+
`.trim())
|
|
57
|
+
.join(", ")},
|
|
58
|
+
${await defaultClauseFactory.createSelectClause(clauseProps)}
|
|
59
|
+
)`;
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ClassBasedInstanceLabelSelectClauseFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassBasedInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAkDhG,4GA2DC;AA3GD,mGAAiG;AACjG,6GAA6G;AA2C7G;;;GAGG;AACH,SAAgB,gDAAgD,CAC9D,KAAsD;IAEtD,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACxE,MAAM,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,IAAI,IAAA,0FAA6C,GAAE,CAAC;IAC3G,KAAK,UAAU,uBAAuB,CAAC,cAAgC;QACrE,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,IAAI,MAAM,uBAAuB,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;gBACpF,sGAAsG;gBACtG,kGAAkG;gBAClG,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,MAAM,uBAAuB,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpF,iGAAiG;gBACjG,oEAAoE;gBACpE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CACH,CAAC;QACF,SAAS,kBAAkB,CAAI,CAAgB;YAC7C,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,WAAiD;YACxE,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS;gBAC/C,CAAC,CAAC,MAAM,uBAAuB,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtD,CAAC,CAAC,mBAAmB,CAAC;YACxB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAC7G,CAAC;YAEF,OAAO;UACH,YAAY;iBACX,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B;;kBAEM,IAAA,8DAA8B,EAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,SAAS;kBACpF,MAAM,CAAC,IAAI,EAAE;;;aAGlB,CAAC,IAAI,EAAE,CACT;iBACA,IAAI,CAAC,IAAI,CAAC;UACX,MAAM,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAC5D,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
4
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
5
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
6
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare function createDefaultInstanceLabelSelectClauseFactory(): IInstanceLabelSelectClauseFactory;
|
|
12
|
+
//# sourceMappingURL=DefaultInstanceLabelSelectClauseFactory.d.ts.map
|
package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAEhG;;;;;;;;GAQG;AACH,wBAAgB,6CAA6C,IAAI,iCAAiC,CAoBjG"}
|
package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createDefaultInstanceLabelSelectClauseFactory = createDefaultInstanceLabelSelectClauseFactory;
|
|
8
|
+
const ECSqlValueSelectorSnippets_js_1 = require("../ecsql-snippets/ECSqlValueSelectorSnippets.js");
|
|
9
|
+
const Utils_js_1 = require("./Utils.js");
|
|
10
|
+
/**
|
|
11
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
12
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
13
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
14
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
15
|
+
*
|
|
16
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
function createDefaultInstanceLabelSelectClauseFactory() {
|
|
20
|
+
const alias = `${Utils_js_1.ALIAS_PREFIX}c`;
|
|
21
|
+
return {
|
|
22
|
+
async createSelectClause(props) {
|
|
23
|
+
return `(
|
|
24
|
+
SELECT
|
|
25
|
+
${(0, Utils_js_1.concatenate)(props, [
|
|
26
|
+
{
|
|
27
|
+
selector: `COALESCE(
|
|
28
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(alias, "DisplayLabel")},
|
|
29
|
+
${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(alias, "Name")}
|
|
30
|
+
)`,
|
|
31
|
+
},
|
|
32
|
+
...(0, Utils_js_1.createECInstanceIdSuffixSelectors)(props.classAlias),
|
|
33
|
+
])}
|
|
34
|
+
FROM [meta].[ECClassDef] AS ${alias}
|
|
35
|
+
WHERE ${alias}.[ECInstanceId] = ${(0, ECSqlValueSelectorSnippets_js_1.createRawPropertyValueSelector)(props.classAlias, "ECClassId")}
|
|
36
|
+
)`;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=DefaultInstanceLabelSelectClauseFactory.js.map
|
package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAgBhG,sGAoBC;AAlCD,mGAAiG;AACjG,yCAA0F;AAI1F;;;;;;;;GAQG;AACH,SAAgB,6CAA6C;IAC3D,MAAM,KAAK,GAAG,GAAG,uBAAY,GAAG,CAAC;IACjC,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,KAAK;YAC5B,OAAO;;YAED,IAAA,sBAAW,EAAC,KAAK,EAAE;gBACnB;oBACE,QAAQ,EAAE;kBACN,IAAA,8DAA8B,EAAC,KAAK,EAAE,cAAc,CAAC;kBACrD,IAAA,8DAA8B,EAAC,KAAK,EAAE,MAAM,CAAC;gBAC/C;iBACH;gBACD,GAAG,IAAA,4CAAiC,EAAC,KAAK,CAAC,UAAU,CAAC;aACvD,CAAC;sCAC0B,KAAK;gBAC3B,KAAK,qBAAqB,IAAA,8DAA8B,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC;QAC/F,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module contains hard copies of the code from `@itwin/presentation-common` package.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* This specification is designed for specifying schema requirements for the [[Ruleset]] or specific
|
|
6
|
+
* presentation rules.
|
|
7
|
+
*/
|
|
8
|
+
export interface RequiredSchemaSpecification {
|
|
9
|
+
/** Specifies the schema to whom the requirement is being set. */
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* Minimum required schema version (inclusive).
|
|
13
|
+
* Format: `{read version}.{write version}.{minor version}`, e.g. `2.1.15`.
|
|
14
|
+
*
|
|
15
|
+
* @pattern ^[\d]+\.[\d]+\.[\d]+$
|
|
16
|
+
*/
|
|
17
|
+
minVersion?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Maximum allowed schema version (exclusive).
|
|
20
|
+
* Format: `{read version}.{write version}.{minor version}`, e.g. `2.1.15`.
|
|
21
|
+
*
|
|
22
|
+
* @pattern ^[\d]+\.[\d]+\.[\d]+$
|
|
23
|
+
*/
|
|
24
|
+
maxVersion?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Base interface for all [[Rule]] implementations.
|
|
28
|
+
*/
|
|
29
|
+
export interface RuleBase {
|
|
30
|
+
/** Used for serializing to JSON. */
|
|
31
|
+
ruleType: string;
|
|
32
|
+
/**
|
|
33
|
+
* Defines the order in which rules are handled, higher number means the rule is handled first. If priorities are
|
|
34
|
+
* equal, the rules are handled in the order they're defined.
|
|
35
|
+
*
|
|
36
|
+
* @type integer
|
|
37
|
+
*/
|
|
38
|
+
priority?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Tells the library that the rule should only be handled if no other rule of the same type was handled previously (based on rule
|
|
41
|
+
* priorities and definition order). This allows adding fallback rules which can be overridden by higher-priority rules.
|
|
42
|
+
*/
|
|
43
|
+
onlyIfNotHandled?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* A list of [ECSchema requirements]($docs/presentation/RequiredSchemaSpecification.md) that need to be met for the rule to be used.
|
|
46
|
+
*/
|
|
47
|
+
requiredSchemas?: RequiredSchemaSpecification[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Instance label override rule provides a way to set instance label to one of its property values,
|
|
51
|
+
* other attributes and/or combination of them.
|
|
52
|
+
*/
|
|
53
|
+
export interface InstanceLabelOverride extends RuleBase {
|
|
54
|
+
/** Used for serializing to JSON. */
|
|
55
|
+
ruleType: "InstanceLabelOverride";
|
|
56
|
+
/**
|
|
57
|
+
* Specifies the ECClass to apply this rule to.
|
|
58
|
+
*/
|
|
59
|
+
class: SingleSchemaClassSpecification;
|
|
60
|
+
/**
|
|
61
|
+
* Specifications of values used to override label. The first non-empty value is used as the actual label.
|
|
62
|
+
*/
|
|
63
|
+
values: InstanceLabelOverrideValueSpecification[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Types of possible [[InstanceLabelOverride]] label values.
|
|
67
|
+
*/
|
|
68
|
+
type InstanceLabelOverrideValueSpecificationType = "Composite" | "Property" | "ClassName" | "ClassLabel" | "BriefcaseId" | "LocalId" | "String" | "RelatedInstanceLabel";
|
|
69
|
+
/**
|
|
70
|
+
* Base interface for all [[InstanceLabelOverrideValueSpecification]] implementations.
|
|
71
|
+
*/
|
|
72
|
+
export interface InstanceLabelOverrideValueSpecificationBase {
|
|
73
|
+
/** Type of the specification */
|
|
74
|
+
specType: `${InstanceLabelOverrideValueSpecificationType}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Specification allows creating a label value composited using multiple other specifications.
|
|
78
|
+
*/
|
|
79
|
+
export interface InstanceLabelOverrideCompositeValueSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
80
|
+
specType: "Composite";
|
|
81
|
+
/**
|
|
82
|
+
* Parts of the value.
|
|
83
|
+
*
|
|
84
|
+
* If any of the parts with `isRequired` flag evaluate to an empty string, the
|
|
85
|
+
* result of this specification is also an empty string.
|
|
86
|
+
*/
|
|
87
|
+
parts: Array<{
|
|
88
|
+
spec: InstanceLabelOverrideValueSpecification;
|
|
89
|
+
isRequired?: boolean;
|
|
90
|
+
}>;
|
|
91
|
+
/** Separator to use when joining the parts. Defaults to a space character. */
|
|
92
|
+
separator?: string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Specification uses property value as the label content.
|
|
96
|
+
*/
|
|
97
|
+
export interface InstanceLabelOverridePropertyValueSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
98
|
+
specType: "Property";
|
|
99
|
+
/**
|
|
100
|
+
* Name of the property whose value should be used.
|
|
101
|
+
* @note A property with this name must exist on the property class (see [[propertySource]]).
|
|
102
|
+
*/
|
|
103
|
+
propertyName: string;
|
|
104
|
+
/**
|
|
105
|
+
* [Specification of the relationship path]($docs/presentation/RelationshipPathSpecification.md) from [[InstanceLabelOverride.class]]
|
|
106
|
+
* to class of the property. If omitted, [[InstanceLabelOverride.class]] is used as property class.
|
|
107
|
+
*/
|
|
108
|
+
propertySource?: RelationshipPathSpecification;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Specification uses ECClass name as the label content.
|
|
112
|
+
*/
|
|
113
|
+
export interface InstanceLabelOverrideClassNameSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
114
|
+
specType: "ClassName";
|
|
115
|
+
/** Should full (`{schemaName}.{className}`) class name be used */
|
|
116
|
+
full?: boolean;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Specification uses ECClass display label as the label content.
|
|
120
|
+
*/
|
|
121
|
+
export interface InstanceLabelOverrideClassLabelSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
122
|
+
specType: "ClassLabel";
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Specification returns ECInstance's briefcase ID in base36 format.
|
|
126
|
+
*/
|
|
127
|
+
export interface InstanceLabelOverrideBriefcaseIdSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
128
|
+
specType: "BriefcaseId";
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Specification returns ECInstance's local ID in base36 format.
|
|
132
|
+
*/
|
|
133
|
+
export interface InstanceLabelOverrideLocalIdSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
134
|
+
specType: "LocalId";
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Specification uses the specified value as the label content.
|
|
138
|
+
*/
|
|
139
|
+
export interface InstanceLabelOverrideStringValueSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
140
|
+
specType: "String";
|
|
141
|
+
/** The value to use as the label content. */
|
|
142
|
+
value: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Specification uses label of another related instance as the label content.
|
|
146
|
+
*/
|
|
147
|
+
export interface InstanceLabelOverrideRelatedInstanceLabelSpecification extends InstanceLabelOverrideValueSpecificationBase {
|
|
148
|
+
specType: "RelatedInstanceLabel";
|
|
149
|
+
/**
|
|
150
|
+
* [Specification of the relationship path]($docs/presentation/RelationshipPathSpecification.md) from `InstanceLabelOverride.class`
|
|
151
|
+
* to class of the related instance.
|
|
152
|
+
*/
|
|
153
|
+
pathToRelatedInstance: RelationshipPathSpecification;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Specification to define how the label for [[InstanceLabelOverride]] should be created.
|
|
157
|
+
*/
|
|
158
|
+
export type InstanceLabelOverrideValueSpecification = InstanceLabelOverrideCompositeValueSpecification | InstanceLabelOverridePropertyValueSpecification | InstanceLabelOverrideStringValueSpecification | InstanceLabelOverrideClassNameSpecification | InstanceLabelOverrideClassLabelSpecification | InstanceLabelOverrideBriefcaseIdSpecification | InstanceLabelOverrideLocalIdSpecification | InstanceLabelOverrideRelatedInstanceLabelSpecification;
|
|
159
|
+
/**
|
|
160
|
+
* Defines direction of a relationship that should be followed
|
|
161
|
+
*/
|
|
162
|
+
type RelationshipDirection = "Forward" | "Backward";
|
|
163
|
+
/**
|
|
164
|
+
* Specification of a single step in [[RelationshipPathSpecification]].
|
|
165
|
+
*/
|
|
166
|
+
export interface RelationshipStepSpecification {
|
|
167
|
+
/** This attribute specifies the ECRelationship that should be used to traverse to target class. */
|
|
168
|
+
relationship: SingleSchemaClassSpecification;
|
|
169
|
+
/** This attribute specifies the direction in which the [[relationship]] should be followed. */
|
|
170
|
+
direction: `${RelationshipDirection}`;
|
|
171
|
+
/**
|
|
172
|
+
* This attribute may be used to specialize the target of the relationship.
|
|
173
|
+
*/
|
|
174
|
+
targetClass?: SingleSchemaClassSpecification;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Relationship path specification is used to define a relationship path to an ECClass.
|
|
178
|
+
*/
|
|
179
|
+
export type RelationshipPathSpecification = RelationshipStepSpecification | RelationshipStepSpecification[];
|
|
180
|
+
/**
|
|
181
|
+
* This specification is used to point to specific ECClass.
|
|
182
|
+
*/
|
|
183
|
+
export interface SingleSchemaClassSpecification {
|
|
184
|
+
/**
|
|
185
|
+
* Specifies name of the schema which contains the target class.
|
|
186
|
+
*
|
|
187
|
+
* @pattern ^[\w\d]+$
|
|
188
|
+
*/
|
|
189
|
+
schemaName: string;
|
|
190
|
+
/**
|
|
191
|
+
* Specifies name of the target class.
|
|
192
|
+
*
|
|
193
|
+
* @pattern ^[\w\d]+$
|
|
194
|
+
*/
|
|
195
|
+
className: string;
|
|
196
|
+
}
|
|
197
|
+
export {};
|
|
198
|
+
//# sourceMappingURL=IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelInstanceLabelSelectClauseFactory.Rules.d.ts","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/**
|
|
7
|
+
* This module contains hard copies of the code from `@itwin/presentation-common` package.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=IModelInstanceLabelSelectClauseFactory.Rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelInstanceLabelSelectClauseFactory.Rules.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG"}
|
package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ECSqlQueryExecutor } from "../ECSqlCore.js";
|
|
2
|
+
import type { IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
3
|
+
import type { ECClassHierarchyInspector, ECSchemaProvider } from "../Metadata.js";
|
|
4
|
+
/**
|
|
5
|
+
* Props for `createIModelInstanceLabelSelectClauseFactory`.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
interface IModelInstanceLabelSelectClauseFactoryProps {
|
|
9
|
+
/**
|
|
10
|
+
* Combined access to the iModel for querying PresentationRules rulesets and inspecting class hierarchy.
|
|
11
|
+
* Follows the same combined-access pattern as other iModel-backed factories in this package.
|
|
12
|
+
*/
|
|
13
|
+
imodelAccess: ECSqlQueryExecutor & ECClassHierarchyInspector & ECSchemaProvider;
|
|
14
|
+
/**
|
|
15
|
+
* A fallback label clause factory used when no applicable `InstanceLabelOverride` rules are found
|
|
16
|
+
* or when the `PresentationRules` schema is absent from the iModel.
|
|
17
|
+
* Defaults to the result of `createBisInstanceLabelSelectClauseFactory`.
|
|
18
|
+
*/
|
|
19
|
+
defaultClauseFactory?: IInstanceLabelSelectClauseFactory;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates an instance label select clause factory that reads `InstanceLabelOverride` rules from
|
|
23
|
+
* `PresentationRules` rulesets stored in the iModel and compiles them into ECSQL label selectors.
|
|
24
|
+
*
|
|
25
|
+
* Rules are loaded lazily on first use and cached per factory instance. Rulesets are discovered
|
|
26
|
+
* by querying `PresentationRules.Ruleset`. When the `PresentationRules` schema is not imported
|
|
27
|
+
* into the iModel the factory transparently falls back to `defaultClauseFactory` (defaults
|
|
28
|
+
* to `createBisInstanceLabelSelectClauseFactory`).
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export declare function createIModelInstanceLabelSelectClauseFactory(props: IModelInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=IModelInstanceLabelSelectClauseFactory.d.ts.map
|
package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAEV,iCAAiC,EAClC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAM,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAWtF;;;GAGG;AACH,UAAU,2CAA2C;IACnD;;;OAGG;IACH,YAAY,EAAE,kBAAkB,GAAG,yBAAyB,GAAG,gBAAgB,CAAC;IAEhF;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,iCAAiC,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4CAA4C,CAC1D,KAAK,EAAE,2CAA2C,GACjD,iCAAiC,CAenC"}
|