@itwin/presentation-frontend 3.2.0-dev.9 → 3.3.0-dev.2
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 +28 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts +12 -12
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js +10 -10
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend.d.ts +1 -1
- package/lib/cjs/presentation-frontend.js +1 -1
- package/lib/cjs/presentation-frontend.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts +12 -12
- package/lib/esm/presentation-frontend/selection/SelectionManager.js +10 -10
- package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/esm/presentation-frontend.d.ts +1 -1
- package/lib/esm/presentation-frontend.js +1 -1
- package/lib/esm/presentation-frontend.js.map +1 -1
- package/package.json +16 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
# Change Log - @itwin/presentation-frontend
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Fri, 15 Apr 2022 13:49:25 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 3.1.3
|
|
6
|
+
Fri, 15 Apr 2022 13:49:25 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 3.1.2
|
|
11
|
+
Wed, 06 Apr 2022 22:27:56 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
14
|
+
|
|
15
|
+
## 3.1.1
|
|
16
|
+
Thu, 31 Mar 2022 15:55:48 GMT
|
|
17
|
+
|
|
18
|
+
_Version update only_
|
|
19
|
+
|
|
20
|
+
## 3.1.0
|
|
21
|
+
Tue, 29 Mar 2022 20:53:47 GMT
|
|
22
|
+
|
|
23
|
+
_Version update only_
|
|
24
|
+
|
|
25
|
+
## 3.0.3
|
|
26
|
+
Fri, 25 Mar 2022 15:10:02 GMT
|
|
27
|
+
|
|
28
|
+
### Updates
|
|
29
|
+
|
|
30
|
+
- Fix paged requests result accumulation resulting in infinite loop.
|
|
4
31
|
|
|
5
32
|
## 3.0.2
|
|
6
33
|
Thu, 10 Mar 2022 21:18:13 GMT
|
|
@@ -13,7 +13,7 @@ export interface ISelectionProvider {
|
|
|
13
13
|
selectionChange: SelectionChangeEvent;
|
|
14
14
|
/** Get the selection stored in the provider.
|
|
15
15
|
* @param imodel iModel connection which the selection is associated with.
|
|
16
|
-
* @param level Level of the selection (see [
|
|
16
|
+
* @param level Level of the selection (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
17
17
|
*/
|
|
18
18
|
getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\r\n\r\n/**\r\n * Selection provider interface which provides main selection and sub-selection.\r\n * @public\r\n */\r\nexport interface ISelectionProvider {\r\n /** An event that's fired when selection changes */\r\n selectionChange: SelectionChangeEvent;\r\n\r\n /** Get the selection stored in the provider.\r\n * @param imodel iModel connection which the selection is associated with.\r\n * @param level Level of the selection (see [
|
|
1
|
+
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\r\n\r\n/**\r\n * Selection provider interface which provides main selection and sub-selection.\r\n * @public\r\n */\r\nexport interface ISelectionProvider {\r\n /** An event that's fired when selection changes */\r\n selectionChange: SelectionChangeEvent;\r\n\r\n /** Get the selection stored in the provider.\r\n * @param imodel iModel connection which the selection is associated with.\r\n * @param level Level of the selection (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n */\r\n getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;\r\n}\r\n"]}
|
|
@@ -37,7 +37,7 @@ export declare enum SelectionChangeType {
|
|
|
37
37
|
export interface SelectionChangeEventArgs {
|
|
38
38
|
/** The name of the selection source which caused the selection change. */
|
|
39
39
|
source: string;
|
|
40
|
-
/** Level of the selection. See [selection levels]($docs/presentation/
|
|
40
|
+
/** Level of the selection. See [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels). */
|
|
41
41
|
level: number;
|
|
42
42
|
/** The selection change type. */
|
|
43
43
|
changeType: SelectionChangeType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionChangeEvent.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,OAAO,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEtH;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,OAAO,CAAC,wBAAwB,CAAC;CAAI;AAE/E;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,GAAG,IAAA;IAEH,8BAA8B;IAC9B,MAAM,IAAA;IAEN,8BAA8B;IAC9B,OAAO,IAAA;IAEP,6BAA6B;IAC7B,KAAK,IAAA;CACN;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IAEf,
|
|
1
|
+
{"version":3,"file":"SelectionChangeEvent.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,OAAO,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEtH;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,OAAO,CAAC,wBAAwB,CAAC;CAAI;AAE/E;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,GAAG,IAAA;IAEH,8BAA8B;IAC9B,MAAM,IAAA;IAEN,8BAA8B;IAC9B,OAAO,IAAA;IAEP,6BAA6B;IAC7B,KAAK,IAAA;CACN;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IAEf,yIAAyI;IACzI,KAAK,EAAE,MAAM,CAAC;IAEd,iCAAiC;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAEhC,2DAA2D;IAC3D,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEvB,qEAAqE;IACrE,MAAM,EAAE,gBAAgB,CAAC;IAEzB,0DAA0D;IAC1D,SAAS,EAAE,IAAI,CAAC;IAEhB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAW9C;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,sBAAiC;CAAI;AAA/E,oDAA+E;AAE/E;;;GAGG;AACH,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAY9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\n\r\n/**\r\n * An interface for selection change listeners.\r\n * @public\r\n */\r\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\r\n\r\n/**\r\n * An event broadcasted on selection changes\r\n * @public\r\n */\r\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\r\n\r\n/**\r\n * The type of selection change\r\n * @public\r\n */\r\nexport enum SelectionChangeType {\r\n /** Added to selection. */\r\n Add,\r\n\r\n /** Removed from selection. */\r\n Remove,\r\n\r\n /** Selection was replaced. */\r\n Replace,\r\n\r\n /** Selection was cleared. */\r\n Clear,\r\n}\r\n\r\n/**\r\n * The event object that's sent when the selection changes.\r\n * @public\r\n */\r\nexport interface SelectionChangeEventArgs {\r\n /** The name of the selection source which caused the selection change. */\r\n source: string;\r\n\r\n /** Level of the selection. See [selection levels]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAW9C;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,sBAAiC;CAAI;AAA/E,oDAA+E;AAE/E;;;GAGG;AACH,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAY9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\n\r\n/**\r\n * An interface for selection change listeners.\r\n * @public\r\n */\r\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\r\n\r\n/**\r\n * An event broadcasted on selection changes\r\n * @public\r\n */\r\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\r\n\r\n/**\r\n * The type of selection change\r\n * @public\r\n */\r\nexport enum SelectionChangeType {\r\n /** Added to selection. */\r\n Add,\r\n\r\n /** Removed from selection. */\r\n Remove,\r\n\r\n /** Selection was replaced. */\r\n Replace,\r\n\r\n /** Selection was cleared. */\r\n Clear,\r\n}\r\n\r\n/**\r\n * The event object that's sent when the selection changes.\r\n * @public\r\n */\r\nexport interface SelectionChangeEventArgs {\r\n /** The name of the selection source which caused the selection change. */\r\n source: string;\r\n\r\n /** Level of the selection. See [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels). */\r\n level: number;\r\n\r\n /** The selection change type. */\r\n changeType: SelectionChangeType;\r\n\r\n /** Set of keys affected by this selection change event. */\r\n keys: Readonly<KeySet>;\r\n\r\n /** iModel connection with which the selection is associated with. */\r\n imodel: IModelConnection;\r\n\r\n /** The timestamp of when the selection change happened */\r\n timestamp: Date;\r\n\r\n /** Id of the ruleset associated with the selection change. */\r\n rulesetId?: string;\r\n}\r\n"]}
|
|
@@ -13,7 +13,7 @@ import { SelectionScopesManager } from "./SelectionScopesManager";
|
|
|
13
13
|
* @public
|
|
14
14
|
*/
|
|
15
15
|
export interface SelectionManagerProps {
|
|
16
|
-
/** A manager for [selection scopes]($docs/presentation/
|
|
16
|
+
/** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */
|
|
17
17
|
scopes: SelectionScopesManager;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
@@ -26,7 +26,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
26
26
|
private _hiliteSetProviders;
|
|
27
27
|
/** An event which gets broadcasted on selection changes */
|
|
28
28
|
readonly selectionChange: SelectionChangeEvent;
|
|
29
|
-
/** Manager for [selection scopes]($docs/presentation/
|
|
29
|
+
/** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */
|
|
30
30
|
readonly scopes: SelectionScopesManager;
|
|
31
31
|
/**
|
|
32
32
|
* Creates an instance of SelectionManager.
|
|
@@ -55,7 +55,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
55
55
|
* @param source Name of the selection source
|
|
56
56
|
* @param imodel iModel associated with the selection
|
|
57
57
|
* @param keys Keys to add
|
|
58
|
-
* @param level Selection level (see [
|
|
58
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
59
59
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
60
60
|
*/
|
|
61
61
|
addToSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -64,7 +64,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
64
64
|
* @param source Name of the selection source
|
|
65
65
|
* @param imodel iModel associated with the selection
|
|
66
66
|
* @param keys Keys to remove
|
|
67
|
-
* @param level Selection level (see [
|
|
67
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
68
68
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
69
69
|
*/
|
|
70
70
|
removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -73,7 +73,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
73
73
|
* @param source Name of the selection source
|
|
74
74
|
* @param imodel iModel associated with the selection
|
|
75
75
|
* @param keys Keys to add
|
|
76
|
-
* @param level Selection level (see [
|
|
76
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
77
77
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
78
78
|
*/
|
|
79
79
|
replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -81,37 +81,37 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
81
81
|
* Clear current selection
|
|
82
82
|
* @param source Name of the selection source
|
|
83
83
|
* @param imodel iModel associated with the selection
|
|
84
|
-
* @param level Selection level (see [
|
|
84
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
85
85
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
86
86
|
*/
|
|
87
87
|
clearSelection(source: string, imodel: IModelConnection, level?: number, rulesetId?: string): void;
|
|
88
88
|
/**
|
|
89
|
-
* Add keys to selection after applying [selection scope]($docs/presentation/
|
|
89
|
+
* Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
90
90
|
* @param source Name of the selection source
|
|
91
91
|
* @param imodel iModel associated with the selection
|
|
92
92
|
* @param ids Element IDs to add
|
|
93
93
|
* @param scope Selection scope to apply
|
|
94
|
-
* @param level Selection level (see [
|
|
94
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
95
95
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
96
96
|
*/
|
|
97
97
|
addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
98
98
|
/**
|
|
99
|
-
* Remove keys from current selection after applying [selection scope]($docs/presentation/
|
|
99
|
+
* Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
100
100
|
* @param source Name of the selection source
|
|
101
101
|
* @param imodel iModel associated with the selection
|
|
102
102
|
* @param ids Element IDs to remove
|
|
103
103
|
* @param scope Selection scope to apply
|
|
104
|
-
* @param level Selection level (see [
|
|
104
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
105
105
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
106
106
|
*/
|
|
107
107
|
removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
108
108
|
/**
|
|
109
|
-
* Replace current selection with keys after applying [selection scope]($docs/presentation/
|
|
109
|
+
* Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
110
110
|
* @param source Name of the selection source
|
|
111
111
|
* @param imodel iModel associated with the selection
|
|
112
112
|
* @param ids Element IDs to replace with
|
|
113
113
|
* @param scope Selection scope to apply
|
|
114
|
-
* @param level Selection level (see [
|
|
114
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
115
115
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
116
116
|
*/
|
|
117
117
|
replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
@@ -126,7 +126,7 @@ class SelectionManager {
|
|
|
126
126
|
* @param source Name of the selection source
|
|
127
127
|
* @param imodel iModel associated with the selection
|
|
128
128
|
* @param keys Keys to add
|
|
129
|
-
* @param level Selection level (see [
|
|
129
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
130
130
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
131
131
|
*/
|
|
132
132
|
addToSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -146,7 +146,7 @@ class SelectionManager {
|
|
|
146
146
|
* @param source Name of the selection source
|
|
147
147
|
* @param imodel iModel associated with the selection
|
|
148
148
|
* @param keys Keys to remove
|
|
149
|
-
* @param level Selection level (see [
|
|
149
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
150
150
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
151
151
|
*/
|
|
152
152
|
removeFromSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -166,7 +166,7 @@ class SelectionManager {
|
|
|
166
166
|
* @param source Name of the selection source
|
|
167
167
|
* @param imodel iModel associated with the selection
|
|
168
168
|
* @param keys Keys to add
|
|
169
|
-
* @param level Selection level (see [
|
|
169
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
170
170
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
171
171
|
*/
|
|
172
172
|
replaceSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -185,7 +185,7 @@ class SelectionManager {
|
|
|
185
185
|
* Clear current selection
|
|
186
186
|
* @param source Name of the selection source
|
|
187
187
|
* @param imodel iModel associated with the selection
|
|
188
|
-
* @param level Selection level (see [
|
|
188
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
189
189
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
190
190
|
*/
|
|
191
191
|
clearSelection(source, imodel, level = 0, rulesetId) {
|
|
@@ -201,12 +201,12 @@ class SelectionManager {
|
|
|
201
201
|
this.handleEvent(evt);
|
|
202
202
|
}
|
|
203
203
|
/**
|
|
204
|
-
* Add keys to selection after applying [selection scope]($docs/presentation/
|
|
204
|
+
* Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
205
205
|
* @param source Name of the selection source
|
|
206
206
|
* @param imodel iModel associated with the selection
|
|
207
207
|
* @param ids Element IDs to add
|
|
208
208
|
* @param scope Selection scope to apply
|
|
209
|
-
* @param level Selection level (see [
|
|
209
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
210
210
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
211
211
|
*/
|
|
212
212
|
async addToSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -214,12 +214,12 @@ class SelectionManager {
|
|
|
214
214
|
this.addToSelection(source, imodel, scopedKeys, level, rulesetId);
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
|
-
* Remove keys from current selection after applying [selection scope]($docs/presentation/
|
|
217
|
+
* Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
218
218
|
* @param source Name of the selection source
|
|
219
219
|
* @param imodel iModel associated with the selection
|
|
220
220
|
* @param ids Element IDs to remove
|
|
221
221
|
* @param scope Selection scope to apply
|
|
222
|
-
* @param level Selection level (see [
|
|
222
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
223
223
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
224
224
|
*/
|
|
225
225
|
async removeFromSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -227,12 +227,12 @@ class SelectionManager {
|
|
|
227
227
|
this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);
|
|
228
228
|
}
|
|
229
229
|
/**
|
|
230
|
-
* Replace current selection with keys after applying [selection scope]($docs/presentation/
|
|
230
|
+
* Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
231
231
|
* @param source Name of the selection source
|
|
232
232
|
* @param imodel iModel associated with the selection
|
|
233
233
|
* @param ids Element IDs to replace with
|
|
234
234
|
* @param scope Selection scope to apply
|
|
235
|
-
* @param level Selection level (see [
|
|
235
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
236
236
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
237
237
|
*/
|
|
238
238
|
async replaceSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\r\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\r\nimport { getScopeId, SelectionScopesManager } from \"./SelectionScopesManager\";\r\n\r\n/**\r\n * Properties for creating [[SelectionManager]].\r\n * @public\r\n */\r\nexport interface SelectionManagerProps {\r\n /** A manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n scopes: SelectionScopesManager;\r\n}\r\n\r\n/**\r\n * The selection manager which stores the overall selection.\r\n * @public\r\n */\r\nexport class SelectionManager implements ISelectionProvider {\r\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\r\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\r\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\r\n\r\n /** An event which gets broadcasted on selection changes */\r\n public readonly selectionChange: SelectionChangeEvent;\r\n\r\n /** Manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n public readonly scopes: SelectionScopesManager;\r\n\r\n /**\r\n * Creates an instance of SelectionManager.\r\n */\r\n constructor(props: SelectionManagerProps) {\r\n this.selectionChange = new SelectionChangeEvent();\r\n this.scopes = props.scopes;\r\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\r\n this.onConnectionClose(imodel);\r\n });\r\n }\r\n\r\n private onConnectionClose(imodel: IModelConnection): void {\r\n this.clearSelection(\"Connection Close Event\", imodel);\r\n this._selectionContainerMap.delete(imodel);\r\n this._hiliteSetProviders.delete(imodel);\r\n }\r\n\r\n private getContainer(imodel: IModelConnection): SelectionContainer {\r\n let selectionContainer = this._selectionContainerMap.get(imodel);\r\n if (!selectionContainer) {\r\n selectionContainer = new SelectionContainer();\r\n this._selectionContainerMap.set(imodel, selectionContainer);\r\n }\r\n return selectionContainer;\r\n }\r\n\r\n /** @internal */\r\n // istanbul ignore next\r\n public getToolSelectionSyncHandler(imodel: IModelConnection) { return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler; }\r\n\r\n /**\r\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\r\n */\r\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (sync) {\r\n if (!registration || registration.requestorsCount === 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\r\n }\r\n } else {\r\n if (registration && registration.requestorsCount > 0) {\r\n const requestorsCount = registration.requestorsCount - 1;\r\n if (requestorsCount > 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.delete(imodel);\r\n registration.handler.dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\r\n * is disposed.\r\n */\r\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (!registration)\r\n return { dispose: () => { } };\r\n\r\n const wasSuspended = registration.handler.isSuspended;\r\n registration.handler.isSuspended = true;\r\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\r\n }\r\n\r\n /** Get the selection levels currently stored in this manager for the specified imodel */\r\n public getSelectionLevels(imodel: IModelConnection): number[] {\r\n return this.getContainer(imodel).getSelectionLevels();\r\n }\r\n\r\n /** Get the selection currently stored in this manager */\r\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\r\n return this.getContainer(imodel).getSelection(level);\r\n }\r\n\r\n private handleEvent(evt: SelectionChangeEventArgs): void {\r\n const container = this.getContainer(evt.imodel);\r\n const selectedItemsSet = container.getSelection(evt.level);\r\n const guidBefore = selectedItemsSet.guid;\r\n switch (evt.changeType) {\r\n case SelectionChangeType.Add:\r\n selectedItemsSet.add(evt.keys);\r\n break;\r\n case SelectionChangeType.Remove:\r\n selectedItemsSet.delete(evt.keys);\r\n break;\r\n case SelectionChangeType.Replace:\r\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\r\n // note: the above check is only needed to avoid changing\r\n // guid of the keyset if we're replacing keyset with the same keys\r\n selectedItemsSet.clear().add(evt.keys);\r\n }\r\n break;\r\n case SelectionChangeType.Clear:\r\n selectedItemsSet.clear();\r\n break;\r\n }\r\n\r\n if (selectedItemsSet.guid === guidBefore)\r\n return;\r\n\r\n container.clear(evt.level + 1);\r\n this.selectionChange.raiseEvent(evt, this);\r\n }\r\n\r\n /**\r\n * Add keys to the selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Add,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to remove\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Remove,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Replace current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Replace,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Clear,\r\n keys: new KeySet(),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Add keys to selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to add\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to remove\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Replace current selection with keys after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to replace with\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Get the current hilite set for the specified imodel\r\n * @public\r\n */\r\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\r\n let provider = this._hiliteSetProviders.get(imodel);\r\n if (!provider) {\r\n provider = HiliteSetProvider.create({ imodel });\r\n this._hiliteSetProviders.set(imodel, provider);\r\n }\r\n return provider.getHiliteSet(this.getSelection(imodel));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SelectionContainer {\r\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\r\n\r\n constructor() {\r\n this._selectedItemsSetMap = new Map<number, KeySet>();\r\n }\r\n\r\n public getSelection(level: number): KeySet {\r\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\r\n if (!selectedItemsSet) {\r\n selectedItemsSet = new KeySet();\r\n this._selectedItemsSetMap.set(level, selectedItemsSet);\r\n }\r\n return selectedItemsSet;\r\n }\r\n\r\n public getSelectionLevels(): number[] {\r\n const levels = new Array<number>();\r\n for (const entry of this._selectedItemsSetMap.entries()) {\r\n if (!entry[1].isEmpty)\r\n levels.push(entry[0]);\r\n }\r\n return levels.sort();\r\n }\r\n\r\n public clear(level: number) {\r\n const keys = this._selectedItemsSetMap.keys();\r\n for (const key of keys) {\r\n if (key >= level) {\r\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\r\n selectedItemsSet.clear();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\r\n\r\n/** @internal */\r\nexport class ToolSelectionSyncHandler implements IDisposable {\r\n\r\n private _selectionSourceName = \"Tool\";\r\n private _logicalSelection: SelectionManager;\r\n private _imodel: IModelConnection;\r\n private _imodelToolSelectionListenerDisposeFunc: () => void;\r\n private _asyncsTracker = new AsyncTasksTracker();\r\n public isSuspended?: boolean;\r\n\r\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\r\n this._imodel = imodel;\r\n this._logicalSelection = logicalSelection;\r\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\r\n }\r\n\r\n public dispose() {\r\n this._imodelToolSelectionListenerDisposeFunc();\r\n }\r\n\r\n /** note: used only it tests */\r\n public get pendingAsyncs() { return this._asyncsTracker.pendingAsyncs; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\r\n // ignore selection change event if the handler is suspended\r\n if (this.isSuspended)\r\n return;\r\n\r\n // this component only cares about its own imodel\r\n const imodel = ev.set.iModel;\r\n if (imodel !== this._imodel)\r\n return;\r\n\r\n // determine the level of selection changes\r\n // wip: may want to allow selecting at different levels?\r\n const selectionLevel = 0;\r\n\r\n let ids: Id64Arg;\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n ids = ev.added;\r\n break;\r\n case SelectionSetEventType.Replace:\r\n ids = ev.set.elements;\r\n break;\r\n default:\r\n ids = ev.removed;\r\n break;\r\n }\r\n\r\n const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\r\n\r\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\r\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\r\n // we can't because otherwise our keys compare fails (presentation components load data with\r\n // concrete classes)\r\n const changer = new ScopedSelectionChanger(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\r\n\r\n // we know what to do immediately on `clear` events\r\n if (SelectionSetEventType.Clear === ev.type) {\r\n await changer.clear(selectionLevel);\r\n return;\r\n }\r\n\r\n const parsedIds = parseIds(ids);\r\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Replace:\r\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Remove:\r\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst parseIds = (ids: Id64Arg): { persistent: Id64Arg, transient: Id64Arg } => {\r\n let allPersistent = true;\r\n let allTransient = true;\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n allPersistent = false;\r\n else\r\n allTransient = false;\r\n\r\n if (!allPersistent && !allTransient)\r\n break;\r\n }\r\n\r\n // avoid making a copy if ids are only persistent or only transient\r\n if (allPersistent) {\r\n return { persistent: ids, transient: [] };\r\n } else if (allTransient) {\r\n return { persistent: [], transient: ids };\r\n }\r\n\r\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\r\n // a Set for performance\r\n const persistentElementIds: Id64Array = [];\r\n const transientElementIds: Id64Array = [];\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n transientElementIds.push(id);\r\n else\r\n persistentElementIds.push(id);\r\n }\r\n\r\n return { persistent: persistentElementIds, transient: transientElementIds };\r\n};\r\n\r\nfunction addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\r\n for (const id of Id64.iterable(transientIds))\r\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\r\n}\r\n\r\n/** @internal */\r\nclass ScopedSelectionChanger {\r\n public readonly name: string;\r\n public readonly imodel: IModelConnection;\r\n public readonly manager: SelectionManager;\r\n public readonly scope: SelectionScope | string;\r\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScope | string) {\r\n this.name = name;\r\n this.imodel = imodel;\r\n this.manager = manager;\r\n this.scope = scope;\r\n }\r\n public async clear(level: number): Promise<void> {\r\n this.manager.clearSelection(this.name, this.imodel, level);\r\n }\r\n public async add(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.addToSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\r\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\r\nimport { getScopeId, SelectionScopesManager } from \"./SelectionScopesManager\";\r\n\r\n/**\r\n * Properties for creating [[SelectionManager]].\r\n * @public\r\n */\r\nexport interface SelectionManagerProps {\r\n /** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\r\n scopes: SelectionScopesManager;\r\n}\r\n\r\n/**\r\n * The selection manager which stores the overall selection.\r\n * @public\r\n */\r\nexport class SelectionManager implements ISelectionProvider {\r\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\r\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\r\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\r\n\r\n /** An event which gets broadcasted on selection changes */\r\n public readonly selectionChange: SelectionChangeEvent;\r\n\r\n /** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\r\n public readonly scopes: SelectionScopesManager;\r\n\r\n /**\r\n * Creates an instance of SelectionManager.\r\n */\r\n constructor(props: SelectionManagerProps) {\r\n this.selectionChange = new SelectionChangeEvent();\r\n this.scopes = props.scopes;\r\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\r\n this.onConnectionClose(imodel);\r\n });\r\n }\r\n\r\n private onConnectionClose(imodel: IModelConnection): void {\r\n this.clearSelection(\"Connection Close Event\", imodel);\r\n this._selectionContainerMap.delete(imodel);\r\n this._hiliteSetProviders.delete(imodel);\r\n }\r\n\r\n private getContainer(imodel: IModelConnection): SelectionContainer {\r\n let selectionContainer = this._selectionContainerMap.get(imodel);\r\n if (!selectionContainer) {\r\n selectionContainer = new SelectionContainer();\r\n this._selectionContainerMap.set(imodel, selectionContainer);\r\n }\r\n return selectionContainer;\r\n }\r\n\r\n /** @internal */\r\n // istanbul ignore next\r\n public getToolSelectionSyncHandler(imodel: IModelConnection) { return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler; }\r\n\r\n /**\r\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\r\n */\r\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (sync) {\r\n if (!registration || registration.requestorsCount === 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\r\n }\r\n } else {\r\n if (registration && registration.requestorsCount > 0) {\r\n const requestorsCount = registration.requestorsCount - 1;\r\n if (requestorsCount > 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.delete(imodel);\r\n registration.handler.dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\r\n * is disposed.\r\n */\r\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (!registration)\r\n return { dispose: () => { } };\r\n\r\n const wasSuspended = registration.handler.isSuspended;\r\n registration.handler.isSuspended = true;\r\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\r\n }\r\n\r\n /** Get the selection levels currently stored in this manager for the specified imodel */\r\n public getSelectionLevels(imodel: IModelConnection): number[] {\r\n return this.getContainer(imodel).getSelectionLevels();\r\n }\r\n\r\n /** Get the selection currently stored in this manager */\r\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\r\n return this.getContainer(imodel).getSelection(level);\r\n }\r\n\r\n private handleEvent(evt: SelectionChangeEventArgs): void {\r\n const container = this.getContainer(evt.imodel);\r\n const selectedItemsSet = container.getSelection(evt.level);\r\n const guidBefore = selectedItemsSet.guid;\r\n switch (evt.changeType) {\r\n case SelectionChangeType.Add:\r\n selectedItemsSet.add(evt.keys);\r\n break;\r\n case SelectionChangeType.Remove:\r\n selectedItemsSet.delete(evt.keys);\r\n break;\r\n case SelectionChangeType.Replace:\r\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\r\n // note: the above check is only needed to avoid changing\r\n // guid of the keyset if we're replacing keyset with the same keys\r\n selectedItemsSet.clear().add(evt.keys);\r\n }\r\n break;\r\n case SelectionChangeType.Clear:\r\n selectedItemsSet.clear();\r\n break;\r\n }\r\n\r\n if (selectedItemsSet.guid === guidBefore)\r\n return;\r\n\r\n container.clear(evt.level + 1);\r\n this.selectionChange.raiseEvent(evt, this);\r\n }\r\n\r\n /**\r\n * Add keys to the selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Add,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to remove\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Remove,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Replace current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Replace,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Clear,\r\n keys: new KeySet(),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to add\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to remove\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to replace with\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Get the current hilite set for the specified imodel\r\n * @public\r\n */\r\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\r\n let provider = this._hiliteSetProviders.get(imodel);\r\n if (!provider) {\r\n provider = HiliteSetProvider.create({ imodel });\r\n this._hiliteSetProviders.set(imodel, provider);\r\n }\r\n return provider.getHiliteSet(this.getSelection(imodel));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SelectionContainer {\r\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\r\n\r\n constructor() {\r\n this._selectedItemsSetMap = new Map<number, KeySet>();\r\n }\r\n\r\n public getSelection(level: number): KeySet {\r\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\r\n if (!selectedItemsSet) {\r\n selectedItemsSet = new KeySet();\r\n this._selectedItemsSetMap.set(level, selectedItemsSet);\r\n }\r\n return selectedItemsSet;\r\n }\r\n\r\n public getSelectionLevels(): number[] {\r\n const levels = new Array<number>();\r\n for (const entry of this._selectedItemsSetMap.entries()) {\r\n if (!entry[1].isEmpty)\r\n levels.push(entry[0]);\r\n }\r\n return levels.sort();\r\n }\r\n\r\n public clear(level: number) {\r\n const keys = this._selectedItemsSetMap.keys();\r\n for (const key of keys) {\r\n if (key >= level) {\r\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\r\n selectedItemsSet.clear();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\r\n\r\n/** @internal */\r\nexport class ToolSelectionSyncHandler implements IDisposable {\r\n\r\n private _selectionSourceName = \"Tool\";\r\n private _logicalSelection: SelectionManager;\r\n private _imodel: IModelConnection;\r\n private _imodelToolSelectionListenerDisposeFunc: () => void;\r\n private _asyncsTracker = new AsyncTasksTracker();\r\n public isSuspended?: boolean;\r\n\r\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\r\n this._imodel = imodel;\r\n this._logicalSelection = logicalSelection;\r\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\r\n }\r\n\r\n public dispose() {\r\n this._imodelToolSelectionListenerDisposeFunc();\r\n }\r\n\r\n /** note: used only it tests */\r\n public get pendingAsyncs() { return this._asyncsTracker.pendingAsyncs; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\r\n // ignore selection change event if the handler is suspended\r\n if (this.isSuspended)\r\n return;\r\n\r\n // this component only cares about its own imodel\r\n const imodel = ev.set.iModel;\r\n if (imodel !== this._imodel)\r\n return;\r\n\r\n // determine the level of selection changes\r\n // wip: may want to allow selecting at different levels?\r\n const selectionLevel = 0;\r\n\r\n let ids: Id64Arg;\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n ids = ev.added;\r\n break;\r\n case SelectionSetEventType.Replace:\r\n ids = ev.set.elements;\r\n break;\r\n default:\r\n ids = ev.removed;\r\n break;\r\n }\r\n\r\n const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\r\n\r\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\r\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\r\n // we can't because otherwise our keys compare fails (presentation components load data with\r\n // concrete classes)\r\n const changer = new ScopedSelectionChanger(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\r\n\r\n // we know what to do immediately on `clear` events\r\n if (SelectionSetEventType.Clear === ev.type) {\r\n await changer.clear(selectionLevel);\r\n return;\r\n }\r\n\r\n const parsedIds = parseIds(ids);\r\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Replace:\r\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Remove:\r\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst parseIds = (ids: Id64Arg): { persistent: Id64Arg, transient: Id64Arg } => {\r\n let allPersistent = true;\r\n let allTransient = true;\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n allPersistent = false;\r\n else\r\n allTransient = false;\r\n\r\n if (!allPersistent && !allTransient)\r\n break;\r\n }\r\n\r\n // avoid making a copy if ids are only persistent or only transient\r\n if (allPersistent) {\r\n return { persistent: ids, transient: [] };\r\n } else if (allTransient) {\r\n return { persistent: [], transient: ids };\r\n }\r\n\r\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\r\n // a Set for performance\r\n const persistentElementIds: Id64Array = [];\r\n const transientElementIds: Id64Array = [];\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n transientElementIds.push(id);\r\n else\r\n persistentElementIds.push(id);\r\n }\r\n\r\n return { persistent: persistentElementIds, transient: transientElementIds };\r\n};\r\n\r\nfunction addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\r\n for (const id of Id64.iterable(transientIds))\r\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\r\n}\r\n\r\n/** @internal */\r\nclass ScopedSelectionChanger {\r\n public readonly name: string;\r\n public readonly imodel: IModelConnection;\r\n public readonly manager: SelectionManager;\r\n public readonly scope: SelectionScope | string;\r\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScope | string) {\r\n this.name = name;\r\n this.imodel = imodel;\r\n this.manager = manager;\r\n this.scope = scope;\r\n }\r\n public async clear(level: number): Promise<void> {\r\n this.manager.clearSelection(this.name, this.imodel, level);\r\n }\r\n public async add(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.addToSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\r\n }\r\n}\r\n"]}
|
|
@@ -15,7 +15,7 @@ export interface SelectionScopesManagerProps {
|
|
|
15
15
|
localeProvider?: () => string | undefined;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* A manager that knows available [selection scopes]($docs/presentation/
|
|
18
|
+
* A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)
|
|
19
19
|
* and can compute logical selection based on element IDs and selection scope.
|
|
20
20
|
*
|
|
21
21
|
* @public
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.getScopeId = exports.SelectionScopesManager = void 0;
|
|
11
11
|
const presentation_common_1 = require("@itwin/presentation-common");
|
|
12
12
|
/**
|
|
13
|
-
* A manager that knows available [selection scopes]($docs/presentation/
|
|
13
|
+
* A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)
|
|
14
14
|
* and can compute logical selection based on element IDs and selection scope.
|
|
15
15
|
*
|
|
16
16
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64Arg } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { DEFAULT_KEYS_BATCH_SIZE, KeySet, RpcRequestsHandler, SelectionScope } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Properties for creating [[SelectionScopesManager]].\r\n * @public\r\n */\r\nexport interface SelectionScopesManagerProps {\r\n /** RPC handler to use for requesting selection scopes */\r\n rpcRequestsHandler: RpcRequestsHandler;\r\n\r\n /** Provider of active locale to use for localizing scopes */\r\n localeProvider?: () => string | undefined;\r\n}\r\n\r\n/**\r\n * A manager that knows available [selection scopes]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64Arg } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { DEFAULT_KEYS_BATCH_SIZE, KeySet, RpcRequestsHandler, SelectionScope } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Properties for creating [[SelectionScopesManager]].\r\n * @public\r\n */\r\nexport interface SelectionScopesManagerProps {\r\n /** RPC handler to use for requesting selection scopes */\r\n rpcRequestsHandler: RpcRequestsHandler;\r\n\r\n /** Provider of active locale to use for localizing scopes */\r\n localeProvider?: () => string | undefined;\r\n}\r\n\r\n/**\r\n * A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)\r\n * and can compute logical selection based on element IDs and selection scope.\r\n *\r\n * @public\r\n */\r\nexport class SelectionScopesManager {\r\n\r\n private _rpcRequestsHandler: RpcRequestsHandler;\r\n private _getLocale: () => string | undefined;\r\n private _activeScope: SelectionScope | string | undefined;\r\n\r\n public constructor(props: SelectionScopesManagerProps) {\r\n this._rpcRequestsHandler = props.rpcRequestsHandler;\r\n this._getLocale = props.localeProvider ? props.localeProvider : (() => undefined);\r\n }\r\n\r\n /** Get active locale */\r\n public get activeLocale() { return this._getLocale(); }\r\n\r\n /** The active selection scope or its id */\r\n public get activeScope() { return this._activeScope; }\r\n public set activeScope(scope: SelectionScope | string | undefined) { this._activeScope = scope; }\r\n\r\n /**\r\n * Get available selection scopes.\r\n * @param imodel The iModel to get selection scopes for\r\n * @param locale Optional locale to use when localizing scopes' label and description\r\n */\r\n public async getSelectionScopes(imodel: IModelConnection, locale?: string): Promise<SelectionScope[]> {\r\n if (!locale)\r\n locale = this._getLocale();\r\n return this._rpcRequestsHandler.getSelectionScopes({ imodel: imodel.getRpcProps(), locale });\r\n }\r\n\r\n /**\r\n * Computes keys that need to be added to logical selection based on provided selection scope.\r\n * @param ids Element IDs to compute selection for\r\n * @param scope Selection scope to apply\r\n */\r\n public async computeSelection(imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string): Promise<KeySet> {\r\n const scopeId = getScopeId(scope);\r\n\r\n // convert ids input to array\r\n if (typeof ids === \"string\")\r\n ids = [ids];\r\n else if (ids instanceof Set)\r\n ids = [...ids];\r\n\r\n // compute selection in batches to avoid HTTP 413\r\n const keys = new KeySet();\r\n const batchSize = DEFAULT_KEYS_BATCH_SIZE;\r\n const batchesCount = Math.ceil(ids.length / batchSize);\r\n const batchKeyPromises = [];\r\n for (let batchIndex = 0; batchIndex < batchesCount; ++batchIndex) {\r\n const batchStart = batchSize * batchIndex;\r\n const batchEnd = (batchStart + batchSize > ids.length) ? ids.length : (batchStart + batchSize);\r\n const batchIds = (0 === batchIndex && ids.length <= batchEnd) ? ids : ids.slice(batchStart, batchEnd);\r\n batchKeyPromises.push(this._rpcRequestsHandler.computeSelection({ imodel: imodel.getRpcProps() }, batchIds, scopeId));\r\n }\r\n const batchKeys = (await Promise.all(batchKeyPromises)).map(KeySet.fromJSON);\r\n batchKeys.forEach((bk) => keys.add(bk));\r\n return keys;\r\n }\r\n}\r\n\r\n/**\r\n * Determines the scope id\r\n * @param scope Selection scope\r\n * @public\r\n */\r\nexport function getScopeId(scope: SelectionScope | string | undefined): string {\r\n if (!scope)\r\n return \"element\";\r\n if (typeof scope === \"string\")\r\n return scope;\r\n return scope.id;\r\n}\r\n"]}
|
|
@@ -23,7 +23,7 @@ export * from "./presentation-frontend/FrontendLoggerCategory";
|
|
|
23
23
|
* @module UnifiedSelection
|
|
24
24
|
*
|
|
25
25
|
* @docs-group-description UnifiedSelection
|
|
26
|
-
* Types related to [unified selection]($docs/presentation/
|
|
26
|
+
* Types related to [unified selection]($docs/presentation/unified-selection/index.md).
|
|
27
27
|
*/
|
|
28
28
|
export * from "./presentation-frontend/selection/SelectionChangeEvent";
|
|
29
29
|
export * from "./presentation-frontend/selection/ISelectionProvider";
|
|
@@ -39,7 +39,7 @@ __exportStar(require("./presentation-frontend/FrontendLoggerCategory"), exports)
|
|
|
39
39
|
* @module UnifiedSelection
|
|
40
40
|
*
|
|
41
41
|
* @docs-group-description UnifiedSelection
|
|
42
|
-
* Types related to [unified selection]($docs/presentation/
|
|
42
|
+
* Types related to [unified selection]($docs/presentation/unified-selection/index.md).
|
|
43
43
|
*/
|
|
44
44
|
__exportStar(require("./presentation-frontend/selection/SelectionChangeEvent"), exports);
|
|
45
45
|
__exportStar(require("./presentation-frontend/selection/ISelectionProvider"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,uEAAqD;AACrD,8EAA4D;AAC5D,yEAAuD;AACvD,kFAAgE;AAChE,wGAAsF;AACtF,wGAAsF;AACtF,uEAAqD;AACrD,sEAAoD;AAEpD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yFAAuE;AACvE,uFAAqE;AACrE,qFAAmE;AACnE,2FAAyE;AACzE,qFAAmE;AACnE,sFAAoE;AACpE,oFAAkE","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport * from \"./presentation-frontend/Presentation\";\r\nexport * from \"./presentation-frontend/PresentationManager\";\r\nexport * from \"./presentation-frontend/RulesetManager\";\r\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\r\nexport * from \"./presentation-frontend/StateTracker\";\r\nexport * from \"./presentation-frontend/Diagnostics\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\r\n\r\n/**\r\n * @module UnifiedSelection\r\n *\r\n * @docs-group-description UnifiedSelection\r\n * Types related to [unified selection]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,uEAAqD;AACrD,8EAA4D;AAC5D,yEAAuD;AACvD,kFAAgE;AAChE,wGAAsF;AACtF,wGAAsF;AACtF,uEAAqD;AACrD,sEAAoD;AAEpD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yFAAuE;AACvE,uFAAqE;AACrE,qFAAmE;AACnE,2FAAyE;AACzE,qFAAmE;AACnE,sFAAoE;AACpE,oFAAkE","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport * from \"./presentation-frontend/Presentation\";\r\nexport * from \"./presentation-frontend/PresentationManager\";\r\nexport * from \"./presentation-frontend/RulesetManager\";\r\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\r\nexport * from \"./presentation-frontend/StateTracker\";\r\nexport * from \"./presentation-frontend/Diagnostics\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\r\n\r\n/**\r\n * @module UnifiedSelection\r\n *\r\n * @docs-group-description UnifiedSelection\r\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\r\n */\r\nexport * from \"./presentation-frontend/selection/SelectionChangeEvent\";\r\nexport * from \"./presentation-frontend/selection/ISelectionProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionScopesManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionHandler\";\r\nexport * from \"./presentation-frontend/selection/HiliteSetProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionHelper\";\r\n"]}
|
|
@@ -13,7 +13,7 @@ export interface ISelectionProvider {
|
|
|
13
13
|
selectionChange: SelectionChangeEvent;
|
|
14
14
|
/** Get the selection stored in the provider.
|
|
15
15
|
* @param imodel iModel connection which the selection is associated with.
|
|
16
|
-
* @param level Level of the selection (see [
|
|
16
|
+
* @param level Level of the selection (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
17
17
|
*/
|
|
18
18
|
getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\r\n\r\n/**\r\n * Selection provider interface which provides main selection and sub-selection.\r\n * @public\r\n */\r\nexport interface ISelectionProvider {\r\n /** An event that's fired when selection changes */\r\n selectionChange: SelectionChangeEvent;\r\n\r\n /** Get the selection stored in the provider.\r\n * @param imodel iModel connection which the selection is associated with.\r\n * @param level Level of the selection (see [
|
|
1
|
+
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\r\n\r\n/**\r\n * Selection provider interface which provides main selection and sub-selection.\r\n * @public\r\n */\r\nexport interface ISelectionProvider {\r\n /** An event that's fired when selection changes */\r\n selectionChange: SelectionChangeEvent;\r\n\r\n /** Get the selection stored in the provider.\r\n * @param imodel iModel connection which the selection is associated with.\r\n * @param level Level of the selection (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n */\r\n getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;\r\n}\r\n"]}
|
|
@@ -37,7 +37,7 @@ export declare enum SelectionChangeType {
|
|
|
37
37
|
export interface SelectionChangeEventArgs {
|
|
38
38
|
/** The name of the selection source which caused the selection change. */
|
|
39
39
|
source: string;
|
|
40
|
-
/** Level of the selection. See [selection levels]($docs/presentation/
|
|
40
|
+
/** Level of the selection. See [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels). */
|
|
41
41
|
level: number;
|
|
42
42
|
/** The selection change type. */
|
|
43
43
|
changeType: SelectionChangeType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionChangeEvent.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,OAAO,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEtH;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,OAAO,CAAC,wBAAwB,CAAC;CAAI;AAE/E;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,GAAG,IAAA;IAEH,8BAA8B;IAC9B,MAAM,IAAA;IAEN,8BAA8B;IAC9B,OAAO,IAAA;IAEP,6BAA6B;IAC7B,KAAK,IAAA;CACN;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IAEf,
|
|
1
|
+
{"version":3,"file":"SelectionChangeEvent.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,OAAO,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEtH;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,OAAO,CAAC,wBAAwB,CAAC;CAAI;AAE/E;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,GAAG,IAAA;IAEH,8BAA8B;IAC9B,MAAM,IAAA;IAEN,8BAA8B;IAC9B,OAAO,IAAA;IAEP,6BAA6B;IAC7B,KAAK,IAAA;CACN;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IAEf,yIAAyI;IACzI,KAAK,EAAE,MAAM,CAAC;IAEd,iCAAiC;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAEhC,2DAA2D;IAC3D,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEvB,qEAAqE;IACrE,MAAM,EAAE,gBAAgB,CAAC;IAEzB,0DAA0D;IAC1D,SAAS,EAAE,IAAI,CAAC;IAEhB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAW9C;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,OAAiC;CAAI;AAE/E;;;GAGG;AACH,MAAM,CAAN,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,KAAnB,mBAAmB,QAY9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\n\r\n/**\r\n * An interface for selection change listeners.\r\n * @public\r\n */\r\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\r\n\r\n/**\r\n * An event broadcasted on selection changes\r\n * @public\r\n */\r\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\r\n\r\n/**\r\n * The type of selection change\r\n * @public\r\n */\r\nexport enum SelectionChangeType {\r\n /** Added to selection. */\r\n Add,\r\n\r\n /** Removed from selection. */\r\n Remove,\r\n\r\n /** Selection was replaced. */\r\n Replace,\r\n\r\n /** Selection was cleared. */\r\n Clear,\r\n}\r\n\r\n/**\r\n * The event object that's sent when the selection changes.\r\n * @public\r\n */\r\nexport interface SelectionChangeEventArgs {\r\n /** The name of the selection source which caused the selection change. */\r\n source: string;\r\n\r\n /** Level of the selection. See [selection levels]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAW9C;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,OAAiC;CAAI;AAE/E;;;GAGG;AACH,MAAM,CAAN,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,KAAnB,mBAAmB,QAY9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\n\r\n/**\r\n * An interface for selection change listeners.\r\n * @public\r\n */\r\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\r\n\r\n/**\r\n * An event broadcasted on selection changes\r\n * @public\r\n */\r\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\r\n\r\n/**\r\n * The type of selection change\r\n * @public\r\n */\r\nexport enum SelectionChangeType {\r\n /** Added to selection. */\r\n Add,\r\n\r\n /** Removed from selection. */\r\n Remove,\r\n\r\n /** Selection was replaced. */\r\n Replace,\r\n\r\n /** Selection was cleared. */\r\n Clear,\r\n}\r\n\r\n/**\r\n * The event object that's sent when the selection changes.\r\n * @public\r\n */\r\nexport interface SelectionChangeEventArgs {\r\n /** The name of the selection source which caused the selection change. */\r\n source: string;\r\n\r\n /** Level of the selection. See [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels). */\r\n level: number;\r\n\r\n /** The selection change type. */\r\n changeType: SelectionChangeType;\r\n\r\n /** Set of keys affected by this selection change event. */\r\n keys: Readonly<KeySet>;\r\n\r\n /** iModel connection with which the selection is associated with. */\r\n imodel: IModelConnection;\r\n\r\n /** The timestamp of when the selection change happened */\r\n timestamp: Date;\r\n\r\n /** Id of the ruleset associated with the selection change. */\r\n rulesetId?: string;\r\n}\r\n"]}
|
|
@@ -13,7 +13,7 @@ import { SelectionScopesManager } from "./SelectionScopesManager";
|
|
|
13
13
|
* @public
|
|
14
14
|
*/
|
|
15
15
|
export interface SelectionManagerProps {
|
|
16
|
-
/** A manager for [selection scopes]($docs/presentation/
|
|
16
|
+
/** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */
|
|
17
17
|
scopes: SelectionScopesManager;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
@@ -26,7 +26,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
26
26
|
private _hiliteSetProviders;
|
|
27
27
|
/** An event which gets broadcasted on selection changes */
|
|
28
28
|
readonly selectionChange: SelectionChangeEvent;
|
|
29
|
-
/** Manager for [selection scopes]($docs/presentation/
|
|
29
|
+
/** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */
|
|
30
30
|
readonly scopes: SelectionScopesManager;
|
|
31
31
|
/**
|
|
32
32
|
* Creates an instance of SelectionManager.
|
|
@@ -55,7 +55,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
55
55
|
* @param source Name of the selection source
|
|
56
56
|
* @param imodel iModel associated with the selection
|
|
57
57
|
* @param keys Keys to add
|
|
58
|
-
* @param level Selection level (see [
|
|
58
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
59
59
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
60
60
|
*/
|
|
61
61
|
addToSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -64,7 +64,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
64
64
|
* @param source Name of the selection source
|
|
65
65
|
* @param imodel iModel associated with the selection
|
|
66
66
|
* @param keys Keys to remove
|
|
67
|
-
* @param level Selection level (see [
|
|
67
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
68
68
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
69
69
|
*/
|
|
70
70
|
removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -73,7 +73,7 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
73
73
|
* @param source Name of the selection source
|
|
74
74
|
* @param imodel iModel associated with the selection
|
|
75
75
|
* @param keys Keys to add
|
|
76
|
-
* @param level Selection level (see [
|
|
76
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
77
77
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
78
78
|
*/
|
|
79
79
|
replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level?: number, rulesetId?: string): void;
|
|
@@ -81,37 +81,37 @@ export declare class SelectionManager implements ISelectionProvider {
|
|
|
81
81
|
* Clear current selection
|
|
82
82
|
* @param source Name of the selection source
|
|
83
83
|
* @param imodel iModel associated with the selection
|
|
84
|
-
* @param level Selection level (see [
|
|
84
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
85
85
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
86
86
|
*/
|
|
87
87
|
clearSelection(source: string, imodel: IModelConnection, level?: number, rulesetId?: string): void;
|
|
88
88
|
/**
|
|
89
|
-
* Add keys to selection after applying [selection scope]($docs/presentation/
|
|
89
|
+
* Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
90
90
|
* @param source Name of the selection source
|
|
91
91
|
* @param imodel iModel associated with the selection
|
|
92
92
|
* @param ids Element IDs to add
|
|
93
93
|
* @param scope Selection scope to apply
|
|
94
|
-
* @param level Selection level (see [
|
|
94
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
95
95
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
96
96
|
*/
|
|
97
97
|
addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
98
98
|
/**
|
|
99
|
-
* Remove keys from current selection after applying [selection scope]($docs/presentation/
|
|
99
|
+
* Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
100
100
|
* @param source Name of the selection source
|
|
101
101
|
* @param imodel iModel associated with the selection
|
|
102
102
|
* @param ids Element IDs to remove
|
|
103
103
|
* @param scope Selection scope to apply
|
|
104
|
-
* @param level Selection level (see [
|
|
104
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
105
105
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
106
106
|
*/
|
|
107
107
|
removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
108
108
|
/**
|
|
109
|
-
* Replace current selection with keys after applying [selection scope]($docs/presentation/
|
|
109
|
+
* Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
110
110
|
* @param source Name of the selection source
|
|
111
111
|
* @param imodel iModel associated with the selection
|
|
112
112
|
* @param ids Element IDs to replace with
|
|
113
113
|
* @param scope Selection scope to apply
|
|
114
|
-
* @param level Selection level (see [
|
|
114
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
115
115
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
116
116
|
*/
|
|
117
117
|
replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level?: number, rulesetId?: string): Promise<void>;
|
|
@@ -123,7 +123,7 @@ export class SelectionManager {
|
|
|
123
123
|
* @param source Name of the selection source
|
|
124
124
|
* @param imodel iModel associated with the selection
|
|
125
125
|
* @param keys Keys to add
|
|
126
|
-
* @param level Selection level (see [
|
|
126
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
127
127
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
128
128
|
*/
|
|
129
129
|
addToSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -143,7 +143,7 @@ export class SelectionManager {
|
|
|
143
143
|
* @param source Name of the selection source
|
|
144
144
|
* @param imodel iModel associated with the selection
|
|
145
145
|
* @param keys Keys to remove
|
|
146
|
-
* @param level Selection level (see [
|
|
146
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
147
147
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
148
148
|
*/
|
|
149
149
|
removeFromSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -163,7 +163,7 @@ export class SelectionManager {
|
|
|
163
163
|
* @param source Name of the selection source
|
|
164
164
|
* @param imodel iModel associated with the selection
|
|
165
165
|
* @param keys Keys to add
|
|
166
|
-
* @param level Selection level (see [
|
|
166
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
167
167
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
168
168
|
*/
|
|
169
169
|
replaceSelection(source, imodel, keys, level = 0, rulesetId) {
|
|
@@ -182,7 +182,7 @@ export class SelectionManager {
|
|
|
182
182
|
* Clear current selection
|
|
183
183
|
* @param source Name of the selection source
|
|
184
184
|
* @param imodel iModel associated with the selection
|
|
185
|
-
* @param level Selection level (see [
|
|
185
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
186
186
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
187
187
|
*/
|
|
188
188
|
clearSelection(source, imodel, level = 0, rulesetId) {
|
|
@@ -198,12 +198,12 @@ export class SelectionManager {
|
|
|
198
198
|
this.handleEvent(evt);
|
|
199
199
|
}
|
|
200
200
|
/**
|
|
201
|
-
* Add keys to selection after applying [selection scope]($docs/presentation/
|
|
201
|
+
* Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
202
202
|
* @param source Name of the selection source
|
|
203
203
|
* @param imodel iModel associated with the selection
|
|
204
204
|
* @param ids Element IDs to add
|
|
205
205
|
* @param scope Selection scope to apply
|
|
206
|
-
* @param level Selection level (see [
|
|
206
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
207
207
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
208
208
|
*/
|
|
209
209
|
async addToSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -211,12 +211,12 @@ export class SelectionManager {
|
|
|
211
211
|
this.addToSelection(source, imodel, scopedKeys, level, rulesetId);
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
|
-
* Remove keys from current selection after applying [selection scope]($docs/presentation/
|
|
214
|
+
* Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
215
215
|
* @param source Name of the selection source
|
|
216
216
|
* @param imodel iModel associated with the selection
|
|
217
217
|
* @param ids Element IDs to remove
|
|
218
218
|
* @param scope Selection scope to apply
|
|
219
|
-
* @param level Selection level (see [
|
|
219
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
220
220
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
221
221
|
*/
|
|
222
222
|
async removeFromSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -224,12 +224,12 @@ export class SelectionManager {
|
|
|
224
224
|
this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);
|
|
225
225
|
}
|
|
226
226
|
/**
|
|
227
|
-
* Replace current selection with keys after applying [selection scope]($docs/presentation/
|
|
227
|
+
* Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.
|
|
228
228
|
* @param source Name of the selection source
|
|
229
229
|
* @param imodel iModel associated with the selection
|
|
230
230
|
* @param ids Element IDs to replace with
|
|
231
231
|
* @param scope Selection scope to apply
|
|
232
|
-
* @param level Selection level (see [
|
|
232
|
+
* @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))
|
|
233
233
|
* @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control
|
|
234
234
|
*/
|
|
235
235
|
async replaceSelectionWithScope(source, imodel, ids, scope, level = 0, rulesetId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\r\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\r\nimport { getScopeId, SelectionScopesManager } from \"./SelectionScopesManager\";\r\n\r\n/**\r\n * Properties for creating [[SelectionManager]].\r\n * @public\r\n */\r\nexport interface SelectionManagerProps {\r\n /** A manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n scopes: SelectionScopesManager;\r\n}\r\n\r\n/**\r\n * The selection manager which stores the overall selection.\r\n * @public\r\n */\r\nexport class SelectionManager implements ISelectionProvider {\r\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\r\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\r\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\r\n\r\n /** An event which gets broadcasted on selection changes */\r\n public readonly selectionChange: SelectionChangeEvent;\r\n\r\n /** Manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n public readonly scopes: SelectionScopesManager;\r\n\r\n /**\r\n * Creates an instance of SelectionManager.\r\n */\r\n constructor(props: SelectionManagerProps) {\r\n this.selectionChange = new SelectionChangeEvent();\r\n this.scopes = props.scopes;\r\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\r\n this.onConnectionClose(imodel);\r\n });\r\n }\r\n\r\n private onConnectionClose(imodel: IModelConnection): void {\r\n this.clearSelection(\"Connection Close Event\", imodel);\r\n this._selectionContainerMap.delete(imodel);\r\n this._hiliteSetProviders.delete(imodel);\r\n }\r\n\r\n private getContainer(imodel: IModelConnection): SelectionContainer {\r\n let selectionContainer = this._selectionContainerMap.get(imodel);\r\n if (!selectionContainer) {\r\n selectionContainer = new SelectionContainer();\r\n this._selectionContainerMap.set(imodel, selectionContainer);\r\n }\r\n return selectionContainer;\r\n }\r\n\r\n /** @internal */\r\n // istanbul ignore next\r\n public getToolSelectionSyncHandler(imodel: IModelConnection) { return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler; }\r\n\r\n /**\r\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\r\n */\r\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (sync) {\r\n if (!registration || registration.requestorsCount === 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\r\n }\r\n } else {\r\n if (registration && registration.requestorsCount > 0) {\r\n const requestorsCount = registration.requestorsCount - 1;\r\n if (requestorsCount > 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.delete(imodel);\r\n registration.handler.dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\r\n * is disposed.\r\n */\r\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (!registration)\r\n return { dispose: () => { } };\r\n\r\n const wasSuspended = registration.handler.isSuspended;\r\n registration.handler.isSuspended = true;\r\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\r\n }\r\n\r\n /** Get the selection levels currently stored in this manager for the specified imodel */\r\n public getSelectionLevels(imodel: IModelConnection): number[] {\r\n return this.getContainer(imodel).getSelectionLevels();\r\n }\r\n\r\n /** Get the selection currently stored in this manager */\r\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\r\n return this.getContainer(imodel).getSelection(level);\r\n }\r\n\r\n private handleEvent(evt: SelectionChangeEventArgs): void {\r\n const container = this.getContainer(evt.imodel);\r\n const selectedItemsSet = container.getSelection(evt.level);\r\n const guidBefore = selectedItemsSet.guid;\r\n switch (evt.changeType) {\r\n case SelectionChangeType.Add:\r\n selectedItemsSet.add(evt.keys);\r\n break;\r\n case SelectionChangeType.Remove:\r\n selectedItemsSet.delete(evt.keys);\r\n break;\r\n case SelectionChangeType.Replace:\r\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\r\n // note: the above check is only needed to avoid changing\r\n // guid of the keyset if we're replacing keyset with the same keys\r\n selectedItemsSet.clear().add(evt.keys);\r\n }\r\n break;\r\n case SelectionChangeType.Clear:\r\n selectedItemsSet.clear();\r\n break;\r\n }\r\n\r\n if (selectedItemsSet.guid === guidBefore)\r\n return;\r\n\r\n container.clear(evt.level + 1);\r\n this.selectionChange.raiseEvent(evt, this);\r\n }\r\n\r\n /**\r\n * Add keys to the selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Add,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to remove\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Remove,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Replace current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Replace,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Clear,\r\n keys: new KeySet(),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Add keys to selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to add\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to remove\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Replace current selection with keys after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to replace with\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Get the current hilite set for the specified imodel\r\n * @public\r\n */\r\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\r\n let provider = this._hiliteSetProviders.get(imodel);\r\n if (!provider) {\r\n provider = HiliteSetProvider.create({ imodel });\r\n this._hiliteSetProviders.set(imodel, provider);\r\n }\r\n return provider.getHiliteSet(this.getSelection(imodel));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SelectionContainer {\r\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\r\n\r\n constructor() {\r\n this._selectedItemsSetMap = new Map<number, KeySet>();\r\n }\r\n\r\n public getSelection(level: number): KeySet {\r\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\r\n if (!selectedItemsSet) {\r\n selectedItemsSet = new KeySet();\r\n this._selectedItemsSetMap.set(level, selectedItemsSet);\r\n }\r\n return selectedItemsSet;\r\n }\r\n\r\n public getSelectionLevels(): number[] {\r\n const levels = new Array<number>();\r\n for (const entry of this._selectedItemsSetMap.entries()) {\r\n if (!entry[1].isEmpty)\r\n levels.push(entry[0]);\r\n }\r\n return levels.sort();\r\n }\r\n\r\n public clear(level: number) {\r\n const keys = this._selectedItemsSetMap.keys();\r\n for (const key of keys) {\r\n if (key >= level) {\r\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\r\n selectedItemsSet.clear();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\r\n\r\n/** @internal */\r\nexport class ToolSelectionSyncHandler implements IDisposable {\r\n\r\n private _selectionSourceName = \"Tool\";\r\n private _logicalSelection: SelectionManager;\r\n private _imodel: IModelConnection;\r\n private _imodelToolSelectionListenerDisposeFunc: () => void;\r\n private _asyncsTracker = new AsyncTasksTracker();\r\n public isSuspended?: boolean;\r\n\r\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\r\n this._imodel = imodel;\r\n this._logicalSelection = logicalSelection;\r\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\r\n }\r\n\r\n public dispose() {\r\n this._imodelToolSelectionListenerDisposeFunc();\r\n }\r\n\r\n /** note: used only it tests */\r\n public get pendingAsyncs() { return this._asyncsTracker.pendingAsyncs; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\r\n // ignore selection change event if the handler is suspended\r\n if (this.isSuspended)\r\n return;\r\n\r\n // this component only cares about its own imodel\r\n const imodel = ev.set.iModel;\r\n if (imodel !== this._imodel)\r\n return;\r\n\r\n // determine the level of selection changes\r\n // wip: may want to allow selecting at different levels?\r\n const selectionLevel = 0;\r\n\r\n let ids: Id64Arg;\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n ids = ev.added;\r\n break;\r\n case SelectionSetEventType.Replace:\r\n ids = ev.set.elements;\r\n break;\r\n default:\r\n ids = ev.removed;\r\n break;\r\n }\r\n\r\n const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\r\n\r\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\r\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\r\n // we can't because otherwise our keys compare fails (presentation components load data with\r\n // concrete classes)\r\n const changer = new ScopedSelectionChanger(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\r\n\r\n // we know what to do immediately on `clear` events\r\n if (SelectionSetEventType.Clear === ev.type) {\r\n await changer.clear(selectionLevel);\r\n return;\r\n }\r\n\r\n const parsedIds = parseIds(ids);\r\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Replace:\r\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Remove:\r\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst parseIds = (ids: Id64Arg): { persistent: Id64Arg, transient: Id64Arg } => {\r\n let allPersistent = true;\r\n let allTransient = true;\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n allPersistent = false;\r\n else\r\n allTransient = false;\r\n\r\n if (!allPersistent && !allTransient)\r\n break;\r\n }\r\n\r\n // avoid making a copy if ids are only persistent or only transient\r\n if (allPersistent) {\r\n return { persistent: ids, transient: [] };\r\n } else if (allTransient) {\r\n return { persistent: [], transient: ids };\r\n }\r\n\r\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\r\n // a Set for performance\r\n const persistentElementIds: Id64Array = [];\r\n const transientElementIds: Id64Array = [];\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n transientElementIds.push(id);\r\n else\r\n persistentElementIds.push(id);\r\n }\r\n\r\n return { persistent: persistentElementIds, transient: transientElementIds };\r\n};\r\n\r\nfunction addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\r\n for (const id of Id64.iterable(transientIds))\r\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\r\n}\r\n\r\n/** @internal */\r\nclass ScopedSelectionChanger {\r\n public readonly name: string;\r\n public readonly imodel: IModelConnection;\r\n public readonly manager: SelectionManager;\r\n public readonly scope: SelectionScope | string;\r\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScope | string) {\r\n this.name = name;\r\n this.imodel = imodel;\r\n this.manager = manager;\r\n this.scope = scope;\r\n }\r\n public async clear(level: number): Promise<void> {\r\n this.manager.clearSelection(this.name, this.imodel, level);\r\n }\r\n public async add(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.addToSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\r\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\r\nimport { getScopeId, SelectionScopesManager } from \"./SelectionScopesManager\";\r\n\r\n/**\r\n * Properties for creating [[SelectionManager]].\r\n * @public\r\n */\r\nexport interface SelectionManagerProps {\r\n /** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\r\n scopes: SelectionScopesManager;\r\n}\r\n\r\n/**\r\n * The selection manager which stores the overall selection.\r\n * @public\r\n */\r\nexport class SelectionManager implements ISelectionProvider {\r\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\r\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\r\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\r\n\r\n /** An event which gets broadcasted on selection changes */\r\n public readonly selectionChange: SelectionChangeEvent;\r\n\r\n /** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\r\n public readonly scopes: SelectionScopesManager;\r\n\r\n /**\r\n * Creates an instance of SelectionManager.\r\n */\r\n constructor(props: SelectionManagerProps) {\r\n this.selectionChange = new SelectionChangeEvent();\r\n this.scopes = props.scopes;\r\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\r\n this.onConnectionClose(imodel);\r\n });\r\n }\r\n\r\n private onConnectionClose(imodel: IModelConnection): void {\r\n this.clearSelection(\"Connection Close Event\", imodel);\r\n this._selectionContainerMap.delete(imodel);\r\n this._hiliteSetProviders.delete(imodel);\r\n }\r\n\r\n private getContainer(imodel: IModelConnection): SelectionContainer {\r\n let selectionContainer = this._selectionContainerMap.get(imodel);\r\n if (!selectionContainer) {\r\n selectionContainer = new SelectionContainer();\r\n this._selectionContainerMap.set(imodel, selectionContainer);\r\n }\r\n return selectionContainer;\r\n }\r\n\r\n /** @internal */\r\n // istanbul ignore next\r\n public getToolSelectionSyncHandler(imodel: IModelConnection) { return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler; }\r\n\r\n /**\r\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\r\n */\r\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (sync) {\r\n if (!registration || registration.requestorsCount === 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\r\n }\r\n } else {\r\n if (registration && registration.requestorsCount > 0) {\r\n const requestorsCount = registration.requestorsCount - 1;\r\n if (requestorsCount > 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.delete(imodel);\r\n registration.handler.dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\r\n * is disposed.\r\n */\r\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (!registration)\r\n return { dispose: () => { } };\r\n\r\n const wasSuspended = registration.handler.isSuspended;\r\n registration.handler.isSuspended = true;\r\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\r\n }\r\n\r\n /** Get the selection levels currently stored in this manager for the specified imodel */\r\n public getSelectionLevels(imodel: IModelConnection): number[] {\r\n return this.getContainer(imodel).getSelectionLevels();\r\n }\r\n\r\n /** Get the selection currently stored in this manager */\r\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\r\n return this.getContainer(imodel).getSelection(level);\r\n }\r\n\r\n private handleEvent(evt: SelectionChangeEventArgs): void {\r\n const container = this.getContainer(evt.imodel);\r\n const selectedItemsSet = container.getSelection(evt.level);\r\n const guidBefore = selectedItemsSet.guid;\r\n switch (evt.changeType) {\r\n case SelectionChangeType.Add:\r\n selectedItemsSet.add(evt.keys);\r\n break;\r\n case SelectionChangeType.Remove:\r\n selectedItemsSet.delete(evt.keys);\r\n break;\r\n case SelectionChangeType.Replace:\r\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\r\n // note: the above check is only needed to avoid changing\r\n // guid of the keyset if we're replacing keyset with the same keys\r\n selectedItemsSet.clear().add(evt.keys);\r\n }\r\n break;\r\n case SelectionChangeType.Clear:\r\n selectedItemsSet.clear();\r\n break;\r\n }\r\n\r\n if (selectedItemsSet.guid === guidBefore)\r\n return;\r\n\r\n container.clear(evt.level + 1);\r\n this.selectionChange.raiseEvent(evt, this);\r\n }\r\n\r\n /**\r\n * Add keys to the selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Add,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to remove\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Remove,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Replace current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Replace,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Clear,\r\n keys: new KeySet(),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to add\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to remove\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to replace with\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Get the current hilite set for the specified imodel\r\n * @public\r\n */\r\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\r\n let provider = this._hiliteSetProviders.get(imodel);\r\n if (!provider) {\r\n provider = HiliteSetProvider.create({ imodel });\r\n this._hiliteSetProviders.set(imodel, provider);\r\n }\r\n return provider.getHiliteSet(this.getSelection(imodel));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SelectionContainer {\r\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\r\n\r\n constructor() {\r\n this._selectedItemsSetMap = new Map<number, KeySet>();\r\n }\r\n\r\n public getSelection(level: number): KeySet {\r\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\r\n if (!selectedItemsSet) {\r\n selectedItemsSet = new KeySet();\r\n this._selectedItemsSetMap.set(level, selectedItemsSet);\r\n }\r\n return selectedItemsSet;\r\n }\r\n\r\n public getSelectionLevels(): number[] {\r\n const levels = new Array<number>();\r\n for (const entry of this._selectedItemsSetMap.entries()) {\r\n if (!entry[1].isEmpty)\r\n levels.push(entry[0]);\r\n }\r\n return levels.sort();\r\n }\r\n\r\n public clear(level: number) {\r\n const keys = this._selectedItemsSetMap.keys();\r\n for (const key of keys) {\r\n if (key >= level) {\r\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\r\n selectedItemsSet.clear();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\r\n\r\n/** @internal */\r\nexport class ToolSelectionSyncHandler implements IDisposable {\r\n\r\n private _selectionSourceName = \"Tool\";\r\n private _logicalSelection: SelectionManager;\r\n private _imodel: IModelConnection;\r\n private _imodelToolSelectionListenerDisposeFunc: () => void;\r\n private _asyncsTracker = new AsyncTasksTracker();\r\n public isSuspended?: boolean;\r\n\r\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\r\n this._imodel = imodel;\r\n this._logicalSelection = logicalSelection;\r\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\r\n }\r\n\r\n public dispose() {\r\n this._imodelToolSelectionListenerDisposeFunc();\r\n }\r\n\r\n /** note: used only it tests */\r\n public get pendingAsyncs() { return this._asyncsTracker.pendingAsyncs; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\r\n // ignore selection change event if the handler is suspended\r\n if (this.isSuspended)\r\n return;\r\n\r\n // this component only cares about its own imodel\r\n const imodel = ev.set.iModel;\r\n if (imodel !== this._imodel)\r\n return;\r\n\r\n // determine the level of selection changes\r\n // wip: may want to allow selecting at different levels?\r\n const selectionLevel = 0;\r\n\r\n let ids: Id64Arg;\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n ids = ev.added;\r\n break;\r\n case SelectionSetEventType.Replace:\r\n ids = ev.set.elements;\r\n break;\r\n default:\r\n ids = ev.removed;\r\n break;\r\n }\r\n\r\n const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\r\n\r\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\r\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\r\n // we can't because otherwise our keys compare fails (presentation components load data with\r\n // concrete classes)\r\n const changer = new ScopedSelectionChanger(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\r\n\r\n // we know what to do immediately on `clear` events\r\n if (SelectionSetEventType.Clear === ev.type) {\r\n await changer.clear(selectionLevel);\r\n return;\r\n }\r\n\r\n const parsedIds = parseIds(ids);\r\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Replace:\r\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Remove:\r\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst parseIds = (ids: Id64Arg): { persistent: Id64Arg, transient: Id64Arg } => {\r\n let allPersistent = true;\r\n let allTransient = true;\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n allPersistent = false;\r\n else\r\n allTransient = false;\r\n\r\n if (!allPersistent && !allTransient)\r\n break;\r\n }\r\n\r\n // avoid making a copy if ids are only persistent or only transient\r\n if (allPersistent) {\r\n return { persistent: ids, transient: [] };\r\n } else if (allTransient) {\r\n return { persistent: [], transient: ids };\r\n }\r\n\r\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\r\n // a Set for performance\r\n const persistentElementIds: Id64Array = [];\r\n const transientElementIds: Id64Array = [];\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n transientElementIds.push(id);\r\n else\r\n persistentElementIds.push(id);\r\n }\r\n\r\n return { persistent: persistentElementIds, transient: transientElementIds };\r\n};\r\n\r\nfunction addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\r\n for (const id of Id64.iterable(transientIds))\r\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\r\n}\r\n\r\n/** @internal */\r\nclass ScopedSelectionChanger {\r\n public readonly name: string;\r\n public readonly imodel: IModelConnection;\r\n public readonly manager: SelectionManager;\r\n public readonly scope: SelectionScope | string;\r\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScope | string) {\r\n this.name = name;\r\n this.imodel = imodel;\r\n this.manager = manager;\r\n this.scope = scope;\r\n }\r\n public async clear(level: number): Promise<void> {\r\n this.manager.clearSelection(this.name, this.imodel, level);\r\n }\r\n public async add(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.addToSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\r\n }\r\n}\r\n"]}
|
|
@@ -15,7 +15,7 @@ export interface SelectionScopesManagerProps {
|
|
|
15
15
|
localeProvider?: () => string | undefined;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* A manager that knows available [selection scopes]($docs/presentation/
|
|
18
|
+
* A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)
|
|
19
19
|
* and can compute logical selection based on element IDs and selection scope.
|
|
20
20
|
*
|
|
21
21
|
* @public
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { DEFAULT_KEYS_BATCH_SIZE, KeySet } from "@itwin/presentation-common";
|
|
9
9
|
/**
|
|
10
|
-
* A manager that knows available [selection scopes]($docs/presentation/
|
|
10
|
+
* A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)
|
|
11
11
|
* and can compute logical selection based on element IDs and selection scope.
|
|
12
12
|
*
|
|
13
13
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64Arg } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { DEFAULT_KEYS_BATCH_SIZE, KeySet, RpcRequestsHandler, SelectionScope } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Properties for creating [[SelectionScopesManager]].\r\n * @public\r\n */\r\nexport interface SelectionScopesManagerProps {\r\n /** RPC handler to use for requesting selection scopes */\r\n rpcRequestsHandler: RpcRequestsHandler;\r\n\r\n /** Provider of active locale to use for localizing scopes */\r\n localeProvider?: () => string | undefined;\r\n}\r\n\r\n/**\r\n * A manager that knows available [selection scopes]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64Arg } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { DEFAULT_KEYS_BATCH_SIZE, KeySet, RpcRequestsHandler, SelectionScope } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Properties for creating [[SelectionScopesManager]].\r\n * @public\r\n */\r\nexport interface SelectionScopesManagerProps {\r\n /** RPC handler to use for requesting selection scopes */\r\n rpcRequestsHandler: RpcRequestsHandler;\r\n\r\n /** Provider of active locale to use for localizing scopes */\r\n localeProvider?: () => string | undefined;\r\n}\r\n\r\n/**\r\n * A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)\r\n * and can compute logical selection based on element IDs and selection scope.\r\n *\r\n * @public\r\n */\r\nexport class SelectionScopesManager {\r\n\r\n private _rpcRequestsHandler: RpcRequestsHandler;\r\n private _getLocale: () => string | undefined;\r\n private _activeScope: SelectionScope | string | undefined;\r\n\r\n public constructor(props: SelectionScopesManagerProps) {\r\n this._rpcRequestsHandler = props.rpcRequestsHandler;\r\n this._getLocale = props.localeProvider ? props.localeProvider : (() => undefined);\r\n }\r\n\r\n /** Get active locale */\r\n public get activeLocale() { return this._getLocale(); }\r\n\r\n /** The active selection scope or its id */\r\n public get activeScope() { return this._activeScope; }\r\n public set activeScope(scope: SelectionScope | string | undefined) { this._activeScope = scope; }\r\n\r\n /**\r\n * Get available selection scopes.\r\n * @param imodel The iModel to get selection scopes for\r\n * @param locale Optional locale to use when localizing scopes' label and description\r\n */\r\n public async getSelectionScopes(imodel: IModelConnection, locale?: string): Promise<SelectionScope[]> {\r\n if (!locale)\r\n locale = this._getLocale();\r\n return this._rpcRequestsHandler.getSelectionScopes({ imodel: imodel.getRpcProps(), locale });\r\n }\r\n\r\n /**\r\n * Computes keys that need to be added to logical selection based on provided selection scope.\r\n * @param ids Element IDs to compute selection for\r\n * @param scope Selection scope to apply\r\n */\r\n public async computeSelection(imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string): Promise<KeySet> {\r\n const scopeId = getScopeId(scope);\r\n\r\n // convert ids input to array\r\n if (typeof ids === \"string\")\r\n ids = [ids];\r\n else if (ids instanceof Set)\r\n ids = [...ids];\r\n\r\n // compute selection in batches to avoid HTTP 413\r\n const keys = new KeySet();\r\n const batchSize = DEFAULT_KEYS_BATCH_SIZE;\r\n const batchesCount = Math.ceil(ids.length / batchSize);\r\n const batchKeyPromises = [];\r\n for (let batchIndex = 0; batchIndex < batchesCount; ++batchIndex) {\r\n const batchStart = batchSize * batchIndex;\r\n const batchEnd = (batchStart + batchSize > ids.length) ? ids.length : (batchStart + batchSize);\r\n const batchIds = (0 === batchIndex && ids.length <= batchEnd) ? ids : ids.slice(batchStart, batchEnd);\r\n batchKeyPromises.push(this._rpcRequestsHandler.computeSelection({ imodel: imodel.getRpcProps() }, batchIds, scopeId));\r\n }\r\n const batchKeys = (await Promise.all(batchKeyPromises)).map(KeySet.fromJSON);\r\n batchKeys.forEach((bk) => keys.add(bk));\r\n return keys;\r\n }\r\n}\r\n\r\n/**\r\n * Determines the scope id\r\n * @param scope Selection scope\r\n * @public\r\n */\r\nexport function getScopeId(scope: SelectionScope | string | undefined): string {\r\n if (!scope)\r\n return \"element\";\r\n if (typeof scope === \"string\")\r\n return scope;\r\n return scope.id;\r\n}\r\n"]}
|
|
@@ -23,7 +23,7 @@ export * from "./presentation-frontend/FrontendLoggerCategory";
|
|
|
23
23
|
* @module UnifiedSelection
|
|
24
24
|
*
|
|
25
25
|
* @docs-group-description UnifiedSelection
|
|
26
|
-
* Types related to [unified selection]($docs/presentation/
|
|
26
|
+
* Types related to [unified selection]($docs/presentation/unified-selection/index.md).
|
|
27
27
|
*/
|
|
28
28
|
export * from "./presentation-frontend/selection/SelectionChangeEvent";
|
|
29
29
|
export * from "./presentation-frontend/selection/ISelectionProvider";
|
|
@@ -27,7 +27,7 @@ export * from "./presentation-frontend/FrontendLoggerCategory";
|
|
|
27
27
|
* @module UnifiedSelection
|
|
28
28
|
*
|
|
29
29
|
* @docs-group-description UnifiedSelection
|
|
30
|
-
* Types related to [unified selection]($docs/presentation/
|
|
30
|
+
* Types related to [unified selection]($docs/presentation/unified-selection/index.md).
|
|
31
31
|
*/
|
|
32
32
|
export * from "./presentation-frontend/selection/SelectionChangeEvent";
|
|
33
33
|
export * from "./presentation-frontend/selection/ISelectionProvider";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,cAAc,sCAAsC,CAAC;AACrD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uEAAuE,CAAC;AACtF,cAAc,uEAAuE,CAAC;AACtF,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD;;;;;GAKG;AACH,cAAc,gDAAgD,CAAC;AAE/D;;;;;GAKG;AACH,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,oDAAoD,CAAC;AACnE,cAAc,0DAA0D,CAAC;AACzE,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport * from \"./presentation-frontend/Presentation\";\r\nexport * from \"./presentation-frontend/PresentationManager\";\r\nexport * from \"./presentation-frontend/RulesetManager\";\r\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\r\nexport * from \"./presentation-frontend/StateTracker\";\r\nexport * from \"./presentation-frontend/Diagnostics\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\r\n\r\n/**\r\n * @module UnifiedSelection\r\n *\r\n * @docs-group-description UnifiedSelection\r\n * Types related to [unified selection]($docs/presentation/
|
|
1
|
+
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,cAAc,sCAAsC,CAAC;AACrD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uEAAuE,CAAC;AACtF,cAAc,uEAAuE,CAAC;AACtF,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD;;;;;GAKG;AACH,cAAc,gDAAgD,CAAC;AAE/D;;;;;GAKG;AACH,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,oDAAoD,CAAC;AACnE,cAAc,0DAA0D,CAAC;AACzE,cAAc,oDAAoD,CAAC;AACnE,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport * from \"./presentation-frontend/Presentation\";\r\nexport * from \"./presentation-frontend/PresentationManager\";\r\nexport * from \"./presentation-frontend/RulesetManager\";\r\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\r\nexport * from \"./presentation-frontend/StateTracker\";\r\nexport * from \"./presentation-frontend/Diagnostics\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\r\n\r\n/**\r\n * @module UnifiedSelection\r\n *\r\n * @docs-group-description UnifiedSelection\r\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\r\n */\r\nexport * from \"./presentation-frontend/selection/SelectionChangeEvent\";\r\nexport * from \"./presentation-frontend/selection/ISelectionProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionScopesManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionHandler\";\r\nexport * from \"./presentation-frontend/selection/HiliteSetProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionHelper\";\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/presentation-frontend",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0-dev.2",
|
|
4
4
|
"description": "Frontend of iModel.js Presentation library",
|
|
5
5
|
"main": "lib/cjs/presentation-frontend.js",
|
|
6
6
|
"module": "lib/esm/presentation-frontend.js",
|
|
7
7
|
"typings": "lib/cjs/presentation-frontend",
|
|
8
|
-
"imodeljsSharedLibrary": true,
|
|
9
8
|
"license": "MIT",
|
|
10
9
|
"repository": {
|
|
11
10
|
"type": "git",
|
|
@@ -23,28 +22,28 @@
|
|
|
23
22
|
"url": "http://www.bentley.com"
|
|
24
23
|
},
|
|
25
24
|
"peerDependencies": {
|
|
26
|
-
"@itwin/core-bentley": "^3.
|
|
27
|
-
"@itwin/core-common": "^3.
|
|
28
|
-
"@itwin/core-frontend": "^3.
|
|
29
|
-
"@itwin/core-quantity": "^3.
|
|
30
|
-
"@itwin/presentation-common": "^3.
|
|
25
|
+
"@itwin/core-bentley": "^3.3.0-dev.2",
|
|
26
|
+
"@itwin/core-common": "^3.3.0-dev.2",
|
|
27
|
+
"@itwin/core-frontend": "^3.3.0-dev.2",
|
|
28
|
+
"@itwin/core-quantity": "^3.3.0-dev.2",
|
|
29
|
+
"@itwin/presentation-common": "^3.3.0-dev.2"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
|
-
"@itwin/build-tools": "3.
|
|
34
|
-
"@itwin/core-bentley": "3.
|
|
35
|
-
"@itwin/core-common": "3.
|
|
36
|
-
"@itwin/core-frontend": "3.
|
|
37
|
-
"@itwin/core-i18n": "3.
|
|
38
|
-
"@itwin/core-quantity": "3.
|
|
39
|
-
"@itwin/eslint-plugin": "3.
|
|
40
|
-
"@itwin/presentation-common": "3.
|
|
32
|
+
"@itwin/build-tools": "3.3.0-dev.2",
|
|
33
|
+
"@itwin/core-bentley": "3.3.0-dev.2",
|
|
34
|
+
"@itwin/core-common": "3.3.0-dev.2",
|
|
35
|
+
"@itwin/core-frontend": "3.3.0-dev.2",
|
|
36
|
+
"@itwin/core-i18n": "3.3.0-dev.2",
|
|
37
|
+
"@itwin/core-quantity": "3.3.0-dev.2",
|
|
38
|
+
"@itwin/eslint-plugin": "3.3.0-dev.2",
|
|
39
|
+
"@itwin/presentation-common": "3.3.0-dev.2",
|
|
41
40
|
"@types/chai": "^4.1.4",
|
|
42
41
|
"@types/chai-as-promised": "^7",
|
|
43
42
|
"@types/chai-jest-snapshot": "^1.3.0",
|
|
44
43
|
"@types/deep-equal": "^1",
|
|
45
44
|
"@types/faker": "^4.1.0",
|
|
46
45
|
"@types/mocha": "^8.2.2",
|
|
47
|
-
"@types/node": "
|
|
46
|
+
"@types/node": "16.11.7",
|
|
48
47
|
"@types/sinon": "^9.0.0",
|
|
49
48
|
"@types/sinon-chai": "^3.2.0",
|
|
50
49
|
"chai": "^4.1.2",
|
|
@@ -55,7 +54,7 @@
|
|
|
55
54
|
"deep-equal": "^1",
|
|
56
55
|
"eslint": "^7.11.0",
|
|
57
56
|
"faker": "^4.1.0",
|
|
58
|
-
"jsdom": "^
|
|
57
|
+
"jsdom": "^19.0.0",
|
|
59
58
|
"jsdom-global": "3.0.2",
|
|
60
59
|
"mocha": "^8.3.2",
|
|
61
60
|
"nyc": "^15.1.0",
|