@itwin/presentation-frontend 5.0.0-dev.9 → 5.0.0-dev.92
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 +53 -1
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.d.ts +3 -3
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js +11 -9
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/Diagnostics.js.map +1 -1
- package/lib/cjs/presentation-frontend/FrontendLoggerCategory.js.map +1 -1
- package/lib/cjs/presentation-frontend/IpcRequestsHandler.d.ts +12 -3
- package/lib/cjs/presentation-frontend/IpcRequestsHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/IpcRequestsHandler.js +7 -7
- package/lib/cjs/presentation-frontend/IpcRequestsHandler.js.map +1 -1
- package/lib/cjs/presentation-frontend/LocalizationHelper.d.ts +1 -1
- package/lib/cjs/presentation-frontend/LocalizationHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/LocalizationHelper.js +7 -6
- package/lib/cjs/presentation-frontend/LocalizationHelper.js.map +1 -1
- package/lib/cjs/presentation-frontend/Presentation.d.ts +15 -5
- package/lib/cjs/presentation-frontend/Presentation.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/Presentation.js +30 -21
- package/lib/cjs/presentation-frontend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts +9 -6
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.js +55 -44
- package/lib/cjs/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/RulesetManager.js +2 -4
- package/lib/cjs/presentation-frontend/RulesetManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/RulesetVariablesManager.d.ts +1 -1
- package/lib/cjs/presentation-frontend/RulesetVariablesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/RulesetVariablesManager.js +4 -2
- package/lib/cjs/presentation-frontend/RulesetVariablesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/StreamedResponseGenerator.d.ts +1 -1
- package/lib/cjs/presentation-frontend/StreamedResponseGenerator.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/StreamedResponseGenerator.js +1 -0
- package/lib/cjs/presentation-frontend/StreamedResponseGenerator.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +6 -4
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +157 -142
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts +4 -5
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +27 -29
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.d.ts +3 -0
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js +8 -2
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts +2 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js +1 -0
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts +5 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js +3 -0
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts +8 -5
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js +35 -13
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.d.ts +2 -0
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.js +3 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts +31 -11
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js +217 -112
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts +5 -8
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js +6 -11
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend.d.ts +15 -15
- package/lib/cjs/presentation-frontend.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend.js +30 -29
- package/lib/cjs/presentation-frontend.js.map +1 -1
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.d.ts +3 -3
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js +11 -9
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/Diagnostics.js.map +1 -1
- package/lib/esm/presentation-frontend/FrontendLoggerCategory.js.map +1 -1
- package/lib/esm/presentation-frontend/IpcRequestsHandler.d.ts +12 -3
- package/lib/esm/presentation-frontend/IpcRequestsHandler.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/IpcRequestsHandler.js +8 -8
- package/lib/esm/presentation-frontend/IpcRequestsHandler.js.map +1 -1
- package/lib/esm/presentation-frontend/LocalizationHelper.d.ts +1 -1
- package/lib/esm/presentation-frontend/LocalizationHelper.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/LocalizationHelper.js +3 -2
- package/lib/esm/presentation-frontend/LocalizationHelper.js.map +1 -1
- package/lib/esm/presentation-frontend/Presentation.d.ts +15 -5
- package/lib/esm/presentation-frontend/Presentation.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/Presentation.js +23 -14
- package/lib/esm/presentation-frontend/Presentation.js.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.d.ts +9 -6
- package/lib/esm/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.js +43 -32
- package/lib/esm/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/esm/presentation-frontend/RulesetManager.js +2 -4
- package/lib/esm/presentation-frontend/RulesetManager.js.map +1 -1
- package/lib/esm/presentation-frontend/RulesetVariablesManager.d.ts +1 -1
- package/lib/esm/presentation-frontend/RulesetVariablesManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/RulesetVariablesManager.js +4 -2
- package/lib/esm/presentation-frontend/RulesetVariablesManager.js.map +1 -1
- package/lib/esm/presentation-frontend/StreamedResponseGenerator.d.ts +1 -1
- package/lib/esm/presentation-frontend/StreamedResponseGenerator.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/StreamedResponseGenerator.js +1 -0
- package/lib/esm/presentation-frontend/StreamedResponseGenerator.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +6 -4
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +158 -143
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts +4 -5
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +27 -29
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.d.ts +3 -0
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js +8 -2
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts +2 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.js +1 -0
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts +5 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js +3 -0
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts +8 -5
- package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js +35 -13
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.d.ts +2 -0
- package/lib/esm/presentation-frontend/selection/SelectionHelper.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.js +3 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts +31 -11
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.js +203 -98
- package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts +5 -8
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js +6 -10
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/esm/presentation-frontend.d.ts +15 -15
- package/lib/esm/presentation-frontend.d.ts.map +1 -1
- package/lib/esm/presentation-frontend.js +12 -15
- package/lib/esm/presentation-frontend.js.map +1 -1
- package/package.json +42 -42
|
@@ -12,9 +12,11 @@ const core_bentley_1 = require("@itwin/core-bentley");
|
|
|
12
12
|
const presentation_common_1 = require("@itwin/presentation-common");
|
|
13
13
|
/** @internal */
|
|
14
14
|
class RulesetVariablesManagerImpl {
|
|
15
|
+
_clientValues = new Map();
|
|
16
|
+
_rulesetId;
|
|
17
|
+
_ipcHandler;
|
|
18
|
+
onVariableChanged = new core_bentley_1.BeEvent();
|
|
15
19
|
constructor(rulesetId, ipcHandler) {
|
|
16
|
-
this._clientValues = new Map();
|
|
17
|
-
this.onVariableChanged = new core_bentley_1.BeEvent();
|
|
18
20
|
this._rulesetId = rulesetId;
|
|
19
21
|
this._ipcHandler = ipcHandler;
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/RulesetVariablesManager.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 Core\r\n */\r\n\r\nimport { assert, BeEvent, Id64, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { RulesetVariable, VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\r\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler\";\r\n\r\n/**\r\n * Presentation ruleset variables' registry.\r\n * @public\r\n */\r\nexport interface RulesetVariablesManager {\r\n /**\r\n * An event that is raised when variable changes.\r\n */\r\n onVariableChanged: BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => 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): Promise<string>;\r\n /**\r\n * Sets `string` variable value\r\n */\r\n setString(variableId: string, value: string): Promise<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): Promise<boolean>;\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n setBool(variableId: string, value: boolean): Promise<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): Promise<number>;\r\n /**\r\n * Sets `number` variable value\r\n */\r\n setInt(variableId: string, value: number): Promise<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): Promise<number[]>;\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n setInts(variableId: string, value: number[]): Promise<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): Promise<Id64String>;\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n setId64(variableId: string, value: Id64String): Promise<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): Promise<Id64String[]>;\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n setId64s(variableId: string, value: Id64String[]): Promise<void>;\r\n\r\n /** Unsets variable with given id. */\r\n unset(variableId: string): Promise<void>;\r\n\r\n /** Retrieves all variables.\r\n * @internal\r\n */\r\n getAllVariables(): RulesetVariable[];\r\n}\r\n\r\n/** @internal */\r\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\r\n private _clientValues = new Map<string, RulesetVariable>();\r\n private _rulesetId: string;\r\n private _ipcHandler?: IpcRequestsHandler;\r\n public onVariableChanged = new BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => void>();\r\n\r\n public constructor(rulesetId: string, ipcHandler?: IpcRequestsHandler) {\r\n this._rulesetId = rulesetId;\r\n this._ipcHandler = ipcHandler;\r\n }\r\n\r\n public getAllVariables(): RulesetVariable[] {\r\n const variables: RulesetVariable[] = [];\r\n for (const entry of this._clientValues) {\r\n variables.push(entry[1]);\r\n }\r\n return variables;\r\n }\r\n\r\n private changeValueType(variable: RulesetVariable, toType: VariableValueTypes): VariableValue | undefined {\r\n switch (toType) {\r\n case VariableValueTypes.Bool:\r\n switch (variable.type) {\r\n case VariableValueTypes.Int:\r\n return 0 !== variable.value;\r\n case VariableValueTypes.Id64:\r\n return Id64.isValidId64(variable.value);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Int:\r\n switch (variable.type) {\r\n case VariableValueTypes.Bool:\r\n return variable.value ? 1 : 0;\r\n case VariableValueTypes.Id64:\r\n return Id64.getUpperUint32(variable.value);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.IntArray:\r\n switch (variable.type) {\r\n case VariableValueTypes.Id64Array:\r\n return variable.value.map((id) => Id64.getUpperUint32(id));\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Id64:\r\n switch (variable.type) {\r\n case VariableValueTypes.Bool:\r\n return Id64.fromLocalAndBriefcaseIds(variable.value ? 1 : 0, 0);\r\n case VariableValueTypes.Int:\r\n return Id64.fromLocalAndBriefcaseIds(variable.value, 0);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Id64Array:\r\n switch (variable.type) {\r\n case VariableValueTypes.IntArray:\r\n return variable.value.map((int) => Id64.fromLocalAndBriefcaseIds(int, 0));\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.String:\r\n switch (variable.type) {\r\n case VariableValueTypes.IntArray:\r\n case VariableValueTypes.Id64Array:\r\n return undefined;\r\n default:\r\n variable.value.toString();\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private async getValue(id: string, type: VariableValueTypes): Promise<VariableValue | undefined> {\r\n const variable = this._clientValues.get(id);\r\n if (!variable) {\r\n return undefined;\r\n }\r\n if (variable.type !== type) {\r\n return this.changeValueType(variable, type);\r\n }\r\n return variable.value;\r\n }\r\n\r\n private async setValue(variable: RulesetVariable): Promise<void> {\r\n const oldVariable = this._clientValues.get(variable.id);\r\n if (oldVariable && variablesEqual(oldVariable, variable)) {\r\n return;\r\n }\r\n\r\n this._clientValues.set(variable.id, variable);\r\n if (this._ipcHandler) {\r\n await this._ipcHandler.setRulesetVariable({ rulesetId: this._rulesetId, variable });\r\n }\r\n\r\n this.onVariableChanged.raiseEvent(variable.id, oldVariable?.value, variable.value);\r\n }\r\n\r\n public async unset(variableId: string): Promise<void> {\r\n const variable = this._clientValues.get(variableId);\r\n if (variable === undefined) {\r\n return;\r\n }\r\n\r\n this._clientValues.delete(variable.id);\r\n if (this._ipcHandler) {\r\n await this._ipcHandler.unsetRulesetVariable({ rulesetId: this._rulesetId, variableId });\r\n }\r\n this.onVariableChanged.raiseEvent(variable.id, variable.value, undefined);\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 async getString(variableId: string): Promise<string> {\r\n return ((await this.getValue(variableId, VariableValueTypes.String)) as string) || \"\";\r\n }\r\n\r\n /**\r\n * Sets `string` variable value\r\n */\r\n public async setString(variableId: string, value: string): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getBool(variableId: string): Promise<boolean> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Bool)) as boolean) || false;\r\n }\r\n\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n public async setBool(variableId: string, value: boolean): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getInt(variableId: string): Promise<number> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Int)) as number) || 0;\r\n }\r\n\r\n /**\r\n * Sets `number` variable value\r\n */\r\n public async setInt(variableId: string, value: number): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getInts(variableId: string): Promise<number[]> {\r\n return ((await this.getValue(variableId, VariableValueTypes.IntArray)) as number[]) || [];\r\n }\r\n\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n public async setInts(variableId: string, value: number[]): Promise<void> {\r\n await this.setValue({ id: variableId, type: VariableValueTypes.IntArray, value: [...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 async getId64(variableId: string): Promise<Id64String> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Id64)) as Id64String) || Id64.invalid;\r\n }\r\n\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n public async setId64(variableId: string, value: Id64String): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getId64s(variableId: string): Promise<Id64String[]> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Id64Array)) as Id64String[]) || [];\r\n }\r\n\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n public async setId64s(variableId: string, value: Id64String[]): Promise<void> {\r\n await this.setValue({ id: variableId, type: VariableValueTypes.Id64Array, value: [...OrderedId64Iterable.sortArray(value)] });\r\n }\r\n}\r\n\r\nfunction variablesEqual(lhs: RulesetVariable, rhs: RulesetVariable) {\r\n if (lhs.type !== rhs.type) {\r\n return false;\r\n }\r\n\r\n switch (lhs.type) {\r\n case VariableValueTypes.IntArray:\r\n case VariableValueTypes.Id64Array:\r\n assert(rhs.type === lhs.type);\r\n return arraysEqual(lhs.value, rhs.value);\r\n\r\n default:\r\n return lhs.value === rhs.value;\r\n }\r\n}\r\n\r\nfunction arraysEqual(lhs: any[], rhs: any[]) {\r\n if (lhs.length !== rhs.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < lhs.length; ++i) {\r\n if (lhs[i] !== rhs[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/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 { assert, BeEvent, Id64, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { RulesetVariable, VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler.js\";\n\n/**\n * Presentation ruleset variables' registry.\n * @public\n */\nexport interface RulesetVariablesManager {\n /**\n * An event that is raised when variable changes.\n */\n onVariableChanged: BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => 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): Promise<string>;\n /**\n * Sets `string` variable value\n */\n setString(variableId: string, value: string): Promise<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): Promise<boolean>;\n /**\n * Sets `boolean` variable value\n */\n setBool(variableId: string, value: boolean): Promise<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): Promise<number>;\n /**\n * Sets `number` variable value\n */\n setInt(variableId: string, value: number): Promise<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): Promise<number[]>;\n /**\n * Sets `number[]` variable value\n */\n setInts(variableId: string, value: number[]): Promise<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): Promise<Id64String>;\n /**\n * Sets `Id64String` variable value\n */\n setId64(variableId: string, value: Id64String): Promise<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): Promise<Id64String[]>;\n /**\n * Sets `Id64String[]` variable value\n */\n setId64s(variableId: string, value: Id64String[]): Promise<void>;\n\n /** Unsets variable with given id. */\n unset(variableId: string): Promise<void>;\n\n /** Retrieves all variables.\n * @internal\n */\n getAllVariables(): RulesetVariable[];\n}\n\n/** @internal */\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\n private _clientValues = new Map<string, RulesetVariable>();\n private _rulesetId: string;\n private _ipcHandler?: IpcRequestsHandler;\n public onVariableChanged = new BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => void>();\n\n public constructor(rulesetId: string, ipcHandler?: IpcRequestsHandler) {\n this._rulesetId = rulesetId;\n this._ipcHandler = ipcHandler;\n }\n\n public getAllVariables(): RulesetVariable[] {\n const variables: RulesetVariable[] = [];\n for (const entry of this._clientValues) {\n variables.push(entry[1]);\n }\n return variables;\n }\n\n private changeValueType(variable: RulesetVariable, toType: VariableValueTypes): VariableValue | undefined {\n switch (toType) {\n case VariableValueTypes.Bool:\n switch (variable.type) {\n case VariableValueTypes.Int:\n return 0 !== variable.value;\n case VariableValueTypes.Id64:\n return Id64.isValidId64(variable.value);\n default:\n return undefined;\n }\n case VariableValueTypes.Int:\n switch (variable.type) {\n case VariableValueTypes.Bool:\n return variable.value ? 1 : 0;\n case VariableValueTypes.Id64:\n return Id64.getUpperUint32(variable.value);\n default:\n return undefined;\n }\n case VariableValueTypes.IntArray:\n switch (variable.type) {\n case VariableValueTypes.Id64Array:\n return variable.value.map((id) => Id64.getUpperUint32(id));\n default:\n return undefined;\n }\n case VariableValueTypes.Id64:\n switch (variable.type) {\n case VariableValueTypes.Bool:\n return Id64.fromLocalAndBriefcaseIds(variable.value ? 1 : 0, 0);\n case VariableValueTypes.Int:\n return Id64.fromLocalAndBriefcaseIds(variable.value, 0);\n default:\n return undefined;\n }\n case VariableValueTypes.Id64Array:\n switch (variable.type) {\n case VariableValueTypes.IntArray:\n return variable.value.map((int) => Id64.fromLocalAndBriefcaseIds(int, 0));\n default:\n return undefined;\n }\n case VariableValueTypes.String:\n switch (variable.type) {\n case VariableValueTypes.IntArray:\n case VariableValueTypes.Id64Array:\n return undefined;\n default:\n variable.value.toString();\n }\n }\n return undefined;\n }\n\n private async getValue(id: string, type: VariableValueTypes): Promise<VariableValue | undefined> {\n const variable = this._clientValues.get(id);\n if (!variable) {\n return undefined;\n }\n if (variable.type !== type) {\n return this.changeValueType(variable, type);\n }\n return variable.value;\n }\n\n private async setValue(variable: RulesetVariable): Promise<void> {\n const oldVariable = this._clientValues.get(variable.id);\n if (oldVariable && variablesEqual(oldVariable, variable)) {\n return;\n }\n\n this._clientValues.set(variable.id, variable);\n if (this._ipcHandler) {\n await this._ipcHandler.setRulesetVariable({ rulesetId: this._rulesetId, variable });\n }\n\n this.onVariableChanged.raiseEvent(variable.id, oldVariable?.value, variable.value);\n }\n\n public async unset(variableId: string): Promise<void> {\n const variable = this._clientValues.get(variableId);\n if (variable === undefined) {\n return;\n }\n\n this._clientValues.delete(variable.id);\n if (this._ipcHandler) {\n await this._ipcHandler.unsetRulesetVariable({ rulesetId: this._rulesetId, variableId });\n }\n this.onVariableChanged.raiseEvent(variable.id, variable.value, undefined);\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 async getString(variableId: string): Promise<string> {\n return ((await this.getValue(variableId, VariableValueTypes.String)) as string) || \"\";\n }\n\n /**\n * Sets `string` variable value\n */\n public async setString(variableId: string, value: string): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getBool(variableId: string): Promise<boolean> {\n return ((await this.getValue(variableId, VariableValueTypes.Bool)) as boolean) || false;\n }\n\n /**\n * Sets `boolean` variable value\n */\n public async setBool(variableId: string, value: boolean): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getInt(variableId: string): Promise<number> {\n return ((await this.getValue(variableId, VariableValueTypes.Int)) as number) || 0;\n }\n\n /**\n * Sets `number` variable value\n */\n public async setInt(variableId: string, value: number): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getInts(variableId: string): Promise<number[]> {\n return ((await this.getValue(variableId, VariableValueTypes.IntArray)) as number[]) || [];\n }\n\n /**\n * Sets `number[]` variable value\n */\n public async setInts(variableId: string, value: number[]): Promise<void> {\n await this.setValue({ id: variableId, type: VariableValueTypes.IntArray, value: [...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 async getId64(variableId: string): Promise<Id64String> {\n return ((await this.getValue(variableId, VariableValueTypes.Id64)) as Id64String) || Id64.invalid;\n }\n\n /**\n * Sets `Id64String` variable value\n */\n public async setId64(variableId: string, value: Id64String): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getId64s(variableId: string): Promise<Id64String[]> {\n return ((await this.getValue(variableId, VariableValueTypes.Id64Array)) as Id64String[]) || [];\n }\n\n /**\n * Sets `Id64String[]` variable value\n */\n public async setId64s(variableId: string, value: Id64String[]): Promise<void> {\n await this.setValue({ id: variableId, type: VariableValueTypes.Id64Array, value: [...OrderedId64Iterable.sortArray(value)] });\n }\n}\n\nfunction variablesEqual(lhs: RulesetVariable, rhs: RulesetVariable) {\n if (lhs.type !== rhs.type) {\n return false;\n }\n\n switch (lhs.type) {\n case VariableValueTypes.IntArray:\n case VariableValueTypes.Id64Array:\n assert(rhs.type === lhs.type);\n return arraysEqual(lhs.value, rhs.value);\n\n default:\n return lhs.value === rhs.value;\n }\n}\n\nfunction arraysEqual(lhs: any[], rhs: any[]) {\n if (lhs.length !== rhs.length) {\n return false;\n }\n\n for (let i = 0; i < lhs.length; ++i) {\n if (lhs[i] !== rhs[i]) {\n return false;\n }\n }\n return true;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PagedResponse, PageOptions } from "@itwin/presentation-common";
|
|
2
|
-
import { MultipleValuesRequestOptions } from "./PresentationManager";
|
|
2
|
+
import { MultipleValuesRequestOptions } from "./PresentationManager.js";
|
|
3
3
|
/**
|
|
4
4
|
* Properties for streaming the results.
|
|
5
5
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamedResponseGenerator.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"StreamedResponseGenerator.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CAAC,KAAK,IAAI,4BAA4B,GAAG;IACjF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAC1F,CAAC;AAEF;;;;GAIG;AACH,qBAAa,yBAAyB,CAAC,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,8BAA8B,CAAC,kBAAkB,CAAC;IAEvF,0EAA0E;IAC7D,2BAA2B,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;IAQxH;;;OAGG;YACW,cAAc;IAM5B,OAAO,CAAC,iBAAiB;CA2F1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamedResponseGenerator.js","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.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\r\nimport { concat, concatAll, map, mergeMap, Observable, of, range, scan } from \"rxjs\";\r\nimport { eachValueFrom } from \"rxjs-for-await\";\r\nimport { SortedArray } from \"@itwin/core-bentley\";\r\nimport { PagedResponse, PageOptions } from \"@itwin/presentation-common\";\r\nimport { MultipleValuesRequestOptions } from \"./PresentationManager\";\r\n\r\n/**\r\n * Properties for streaming the results.\r\n * @internal\r\n */\r\nexport type StreamedResponseGeneratorProps<TItem> = MultipleValuesRequestOptions & {\r\n getBatch(page: Required<PageOptions>, requestIdx: number): Promise<PagedResponse<TItem>>;\r\n};\r\n\r\n/**\r\n * This class allows loading values in multiple parallel batches and return them either as an array or an async iterator.\r\n * Pages are prefetched in advanced according to the `parallelism` argument.\r\n * @internal\r\n */\r\nexport class StreamedResponseGenerator<TPagedResponseItem> {\r\n constructor(private readonly _props: StreamedResponseGeneratorProps<TPagedResponseItem>) {}\r\n\r\n /** Creates a response with the total item count and an async iterator. */\r\n public async createAsyncIteratorResponse(): Promise<{ total: number; items: AsyncIterableIterator<TPagedResponseItem> }> {\r\n const firstPage = await this.fetchFirstPage();\r\n return {\r\n total: firstPage.total,\r\n items: eachValueFrom(this.getRemainingPages(firstPage).pipe(concatAll())),\r\n };\r\n }\r\n\r\n /**\r\n * Fetches the first page.\r\n * This function has to be called in order to retrieve the total items count.\r\n */\r\n private async fetchFirstPage(): Promise<PagedResponse<TPagedResponseItem>> {\r\n const start = this._props.paging?.start ?? 0;\r\n const batchSize = this._props.batchSize ?? this._props.paging?.size ?? 0;\r\n return this._props.getBatch({ start, size: batchSize }, 0);\r\n }\r\n\r\n private getRemainingPages(firstPage: PagedResponse<TPagedResponseItem>): Observable<TPagedResponseItem[]> {\r\n const pageStart = this._props.paging?.start ?? 0;\r\n const maxParallelRequests = this._props.maxParallelRequests;\r\n const pageSize = this._props.paging?.size;\r\n const { total, items: firstPageItems } = firstPage;\r\n\r\n // If there are no items, return a single empty page.\r\n if (total === 0) {\r\n return of([]);\r\n }\r\n\r\n // If the response is empty, something went wrong.\r\n const receivedItemsLength = firstPage.items.length;\r\n if (!receivedItemsLength) {\r\n handleEmptyPageResult(pageStart, total);\r\n }\r\n\r\n const totalItemsToFetch = total - pageStart;\r\n if (receivedItemsLength === totalItemsToFetch) {\r\n return of(firstPageItems);\r\n }\r\n\r\n let itemsToFetch: number;\r\n let batchSize: number;\r\n if (pageSize) {\r\n itemsToFetch = Math.min(totalItemsToFetch, pageSize) - receivedItemsLength;\r\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, pageSize, receivedItemsLength);\r\n } else {\r\n itemsToFetch = totalItemsToFetch - receivedItemsLength;\r\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, receivedItemsLength);\r\n }\r\n\r\n const remainingBatches = Math.ceil(itemsToFetch / batchSize);\r\n\r\n // Return the first page and then stream the remaining ones.\r\n return concat(\r\n of(firstPage.items),\r\n range(1, remainingBatches).pipe(\r\n mergeMap(async (idx) => {\r\n const start = pageStart + idx * batchSize;\r\n const size = Math.min(total - start, batchSize);\r\n const page = await this._props.getBatch({ start, size }, idx);\r\n if (!page.items.length) {\r\n handleEmptyPageResult(start, total);\r\n }\r\n\r\n // Pass along the index, so that the items could be sorted.\r\n return { idx, items: page.items };\r\n }, maxParallelRequests),\r\n scan(\r\n // Collect the emitted pages an emit them in the correct order.\r\n (acc, value) => {\r\n let { lastEmitted } = acc;\r\n const { accumulatedBatches } = acc;\r\n const { idx } = value;\r\n\r\n // If current batch is not in order, put it in the accumulator\r\n if (idx - 1 !== lastEmitted) {\r\n accumulatedBatches.insert(value);\r\n return { lastEmitted, accumulatedBatches, itemsToEmit: [] };\r\n }\r\n\r\n // Collect all batches to emit in order.\r\n lastEmitted = idx;\r\n const batchesToEmit = [value];\r\n for (const batch of accumulatedBatches) {\r\n if (batch.idx - 1 !== lastEmitted) {\r\n break;\r\n }\r\n lastEmitted = batch.idx;\r\n batchesToEmit.push(batch);\r\n }\r\n\r\n // Remove batches to emit from the accumulator.\r\n for (const batch of batchesToEmit) {\r\n accumulatedBatches.remove(batch);\r\n }\r\n\r\n const itemsToEmit = batchesToEmit.flatMap((x) => x.items);\r\n return { lastEmitted, accumulatedBatches, itemsToEmit };\r\n },\r\n {\r\n lastEmitted: 0,\r\n accumulatedBatches: new SortedArray<{ idx: number; items: TPagedResponseItem[] }>((a, b) => a.idx - b.idx),\r\n itemsToEmit: new Array<TPagedResponseItem>(),\r\n },\r\n ),\r\n map(({ itemsToEmit }) => itemsToEmit),\r\n ),\r\n );\r\n }\r\n}\r\n\r\nfunction handleEmptyPageResult(pageStart: number, total: number) {\r\n if (pageStart >= total) {\r\n throw new Error(`Requested page with start index ${pageStart} is out of bounds. Total number of items: ${total}`);\r\n }\r\n throw new Error(\"Paged request returned non zero total count but no items\");\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"StreamedResponseGenerator.js","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.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\nimport { concat, concatAll, map, mergeMap, Observable, of, range, scan } from \"rxjs\";\nimport { eachValueFrom } from \"rxjs-for-await\";\nimport { SortedArray } from \"@itwin/core-bentley\";\nimport { PagedResponse, PageOptions } from \"@itwin/presentation-common\";\nimport { MultipleValuesRequestOptions } from \"./PresentationManager.js\";\n\n/**\n * Properties for streaming the results.\n * @internal\n */\nexport type StreamedResponseGeneratorProps<TItem> = MultipleValuesRequestOptions & {\n getBatch(page: Required<PageOptions>, requestIdx: number): Promise<PagedResponse<TItem>>;\n};\n\n/**\n * This class allows loading values in multiple parallel batches and return them either as an array or an async iterator.\n * Pages are prefetched in advanced according to the `parallelism` argument.\n * @internal\n */\nexport class StreamedResponseGenerator<TPagedResponseItem> {\n constructor(private readonly _props: StreamedResponseGeneratorProps<TPagedResponseItem>) {}\n\n /** Creates a response with the total item count and an async iterator. */\n public async createAsyncIteratorResponse(): Promise<{ total: number; items: AsyncIterableIterator<TPagedResponseItem> }> {\n const firstPage = await this.fetchFirstPage();\n return {\n total: firstPage.total,\n items: eachValueFrom(this.getRemainingPages(firstPage).pipe(concatAll())),\n };\n }\n\n /**\n * Fetches the first page.\n * This function has to be called in order to retrieve the total items count.\n */\n private async fetchFirstPage(): Promise<PagedResponse<TPagedResponseItem>> {\n const start = this._props.paging?.start ?? 0;\n const batchSize = this._props.batchSize ?? this._props.paging?.size ?? 0;\n return this._props.getBatch({ start, size: batchSize }, 0);\n }\n\n private getRemainingPages(firstPage: PagedResponse<TPagedResponseItem>): Observable<TPagedResponseItem[]> {\n const pageStart = this._props.paging?.start ?? 0;\n const maxParallelRequests = this._props.maxParallelRequests;\n const pageSize = this._props.paging?.size;\n const { total, items: firstPageItems } = firstPage;\n\n // If there are no items, return a single empty page.\n if (total === 0) {\n return of([]);\n }\n\n // If the response is empty, something went wrong.\n const receivedItemsLength = firstPage.items.length;\n if (!receivedItemsLength) {\n handleEmptyPageResult(pageStart, total);\n }\n\n const totalItemsToFetch = total - pageStart;\n if (receivedItemsLength === totalItemsToFetch) {\n return of(firstPageItems);\n }\n\n let itemsToFetch: number;\n let batchSize: number;\n if (pageSize) {\n itemsToFetch = Math.min(totalItemsToFetch, pageSize) - receivedItemsLength;\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, pageSize, receivedItemsLength);\n } else {\n itemsToFetch = totalItemsToFetch - receivedItemsLength;\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, receivedItemsLength);\n }\n\n const remainingBatches = Math.ceil(itemsToFetch / batchSize);\n\n // Return the first page and then stream the remaining ones.\n return concat(\n of(firstPage.items),\n range(1, remainingBatches).pipe(\n mergeMap(async (idx) => {\n const start = pageStart + idx * batchSize;\n const size = Math.min(total - start, batchSize);\n const page = await this._props.getBatch({ start, size }, idx);\n if (!page.items.length) {\n handleEmptyPageResult(start, total);\n }\n\n // Pass along the index, so that the items could be sorted.\n return { idx, items: page.items };\n }, maxParallelRequests),\n scan(\n // Collect the emitted pages an emit them in the correct order.\n (acc, value) => {\n let { lastEmitted } = acc;\n const { accumulatedBatches } = acc;\n const { idx } = value;\n\n // If current batch is not in order, put it in the accumulator\n if (idx - 1 !== lastEmitted) {\n accumulatedBatches.insert(value);\n return { lastEmitted, accumulatedBatches, itemsToEmit: [] };\n }\n\n // Collect all batches to emit in order.\n lastEmitted = idx;\n const batchesToEmit = [value];\n for (const batch of accumulatedBatches) {\n if (batch.idx - 1 !== lastEmitted) {\n break;\n }\n lastEmitted = batch.idx;\n batchesToEmit.push(batch);\n }\n\n // Remove batches to emit from the accumulator.\n for (const batch of batchesToEmit) {\n accumulatedBatches.remove(batch);\n }\n\n const itemsToEmit = batchesToEmit.flatMap((x) => x.items);\n return { lastEmitted, accumulatedBatches, itemsToEmit };\n },\n {\n lastEmitted: 0,\n accumulatedBatches: new SortedArray<{ idx: number; items: TPagedResponseItem[] }>((a, b) => a.idx - b.idx),\n itemsToEmit: new Array<TPagedResponseItem>(),\n },\n ),\n map(({ itemsToEmit }) => itemsToEmit),\n ),\n );\n }\n}\n\nfunction handleEmptyPageResult(pageStart: number, total: number) {\n if (pageStart >= total) {\n throw new Error(`Requested page with start index ${pageStart} is out of bounds. Total number of items: ${total}`);\n }\n throw new Error(\"Paged request returned non zero total count but no items\");\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Core
|
|
3
3
|
*/
|
|
4
|
-
import { BeEvent
|
|
4
|
+
import { BeEvent } from "@itwin/core-bentley";
|
|
5
5
|
import { IModelConnection } from "@itwin/core-frontend";
|
|
6
6
|
import { Field } from "@itwin/presentation-common";
|
|
7
|
-
import { IFavoritePropertiesStorage } from "./FavoritePropertiesStorage";
|
|
7
|
+
import { IFavoritePropertiesStorage } from "./FavoritePropertiesStorage.js";
|
|
8
8
|
/**
|
|
9
9
|
* Scopes that favorite properties can be stored in.
|
|
10
10
|
* @public
|
|
@@ -49,7 +49,7 @@ export interface FavoritePropertiesManagerProps {
|
|
|
49
49
|
*
|
|
50
50
|
* @public
|
|
51
51
|
*/
|
|
52
|
-
export declare class FavoritePropertiesManager implements
|
|
52
|
+
export declare class FavoritePropertiesManager implements Disposable {
|
|
53
53
|
/**
|
|
54
54
|
* Used in tests to avoid collisions between multiple runs using the same storage
|
|
55
55
|
* @internal
|
|
@@ -57,7 +57,7 @@ export declare class FavoritePropertiesManager implements IDisposable {
|
|
|
57
57
|
static FAVORITES_IDENTIFIER_PREFIX: string;
|
|
58
58
|
/** Event raised after favorite properties have changed. */
|
|
59
59
|
onFavoritesChanged: BeEvent<() => void>;
|
|
60
|
-
|
|
60
|
+
readonly storage: IFavoritePropertiesStorage;
|
|
61
61
|
private _globalProperties;
|
|
62
62
|
private _iTwinProperties;
|
|
63
63
|
private _imodelProperties;
|
|
@@ -66,6 +66,8 @@ export declare class FavoritePropertiesManager implements IDisposable {
|
|
|
66
66
|
/** Property order is saved only in iModel scope */
|
|
67
67
|
private _propertiesOrder;
|
|
68
68
|
constructor(props: FavoritePropertiesManagerProps);
|
|
69
|
+
[Symbol.dispose](): void;
|
|
70
|
+
/** @deprecated in 5.0 Use [Symbol.dispose] instead. */
|
|
69
71
|
dispose(): void;
|
|
70
72
|
/**
|
|
71
73
|
* Initialize favorite properties for the provided IModelConnection.
|
package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePropertiesManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"FavoritePropertiesManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,139 +27,93 @@ var FavoritePropertiesScope;
|
|
|
27
27
|
* @public
|
|
28
28
|
*/
|
|
29
29
|
class FavoritePropertiesManager {
|
|
30
|
+
/**
|
|
31
|
+
* Used in tests to avoid collisions between multiple runs using the same storage
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
static FAVORITES_IDENTIFIER_PREFIX = "";
|
|
35
|
+
/** Event raised after favorite properties have changed. */
|
|
36
|
+
onFavoritesChanged = new core_bentley_1.BeEvent();
|
|
37
|
+
storage;
|
|
38
|
+
_globalProperties;
|
|
39
|
+
_iTwinProperties;
|
|
40
|
+
_imodelProperties;
|
|
41
|
+
_imodelBaseClassesByClass;
|
|
42
|
+
_imodelInitializationPromises;
|
|
43
|
+
/** Property order is saved only in iModel scope */
|
|
44
|
+
_propertiesOrder;
|
|
30
45
|
constructor(props) {
|
|
31
|
-
|
|
32
|
-
this.onFavoritesChanged = new core_bentley_1.BeEvent();
|
|
33
|
-
/**
|
|
34
|
-
* Initialize favorite properties for the provided IModelConnection.
|
|
35
|
-
* @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].
|
|
36
|
-
*/
|
|
37
|
-
this.initializeConnection = async (imodel) => {
|
|
38
|
-
const imodelId = imodel.iModelId;
|
|
39
|
-
const iTwinId = imodel.iTwinId;
|
|
40
|
-
if (this._globalProperties === undefined) {
|
|
41
|
-
this._globalProperties = (await this._storage.loadProperties()) || new Set();
|
|
42
|
-
}
|
|
43
|
-
if (!this._iTwinProperties.has(iTwinId)) {
|
|
44
|
-
const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set();
|
|
45
|
-
this._iTwinProperties.set(iTwinId, iTwinProperties);
|
|
46
|
-
}
|
|
47
|
-
if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {
|
|
48
|
-
const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set();
|
|
49
|
-
this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);
|
|
50
|
-
}
|
|
51
|
-
const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];
|
|
52
|
-
this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);
|
|
53
|
-
await this._adjustPropertyOrderInfos(iTwinId, imodelId);
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Function that removes order information of properties that are no longer
|
|
57
|
-
* favorited and adds missing order information for favorited properties.
|
|
58
|
-
*/
|
|
59
|
-
this._adjustPropertyOrderInfos = async (iTwinId, imodelId) => {
|
|
60
|
-
const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
|
|
61
|
-
const globalProperties = this._globalProperties;
|
|
62
|
-
const iTwinProperties = this._iTwinProperties.get(iTwinId);
|
|
63
|
-
const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
|
|
64
|
-
// favorite property infos that need to be added to the propertiesOrder array
|
|
65
|
-
const infosToAdd = new Set([...globalProperties, ...iTwinProperties, ...imodelProperties]);
|
|
66
|
-
for (let i = propertiesOrder.length - 1; i >= 0; i--) {
|
|
67
|
-
if (infosToAdd.has(propertiesOrder[i].name)) {
|
|
68
|
-
infosToAdd.delete(propertiesOrder[i].name);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
propertiesOrder.splice(i, 1);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
infosToAdd.forEach((info) => propertiesOrder.push({
|
|
75
|
-
name: info,
|
|
76
|
-
parentClassName: getPropertyClassName(info),
|
|
77
|
-
orderedTimestamp: new Date(),
|
|
78
|
-
priority: 0,
|
|
79
|
-
}));
|
|
80
|
-
let priority = propertiesOrder.length;
|
|
81
|
-
propertiesOrder.forEach((oi) => (oi.priority = priority--));
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* Sorts an array of fields with respect to favorite property order.
|
|
85
|
-
* Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
|
|
86
|
-
* @param imodel IModelConnection.
|
|
87
|
-
* @param fields Array of Field's that needs to be sorted.
|
|
88
|
-
* @note `initializeConnection` must be called with the `imodel` before calling this function.
|
|
89
|
-
* @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].
|
|
90
|
-
*/
|
|
91
|
-
this.sortFields = (imodel, fields) => {
|
|
92
|
-
this.validateInitialization(imodel);
|
|
93
|
-
const iTwinId = imodel.iTwinId;
|
|
94
|
-
const imodelId = imodel.iModelId;
|
|
95
|
-
const fieldPriority = new Map();
|
|
96
|
-
fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));
|
|
97
|
-
const sortFunction = (left, right) => {
|
|
98
|
-
const lp = fieldPriority.get(left);
|
|
99
|
-
const rp = fieldPriority.get(right);
|
|
100
|
-
return lp < rp
|
|
101
|
-
? 1
|
|
102
|
-
: lp > rp
|
|
103
|
-
? -1
|
|
104
|
-
: left.priority < right.priority
|
|
105
|
-
? 1 // if favorite fields have equal priorities, sort by field priority
|
|
106
|
-
: left.priority > right.priority
|
|
107
|
-
? -1
|
|
108
|
-
: left.name.localeCompare(right.name);
|
|
109
|
-
};
|
|
110
|
-
return fields.sort(sortFunction);
|
|
111
|
-
};
|
|
112
|
-
this._getBaseClassesByClass = async (imodel, neededClasses) => {
|
|
113
|
-
const iTwinId = imodel.iTwinId;
|
|
114
|
-
const imodelId = imodel.iModelId;
|
|
115
|
-
const imodelInfo = getiModelInfo(iTwinId, imodelId);
|
|
116
|
-
let baseClasses;
|
|
117
|
-
if (this._imodelBaseClassesByClass.has(imodelInfo)) {
|
|
118
|
-
baseClasses = this._imodelBaseClassesByClass.get(imodelInfo);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));
|
|
122
|
-
}
|
|
123
|
-
const missingClasses = new Set();
|
|
124
|
-
neededClasses.forEach((className) => {
|
|
125
|
-
if (!baseClasses.hasOwnProperty(className)) {
|
|
126
|
-
missingClasses.add(className);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
if (missingClasses.size === 0) {
|
|
130
|
-
return baseClasses;
|
|
131
|
-
}
|
|
132
|
-
const query = `
|
|
133
|
-
SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
|
|
134
|
-
FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
|
|
135
|
-
INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
|
|
136
|
-
INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
|
|
137
|
-
INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
138
|
-
INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
139
|
-
WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(",")})`;
|
|
140
|
-
const reader = imodel.createQueryReader(query, undefined, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
|
|
141
|
-
while (await reader.step()) {
|
|
142
|
-
const row = reader.current.toRow();
|
|
143
|
-
if (!(row.classFullName in baseClasses)) {
|
|
144
|
-
baseClasses[row.classFullName] = [];
|
|
145
|
-
}
|
|
146
|
-
baseClasses[row.classFullName].push(row.baseClassFullName);
|
|
147
|
-
}
|
|
148
|
-
return baseClasses;
|
|
149
|
-
};
|
|
150
|
-
this._storage = props.storage;
|
|
46
|
+
this.storage = props.storage;
|
|
151
47
|
this._iTwinProperties = new Map();
|
|
152
48
|
this._imodelProperties = new Map();
|
|
153
49
|
this._propertiesOrder = new Map();
|
|
154
50
|
this._imodelBaseClassesByClass = new Map();
|
|
155
51
|
this._imodelInitializationPromises = new Map();
|
|
156
52
|
}
|
|
157
|
-
dispose() {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
53
|
+
[Symbol.dispose]() {
|
|
54
|
+
if ((0, core_bentley_1.isDisposable)(this.storage)) {
|
|
55
|
+
this.storage[Symbol.dispose]();
|
|
56
|
+
/* c8 ignore next 3 */
|
|
57
|
+
}
|
|
58
|
+
else if ((0, core_bentley_1.isIDisposable)(this.storage)) { /* eslint-disable-line @typescript-eslint/no-deprecated */
|
|
59
|
+
this.storage.dispose();
|
|
161
60
|
}
|
|
162
61
|
}
|
|
62
|
+
/** @deprecated in 5.0 Use [Symbol.dispose] instead. */
|
|
63
|
+
/* c8 ignore next 3 */
|
|
64
|
+
dispose() {
|
|
65
|
+
this[Symbol.dispose]();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize favorite properties for the provided IModelConnection.
|
|
69
|
+
* @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].
|
|
70
|
+
*/
|
|
71
|
+
initializeConnection = async (imodel) => {
|
|
72
|
+
const imodelId = imodel.iModelId;
|
|
73
|
+
const iTwinId = imodel.iTwinId;
|
|
74
|
+
if (this._globalProperties === undefined) {
|
|
75
|
+
this._globalProperties = (await this.storage.loadProperties()) || new Set();
|
|
76
|
+
}
|
|
77
|
+
if (!this._iTwinProperties.has(iTwinId)) {
|
|
78
|
+
const iTwinProperties = (await this.storage.loadProperties(iTwinId)) || new Set();
|
|
79
|
+
this._iTwinProperties.set(iTwinId, iTwinProperties);
|
|
80
|
+
}
|
|
81
|
+
if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {
|
|
82
|
+
const imodelProperties = (await this.storage.loadProperties(iTwinId, imodelId)) || new Set();
|
|
83
|
+
this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);
|
|
84
|
+
}
|
|
85
|
+
const propertiesOrder = (await this.storage.loadPropertiesOrder(iTwinId, imodelId)) || [];
|
|
86
|
+
this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);
|
|
87
|
+
await this._adjustPropertyOrderInfos(iTwinId, imodelId);
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Function that removes order information of properties that are no longer
|
|
91
|
+
* favorited and adds missing order information for favorited properties.
|
|
92
|
+
*/
|
|
93
|
+
_adjustPropertyOrderInfos = async (iTwinId, imodelId) => {
|
|
94
|
+
const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
|
|
95
|
+
const globalProperties = this._globalProperties;
|
|
96
|
+
const iTwinProperties = this._iTwinProperties.get(iTwinId);
|
|
97
|
+
const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
|
|
98
|
+
// favorite property infos that need to be added to the propertiesOrder array
|
|
99
|
+
const infosToAdd = new Set([...globalProperties, ...iTwinProperties, ...imodelProperties]);
|
|
100
|
+
for (let i = propertiesOrder.length - 1; i >= 0; i--) {
|
|
101
|
+
if (infosToAdd.has(propertiesOrder[i].name)) {
|
|
102
|
+
infosToAdd.delete(propertiesOrder[i].name);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
propertiesOrder.splice(i, 1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
infosToAdd.forEach((info) => propertiesOrder.push({
|
|
109
|
+
name: info,
|
|
110
|
+
parentClassName: getPropertyClassName(info),
|
|
111
|
+
orderedTimestamp: new Date(),
|
|
112
|
+
priority: 0,
|
|
113
|
+
}));
|
|
114
|
+
let priority = propertiesOrder.length;
|
|
115
|
+
propertiesOrder.forEach((oi) => (oi.priority = priority--));
|
|
116
|
+
};
|
|
163
117
|
isInitialized(imodel) {
|
|
164
118
|
const iTwinId = imodel.iTwinId;
|
|
165
119
|
const imodelId = imodel.iModelId;
|
|
@@ -220,15 +174,15 @@ class FavoritePropertiesManager {
|
|
|
220
174
|
switch (scope) {
|
|
221
175
|
case FavoritePropertiesScope.Global:
|
|
222
176
|
favoriteProperties = this._globalProperties;
|
|
223
|
-
saveProperties = async (properties) => this.
|
|
177
|
+
saveProperties = async (properties) => this.storage.saveProperties(properties);
|
|
224
178
|
break;
|
|
225
179
|
case FavoritePropertiesScope.ITwin:
|
|
226
180
|
favoriteProperties = this._iTwinProperties.get(iTwinId);
|
|
227
|
-
saveProperties = async (properties) => this.
|
|
181
|
+
saveProperties = async (properties) => this.storage.saveProperties(properties, iTwinId);
|
|
228
182
|
break;
|
|
229
183
|
default:
|
|
230
184
|
favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
|
|
231
|
-
saveProperties = async (properties) => this.
|
|
185
|
+
saveProperties = async (properties) => this.storage.saveProperties(properties, iTwinId, imodelId);
|
|
232
186
|
}
|
|
233
187
|
const countBefore = favoriteProperties.size;
|
|
234
188
|
const fieldInfos = (0, exports.getFieldInfos)(field);
|
|
@@ -238,7 +192,7 @@ class FavoritePropertiesManager {
|
|
|
238
192
|
saves.push(saveProperties(favoriteProperties));
|
|
239
193
|
const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
|
|
240
194
|
addOrderInfos(propertiesOrder, (0, exports.createFieldOrderInfos)(field));
|
|
241
|
-
saves.push(this.
|
|
195
|
+
saves.push(this.storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
|
|
242
196
|
await Promise.all(saves);
|
|
243
197
|
this.onFavoritesChanged.raiseEvent();
|
|
244
198
|
}
|
|
@@ -257,18 +211,18 @@ class FavoritePropertiesManager {
|
|
|
257
211
|
const workingScopes = [];
|
|
258
212
|
workingScopes.push({
|
|
259
213
|
properties: this._globalProperties,
|
|
260
|
-
save: async (properties) => this.
|
|
214
|
+
save: async (properties) => this.storage.saveProperties(properties),
|
|
261
215
|
});
|
|
262
216
|
if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {
|
|
263
217
|
workingScopes.push({
|
|
264
218
|
properties: this._iTwinProperties.get(iTwinId),
|
|
265
|
-
save: async (properties) => this.
|
|
219
|
+
save: async (properties) => this.storage.saveProperties(properties, iTwinId),
|
|
266
220
|
});
|
|
267
221
|
}
|
|
268
222
|
if (scope === FavoritePropertiesScope.IModel) {
|
|
269
223
|
workingScopes.push({
|
|
270
224
|
properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId)),
|
|
271
|
-
save: async (properties) => this.
|
|
225
|
+
save: async (properties) => this.storage.saveProperties(properties, iTwinId, imodelId),
|
|
272
226
|
});
|
|
273
227
|
}
|
|
274
228
|
const saves = [];
|
|
@@ -286,7 +240,7 @@ class FavoritePropertiesManager {
|
|
|
286
240
|
}
|
|
287
241
|
const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
|
|
288
242
|
removeOrderInfos(propertiesOrder, (0, exports.createFieldOrderInfos)(field));
|
|
289
|
-
saves.push(this.
|
|
243
|
+
saves.push(this.storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
|
|
290
244
|
await Promise.all(saves);
|
|
291
245
|
this.onFavoritesChanged.raiseEvent();
|
|
292
246
|
}
|
|
@@ -304,15 +258,15 @@ class FavoritePropertiesManager {
|
|
|
304
258
|
switch (scope) {
|
|
305
259
|
case FavoritePropertiesScope.Global:
|
|
306
260
|
favoriteProperties = this._globalProperties;
|
|
307
|
-
saveProperties = async () => this.
|
|
261
|
+
saveProperties = async () => this.storage.saveProperties(new Set());
|
|
308
262
|
break;
|
|
309
263
|
case FavoritePropertiesScope.ITwin:
|
|
310
264
|
favoriteProperties = this._iTwinProperties.get(iTwinId);
|
|
311
|
-
saveProperties = async () => this.
|
|
265
|
+
saveProperties = async () => this.storage.saveProperties(new Set(), iTwinId);
|
|
312
266
|
break;
|
|
313
267
|
default:
|
|
314
268
|
favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
|
|
315
|
-
saveProperties = async () => this.
|
|
269
|
+
saveProperties = async () => this.storage.saveProperties(new Set(), iTwinId, imodelId);
|
|
316
270
|
}
|
|
317
271
|
if (favoriteProperties.size === 0) {
|
|
318
272
|
return;
|
|
@@ -352,6 +306,35 @@ class FavoritePropertiesManager {
|
|
|
352
306
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
353
307
|
return this.has(field, imodel, scope);
|
|
354
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Sorts an array of fields with respect to favorite property order.
|
|
311
|
+
* Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
|
|
312
|
+
* @param imodel IModelConnection.
|
|
313
|
+
* @param fields Array of Field's that needs to be sorted.
|
|
314
|
+
* @note `initializeConnection` must be called with the `imodel` before calling this function.
|
|
315
|
+
* @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].
|
|
316
|
+
*/
|
|
317
|
+
sortFields = (imodel, fields) => {
|
|
318
|
+
this.validateInitialization(imodel);
|
|
319
|
+
const iTwinId = imodel.iTwinId;
|
|
320
|
+
const imodelId = imodel.iModelId;
|
|
321
|
+
const fieldPriority = new Map();
|
|
322
|
+
fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));
|
|
323
|
+
const sortFunction = (left, right) => {
|
|
324
|
+
const lp = fieldPriority.get(left);
|
|
325
|
+
const rp = fieldPriority.get(right);
|
|
326
|
+
return lp < rp
|
|
327
|
+
? 1
|
|
328
|
+
: lp > rp
|
|
329
|
+
? -1
|
|
330
|
+
: left.priority < right.priority
|
|
331
|
+
? 1 // if favorite fields have equal priorities, sort by field priority
|
|
332
|
+
: left.priority > right.priority
|
|
333
|
+
? -1
|
|
334
|
+
: left.name.localeCompare(right.name);
|
|
335
|
+
};
|
|
336
|
+
return fields.sort(sortFunction);
|
|
337
|
+
};
|
|
355
338
|
/**
|
|
356
339
|
* Sorts an array of fields with respect to favorite property order.
|
|
357
340
|
* Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
|
|
@@ -372,6 +355,44 @@ class FavoritePropertiesManager {
|
|
|
372
355
|
const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);
|
|
373
356
|
return mostRecent.priority;
|
|
374
357
|
}
|
|
358
|
+
_getBaseClassesByClass = async (imodel, neededClasses) => {
|
|
359
|
+
const iTwinId = imodel.iTwinId;
|
|
360
|
+
const imodelId = imodel.iModelId;
|
|
361
|
+
const imodelInfo = getiModelInfo(iTwinId, imodelId);
|
|
362
|
+
let baseClasses;
|
|
363
|
+
if (this._imodelBaseClassesByClass.has(imodelInfo)) {
|
|
364
|
+
baseClasses = this._imodelBaseClassesByClass.get(imodelInfo);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));
|
|
368
|
+
}
|
|
369
|
+
const missingClasses = new Set();
|
|
370
|
+
neededClasses.forEach((className) => {
|
|
371
|
+
if (!baseClasses.hasOwnProperty(className)) {
|
|
372
|
+
missingClasses.add(className);
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
if (missingClasses.size === 0) {
|
|
376
|
+
return baseClasses;
|
|
377
|
+
}
|
|
378
|
+
const query = `
|
|
379
|
+
SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
|
|
380
|
+
FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
|
|
381
|
+
INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
|
|
382
|
+
INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
|
|
383
|
+
INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
384
|
+
INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
385
|
+
WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(",")})`;
|
|
386
|
+
const reader = imodel.createQueryReader(query, undefined, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
|
|
387
|
+
while (await reader.step()) {
|
|
388
|
+
const row = reader.current.toRow();
|
|
389
|
+
if (!(row.classFullName in baseClasses)) {
|
|
390
|
+
baseClasses[row.classFullName] = [];
|
|
391
|
+
}
|
|
392
|
+
baseClasses[row.classFullName].push(row.baseClassFullName);
|
|
393
|
+
}
|
|
394
|
+
return baseClasses;
|
|
395
|
+
};
|
|
375
396
|
/** Changes field properties priorities to lower than another fields priority
|
|
376
397
|
* @param imodel IModelConnection.
|
|
377
398
|
* @param field Field that priority is being changed.
|
|
@@ -481,16 +502,11 @@ class FavoritePropertiesManager {
|
|
|
481
502
|
// reassign priority numbers
|
|
482
503
|
let priority = allOrderInfos.length;
|
|
483
504
|
allOrderInfos.forEach((oi) => (oi.priority = priority--));
|
|
484
|
-
await this.
|
|
505
|
+
await this.storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);
|
|
485
506
|
this.onFavoritesChanged.raiseEvent();
|
|
486
507
|
}
|
|
487
508
|
}
|
|
488
509
|
exports.FavoritePropertiesManager = FavoritePropertiesManager;
|
|
489
|
-
/**
|
|
490
|
-
* Used in tests to avoid collisions between multiple runs using the same storage
|
|
491
|
-
* @internal
|
|
492
|
-
*/
|
|
493
|
-
FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX = "";
|
|
494
510
|
var Direction;
|
|
495
511
|
(function (Direction) {
|
|
496
512
|
Direction[Direction["Up"] = -1] = "Up";
|
|
@@ -573,7 +589,6 @@ const addOrderInfos = (dest, source) => {
|
|
|
573
589
|
const removeOrderInfos = (container, toRemove) => {
|
|
574
590
|
toRemove.forEach((roi) => {
|
|
575
591
|
const index = container.findIndex((oi) => oi.name === roi.name);
|
|
576
|
-
/* istanbul ignore else */
|
|
577
592
|
if (index >= 0) {
|
|
578
593
|
container.splice(index, 1);
|
|
579
594
|
}
|