@itwin/presentation-shared 0.1.0
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 +7 -0
- package/LICENSE.md +9 -0
- package/README.md +434 -0
- package/lib/cjs/presentation-shared.d.ts +13 -0
- package/lib/cjs/presentation-shared.d.ts.map +1 -0
- package/lib/cjs/presentation-shared.js +58 -0
- package/lib/cjs/presentation-shared.js.map +1 -0
- package/lib/cjs/shared/ConcatenatedValue.d.ts +47 -0
- package/lib/cjs/shared/ConcatenatedValue.d.ts.map +1 -0
- package/lib/cjs/shared/ConcatenatedValue.js +45 -0
- package/lib/cjs/shared/ConcatenatedValue.js.map +1 -0
- package/lib/cjs/shared/ECSqlCore.d.ts +91 -0
- package/lib/cjs/shared/ECSqlCore.d.ts.map +1 -0
- package/lib/cjs/shared/ECSqlCore.js +7 -0
- package/lib/cjs/shared/ECSqlCore.js.map +1 -0
- package/lib/cjs/shared/Event.d.ts +9 -0
- package/lib/cjs/shared/Event.d.ts.map +1 -0
- package/lib/cjs/shared/Event.js +7 -0
- package/lib/cjs/shared/Event.js.map +1 -0
- package/lib/cjs/shared/Formatting.d.ts +39 -0
- package/lib/cjs/shared/Formatting.d.ts.map +1 -0
- package/lib/cjs/shared/Formatting.js +132 -0
- package/lib/cjs/shared/Formatting.js.map +1 -0
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +129 -0
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +167 -0
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/cjs/shared/InternalUtils.d.ts +3 -0
- package/lib/cjs/shared/InternalUtils.d.ts.map +1 -0
- package/lib/cjs/shared/InternalUtils.js +14 -0
- package/lib/cjs/shared/InternalUtils.js.map +1 -0
- package/lib/cjs/shared/Logging.d.ts +27 -0
- package/lib/cjs/shared/Logging.d.ts.map +1 -0
- package/lib/cjs/shared/Logging.js +20 -0
- package/lib/cjs/shared/Logging.js.map +1 -0
- package/lib/cjs/shared/MappedTypes.d.ts +11 -0
- package/lib/cjs/shared/MappedTypes.d.ts.map +1 -0
- package/lib/cjs/shared/MappedTypes.js +7 -0
- package/lib/cjs/shared/MappedTypes.js.map +1 -0
- package/lib/cjs/shared/Metadata.d.ts +268 -0
- package/lib/cjs/shared/Metadata.d.ts.map +1 -0
- package/lib/cjs/shared/Metadata.js +54 -0
- package/lib/cjs/shared/Metadata.js.map +1 -0
- package/lib/cjs/shared/Utils.d.ts +26 -0
- package/lib/cjs/shared/Utils.d.ts.map +1 -0
- package/lib/cjs/shared/Utils.js +50 -0
- package/lib/cjs/shared/Utils.js.map +1 -0
- package/lib/cjs/shared/Values.d.ts +119 -0
- package/lib/cjs/shared/Values.d.ts.map +1 -0
- package/lib/cjs/shared/Values.js +156 -0
- package/lib/cjs/shared/Values.js.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +48 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +139 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +116 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +244 -0
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/index.d.ts +3 -0
- package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +1 -0
- package/lib/cjs/shared/ecsql-snippets/index.js +16 -0
- package/lib/cjs/shared/ecsql-snippets/index.js.map +1 -0
- package/lib/esm/presentation-shared.d.ts +13 -0
- package/lib/esm/presentation-shared.d.ts.map +1 -0
- package/lib/esm/presentation-shared.js +15 -0
- package/lib/esm/presentation-shared.js.map +1 -0
- package/lib/esm/shared/ConcatenatedValue.d.ts +47 -0
- package/lib/esm/shared/ConcatenatedValue.d.ts.map +1 -0
- package/lib/esm/shared/ConcatenatedValue.js +42 -0
- package/lib/esm/shared/ConcatenatedValue.js.map +1 -0
- package/lib/esm/shared/ECSqlCore.d.ts +91 -0
- package/lib/esm/shared/ECSqlCore.d.ts.map +1 -0
- package/lib/esm/shared/ECSqlCore.js +6 -0
- package/lib/esm/shared/ECSqlCore.js.map +1 -0
- package/lib/esm/shared/Event.d.ts +9 -0
- package/lib/esm/shared/Event.d.ts.map +1 -0
- package/lib/esm/shared/Event.js +6 -0
- package/lib/esm/shared/Event.js.map +1 -0
- package/lib/esm/shared/Formatting.d.ts +39 -0
- package/lib/esm/shared/Formatting.d.ts.map +1 -0
- package/lib/esm/shared/Formatting.js +127 -0
- package/lib/esm/shared/Formatting.js.map +1 -0
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts +129 -0
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +160 -0
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/esm/shared/InternalUtils.d.ts +3 -0
- package/lib/esm/shared/InternalUtils.d.ts.map +1 -0
- package/lib/esm/shared/InternalUtils.js +10 -0
- package/lib/esm/shared/InternalUtils.js.map +1 -0
- package/lib/esm/shared/Logging.d.ts +27 -0
- package/lib/esm/shared/Logging.d.ts.map +1 -0
- package/lib/esm/shared/Logging.js +17 -0
- package/lib/esm/shared/Logging.js.map +1 -0
- package/lib/esm/shared/MappedTypes.d.ts +11 -0
- package/lib/esm/shared/MappedTypes.d.ts.map +1 -0
- package/lib/esm/shared/MappedTypes.js +6 -0
- package/lib/esm/shared/MappedTypes.js.map +1 -0
- package/lib/esm/shared/Metadata.d.ts +268 -0
- package/lib/esm/shared/Metadata.d.ts.map +1 -0
- package/lib/esm/shared/Metadata.js +49 -0
- package/lib/esm/shared/Metadata.js.map +1 -0
- package/lib/esm/shared/Utils.d.ts +26 -0
- package/lib/esm/shared/Utils.d.ts.map +1 -0
- package/lib/esm/shared/Utils.js +44 -0
- package/lib/esm/shared/Utils.js.map +1 -0
- package/lib/esm/shared/Values.d.ts +119 -0
- package/lib/esm/shared/Values.d.ts.map +1 -0
- package/lib/esm/shared/Values.js +153 -0
- package/lib/esm/shared/Values.js.map +1 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +48 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +135 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +116 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +236 -0
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
- package/lib/esm/shared/ecsql-snippets/index.d.ts +3 -0
- package/lib/esm/shared/ecsql-snippets/index.d.ts.map +1 -0
- package/lib/esm/shared/ecsql-snippets/index.js +7 -0
- package/lib/esm/shared/ecsql-snippets/index.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Id64String } from "@itwin/core-bentley";
|
|
2
|
+
/**
|
|
3
|
+
* Defines an ECSql binding consisting of a value and its type. Necessary to differentiate between numeric
|
|
4
|
+
* types and `Id64String` vs `string`.
|
|
5
|
+
*
|
|
6
|
+
* @beta
|
|
7
|
+
*/
|
|
8
|
+
export type ECSqlBinding = {
|
|
9
|
+
type: "boolean";
|
|
10
|
+
value?: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
type: "double" | "int" | "long";
|
|
13
|
+
value?: number;
|
|
14
|
+
} | {
|
|
15
|
+
type: "id";
|
|
16
|
+
value?: Id64String;
|
|
17
|
+
} | {
|
|
18
|
+
type: "idset";
|
|
19
|
+
value?: Id64String[];
|
|
20
|
+
} | {
|
|
21
|
+
type: "string";
|
|
22
|
+
value?: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: "point2d";
|
|
25
|
+
value?: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
};
|
|
29
|
+
} | {
|
|
30
|
+
type: "point3d";
|
|
31
|
+
value?: {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
z: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Defines an ECSQL query and its bindings.
|
|
39
|
+
* @beta
|
|
40
|
+
*/
|
|
41
|
+
export interface ECSqlQueryDef {
|
|
42
|
+
/** A list of CTEs used in the query. */
|
|
43
|
+
ctes?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* The ECSQL query to execute.
|
|
46
|
+
* @note In case the query uses CTEs, they should be specified in the `ctes` rather than included in the `ecsql`.
|
|
47
|
+
*/
|
|
48
|
+
ecsql: string;
|
|
49
|
+
/**
|
|
50
|
+
* Values to bind to the query.
|
|
51
|
+
* @see https://www.itwinjs.org/learning/ecsql/#ecsql-parameters
|
|
52
|
+
*/
|
|
53
|
+
bindings?: ECSqlBinding[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Defines requested ECSQL result row format.
|
|
57
|
+
* @see [QueryRowFormat](https://www.itwinjs.org/reference/core-common/imodels/queryrowformat/)
|
|
58
|
+
*/
|
|
59
|
+
type ECSqlQueryRowFormat = "ECSqlPropertyNames" | "Indexes";
|
|
60
|
+
/**
|
|
61
|
+
* Defines options for ECSQL query reader.
|
|
62
|
+
* @see [QueryOptions](https://www.itwinjs.org/reference/core-common/imodels/queryoptions/)
|
|
63
|
+
* @beta
|
|
64
|
+
*/
|
|
65
|
+
export interface ECSqlQueryReaderOptions {
|
|
66
|
+
rowFormat?: ECSqlQueryRowFormat;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Represents a single row of an ECSQL query result.
|
|
70
|
+
* @see [QueryRowProxy](https://www.itwinjs.org/reference/core-common/imodels/queryrowproxy/)
|
|
71
|
+
* @beta
|
|
72
|
+
*/
|
|
73
|
+
export interface ECSqlQueryRow {
|
|
74
|
+
[propertyName: string]: any;
|
|
75
|
+
[propertyIndex: number]: any;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Represents ECSQL query results reader.
|
|
79
|
+
* @see [ECSqlReader](https://www.itwinjs.org/reference/core-common/imodels/ecsqlreader/)
|
|
80
|
+
*/
|
|
81
|
+
type ECSqlQueryReader = AsyncIterableIterator<ECSqlQueryRow>;
|
|
82
|
+
/**
|
|
83
|
+
* An interface for something that knows how to create an ECSQL query reader.
|
|
84
|
+
* @see `createECSqlQueryExecutor` in `@itwin/presentation-core-interop`.
|
|
85
|
+
* @beta
|
|
86
|
+
*/
|
|
87
|
+
export interface ECSqlQueryExecutor {
|
|
88
|
+
createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions): ECSqlQueryReader;
|
|
89
|
+
}
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=ECSqlCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ECSqlCore.d.ts","sourceRoot":"","sources":["../../../src/shared/ECSqlCore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACD;IACE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C,CAAC;AAEN;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,KAAK,mBAAmB,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IAC5B,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED;;;GAGG;AACH,KAAK,gBAAgB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAC;CAC7F"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
//# sourceMappingURL=ECSqlCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ECSqlCore.js","sourceRoot":"","sources":["../../../src/shared/ECSqlCore.ts"],"names":[],"mappings":";AAAA;;;gGAGgG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An interface that allows subscribing and unsubscribing listeners that are called upon an event.
|
|
3
|
+
* @beta
|
|
4
|
+
*/
|
|
5
|
+
export interface Event<TListener extends (...args: any[]) => void = () => void> {
|
|
6
|
+
addListener(listener: TListener): () => void;
|
|
7
|
+
removeListener(listener: TListener): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../src/shared/Event.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,WAAW,KAAK,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAC5E,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,IAAI,CAAC;IAC7C,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
//# sourceMappingURL=Event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Event.js","sourceRoot":"","sources":["../../../src/shared/Event.ts"],"names":[],"mappings":";AAAA;;;gGAGgG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ConcatenatedValue } from "./ConcatenatedValue";
|
|
2
|
+
import { ECSchemaProvider } from "./Metadata";
|
|
3
|
+
import { TypedPrimitiveValue } from "./Values";
|
|
4
|
+
/**
|
|
5
|
+
* A type definition for a function that knows how to create a display string for a typed primitive value.
|
|
6
|
+
* @see `createDefaultValueFormatter`
|
|
7
|
+
* @beta
|
|
8
|
+
*/
|
|
9
|
+
export type IPrimitiveValueFormatter = (value: TypedPrimitiveValue) => Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Formats a concatenated value into a string, taking into account different types of `ConcatenatedValuePart` that
|
|
12
|
+
* the value consists of.
|
|
13
|
+
*
|
|
14
|
+
* @throws Error if a `ConcatenatedValuePart` in given `ConcatenatedValue` references a non-primitive, `IGeometry` or `Binary` property.
|
|
15
|
+
* @beta
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatConcatenatedValue(props: {
|
|
18
|
+
value: ConcatenatedValue | string;
|
|
19
|
+
schemaProvider: ECSchemaProvider;
|
|
20
|
+
valueFormatter: IPrimitiveValueFormatter;
|
|
21
|
+
}): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* A values' formatter that knows how to format the following types:
|
|
24
|
+
* - `Boolean` values are formatted to either "true" or "false".
|
|
25
|
+
* - `Integer` and `Long` values are rounded to the closest integer.
|
|
26
|
+
* - `Double` values are rounded to 2 decimal places.
|
|
27
|
+
* - `DateTime` values accept 2 formats in addition to `Date`:
|
|
28
|
+
* - if the value is numeric, assume it's a julian day format,
|
|
29
|
+
* - if the value is string, assume it's an ISO 8601 format.
|
|
30
|
+
* If extended type is set to `ShortDate`, the date is formatted as locale date string. Otherwise, it's
|
|
31
|
+
* formatted as locale date + time string.
|
|
32
|
+
* - `Point2d` values are formatted in `(x, y)` format.
|
|
33
|
+
* - `Point3d` values are formatted in `(x, y, z)` format.
|
|
34
|
+
* - `String` and `Id` values are turned as-is.
|
|
35
|
+
*
|
|
36
|
+
* @beta
|
|
37
|
+
*/
|
|
38
|
+
export declare function createDefaultValueFormatter(): IPrimitiveValueFormatter;
|
|
39
|
+
//# sourceMappingURL=Formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Formatting.d.ts","sourceRoot":"","sources":["../../../src/shared/Formatting.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAAY,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvF;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAClC,cAAc,EAAE,gBAAgB,CAAC;IACjC,cAAc,EAAE,wBAAwB,CAAC;CAC1C,GAAG,OAAO,CAAC,MAAM,CAAC,CA0ClB;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,IAAI,wBAAwB,CAatE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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.createDefaultValueFormatter = exports.formatConcatenatedValue = void 0;
|
|
8
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
+
const ConcatenatedValue_1 = require("./ConcatenatedValue");
|
|
10
|
+
const InternalUtils_1 = require("./InternalUtils");
|
|
11
|
+
const Metadata_1 = require("./Metadata");
|
|
12
|
+
/**
|
|
13
|
+
* Formats a concatenated value into a string, taking into account different types of `ConcatenatedValuePart` that
|
|
14
|
+
* the value consists of.
|
|
15
|
+
*
|
|
16
|
+
* @throws Error if a `ConcatenatedValuePart` in given `ConcatenatedValue` references a non-primitive, `IGeometry` or `Binary` property.
|
|
17
|
+
* @beta
|
|
18
|
+
*/
|
|
19
|
+
async function formatConcatenatedValue(props) {
|
|
20
|
+
const { value, schemaProvider, valueFormatter } = props;
|
|
21
|
+
if (typeof value === "string") {
|
|
22
|
+
return valueFormatter({ value, type: "String" });
|
|
23
|
+
}
|
|
24
|
+
return ConcatenatedValue_1.ConcatenatedValue.serialize({
|
|
25
|
+
parts: value,
|
|
26
|
+
partFormatter: async (part) => {
|
|
27
|
+
// strings are converted to typed strings
|
|
28
|
+
if (ConcatenatedValue_1.ConcatenatedValuePart.isString(part)) {
|
|
29
|
+
part = {
|
|
30
|
+
value: part,
|
|
31
|
+
type: "String",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// for property parts - find property metadata and create `TypedPrimitiveValue` for them.
|
|
35
|
+
if (ConcatenatedValue_1.ConcatenatedValuePart.isProperty(part)) {
|
|
36
|
+
const property = await getProperty(part, schemaProvider);
|
|
37
|
+
if (!property?.isPrimitive()) {
|
|
38
|
+
throw new Error(`Concatenated values formatter expects a primitive property, but it's not.`);
|
|
39
|
+
}
|
|
40
|
+
if (property.primitiveType === "IGeometry") {
|
|
41
|
+
throw new Error(`Concatenated values formatter does not support "IGeometry" values, but the provided ${part.className}.${part.propertyName} property is.`);
|
|
42
|
+
}
|
|
43
|
+
if (property.primitiveType === "Binary") {
|
|
44
|
+
throw new Error(`Concatenated values formatter does not support "Binary" values, but the provided ${part.className}.${part.propertyName} property is.`);
|
|
45
|
+
}
|
|
46
|
+
part = {
|
|
47
|
+
type: property.primitiveType,
|
|
48
|
+
extendedType: property.extendedTypeName,
|
|
49
|
+
koqName: (await property.kindOfQuantity)?.fullName,
|
|
50
|
+
value: part.value,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// finally, use provided value formatter to create a string from `TypedPrimitiveValue`
|
|
54
|
+
return valueFormatter(part);
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
exports.formatConcatenatedValue = formatConcatenatedValue;
|
|
59
|
+
async function getProperty({ className, propertyName }, schemaProvider) {
|
|
60
|
+
const propertyClass = await (0, Metadata_1.getClass)(schemaProvider, className);
|
|
61
|
+
return propertyClass.getProperty(propertyName);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A values' formatter that knows how to format the following types:
|
|
65
|
+
* - `Boolean` values are formatted to either "true" or "false".
|
|
66
|
+
* - `Integer` and `Long` values are rounded to the closest integer.
|
|
67
|
+
* - `Double` values are rounded to 2 decimal places.
|
|
68
|
+
* - `DateTime` values accept 2 formats in addition to `Date`:
|
|
69
|
+
* - if the value is numeric, assume it's a julian day format,
|
|
70
|
+
* - if the value is string, assume it's an ISO 8601 format.
|
|
71
|
+
* If extended type is set to `ShortDate`, the date is formatted as locale date string. Otherwise, it's
|
|
72
|
+
* formatted as locale date + time string.
|
|
73
|
+
* - `Point2d` values are formatted in `(x, y)` format.
|
|
74
|
+
* - `Point3d` values are formatted in `(x, y, z)` format.
|
|
75
|
+
* - `String` and `Id` values are turned as-is.
|
|
76
|
+
*
|
|
77
|
+
* @beta
|
|
78
|
+
*/
|
|
79
|
+
function createDefaultValueFormatter() {
|
|
80
|
+
const formatters = [applyBooleanFormatting, applyNumericFormatting, applyDatesFormatting, applyPointsFormatting];
|
|
81
|
+
return async function (value) {
|
|
82
|
+
for (const formatter of formatters) {
|
|
83
|
+
const result = formatter(value);
|
|
84
|
+
if (!!result) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
(0, core_bentley_1.assert)(typeof value.value === "undefined" || typeof value.value === "boolean" || typeof value.value === "number" || typeof value.value === "string");
|
|
89
|
+
return value.value.toString();
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.createDefaultValueFormatter = createDefaultValueFormatter;
|
|
93
|
+
function applyBooleanFormatting(value) {
|
|
94
|
+
if (value.type === "Boolean") {
|
|
95
|
+
return Boolean(value.value).toString();
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function applyNumericFormatting(value) {
|
|
100
|
+
if (value.type === "Integer" || value.type === "Long") {
|
|
101
|
+
return Math.round(value.value).toLocaleString();
|
|
102
|
+
}
|
|
103
|
+
if (value.type === "Double") {
|
|
104
|
+
return value.value.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
function applyDatesFormatting(value) {
|
|
109
|
+
function getDate(julianOrDate) {
|
|
110
|
+
return typeof julianOrDate === "number" ? (0, InternalUtils_1.julianToDateTime)(julianOrDate) : typeof julianOrDate === "string" ? new Date(julianOrDate) : julianOrDate;
|
|
111
|
+
}
|
|
112
|
+
if (value.type !== "DateTime") {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
if (value.extendedType === "ShortDate") {
|
|
116
|
+
return getDate(value.value).toLocaleDateString();
|
|
117
|
+
}
|
|
118
|
+
return getDate(value.value).toLocaleString();
|
|
119
|
+
}
|
|
120
|
+
function applyPointsFormatting(value) {
|
|
121
|
+
function formatComponent(n) {
|
|
122
|
+
return applyNumericFormatting({ type: "Double", value: n });
|
|
123
|
+
}
|
|
124
|
+
if (value.type === "Point3d") {
|
|
125
|
+
return `(${formatComponent(value.value.x)}, ${formatComponent(value.value.y)}, ${formatComponent(value.value.z)})`;
|
|
126
|
+
}
|
|
127
|
+
if (value.type === "Point2d") {
|
|
128
|
+
return `(${formatComponent(value.value.x)}, ${formatComponent(value.value.y)})`;
|
|
129
|
+
}
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=Formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Formatting.js","sourceRoot":"","sources":["../../../src/shared/Formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ConcatenatedValue } from "./ConcatenatedValue";
|
|
2
|
+
import { TypedValueSelectClauseProps } from "./ecsql-snippets/ECSqlValueSelectorSnippets";
|
|
3
|
+
import { ECClassHierarchyInspector } from "./Metadata";
|
|
4
|
+
/**
|
|
5
|
+
* Props for `IInstanceLabelSelectClauseFactory.createSelectClause`.
|
|
6
|
+
*/
|
|
7
|
+
interface CreateInstanceLabelSelectClauseProps {
|
|
8
|
+
/**
|
|
9
|
+
* Alias of an ECSQL class referring to the target instance whose label should be selected.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
* ```ts
|
|
13
|
+
* const selectClause = `
|
|
14
|
+
* SELECT ${await factory.createSelectClause({ classAlias: "x" })}
|
|
15
|
+
* FROM bis.GeometricElement3d AS x
|
|
16
|
+
* `;
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
classAlias: string;
|
|
20
|
+
/**
|
|
21
|
+
* An optional full name of the class whose instance label is to be selected.
|
|
22
|
+
*
|
|
23
|
+
* The attribute's purpose is purely for optimization and `IInstanceLabelSelectClauseFactory` should not
|
|
24
|
+
* rely on this to be set to a leaf class or set at all. However, when this name is provided, some factory
|
|
25
|
+
* implementations may be able to create a more efficient select clause (e.g. drop some pieces of clause
|
|
26
|
+
* that don't apply for given class).
|
|
27
|
+
*/
|
|
28
|
+
className?: string;
|
|
29
|
+
/**
|
|
30
|
+
* An optional function for concatenating multiple `TypedValueSelectClauseProps`. Selectors' concatenation
|
|
31
|
+
* is used when a label consists of multiple pieces, e.g.:
|
|
32
|
+
* - `[` - string,
|
|
33
|
+
* - `this.PropertyX` - property value selector,
|
|
34
|
+
* - `]` - string.
|
|
35
|
+
*
|
|
36
|
+
* It's concatenator's job to serialize those pieces into a single selector and, depending on the use case,
|
|
37
|
+
* it may do that in multiple ways. For example:
|
|
38
|
+
*
|
|
39
|
+
* - `createConcatenatedValueJsonSelector` serializes parts into a JSON array selector. This allows the array to
|
|
40
|
+
* be parsed after the query is run, where each part can be handled individually without losing its metadata.
|
|
41
|
+
* This is the default value.
|
|
42
|
+
*
|
|
43
|
+
* - `createConcatenatedValueStringSelector` concatenates parts into a string using SQLite's `||` operator. While
|
|
44
|
+
* this way of concatenation looses metadata (thus disabling formatting of the values), it tries to produce the
|
|
45
|
+
* value to be as close as possible to the formatted one. This concatenator may be used to create a label for using
|
|
46
|
+
* in the query `WHERE` clause.
|
|
47
|
+
*
|
|
48
|
+
* @see `createConcatenatedValueJsonSelector`
|
|
49
|
+
* @see `createConcatenatedValueStringSelector`
|
|
50
|
+
*/
|
|
51
|
+
selectorsConcatenator?: (selectors: TypedValueSelectClauseProps[], checkSelector?: string) => string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* An interface for a factory that knows how create instance label select clauses.
|
|
55
|
+
* @see `createDefaultInstanceLabelSelectClauseFactory`
|
|
56
|
+
* @see `createClassBasedInstanceLabelSelectClauseFactory`
|
|
57
|
+
* @see `createBisInstanceLabelSelectClauseFactory`
|
|
58
|
+
* @beta
|
|
59
|
+
*/
|
|
60
|
+
export interface IInstanceLabelSelectClauseFactory {
|
|
61
|
+
/** Creates a select clause for an instance label. */
|
|
62
|
+
createSelectClause(props: CreateInstanceLabelSelectClauseProps): Promise<string>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parses an instance label from query result into a string or a `ConcatenatedValue`. The latter type of result
|
|
66
|
+
* is expected when label selector is created using `IInstanceLabelSelectClauseFactory.createSelectClause` with
|
|
67
|
+
* `createConcatenatedValueJsonSelector`.
|
|
68
|
+
*
|
|
69
|
+
* @beta
|
|
70
|
+
*/
|
|
71
|
+
export declare function parseInstanceLabel(value: string | undefined): ConcatenatedValue | string;
|
|
72
|
+
/**
|
|
73
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
74
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
75
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
76
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
77
|
+
*
|
|
78
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
79
|
+
* @beta
|
|
80
|
+
*/
|
|
81
|
+
export declare function createDefaultInstanceLabelSelectClauseFactory(): IInstanceLabelSelectClauseFactory;
|
|
82
|
+
/**
|
|
83
|
+
* An association of a class and an instance label select clause factory method.
|
|
84
|
+
*/
|
|
85
|
+
interface ClassBasedLabelSelectClause {
|
|
86
|
+
/** Full class name */
|
|
87
|
+
className: string;
|
|
88
|
+
/** A factory method to create an instance label select clause */
|
|
89
|
+
clause: (props: CreateInstanceLabelSelectClauseProps) => Promise<string>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Props for `createClassBasedInstanceLabelSelectClauseFactory`.
|
|
93
|
+
*/
|
|
94
|
+
interface ClassBasedInstanceLabelSelectClauseFactoryProps {
|
|
95
|
+
/** Access to ECClass hierarchy in the iModel. */
|
|
96
|
+
classHierarchyInspector: ECClassHierarchyInspector;
|
|
97
|
+
/**
|
|
98
|
+
* A prioritized list of instance label selectors associated to classes they should be applied to.
|
|
99
|
+
*
|
|
100
|
+
* Because the list may contain clauses for classes in the same class hierarchy, and the factory
|
|
101
|
+
* handles them in given order, the order of clauses should be from the most specific class to the
|
|
102
|
+
* most general one.
|
|
103
|
+
*/
|
|
104
|
+
clauses: ClassBasedLabelSelectClause[];
|
|
105
|
+
/**
|
|
106
|
+
* A fallback label clause factory for when class-based factory doesn't produce a label.
|
|
107
|
+
* Defaults to the result of `createDefaultInstanceLabelSelectClauseFactory`.
|
|
108
|
+
*/
|
|
109
|
+
defaultClauseFactory?: IInstanceLabelSelectClauseFactory;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Creates an instance label select clause based on its class.
|
|
113
|
+
* @beta
|
|
114
|
+
*/
|
|
115
|
+
export declare function createClassBasedInstanceLabelSelectClauseFactory(props: ClassBasedInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
116
|
+
/**
|
|
117
|
+
* Props for `createBisInstanceLabelSelectClauseFactory`.
|
|
118
|
+
*/
|
|
119
|
+
interface BisInstanceLabelSelectClauseFactoryProps {
|
|
120
|
+
classHierarchyInspector: ECClassHierarchyInspector;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Creates a label select clause according to BIS instance label rules.
|
|
124
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
125
|
+
* @beta
|
|
126
|
+
*/
|
|
127
|
+
export declare function createBisInstanceLabelSelectClauseFactory(props: BisInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
128
|
+
export {};
|
|
129
|
+
//# sourceMappingURL=InstanceLabelSelectClauseFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/InstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAuE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/J,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,UAAU,oCAAoC;IAC5C;;;;;;;;;;OAUG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,2BAA2B,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACtG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iCAAiC;IAChD,qDAAqD;IACrD,kBAAkB,CAAC,KAAK,EAAE,oCAAoC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,MAAM,CAaxF;AAED;;;;;;;;GAQG;AACH,wBAAgB,6CAA6C,IAAI,iCAAiC,CAmBjG;AAED;;GAEG;AACH,UAAU,2BAA2B;IACnC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,MAAM,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED;;GAEG;AACH,UAAU,+CAA+C;IACvD,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,CAAC,KAAK,EAAE,+CAA+C,GAAG,iCAAiC,CA0D1J;AAED;;GAEG;AACH,UAAU,wCAAwC;IAChD,uBAAuB,EAAE,yBAAyB,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,wCAAwC,GAAG,iCAAiC,CAuC5I"}
|
|
@@ -0,0 +1,167 @@
|
|
|
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 = exports.createClassBasedInstanceLabelSelectClauseFactory = exports.createDefaultInstanceLabelSelectClauseFactory = exports.parseInstanceLabel = void 0;
|
|
8
|
+
const ECSqlValueSelectorSnippets_1 = require("./ecsql-snippets/ECSqlValueSelectorSnippets");
|
|
9
|
+
/**
|
|
10
|
+
* Parses an instance label from query result into a string or a `ConcatenatedValue`. The latter type of result
|
|
11
|
+
* is expected when label selector is created using `IInstanceLabelSelectClauseFactory.createSelectClause` with
|
|
12
|
+
* `createConcatenatedValueJsonSelector`.
|
|
13
|
+
*
|
|
14
|
+
* @beta
|
|
15
|
+
*/
|
|
16
|
+
function parseInstanceLabel(value) {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
if ((value.startsWith("[") && value.endsWith("]")) || (value.startsWith("{") && value.endsWith("}"))) {
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(value);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// fall through
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// not a JSON object/array
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
exports.parseInstanceLabel = parseInstanceLabel;
|
|
32
|
+
/**
|
|
33
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
34
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
35
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
36
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
37
|
+
*
|
|
38
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
39
|
+
* @beta
|
|
40
|
+
*/
|
|
41
|
+
function createDefaultInstanceLabelSelectClauseFactory() {
|
|
42
|
+
return {
|
|
43
|
+
async createSelectClause(props) {
|
|
44
|
+
return `(
|
|
45
|
+
SELECT
|
|
46
|
+
${concatenate(props, [
|
|
47
|
+
{
|
|
48
|
+
selector: `COALESCE(
|
|
49
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)("c", "DisplayLabel")},
|
|
50
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)("c", "Name")}
|
|
51
|
+
)`,
|
|
52
|
+
},
|
|
53
|
+
...createECInstanceIdSuffixSelectors(props.classAlias),
|
|
54
|
+
])}
|
|
55
|
+
FROM [meta].[ECClassDef] AS [c]
|
|
56
|
+
WHERE [c].[ECInstanceId] = ${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(props.classAlias, "ECClassId")}
|
|
57
|
+
)`;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.createDefaultInstanceLabelSelectClauseFactory = createDefaultInstanceLabelSelectClauseFactory;
|
|
62
|
+
/**
|
|
63
|
+
* Creates an instance label select clause based on its class.
|
|
64
|
+
* @beta
|
|
65
|
+
*/
|
|
66
|
+
function createClassBasedInstanceLabelSelectClauseFactory(props) {
|
|
67
|
+
const { classHierarchyInspector, clauses: labelClausesByClass } = props;
|
|
68
|
+
const defaultClauseFactory = props.defaultClauseFactory ?? createDefaultInstanceLabelSelectClauseFactory();
|
|
69
|
+
async function getLabelClausesForClass(queryClassName) {
|
|
70
|
+
const matchingLabelClauses = await Promise.all(labelClausesByClass.map(async (entry) => {
|
|
71
|
+
if (await classHierarchyInspector.classDerivesFrom(entry.className, queryClassName)) {
|
|
72
|
+
// label selector is intended for a more specific class than we're selecting from - need to include it
|
|
73
|
+
// as query results (on polymorphic select) are going to include more specific class instances too
|
|
74
|
+
return entry;
|
|
75
|
+
}
|
|
76
|
+
if (await classHierarchyInspector.classDerivesFrom(queryClassName, entry.className)) {
|
|
77
|
+
// label selector is intended for a base class of what query is selecting - need to include it as
|
|
78
|
+
// we want base class label selectors to apply to subclass instances
|
|
79
|
+
return entry;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}));
|
|
83
|
+
function filterNotUndefined(x) {
|
|
84
|
+
return !!x;
|
|
85
|
+
}
|
|
86
|
+
return matchingLabelClauses.filter(filterNotUndefined);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
async createSelectClause(clauseProps) {
|
|
90
|
+
if (labelClausesByClass.length === 0) {
|
|
91
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
92
|
+
}
|
|
93
|
+
const labelClausePromises = clauseProps.className ? await getLabelClausesForClass(clauseProps.className) : labelClausesByClass;
|
|
94
|
+
if (labelClausePromises.length === 0) {
|
|
95
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
96
|
+
}
|
|
97
|
+
const labelClauses = await Promise.all(labelClausePromises.map(async ({ className, clause }) => ({
|
|
98
|
+
className,
|
|
99
|
+
clause: await clause(clauseProps),
|
|
100
|
+
})));
|
|
101
|
+
return `COALESCE(
|
|
102
|
+
${labelClauses
|
|
103
|
+
.map(({ className, clause }) => `
|
|
104
|
+
IIF(
|
|
105
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(clauseProps.classAlias, "ECClassId")} IS (${className}),
|
|
106
|
+
${clause.trim()},
|
|
107
|
+
NULL
|
|
108
|
+
)
|
|
109
|
+
`.trim())
|
|
110
|
+
.join(", ")},
|
|
111
|
+
${await defaultClauseFactory.createSelectClause(clauseProps)}
|
|
112
|
+
)`;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
exports.createClassBasedInstanceLabelSelectClauseFactory = createClassBasedInstanceLabelSelectClauseFactory;
|
|
117
|
+
/**
|
|
118
|
+
* Creates a label select clause according to BIS instance label rules.
|
|
119
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
120
|
+
* @beta
|
|
121
|
+
*/
|
|
122
|
+
function createBisInstanceLabelSelectClauseFactory(props) {
|
|
123
|
+
const clauses = [];
|
|
124
|
+
const factory = createClassBasedInstanceLabelSelectClauseFactory({
|
|
125
|
+
classHierarchyInspector: props.classHierarchyInspector,
|
|
126
|
+
clauses,
|
|
127
|
+
});
|
|
128
|
+
clauses.push({
|
|
129
|
+
className: "BisCore.GeometricElement",
|
|
130
|
+
clause: async ({ classAlias, ...rest }) => `
|
|
131
|
+
COALESCE(
|
|
132
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "CodeValue")},
|
|
133
|
+
${concatenate(rest, [{ selector: (0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "UserLabel") }, ...createECInstanceIdSuffixSelectors(classAlias)], `${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "UserLabel")} IS NOT NULL`)}
|
|
134
|
+
)
|
|
135
|
+
`,
|
|
136
|
+
}, {
|
|
137
|
+
className: "BisCore.Element",
|
|
138
|
+
clause: async ({ classAlias }) => `
|
|
139
|
+
COALESCE(
|
|
140
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "UserLabel")},
|
|
141
|
+
${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "CodeValue")}
|
|
142
|
+
)
|
|
143
|
+
`,
|
|
144
|
+
}, {
|
|
145
|
+
className: "BisCore.Model",
|
|
146
|
+
clause: async ({ classAlias, ...rest }) => `(
|
|
147
|
+
SELECT ${await factory.createSelectClause({ ...rest, classAlias: "e", className: "BisCore.Element" })}
|
|
148
|
+
FROM [bis].[Element] AS [e]
|
|
149
|
+
WHERE [e].[ECInstanceId] = ${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "ModeledElement", "Id")}
|
|
150
|
+
)`,
|
|
151
|
+
});
|
|
152
|
+
return factory;
|
|
153
|
+
}
|
|
154
|
+
exports.createBisInstanceLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory;
|
|
155
|
+
function createECInstanceIdSuffixSelectors(classAlias) {
|
|
156
|
+
return [
|
|
157
|
+
{ value: ` [`, type: "String" },
|
|
158
|
+
{ selector: `CAST(base36(${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "ECInstanceId")} >> 40) AS TEXT)` },
|
|
159
|
+
{ value: `-`, type: "String" },
|
|
160
|
+
{ selector: `CAST(base36(${(0, ECSqlValueSelectorSnippets_1.createRawPropertyValueSelector)(classAlias, "ECInstanceId")} & ((1 << 40) - 1)) AS TEXT)` },
|
|
161
|
+
{ value: `]`, type: "String" },
|
|
162
|
+
];
|
|
163
|
+
}
|
|
164
|
+
function concatenate(props, selectors, checkSelector) {
|
|
165
|
+
return (props.selectorsConcatenator ?? ECSqlValueSelectorSnippets_1.createConcatenatedValueJsonSelector)(selectors, checkSelector);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=InstanceLabelSelectClauseFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../src/shared/InstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAGhG,4FAA+J;AAmE/J;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,KAAyB;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrG,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IACD,0BAA0B;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,gDAaC;AAED;;;;;;;;GAQG;AACH,SAAgB,6CAA6C;IAC3D,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,KAA2C;YAClE,OAAO;;YAED,WAAW,CAAC,KAAK,EAAE;gBACnB;oBACE,QAAQ,EAAE;kBACN,IAAA,2DAA8B,EAAC,GAAG,EAAE,cAAc,CAAC;kBACnD,IAAA,2DAA8B,EAAC,GAAG,EAAE,MAAM,CAAC;gBAC7C;iBACH;gBACD,GAAG,iCAAiC,CAAC,KAAK,CAAC,UAAU,CAAC;aACvD,CAAC;;qCAEyB,IAAA,2DAA8B,EAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC;QAC1F,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAnBD,sGAmBC;AAmCD;;;GAGG;AACH,SAAgB,gDAAgD,CAAC,KAAsD;IACrH,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACxE,MAAM,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,IAAI,6CAA6C,EAAE,CAAC;IAC3G,KAAK,UAAU,uBAAuB,CAAC,cAAsB;QAC3D,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,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAC/H,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;gBACxD,SAAS;gBACT,MAAM,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC;aAClC,CAAC,CAAC,CACJ,CAAC;YAEF,OAAO;UACH,YAAY;iBACX,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B;;kBAEM,IAAA,2DAA8B,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;AA1DD,4GA0DC;AASD;;;;GAIG;AACH,SAAgB,yCAAyC,CAAC,KAA+C;IACvG,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,gDAAgD,CAAC;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,2DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC;YACvD,WAAW,CACX,IAAI,EACJ,CAAC,EAAE,QAAQ,EAAE,IAAA,2DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,iCAAiC,CAAC,UAAU,CAAC,CAAC,EACzH,GAAG,IAAA,2DAA8B,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,2DAA8B,EAAC,UAAU,EAAE,WAAW,CAAC;YACvD,IAAA,2DAA8B,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,CAAC;iBAChC,MAAM,OAAO,CAAC,kBAAkB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;;qCAExE,IAAA,2DAA8B,EAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC;QAC/F;KACH,CACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAvCD,8FAuCC;AAED,SAAS,iCAAiC,CAAC,UAAkB;IAC3D,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,EAAE,QAAQ,EAAE,eAAe,IAAA,2DAA8B,EAAC,UAAU,EAAE,cAAc,CAAC,kBAAkB,EAAE;QACzG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,EAAE,QAAQ,EAAE,eAAe,IAAA,2DAA8B,EAAC,UAAU,EAAE,cAAc,CAAC,8BAA8B,EAAE;QACrH,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAA+G,EAC/G,SAAwC,EACxC,aAAsB;IAEtB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,gEAAmC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InternalUtils.d.ts","sourceRoot":"","sources":["../../../src/shared/InternalUtils.ts"],"names":[],"mappings":"AAKA,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAGzD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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.julianToDateTime = void 0;
|
|
8
|
+
/** @internal */
|
|
9
|
+
function julianToDateTime(julianDate) {
|
|
10
|
+
const millis = (julianDate - 2440587.5) * 86400000;
|
|
11
|
+
return new Date(millis);
|
|
12
|
+
}
|
|
13
|
+
exports.julianToDateTime = julianToDateTime;
|
|
14
|
+
//# sourceMappingURL=InternalUtils.js.map
|