@itwin/presentation-backend 5.0.0-dev.11 → 5.0.0-dev.111
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 +73 -1
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/presentation-backend/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.d.ts +31 -4
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js +161 -56
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/InternalSymbols.d.ts +5 -0
- package/lib/cjs/presentation-backend/InternalSymbols.d.ts.map +1 -0
- package/lib/cjs/presentation-backend/InternalSymbols.js +16 -0
- package/lib/cjs/presentation-backend/InternalSymbols.js.map +1 -0
- package/lib/cjs/presentation-backend/NativePlatform.d.ts +2 -2
- package/lib/cjs/presentation-backend/NativePlatform.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/NativePlatform.js +5 -3
- package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
- package/lib/cjs/presentation-backend/Presentation.d.ts +2 -7
- package/lib/cjs/presentation-backend/Presentation.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/Presentation.js +40 -29
- package/lib/cjs/presentation-backend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationIpcHandler.d.ts +3 -3
- package/lib/cjs/presentation-backend/PresentationIpcHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationIpcHandler.js +5 -7
- package/lib/cjs/presentation-backend/PresentationIpcHandler.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManager.d.ts +13 -90
- package/lib/cjs/presentation-backend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManager.js +79 -130
- package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts +19 -10
- package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManagerDetail.js +83 -76
- package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationRpcImpl.d.ts +11 -11
- package/lib/cjs/presentation-backend/PresentationRpcImpl.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/PresentationRpcImpl.js +110 -118
- package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.js +26 -27
- package/lib/cjs/presentation-backend/RulesetEmbedder.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.d.ts +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.js +2 -1
- package/lib/cjs/presentation-backend/RulesetManager.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.d.ts +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.js +2 -0
- package/lib/cjs/presentation-backend/RulesetVariablesManager.js.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.d.ts +2 -4
- package/lib/cjs/presentation-backend/SelectionScopesHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js +85 -98
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/TemporaryStorage.d.ts +2 -3
- package/lib/cjs/presentation-backend/TemporaryStorage.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/TemporaryStorage.js +30 -28
- package/lib/cjs/presentation-backend/TemporaryStorage.js.map +1 -1
- package/lib/cjs/presentation-backend/Utils.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/Utils.js +15 -21
- package/lib/cjs/presentation-backend/Utils.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js +2 -2
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/RulesetElements.js +4 -4
- package/lib/cjs/presentation-backend/domain/RulesetElements.js.map +1 -1
- package/lib/cjs/presentation-backend-internal.d.ts +2 -0
- package/lib/cjs/presentation-backend-internal.d.ts.map +1 -0
- package/lib/cjs/presentation-backend-internal.js +12 -0
- package/lib/cjs/presentation-backend-internal.js.map +1 -0
- package/lib/cjs/presentation-backend.d.ts +7 -7
- package/lib/cjs/presentation-backend.d.ts.map +1 -1
- package/lib/cjs/presentation-backend.js +11 -21
- package/lib/cjs/presentation-backend.js.map +1 -1
- package/lib/esm/presentation-backend/BackendLoggerCategory.d.ts +62 -0
- package/lib/esm/presentation-backend/BackendLoggerCategory.d.ts.map +1 -0
- package/lib/esm/presentation-backend/BackendLoggerCategory.js +69 -0
- package/lib/esm/presentation-backend/BackendLoggerCategory.js.map +1 -0
- package/lib/esm/presentation-backend/ElementPropertiesHelper.d.ts +45 -0
- package/lib/esm/presentation-backend/ElementPropertiesHelper.d.ts.map +1 -0
- package/lib/esm/presentation-backend/ElementPropertiesHelper.js +187 -0
- package/lib/esm/presentation-backend/ElementPropertiesHelper.js.map +1 -0
- package/lib/esm/presentation-backend/InternalSymbols.d.ts +5 -0
- package/lib/esm/presentation-backend/InternalSymbols.d.ts.map +1 -0
- package/lib/esm/presentation-backend/InternalSymbols.js +13 -0
- package/lib/esm/presentation-backend/InternalSymbols.js.map +1 -0
- package/lib/esm/presentation-backend/NativePlatform.d.ts +89 -0
- package/lib/esm/presentation-backend/NativePlatform.d.ts.map +1 -0
- package/lib/esm/presentation-backend/NativePlatform.js +156 -0
- package/lib/esm/presentation-backend/NativePlatform.js.map +1 -0
- package/lib/esm/presentation-backend/Presentation.d.ts +97 -0
- package/lib/esm/presentation-backend/Presentation.d.ts.map +1 -0
- package/lib/esm/presentation-backend/Presentation.js +147 -0
- package/lib/esm/presentation-backend/Presentation.js.map +1 -0
- package/lib/esm/presentation-backend/PresentationIpcHandler.d.ts +12 -0
- package/lib/esm/presentation-backend/PresentationIpcHandler.d.ts.map +1 -0
- package/lib/esm/presentation-backend/PresentationIpcHandler.js +25 -0
- package/lib/esm/presentation-backend/PresentationIpcHandler.js.map +1 -0
- package/lib/esm/presentation-backend/PresentationManager.d.ts +387 -0
- package/lib/esm/presentation-backend/PresentationManager.d.ts.map +1 -0
- package/lib/esm/presentation-backend/PresentationManager.js +352 -0
- package/lib/esm/presentation-backend/PresentationManager.js.map +1 -0
- package/lib/esm/presentation-backend/PresentationManagerDetail.d.ts +74 -0
- package/lib/esm/presentation-backend/PresentationManagerDetail.d.ts.map +1 -0
- package/lib/esm/presentation-backend/PresentationManagerDetail.js +446 -0
- package/lib/esm/presentation-backend/PresentationManagerDetail.js.map +1 -0
- package/lib/esm/presentation-backend/PresentationRpcImpl.d.ts +63 -0
- package/lib/esm/presentation-backend/PresentationRpcImpl.d.ts.map +1 -0
- package/lib/esm/presentation-backend/PresentationRpcImpl.js +409 -0
- package/lib/esm/presentation-backend/PresentationRpcImpl.js.map +1 -0
- package/lib/esm/presentation-backend/RulesetEmbedder.d.ts +109 -0
- package/lib/esm/presentation-backend/RulesetEmbedder.d.ts.map +1 -0
- package/lib/esm/presentation-backend/RulesetEmbedder.js +269 -0
- package/lib/esm/presentation-backend/RulesetEmbedder.js.map +1 -0
- package/lib/esm/presentation-backend/RulesetManager.d.ts +54 -0
- package/lib/esm/presentation-backend/RulesetManager.d.ts.map +1 -0
- package/lib/esm/presentation-backend/RulesetManager.js +74 -0
- package/lib/esm/presentation-backend/RulesetManager.js.map +1 -0
- package/lib/esm/presentation-backend/RulesetVariablesManager.d.ts +141 -0
- package/lib/esm/presentation-backend/RulesetVariablesManager.d.ts.map +1 -0
- package/lib/esm/presentation-backend/RulesetVariablesManager.js +140 -0
- package/lib/esm/presentation-backend/RulesetVariablesManager.js.map +1 -0
- package/lib/esm/presentation-backend/SelectionScopesHelper.d.ts +27 -0
- package/lib/esm/presentation-backend/SelectionScopesHelper.d.ts.map +1 -0
- package/lib/esm/presentation-backend/SelectionScopesHelper.js +227 -0
- package/lib/esm/presentation-backend/SelectionScopesHelper.js.map +1 -0
- package/lib/esm/presentation-backend/TemporaryStorage.d.ts +123 -0
- package/lib/esm/presentation-backend/TemporaryStorage.d.ts.map +1 -0
- package/lib/esm/presentation-backend/TemporaryStorage.js +157 -0
- package/lib/esm/presentation-backend/TemporaryStorage.js.map +1 -0
- package/lib/esm/presentation-backend/Utils.d.ts +50 -0
- package/lib/esm/presentation-backend/Utils.d.ts.map +1 -0
- package/lib/esm/presentation-backend/Utils.js +101 -0
- package/lib/esm/presentation-backend/Utils.js.map +1 -0
- package/lib/esm/presentation-backend/domain/PresentationRulesDomain.d.ts +17 -0
- package/lib/esm/presentation-backend/domain/PresentationRulesDomain.d.ts.map +1 -0
- package/lib/esm/presentation-backend/domain/PresentationRulesDomain.js +31 -0
- package/lib/esm/presentation-backend/domain/PresentationRulesDomain.js.map +1 -0
- package/lib/esm/presentation-backend/domain/RulesetElements.d.ts +22 -0
- package/lib/esm/presentation-backend/domain/RulesetElements.d.ts.map +1 -0
- package/lib/esm/presentation-backend/domain/RulesetElements.js +38 -0
- package/lib/esm/presentation-backend/domain/RulesetElements.js.map +1 -0
- package/lib/esm/presentation-backend/primary-presentation-rules/ElementProperties.PresentationRuleSet.json +14 -0
- package/lib/esm/presentation-backend/supplemental-presentation-rules/BisCore.PresentationRuleSet.json +701 -0
- package/lib/esm/presentation-backend/supplemental-presentation-rules/Functional.PresentationRuleSet.json +139 -0
- package/lib/esm/presentation-backend-internal.d.ts +2 -0
- package/lib/esm/presentation-backend-internal.d.ts.map +1 -0
- package/lib/esm/presentation-backend-internal.js +8 -0
- package/lib/esm/presentation-backend-internal.js.map +1 -0
- package/lib/esm/presentation-backend.d.ts +20 -0
- package/lib/esm/presentation-backend.d.ts.map +1 -0
- package/lib/esm/presentation-backend.js +21 -0
- package/lib/esm/presentation-backend.js.map +1 -0
- package/package.json +42 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,oEAA+E;AA4E/E;;;GAGG;AACH,MAAa,2BAA2B;IAItC,YAAY,cAA8C,EAAE,SAAiB;QAC3E,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QACxF,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9F,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB;QAClE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;IACrG,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QAChF,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAgB,CAAC,CAAC;YACpD,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAmB,CAAC,CAAC;YACvD,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC1D,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;YAClD,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAiB,CAAC,CAAC;YACrD,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAkB;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnF,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB;QAC1D,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,CAAW,CAAC;IAChF,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,UAAkB,EAAE,KAAa;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAY,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAc;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,CAAW,CAAC;IAC7E,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,UAAkB,EAAE,KAAa;QAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,CAAa,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAe;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAe,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAiB;QAClD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,CAAiB,CAAC;IACzF,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,UAAkB,EAAE,KAAmB;QACrD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF;AAhJD,kEAgJC","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 Core\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\r\nimport { NativePlatformDefinition } from \"./NativePlatform\";\r\n\r\n/**\r\n * Presentation ruleset variables registry.\r\n * @public\r\n */\r\nexport interface RulesetVariablesManager {\r\n /** Gets a value of the specified type and ID */\r\n getValue(variableId: string, type: VariableValueTypes): VariableValue;\r\n /** Sets a value of the specified type */\r\n setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void;\r\n /** Unsets variable with given id. */\r\n unset(variableId: string): void;\r\n\r\n /**\r\n * Retrieves `string` variable value.\r\n * Returns empty string if variable does not exist or does not convert to string.\r\n */\r\n getString(variableId: string): string;\r\n /**\r\n * Sets `string` variable value\r\n */\r\n setString(variableId: string, value: string): void;\r\n\r\n /**\r\n * Retrieves `boolean` variable value.\r\n * Returns `false` if variable does not exist or does not convert to boolean.\r\n */\r\n getBool(variableId: string): boolean;\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n setBool(variableId: string, value: boolean): void;\r\n\r\n /**\r\n * Retrieves `number` variable value.\r\n * Returns `0` if variable does not exist or does not convert to integer.\r\n */\r\n getInt(variableId: string): number;\r\n /**\r\n * Sets `number` variable value\r\n */\r\n setInt(variableId: string, value: number): void;\r\n\r\n /**\r\n * Retrieves `number[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to integer array.\r\n */\r\n getInts(variableId: string): number[];\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n setInts(variableId: string, value: number[]): void;\r\n\r\n /**\r\n * Retrieves `Id64String` variable value.\r\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\r\n */\r\n getId64(variableId: string): Id64String;\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n setId64(variableId: string, value: Id64String): void;\r\n\r\n /**\r\n * Retrieves `Id64String[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to Id64String array.\r\n */\r\n getId64s(variableId: string): Id64String[];\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n setId64s(variableId: string, value: Id64String[]): void;\r\n}\r\n\r\n/**\r\n * Presentation ruleset variables registry implementation.\r\n * @internal\r\n */\r\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\r\n private _getNativePlatform: () => NativePlatformDefinition;\r\n private _rulesetId: string;\r\n\r\n constructor(getNativeAddon: () => NativePlatformDefinition, rulesetId: string) {\r\n this._getNativePlatform = getNativeAddon;\r\n this._rulesetId = rulesetId;\r\n }\r\n\r\n public setValueInternal(variableId: string, type: VariableValueTypes, value: VariableValue): void {\r\n this._getNativePlatform().setRulesetVariableValue(this._rulesetId, variableId, type, value);\r\n }\r\n\r\n public getValueInternal(variableId: string, type: VariableValueTypes): VariableValue {\r\n return this._getNativePlatform().getRulesetVariableValue(this._rulesetId, variableId, type).result;\r\n }\r\n\r\n public setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void {\r\n switch (type) {\r\n case VariableValueTypes.Bool:\r\n return this.setBool(variableId, value as boolean);\r\n case VariableValueTypes.Id64:\r\n return this.setId64(variableId, value as Id64String);\r\n case VariableValueTypes.Id64Array:\r\n return this.setId64s(variableId, value as Id64String[]);\r\n case VariableValueTypes.Int:\r\n return this.setInt(variableId, value as number);\r\n case VariableValueTypes.IntArray:\r\n return this.setInts(variableId, value as number[]);\r\n case VariableValueTypes.String:\r\n return this.setString(variableId, value as string);\r\n }\r\n }\r\n\r\n public unset(variableId: string): void {\r\n this._getNativePlatform().unsetRulesetVariableValue(this._rulesetId, variableId);\r\n }\r\n\r\n public getValue(variableId: string, type: VariableValueTypes): VariableValue {\r\n switch (type) {\r\n case VariableValueTypes.Bool:\r\n return this.getBool(variableId);\r\n case VariableValueTypes.Id64:\r\n return this.getId64(variableId);\r\n case VariableValueTypes.Id64Array:\r\n return this.getId64s(variableId);\r\n case VariableValueTypes.Int:\r\n return this.getInt(variableId);\r\n case VariableValueTypes.IntArray:\r\n return this.getInts(variableId);\r\n case VariableValueTypes.String:\r\n return this.getString(variableId);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves `string` variable value.\r\n * Returns empty string if variable does not exist or does not convert to string.\r\n */\r\n public getString(variableId: string): string {\r\n return this.getValueInternal(variableId, VariableValueTypes.String) as string;\r\n }\r\n\r\n /**\r\n * Sets `string` variable value\r\n */\r\n public setString(variableId: string, value: string): void {\r\n this.setValueInternal(variableId, VariableValueTypes.String, value);\r\n }\r\n\r\n /**\r\n * Retrieves `boolean` variable value.\r\n * Returns `false` if variable does not exist or does not convert to boolean.\r\n */\r\n public getBool(variableId: string): boolean {\r\n return this.getValueInternal(variableId, VariableValueTypes.Bool) as boolean;\r\n }\r\n\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n public setBool(variableId: string, value: boolean): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Bool, value);\r\n }\r\n\r\n /**\r\n * Retrieves `number` variable value.\r\n * Returns `0` if variable does not exist or does not convert to integer.\r\n */\r\n public getInt(variableId: string): number {\r\n return this.getValueInternal(variableId, VariableValueTypes.Int) as number;\r\n }\r\n\r\n /**\r\n * Sets `number` variable value\r\n */\r\n public setInt(variableId: string, value: number): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Int, value);\r\n }\r\n\r\n /**\r\n * Retrieves `number[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to integer array.\r\n */\r\n public getInts(variableId: string): number[] {\r\n return this.getValueInternal(variableId, VariableValueTypes.IntArray) as number[];\r\n }\r\n\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n public setInts(variableId: string, value: number[]): void {\r\n this.setValueInternal(variableId, VariableValueTypes.IntArray, value);\r\n }\r\n\r\n /**\r\n * Retrieves `Id64String` variable value.\r\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\r\n */\r\n public getId64(variableId: string): Id64String {\r\n return this.getValueInternal(variableId, VariableValueTypes.Id64) as Id64String;\r\n }\r\n\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n public setId64(variableId: string, value: Id64String): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Id64, value);\r\n }\r\n\r\n /**\r\n * Retrieves `Id64String[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to Id64String array.\r\n */\r\n public getId64s(variableId: string): Id64String[] {\r\n return this.getValueInternal(variableId, VariableValueTypes.Id64Array) as Id64String[];\r\n }\r\n\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n public setId64s(variableId: string, value: Id64String[]): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Id64Array, value);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\nimport { NativePlatformDefinition } from \"./NativePlatform.js\";\n\n/**\n * Presentation ruleset variables registry.\n * @public\n */\nexport interface RulesetVariablesManager {\n /** Gets a value of the specified type and ID */\n getValue(variableId: string, type: VariableValueTypes): VariableValue;\n /** Sets a value of the specified type */\n setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void;\n /** Unsets variable with given id. */\n unset(variableId: string): void;\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n getString(variableId: string): string;\n /**\n * Sets `string` variable value\n */\n setString(variableId: string, value: string): void;\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n getBool(variableId: string): boolean;\n /**\n * Sets `boolean` variable value\n */\n setBool(variableId: string, value: boolean): void;\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n getInt(variableId: string): number;\n /**\n * Sets `number` variable value\n */\n setInt(variableId: string, value: number): void;\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n getInts(variableId: string): number[];\n /**\n * Sets `number[]` variable value\n */\n setInts(variableId: string, value: number[]): void;\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n getId64(variableId: string): Id64String;\n /**\n * Sets `Id64String` variable value\n */\n setId64(variableId: string, value: Id64String): void;\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n getId64s(variableId: string): Id64String[];\n /**\n * Sets `Id64String[]` variable value\n */\n setId64s(variableId: string, value: Id64String[]): void;\n}\n\n/**\n * Presentation ruleset variables registry implementation.\n * @internal\n */\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\n private _getNativePlatform: () => NativePlatformDefinition;\n private _rulesetId: string;\n\n constructor(getNativeAddon: () => NativePlatformDefinition, rulesetId: string) {\n this._getNativePlatform = getNativeAddon;\n this._rulesetId = rulesetId;\n }\n\n public setValueInternal(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n this._getNativePlatform().setRulesetVariableValue(this._rulesetId, variableId, type, value);\n }\n\n public getValueInternal(variableId: string, type: VariableValueTypes): VariableValue {\n return this._getNativePlatform().getRulesetVariableValue(this._rulesetId, variableId, type).result;\n }\n\n public setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.setBool(variableId, value as boolean);\n case VariableValueTypes.Id64:\n return this.setId64(variableId, value as Id64String);\n case VariableValueTypes.Id64Array:\n return this.setId64s(variableId, value as Id64String[]);\n case VariableValueTypes.Int:\n return this.setInt(variableId, value as number);\n case VariableValueTypes.IntArray:\n return this.setInts(variableId, value as number[]);\n case VariableValueTypes.String:\n return this.setString(variableId, value as string);\n }\n }\n\n public unset(variableId: string): void {\n this._getNativePlatform().unsetRulesetVariableValue(this._rulesetId, variableId);\n }\n\n public getValue(variableId: string, type: VariableValueTypes): VariableValue {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.getBool(variableId);\n case VariableValueTypes.Id64:\n return this.getId64(variableId);\n case VariableValueTypes.Id64Array:\n return this.getId64s(variableId);\n case VariableValueTypes.Int:\n return this.getInt(variableId);\n case VariableValueTypes.IntArray:\n return this.getInts(variableId);\n case VariableValueTypes.String:\n return this.getString(variableId);\n }\n }\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n public getString(variableId: string): string {\n return this.getValueInternal(variableId, VariableValueTypes.String) as string;\n }\n\n /**\n * Sets `string` variable value\n */\n public setString(variableId: string, value: string): void {\n this.setValueInternal(variableId, VariableValueTypes.String, value);\n }\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n public getBool(variableId: string): boolean {\n return this.getValueInternal(variableId, VariableValueTypes.Bool) as boolean;\n }\n\n /**\n * Sets `boolean` variable value\n */\n public setBool(variableId: string, value: boolean): void {\n this.setValueInternal(variableId, VariableValueTypes.Bool, value);\n }\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n public getInt(variableId: string): number {\n return this.getValueInternal(variableId, VariableValueTypes.Int) as number;\n }\n\n /**\n * Sets `number` variable value\n */\n public setInt(variableId: string, value: number): void {\n this.setValueInternal(variableId, VariableValueTypes.Int, value);\n }\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n public getInts(variableId: string): number[] {\n return this.getValueInternal(variableId, VariableValueTypes.IntArray) as number[];\n }\n\n /**\n * Sets `number[]` variable value\n */\n public setInts(variableId: string, value: number[]): void {\n this.setValueInternal(variableId, VariableValueTypes.IntArray, value);\n }\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n public getId64(variableId: string): Id64String {\n return this.getValueInternal(variableId, VariableValueTypes.Id64) as Id64String;\n }\n\n /**\n * Sets `Id64String` variable value\n */\n public setId64(variableId: string, value: Id64String): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64, value);\n }\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n public getId64s(variableId: string): Id64String[] {\n return this.getValueInternal(variableId, VariableValueTypes.Id64Array) as Id64String[];\n }\n\n /**\n * Sets `Id64String[]` variable value\n */\n public setId64s(variableId: string, value: Id64String[]): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64Array, value);\n }\n}\n"]}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* @module Core
|
|
3
3
|
*/
|
|
4
4
|
import { IModelDb } from "@itwin/core-backend";
|
|
5
|
-
import {
|
|
6
|
-
import { ComputeSelectionRequestOptions, KeySet, SelectionScope, SelectionScopeRequestOptions } from "@itwin/presentation-common";
|
|
5
|
+
import { ComputeSelectionRequestOptions, KeySet, SelectionScope } from "@itwin/presentation-common";
|
|
7
6
|
/**
|
|
8
7
|
* Contains helper methods for computing selection scopes. Will get removed
|
|
9
8
|
* once rules-driven scopes are implemented.
|
|
@@ -23,7 +22,6 @@ export declare class SelectionScopesHelper {
|
|
|
23
22
|
private static computeFunctionalElementSelection;
|
|
24
23
|
private static computeFunctionalAssemblySelection;
|
|
25
24
|
private static computeFunctionalTopAssemblySelection;
|
|
26
|
-
static computeSelection(
|
|
27
|
-
static computeSelection(requestOptions: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet>;
|
|
25
|
+
static computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet>;
|
|
28
26
|
}
|
|
29
27
|
//# sourceMappingURL=SelectionScopesHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesHelper.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectionScopesHelper.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,8BAA8B,EAG9B,MAAM,EAGN,cAAc,EACf,MAAM,4BAA4B,CAAC;AAGpC;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO;WAEO,kBAAkB,IAAI,cAAc,EAAE;IAgBpD,OAAO,CAAC,MAAM,CAAC,aAAa;mBAWP,uBAAuB;mBASvB,wBAAwB;mBAYxB,qBAAqB;mBAYrB,8BAA8B;mBAuB9B,oCAAoC;mBAYpC,uBAAuB;mBAoBvB,iCAAiC;mBAyBjC,kCAAkC;mBA2BlC,qCAAqC;WA2BtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB/H"}
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-deprecated */
|
|
6
7
|
/** @packageDocumentation
|
|
7
8
|
* @module Core
|
|
8
9
|
*/
|
|
9
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
11
|
exports.SelectionScopesHelper = void 0;
|
|
11
|
-
const core_backend_1 = require("@itwin/core-backend");
|
|
12
12
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
13
|
+
const core_common_1 = require("@itwin/core-common");
|
|
13
14
|
const presentation_common_1 = require("@itwin/presentation-common");
|
|
14
|
-
const
|
|
15
|
+
const Utils_js_1 = require("./Utils.js");
|
|
15
16
|
/**
|
|
16
17
|
* Contains helper methods for computing selection scopes. Will get removed
|
|
17
18
|
* once rules-driven scopes are implemented.
|
|
@@ -19,7 +20,7 @@ const Utils_1 = require("./Utils");
|
|
|
19
20
|
* @internal
|
|
20
21
|
*/
|
|
21
22
|
class SelectionScopesHelper {
|
|
22
|
-
|
|
23
|
+
/* c8 ignore next */
|
|
23
24
|
constructor() { }
|
|
24
25
|
static getSelectionScopes() {
|
|
25
26
|
const createSelectionScope = (scopeId, label, description) => ({
|
|
@@ -44,67 +45,62 @@ class SelectionScopesHelper {
|
|
|
44
45
|
parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;
|
|
45
46
|
--ancestorLevel;
|
|
46
47
|
}
|
|
47
|
-
return (0,
|
|
48
|
+
return (0, Utils_js_1.getElementKey)(iModel, currId);
|
|
48
49
|
}
|
|
49
|
-
static computeElementSelection(iModel, elementIds, ancestorLevel) {
|
|
50
|
+
static async computeElementSelection(iModel, elementIds, ancestorLevel) {
|
|
50
51
|
const parentKeys = new presentation_common_1.KeySet();
|
|
51
|
-
elementIds
|
|
52
|
+
await forEachNonTransientId(elementIds, async (id) => {
|
|
52
53
|
const key = this.getElementKey(iModel, id, ancestorLevel);
|
|
53
54
|
key && parentKeys.add(key);
|
|
54
|
-
})
|
|
55
|
+
});
|
|
55
56
|
return parentKeys;
|
|
56
57
|
}
|
|
57
|
-
static computeCategorySelection(iModel, ids) {
|
|
58
|
+
static async computeCategorySelection(iModel, ids) {
|
|
58
59
|
const categoryKeys = new presentation_common_1.KeySet();
|
|
59
|
-
ids
|
|
60
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
60
61
|
const el = iModel.elements.tryGetElement(id);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
categoryKeys.add({ className: category.classFullName, id: category.id });
|
|
65
|
-
}
|
|
62
|
+
const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;
|
|
63
|
+
if (category) {
|
|
64
|
+
categoryKeys.add({ className: category.classFullName, id: category.id });
|
|
66
65
|
}
|
|
67
|
-
})
|
|
66
|
+
});
|
|
68
67
|
return categoryKeys;
|
|
69
68
|
}
|
|
70
|
-
static computeModelSelection(iModel, ids) {
|
|
69
|
+
static async computeModelSelection(iModel, ids) {
|
|
71
70
|
const modelKeys = new presentation_common_1.KeySet();
|
|
72
|
-
ids
|
|
71
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
73
72
|
const el = iModel.elements.tryGetElementProps(id);
|
|
74
73
|
const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;
|
|
75
74
|
if (model) {
|
|
76
75
|
modelKeys.add({ className: model.classFullName, id: model.id });
|
|
77
76
|
}
|
|
78
|
-
})
|
|
77
|
+
});
|
|
79
78
|
return modelKeys;
|
|
80
79
|
}
|
|
81
|
-
static getRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
82
|
-
const query = `
|
|
83
|
-
SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
|
|
84
|
-
FROM bis.Element e
|
|
85
|
-
LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
|
|
86
|
-
LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
|
|
87
|
-
LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
|
|
88
|
-
INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
|
|
89
|
-
INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
if (row.funcElClassName && row.funcElId) {
|
|
98
|
-
return { className: row.funcElClassName.replace(".", ":"), id: row.funcElId };
|
|
99
|
-
}
|
|
80
|
+
static async getRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
81
|
+
const query = `
|
|
82
|
+
SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
|
|
83
|
+
FROM bis.Element e
|
|
84
|
+
LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
|
|
85
|
+
LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
|
|
86
|
+
LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
|
|
87
|
+
INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
|
|
88
|
+
INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
|
|
89
|
+
WHERE e.ECInstanceId = ?
|
|
90
|
+
`;
|
|
91
|
+
const bindings = new core_common_1.QueryBinder();
|
|
92
|
+
bindings.bindId(1, graphicalElementId);
|
|
93
|
+
for await (const row of imodel.createQueryReader(query, bindings)) {
|
|
94
|
+
if (row.funcElClassName && row.funcElId) {
|
|
95
|
+
return { className: row.funcElClassName.replace(".", ":"), id: row.funcElId };
|
|
100
96
|
}
|
|
101
|
-
|
|
102
|
-
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
103
99
|
}
|
|
104
|
-
static findFirstRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
100
|
+
static async findFirstRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
105
101
|
let currId = graphicalElementId;
|
|
106
102
|
while (currId) {
|
|
107
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(imodel, currId);
|
|
103
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(imodel, currId);
|
|
108
104
|
if (relatedFunctionalKey) {
|
|
109
105
|
return relatedFunctionalKey;
|
|
110
106
|
}
|
|
@@ -112,28 +108,30 @@ class SelectionScopesHelper {
|
|
|
112
108
|
}
|
|
113
109
|
return undefined;
|
|
114
110
|
}
|
|
115
|
-
static elementClassDerivesFrom(imodel, elementId, baseClassFullName) {
|
|
116
|
-
const query = `
|
|
117
|
-
SELECT 1
|
|
118
|
-
FROM bis.Element e
|
|
119
|
-
INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
|
|
120
|
-
INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
121
|
-
INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
122
|
-
WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
111
|
+
static async elementClassDerivesFrom(imodel, elementId, baseClassFullName) {
|
|
112
|
+
const query = `
|
|
113
|
+
SELECT 1
|
|
114
|
+
FROM bis.Element e
|
|
115
|
+
INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
|
|
116
|
+
INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
117
|
+
INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
118
|
+
WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
|
|
119
|
+
`;
|
|
120
|
+
const bindings = new core_common_1.QueryBinder();
|
|
121
|
+
bindings.bindId(1, elementId);
|
|
122
|
+
bindings.bindString(2, baseClassFullName);
|
|
123
|
+
for await (const _ of imodel.createQueryReader(query, bindings)) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
129
127
|
}
|
|
130
|
-
static computeFunctionalElementSelection(iModel, ids) {
|
|
128
|
+
static async computeFunctionalElementSelection(iModel, ids) {
|
|
131
129
|
const keys = new presentation_common_1.KeySet();
|
|
132
|
-
ids
|
|
133
|
-
const is3d = this.elementClassDerivesFrom(iModel, id,
|
|
130
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
131
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
134
132
|
if (!is3d) {
|
|
135
133
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
136
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
134
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
137
135
|
if (firstFunctionalKey) {
|
|
138
136
|
keys.add(firstFunctionalKey);
|
|
139
137
|
return;
|
|
@@ -142,23 +140,23 @@ class SelectionScopesHelper {
|
|
|
142
140
|
let keyToAdd;
|
|
143
141
|
if (is3d) {
|
|
144
142
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
145
|
-
keyToAdd = this.getRelatedFunctionalElementKey(iModel, id);
|
|
143
|
+
keyToAdd = await this.getRelatedFunctionalElementKey(iModel, id);
|
|
146
144
|
}
|
|
147
145
|
if (!keyToAdd) {
|
|
148
|
-
keyToAdd = (0,
|
|
146
|
+
keyToAdd = (0, Utils_js_1.getElementKey)(iModel, id);
|
|
149
147
|
}
|
|
150
148
|
keyToAdd && keys.add(keyToAdd);
|
|
151
|
-
})
|
|
149
|
+
});
|
|
152
150
|
return keys;
|
|
153
151
|
}
|
|
154
|
-
static computeFunctionalAssemblySelection(iModel, ids) {
|
|
152
|
+
static async computeFunctionalAssemblySelection(iModel, ids) {
|
|
155
153
|
const keys = new presentation_common_1.KeySet();
|
|
156
|
-
ids
|
|
154
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
157
155
|
let idToGetAssemblyFor = id;
|
|
158
|
-
const is3d = this.elementClassDerivesFrom(iModel, id,
|
|
156
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
159
157
|
if (!is3d) {
|
|
160
158
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
161
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
159
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
162
160
|
if (firstFunctionalKey) {
|
|
163
161
|
idToGetAssemblyFor = firstFunctionalKey.id;
|
|
164
162
|
}
|
|
@@ -168,23 +166,23 @@ class SelectionScopesHelper {
|
|
|
168
166
|
let keyToAdd = assemblyKey;
|
|
169
167
|
if (is3d && keyToAdd) {
|
|
170
168
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
171
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
169
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
172
170
|
if (relatedFunctionalKey) {
|
|
173
171
|
keyToAdd = relatedFunctionalKey;
|
|
174
172
|
}
|
|
175
173
|
}
|
|
176
174
|
keyToAdd && keys.add(keyToAdd);
|
|
177
|
-
})
|
|
175
|
+
});
|
|
178
176
|
return keys;
|
|
179
177
|
}
|
|
180
|
-
static computeFunctionalTopAssemblySelection(iModel, ids) {
|
|
178
|
+
static async computeFunctionalTopAssemblySelection(iModel, ids) {
|
|
181
179
|
const keys = new presentation_common_1.KeySet();
|
|
182
|
-
ids
|
|
180
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
183
181
|
let idToGetAssemblyFor = id;
|
|
184
|
-
const is3d = this.elementClassDerivesFrom(iModel, id,
|
|
182
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
185
183
|
if (!is3d) {
|
|
186
184
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
187
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
185
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
188
186
|
if (firstFunctionalKey) {
|
|
189
187
|
idToGetAssemblyFor = firstFunctionalKey.id;
|
|
190
188
|
}
|
|
@@ -194,51 +192,40 @@ class SelectionScopesHelper {
|
|
|
194
192
|
let keyToAdd = topAssemblyKey;
|
|
195
193
|
if (is3d && keyToAdd) {
|
|
196
194
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
197
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
195
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
198
196
|
if (relatedFunctionalKey) {
|
|
199
197
|
keyToAdd = relatedFunctionalKey;
|
|
200
198
|
}
|
|
201
199
|
}
|
|
202
200
|
keyToAdd && keys.add(keyToAdd);
|
|
203
|
-
})
|
|
201
|
+
});
|
|
204
202
|
return keys;
|
|
205
203
|
}
|
|
206
|
-
static async computeSelection(
|
|
207
|
-
|
|
208
|
-
return this.computeSelection({
|
|
209
|
-
...requestOptions,
|
|
210
|
-
elementIds: elementIds,
|
|
211
|
-
scope: { id: scopeId },
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
switch (requestOptions.scope.id) {
|
|
204
|
+
static async computeSelection({ imodel, scope, elementIds }) {
|
|
205
|
+
switch (scope.id) {
|
|
215
206
|
case "element":
|
|
216
|
-
return this.computeElementSelection(
|
|
207
|
+
return this.computeElementSelection(imodel, elementIds, scope.ancestorLevel ?? 0);
|
|
217
208
|
case "assembly":
|
|
218
|
-
return this.computeElementSelection(
|
|
209
|
+
return this.computeElementSelection(imodel, elementIds, 1);
|
|
219
210
|
case "top-assembly":
|
|
220
|
-
return this.computeElementSelection(
|
|
211
|
+
return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);
|
|
221
212
|
case "category":
|
|
222
|
-
return this.computeCategorySelection(
|
|
213
|
+
return this.computeCategorySelection(imodel, elementIds);
|
|
223
214
|
case "model":
|
|
224
|
-
return this.computeModelSelection(
|
|
215
|
+
return this.computeModelSelection(imodel, elementIds);
|
|
225
216
|
case "functional":
|
|
226
217
|
case "functional-element":
|
|
227
|
-
return this.computeFunctionalElementSelection(
|
|
218
|
+
return this.computeFunctionalElementSelection(imodel, elementIds);
|
|
228
219
|
case "functional-assembly":
|
|
229
|
-
return this.computeFunctionalAssemblySelection(
|
|
220
|
+
return this.computeFunctionalAssemblySelection(imodel, elementIds);
|
|
230
221
|
case "functional-top-assembly":
|
|
231
|
-
return this.computeFunctionalTopAssemblySelection(
|
|
222
|
+
return this.computeFunctionalTopAssemblySelection(imodel, elementIds);
|
|
232
223
|
}
|
|
233
224
|
throw new presentation_common_1.PresentationError(presentation_common_1.PresentationStatus.InvalidArgument, "scopeId");
|
|
234
225
|
}
|
|
235
226
|
}
|
|
236
227
|
exports.SelectionScopesHelper = SelectionScopesHelper;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
callback(id);
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
};
|
|
228
|
+
async function forEachNonTransientId(ids, callback) {
|
|
229
|
+
await Promise.all(ids.filter((id) => !core_bentley_1.Id64.isTransient(id)).map(callback));
|
|
230
|
+
}
|
|
244
231
|
//# sourceMappingURL=SelectionScopesHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,sDAAqF;AACrF,sDAAiE;AACjE,oEAUoC;AACpC,mCAAwC;AAExC;;;;;GAKG;AACH,MAAa,qBAAqB;IAChC,uBAAuB;IACvB,gBAAuB,CAAC;IAEjB,MAAM,CAAC,kBAAkB;QAC9B,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,WAAmB,EAAkB,EAAE,CAAC,CAAC;YACrG,EAAE,EAAE,OAAO;YACX,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;QACH,OAAO;YACL,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,2BAA2B,CAAC;YACvE,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,qCAAqC,CAAC;YACnF,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,iDAAiD,CAAC;YACvG,gHAAgH;YAChH,wGAAwG;YACxG,+FAA+F;SAChG,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,MAAgB,EAAE,SAAqB,EAAE,aAAqB;QACzF,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QACtE,OAAO,QAAQ,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,QAAQ,CAAC;YAClB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;YAClE,EAAE,aAAa,CAAC;QAClB,CAAC;QACD,OAAO,IAAA,qBAAa,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,MAAgB,EAAE,UAAwB,EAAE,aAAqB;QACtG,MAAM,UAAU,GAAG,IAAI,4BAAM,EAAE,CAAC;QAChC,UAAU,CAAC,OAAO,CAChB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;YAC1D,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CACH,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,MAAgB,EAAE,GAAiB;QACzE,MAAM,YAAY,GAAG,IAAI,4BAAM,EAAE,CAAC;QAClC,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,YAAY,+BAAgB,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE,CAAC;oBACb,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAG,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,MAAgB,EAAE,GAAiB;QACtE,MAAM,SAAS,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC/B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,EAAG,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,MAAgB,EAAE,kBAA8B;QAC5F,MAAM,KAAK,GAAG;;;;;;;;;OASX,CAAC;QACJ,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAA2B,EAAE;YAC3E,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACnC,uBAAuB;YACvB,IAAI,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACxC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,oCAAoC,CAAC,MAAgB,EAAE,kBAA8B;QAClG,IAAI,MAAM,GAA2B,kBAAkB,CAAC;QACxD,OAAO,MAAM,EAAE,CAAC;YACd,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjF,IAAI,oBAAoB,EAAE,CAAC;gBACzB,OAAO,oBAAoB,CAAC;YAC9B,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,MAAgB,EAAE,SAAqB,EAAE,iBAAyB;QACvG,MAAM,KAAK,GAAG;;;;;;;OAOX,CAAC;QACJ,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAW,EAAE;YAC3D,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtC,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,iCAAiC,CAAC,MAAgB,EAAE,GAAiB;QAClF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,iCAAkB,CAAC,aAAa,CAAC,CAAC;YACxF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,QAAiC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,6FAA6F;gBAC7F,QAAQ,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAA,qBAAa,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAAC,MAAgB,EAAE,GAAiB;QACnF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,iCAAkB,CAAC,aAAa,CAAC,CAAC;YACxF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,kBAAkB,GAAG,kBAAkB,CAAC,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,0EAA0E;YAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,QAAQ,GAAG,WAAW,CAAC;YAC3B,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACrB,6FAA6F;gBAC7F,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,QAAQ,GAAG,oBAAoB,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,qCAAqC,CAAC,MAAgB,EAAE,GAAiB;QACtF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,iCAAkB,CAAC,aAAa,CAAC,CAAC;YACxF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,kBAAkB,GAAG,kBAAkB,CAAC,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,8EAA8E;YAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC/F,IAAI,QAAQ,GAAG,cAAc,CAAC;YAC9B,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACrB,6FAA6F;gBAC7F,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,QAAQ,GAAG,oBAAoB,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAIM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,cAAiG,EACjG,UAAyB,EACzB,OAAgB;QAEhB,IAAI,CAAC,IAAA,sDAAgC,EAAC,cAAc,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC;gBAC3B,GAAG,cAAc;gBACjB,UAAU,EAAE,UAAW;gBACvB,KAAK,EAAE,EAAE,EAAE,EAAE,OAAQ,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YAChC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,uBAAuB,CACjC,cAAc,CAAC,MAAM,EACrB,cAAc,CAAC,UAAU,EACxB,cAAc,CAAC,KAAoC,CAAC,aAAa,IAAI,CAAC,CACxE,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC3F,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACjH,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACzF,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACtF,KAAK,YAAY,CAAC;YAClB,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YAClG,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC,kCAAkC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACnG,KAAK,yBAAyB;gBAC5B,OAAO,IAAI,CAAC,qCAAqC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,uCAAiB,CAAC,wCAAkB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;CACF;AAzPD,sDAyPC;AAED,MAAM,cAAc,GAAG,CAAC,QAAkC,EAAE,EAAE;IAC5D,OAAO,CAAC,EAAc,EAAE,EAAE;QACxB,IAAI,CAAC,mBAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,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/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { GeometricElement, GeometricElement3d, IModelDb } from \"@itwin/core-backend\";\r\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n ComputeSelectionRequestOptions,\r\n ElementSelectionScopeProps,\r\n InstanceKey,\r\n isComputeSelectionRequestOptions,\r\n KeySet,\r\n PresentationError,\r\n PresentationStatus,\r\n SelectionScope,\r\n SelectionScopeRequestOptions,\r\n} from \"@itwin/presentation-common\";\r\nimport { getElementKey } from \"./Utils\";\r\n\r\n/**\r\n * Contains helper methods for computing selection scopes. Will get removed\r\n * once rules-driven scopes are implemented.\r\n *\r\n * @internal\r\n */\r\nexport class SelectionScopesHelper {\r\n // istanbul ignore next\r\n private constructor() {}\r\n\r\n public static getSelectionScopes(): SelectionScope[] {\r\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\r\n id: scopeId,\r\n label,\r\n description,\r\n });\r\n return [\r\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\r\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\r\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\r\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\r\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\r\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\r\n ];\r\n }\r\n\r\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\r\n let currId = elementId;\r\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n while (parentId && ancestorLevel !== 0) {\r\n currId = parentId;\r\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n --ancestorLevel;\r\n }\r\n return getElementKey(iModel, currId);\r\n }\r\n\r\n private static computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\r\n const parentKeys = new KeySet();\r\n elementIds.forEach(\r\n skipTransients((id) => {\r\n const key = this.getElementKey(iModel, id, ancestorLevel);\r\n key && parentKeys.add(key);\r\n }),\r\n );\r\n return parentKeys;\r\n }\r\n\r\n private static computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const categoryKeys = new KeySet();\r\n ids.forEach(\r\n skipTransients((id) => {\r\n const el = iModel.elements.tryGetElement(id);\r\n if (el instanceof GeometricElement) {\r\n const category = iModel.elements.tryGetElementProps(el.category);\r\n if (category) {\r\n categoryKeys.add({ className: category.classFullName, id: category.id! });\r\n }\r\n }\r\n }),\r\n );\r\n return categoryKeys;\r\n }\r\n\r\n private static computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const modelKeys = new KeySet();\r\n ids.forEach(\r\n skipTransients((id) => {\r\n const el = iModel.elements.tryGetElementProps(id);\r\n const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;\r\n if (model) {\r\n modelKeys.add({ className: model.classFullName, id: model.id! });\r\n }\r\n }),\r\n );\r\n return modelKeys;\r\n }\r\n\r\n private static getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): InstanceKey | undefined {\r\n const query = `\r\n SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId\r\n FROM bis.Element e\r\n LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)\r\n INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId\r\n INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id\r\n WHERE e.ECInstanceId = ?\r\n `;\r\n return imodel.withPreparedStatement(query, (stmt): InstanceKey | undefined => {\r\n stmt.bindId(1, graphicalElementId);\r\n // istanbul ignore else\r\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const row = stmt.getRow();\r\n if (row.funcElClassName && row.funcElId) {\r\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\r\n }\r\n }\r\n return undefined;\r\n });\r\n }\r\n\r\n private static findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): InstanceKey | undefined {\r\n let currId: Id64String | undefined = graphicalElementId;\r\n while (currId) {\r\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(imodel, currId);\r\n if (relatedFunctionalKey) {\r\n return relatedFunctionalKey;\r\n }\r\n currId = imodel.elements.tryGetElementProps(currId)?.parent?.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private static elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): boolean {\r\n const query = `\r\n SELECT 1\r\n FROM bis.Element e\r\n INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId\r\n INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\r\n INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\r\n WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?\r\n `;\r\n return imodel.withPreparedStatement(query, (stmt): boolean => {\r\n stmt.bindId(1, elementId);\r\n stmt.bindString(2, baseClassFullName);\r\n return DbResult.BE_SQLITE_ROW === stmt.step();\r\n });\r\n }\r\n\r\n private static computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n ids.forEach(\r\n skipTransients((id): void => {\r\n const is3d = this.elementClassDerivesFrom(iModel, id, GeometricElement3d.classFullName);\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n keys.add(firstFunctionalKey);\r\n return;\r\n }\r\n }\r\n let keyToAdd: InstanceKey | undefined;\r\n if (is3d) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n keyToAdd = this.getRelatedFunctionalElementKey(iModel, id);\r\n }\r\n if (!keyToAdd) {\r\n keyToAdd = getElementKey(iModel, id);\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n }),\r\n );\r\n return keys;\r\n }\r\n\r\n private static computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n ids.forEach(\r\n skipTransients((id): void => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = this.elementClassDerivesFrom(iModel, id, GeometricElement3d.classFullName);\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the assembly of either the given element or the functional element\r\n const assemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, 1);\r\n let keyToAdd = assemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n }),\r\n );\r\n return keys;\r\n }\r\n\r\n private static computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n ids.forEach(\r\n skipTransients((id): void => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = this.elementClassDerivesFrom(iModel, id, GeometricElement3d.classFullName);\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the top assembly of either the given element or the functional element\r\n const topAssemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, Number.MAX_SAFE_INTEGER);\r\n let keyToAdd = topAssemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n }),\r\n );\r\n return keys;\r\n }\r\n\r\n public static async computeSelection(requestOptions: SelectionScopeRequestOptions<IModelDb>, ids: Id64String[], scopeId: string): Promise<KeySet>;\r\n public static async computeSelection(requestOptions: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet>;\r\n public static async computeSelection(\r\n requestOptions: ComputeSelectionRequestOptions<IModelDb> | SelectionScopeRequestOptions<IModelDb>,\r\n elementIds?: Id64String[],\r\n scopeId?: string,\r\n ): Promise<KeySet> {\r\n if (!isComputeSelectionRequestOptions(requestOptions)) {\r\n return this.computeSelection({\r\n ...requestOptions,\r\n elementIds: elementIds!,\r\n scope: { id: scopeId! },\r\n });\r\n }\r\n\r\n switch (requestOptions.scope.id) {\r\n case \"element\":\r\n return this.computeElementSelection(\r\n requestOptions.imodel,\r\n requestOptions.elementIds,\r\n (requestOptions.scope as ElementSelectionScopeProps).ancestorLevel ?? 0,\r\n );\r\n case \"assembly\":\r\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, 1);\r\n case \"top-assembly\":\r\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, Number.MAX_SAFE_INTEGER);\r\n case \"category\":\r\n return this.computeCategorySelection(requestOptions.imodel, requestOptions.elementIds);\r\n case \"model\":\r\n return this.computeModelSelection(requestOptions.imodel, requestOptions.elementIds);\r\n case \"functional\":\r\n case \"functional-element\":\r\n return this.computeFunctionalElementSelection(requestOptions.imodel, requestOptions.elementIds);\r\n case \"functional-assembly\":\r\n return this.computeFunctionalAssemblySelection(requestOptions.imodel, requestOptions.elementIds);\r\n case \"functional-top-assembly\":\r\n return this.computeFunctionalTopAssemblySelection(requestOptions.imodel, requestOptions.elementIds);\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\r\n }\r\n}\r\n\r\nconst skipTransients = (callback: (id: Id64String) => void) => {\r\n return (id: Id64String) => {\r\n if (!Id64.isTransient(id)) {\r\n callback(id);\r\n }\r\n };\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module Core\n */\n\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { QueryBinder } from \"@itwin/core-common\";\nimport {\n ComputeSelectionRequestOptions,\n ElementSelectionScopeProps,\n InstanceKey,\n KeySet,\n PresentationError,\n PresentationStatus,\n SelectionScope,\n} from \"@itwin/presentation-common\";\nimport { getElementKey } from \"./Utils.js\";\n\n/**\n * Contains helper methods for computing selection scopes. Will get removed\n * once rules-driven scopes are implemented.\n *\n * @internal\n */\nexport class SelectionScopesHelper {\n /* c8 ignore next */\n private constructor() { }\n\n public static getSelectionScopes(): SelectionScope[] {\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\n id: scopeId,\n label,\n description,\n });\n return [\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\n ];\n }\n\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\n let currId = elementId;\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n while (parentId && ancestorLevel !== 0) {\n currId = parentId;\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n --ancestorLevel;\n }\n return getElementKey(iModel, currId);\n }\n\n private static async computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\n const parentKeys = new KeySet();\n await forEachNonTransientId(elementIds, async (id) => {\n const key = this.getElementKey(iModel, id, ancestorLevel);\n key && parentKeys.add(key);\n });\n return parentKeys;\n }\n\n private static async computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\n const categoryKeys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n const el = iModel.elements.tryGetElement<GeometricElement>(id);\n const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;\n if (category) {\n categoryKeys.add({ className: category.classFullName, id: category.id! });\n }\n });\n return categoryKeys;\n }\n\n private static async computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\n const modelKeys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n const el = iModel.elements.tryGetElementProps(id);\n const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;\n if (model) {\n modelKeys.add({ className: model.classFullName, id: model.id! });\n }\n });\n return modelKeys;\n }\n\n private static async getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\n const query = `\n SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId\n FROM bis.Element e\n LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId\n LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId\n LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)\n INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId\n INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id\n WHERE e.ECInstanceId = ?\n `;\n\n const bindings = new QueryBinder();\n bindings.bindId(1, graphicalElementId);\n\n for await (const row of imodel.createQueryReader(query, bindings)) {\n if (row.funcElClassName && row.funcElId) {\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\n }\n }\n return undefined;\n }\n\n private static async findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\n let currId: Id64String | undefined = graphicalElementId;\n while (currId) {\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(imodel, currId);\n if (relatedFunctionalKey) {\n return relatedFunctionalKey;\n }\n currId = imodel.elements.tryGetElementProps(currId)?.parent?.id;\n }\n return undefined;\n }\n\n private static async elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): Promise<boolean> {\n const query = `\n SELECT 1\n FROM bis.Element e\n INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId\n INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\n INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\n WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?\n `;\n\n const bindings = new QueryBinder();\n bindings.bindId(1, elementId);\n bindings.bindString(2, baseClassFullName);\n\n for await (const _ of imodel.createQueryReader(query, bindings)) {\n return true;\n }\n return false;\n }\n\n private static async computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n keys.add(firstFunctionalKey);\n return;\n }\n }\n let keyToAdd: InstanceKey | undefined;\n if (is3d) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n keyToAdd = await this.getRelatedFunctionalElementKey(iModel, id);\n }\n if (!keyToAdd) {\n keyToAdd = getElementKey(iModel, id);\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n private static async computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n let idToGetAssemblyFor = id;\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n idToGetAssemblyFor = firstFunctionalKey.id;\n }\n }\n // find the assembly of either the given element or the functional element\n const assemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, 1);\n let keyToAdd = assemblyKey;\n if (is3d && keyToAdd) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n private static async computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n let idToGetAssemblyFor = id;\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n idToGetAssemblyFor = firstFunctionalKey.id;\n }\n }\n // find the top assembly of either the given element or the functional element\n const topAssemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, Number.MAX_SAFE_INTEGER);\n let keyToAdd = topAssemblyKey;\n if (is3d && keyToAdd) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n public static async computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet> {\n switch (scope.id) {\n case \"element\":\n return this.computeElementSelection(imodel, elementIds, (scope as ElementSelectionScopeProps).ancestorLevel ?? 0);\n case \"assembly\":\n return this.computeElementSelection(imodel, elementIds, 1);\n case \"top-assembly\":\n return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);\n case \"category\":\n return this.computeCategorySelection(imodel, elementIds);\n case \"model\":\n return this.computeModelSelection(imodel, elementIds);\n case \"functional\":\n case \"functional-element\":\n return this.computeFunctionalElementSelection(imodel, elementIds);\n case \"functional-assembly\":\n return this.computeFunctionalAssemblySelection(imodel, elementIds);\n case \"functional-top-assembly\":\n return this.computeFunctionalTopAssemblySelection(imodel, elementIds);\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\n }\n}\n\nasync function forEachNonTransientId(ids: Id64Array, callback: (id: Id64String) => Promise<void>): Promise<void> {\n await Promise.all(ids.filter((id) => !Id64.isTransient(id)).map(callback));\n}\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Core
|
|
3
3
|
*/
|
|
4
|
-
import { IDisposable } from "@itwin/core-bentley";
|
|
5
4
|
/**
|
|
6
5
|
* Configuration properties for [[TemporaryStorage]].
|
|
7
6
|
* @internal
|
|
@@ -51,7 +50,7 @@ interface TemporaryValue<T> {
|
|
|
51
50
|
*
|
|
52
51
|
* @internal
|
|
53
52
|
*/
|
|
54
|
-
export declare class TemporaryStorage<T> implements
|
|
53
|
+
export declare class TemporaryStorage<T> implements Disposable {
|
|
55
54
|
private _timer?;
|
|
56
55
|
protected _values: Map<string, TemporaryValue<T>>;
|
|
57
56
|
readonly props: TemporaryStorageProps<T>;
|
|
@@ -63,7 +62,7 @@ export declare class TemporaryStorage<T> implements IDisposable {
|
|
|
63
62
|
* Destructor. Must be called to clean up the stored values
|
|
64
63
|
* and other resources
|
|
65
64
|
*/
|
|
66
|
-
dispose(): void;
|
|
65
|
+
[Symbol.dispose](): void;
|
|
67
66
|
/**
|
|
68
67
|
* Cleans up values that are currently outdated (based
|
|
69
68
|
* on their max and unused value lifetimes specified through [[Props]]).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemporaryStorage.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"TemporaryStorage.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,8EAA8E;IAC9E,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;IAE3F,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qCAAqC;AACrC,UAAU,cAAc,CAAC,CAAC;IACxB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,CAAC,CAAC;CACV;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB,CAAC,CAAC,CAAE,YAAW,UAAU;IACpD,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,SAAgB,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAEhD;;OAEG;gBACS,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAQ3C;;;OAGG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;IAcvB;;;OAGG;IACI,qBAAqB,aAoB1B;IAEF,OAAO,CAAC,mBAAmB;IAO3B;;;;OAIG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IASnC,eAAe,CAAC,EAAE,EAAE,MAAM;IAOjC;;;OAGG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAOpC,qCAAqC;IAC9B,WAAW,CAAC,EAAE,EAAE,MAAM;IAM7B;;;;;OAKG;IACH,IAAW,MAAM,IAAI,CAAC,EAAE,CAMvB;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAiC,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IACpF,yEAAyE;IACzE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;CACrD;AAED;;;;;GAKG;AACH,qBAAa,4BAA4B,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACtE,SAAyB,KAAK,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAErE;;OAEG;gBACS,KAAK,EAAE,iCAAiC,CAAC,CAAC,CAAC;IAKvD;;;;;OAKG;IACa,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC;CAUxC"}
|
|
@@ -17,35 +17,13 @@ const presentation_common_1 = require("@itwin/presentation-common");
|
|
|
17
17
|
* @internal
|
|
18
18
|
*/
|
|
19
19
|
class TemporaryStorage {
|
|
20
|
+
_timer;
|
|
21
|
+
_values;
|
|
22
|
+
props;
|
|
20
23
|
/**
|
|
21
24
|
* Constructor. Creates the storage using supplied params.
|
|
22
25
|
*/
|
|
23
26
|
constructor(props) {
|
|
24
|
-
/**
|
|
25
|
-
* Cleans up values that are currently outdated (based
|
|
26
|
-
* on their max and unused value lifetimes specified through [[Props]]).
|
|
27
|
-
*/
|
|
28
|
-
this.disposeOutdatedValues = () => {
|
|
29
|
-
const now = new Date().getTime();
|
|
30
|
-
const valuesToDispose = [];
|
|
31
|
-
for (const [key, entry] of this._values.entries()) {
|
|
32
|
-
if (this.props.maxValueLifetime !== undefined) {
|
|
33
|
-
if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {
|
|
34
|
-
valuesToDispose.push(key);
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (this.props.unusedValueLifetime !== undefined) {
|
|
39
|
-
if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {
|
|
40
|
-
valuesToDispose.push(key);
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
for (const id of valuesToDispose) {
|
|
46
|
-
this.deleteExistingEntry(id, true);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
27
|
this.props = props;
|
|
50
28
|
this._values = new Map();
|
|
51
29
|
if (this.props.cleanupInterval) {
|
|
@@ -56,7 +34,7 @@ class TemporaryStorage {
|
|
|
56
34
|
* Destructor. Must be called to clean up the stored values
|
|
57
35
|
* and other resources
|
|
58
36
|
*/
|
|
59
|
-
dispose() {
|
|
37
|
+
[Symbol.dispose]() {
|
|
60
38
|
if (this._timer) {
|
|
61
39
|
clearInterval(this._timer);
|
|
62
40
|
}
|
|
@@ -68,6 +46,31 @@ class TemporaryStorage {
|
|
|
68
46
|
this._values.clear();
|
|
69
47
|
this.props.onDisposedAll && this.props.onDisposedAll();
|
|
70
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Cleans up values that are currently outdated (based
|
|
51
|
+
* on their max and unused value lifetimes specified through [[Props]]).
|
|
52
|
+
*/
|
|
53
|
+
disposeOutdatedValues = () => {
|
|
54
|
+
const now = new Date().getTime();
|
|
55
|
+
const valuesToDispose = [];
|
|
56
|
+
for (const [key, entry] of this._values.entries()) {
|
|
57
|
+
if (this.props.maxValueLifetime !== undefined) {
|
|
58
|
+
if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {
|
|
59
|
+
valuesToDispose.push(key);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (this.props.unusedValueLifetime !== undefined) {
|
|
64
|
+
if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {
|
|
65
|
+
valuesToDispose.push(key);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
for (const id of valuesToDispose) {
|
|
71
|
+
this.deleteExistingEntry(id, true);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
71
74
|
deleteExistingEntry(id, isTimeout) {
|
|
72
75
|
(0, core_bentley_1.assert)(this._values.has(id));
|
|
73
76
|
this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id).value, isTimeout ? "timeout" : "request");
|
|
@@ -89,7 +92,6 @@ class TemporaryStorage {
|
|
|
89
92
|
}
|
|
90
93
|
notifyValueUsed(id) {
|
|
91
94
|
const entry = this._values.get(id);
|
|
92
|
-
// istanbul ignore else
|
|
93
95
|
if (entry) {
|
|
94
96
|
entry.lastUsed = new Date();
|
|
95
97
|
}
|
|
@@ -106,7 +108,6 @@ class TemporaryStorage {
|
|
|
106
108
|
}
|
|
107
109
|
/** Deletes a value with given id. */
|
|
108
110
|
deleteValue(id) {
|
|
109
|
-
// istanbul ignore else
|
|
110
111
|
if (this._values.has(id)) {
|
|
111
112
|
this.deleteExistingEntry(id, false);
|
|
112
113
|
}
|
|
@@ -133,6 +134,7 @@ exports.TemporaryStorage = TemporaryStorage;
|
|
|
133
134
|
* @internal
|
|
134
135
|
*/
|
|
135
136
|
class FactoryBasedTemporaryStorage extends TemporaryStorage {
|
|
137
|
+
props;
|
|
136
138
|
/**
|
|
137
139
|
* Constructor. Creates the storage using supplied params.
|
|
138
140
|
*/
|