@itwin/presentation-frontend 4.10.0-dev.9 → 5.0.0-dev.1
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 +26 -1
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js +0 -1
- package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/Diagnostics.js +2 -3
- package/lib/cjs/presentation-frontend/Diagnostics.js.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.js +7 -8
- package/lib/cjs/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +4 -4
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +2 -3
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js +0 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js +0 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js +3 -3
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js +0 -1
- package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.js +7 -8
- package/lib/esm/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +4 -4
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +0 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js +0 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.js +0 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/PresentationManager.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 { BeEvent, CompressedId64Set, IDisposable, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { IModelApp, IModelConnection, IpcApp } from \"@itwin/core-frontend\";\r\nimport { UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport { SchemaContext } from \"@itwin/ecschema-metadata\";\r\nimport {\r\n buildElementProperties,\r\n ClientDiagnosticsAttribute,\r\n Content,\r\n ContentDescriptorRequestOptions,\r\n ContentFlags,\r\n ContentFormatter,\r\n ContentInstanceKeysRequestOptions,\r\n ContentPropertyValueFormatter,\r\n ContentRequestOptions,\r\n ContentSourcesRequestOptions,\r\n ContentUpdateInfo,\r\n DefaultContentDisplayTypes,\r\n Descriptor,\r\n DescriptorOverrides,\r\n DisplayLabelRequestOptions,\r\n DisplayLabelsRequestOptions,\r\n DisplayValueGroup,\r\n DistinctValuesRequestOptions,\r\n ElementProperties,\r\n FilterByInstancePathsHierarchyRequestOptions,\r\n FilterByTextHierarchyRequestOptions,\r\n FormatsMap,\r\n HierarchyLevelDescriptorRequestOptions,\r\n HierarchyRequestOptions,\r\n HierarchyUpdateInfo,\r\n InstanceKey,\r\n Item,\r\n ItemJSON,\r\n Key,\r\n KeySet,\r\n KoqPropertyValueFormatter,\r\n LabelDefinition,\r\n Node,\r\n NodeKey,\r\n NodePathElement,\r\n Paged,\r\n PagedResponse,\r\n PageOptions,\r\n PresentationIpcEvents,\r\n RpcRequestsHandler,\r\n Ruleset,\r\n RulesetVariable,\r\n SelectClassInfo,\r\n SingleElementPropertiesRequestOptions,\r\n UpdateInfo,\r\n VariableValueTypes,\r\n} from \"@itwin/presentation-common\";\r\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler\";\r\nimport { FrontendLocalizationHelper } from \"./LocalizationHelper\";\r\nimport { RulesetManager, RulesetManagerImpl } from \"./RulesetManager\";\r\nimport { RulesetVariablesManager, RulesetVariablesManagerImpl } from \"./RulesetVariablesManager\";\r\nimport { TRANSIENT_ELEMENT_CLASSNAME } from \"./selection/SelectionManager\";\r\nimport { StreamedResponseGenerator } from \"./StreamedResponseGenerator\";\r\n\r\n/**\r\n * Data structure that describes IModel hierarchy change event arguments.\r\n * @public\r\n */\r\nexport interface IModelHierarchyChangeEventArgs {\r\n /** Id of ruleset that was used to create hierarchy. */\r\n rulesetId: string;\r\n /** Hierarchy changes info. */\r\n updateInfo: HierarchyUpdateInfo;\r\n /** Key of iModel that was used to create hierarchy. It matches [[IModelConnection.key]] property. */\r\n imodelKey: string;\r\n}\r\n\r\n/**\r\n * Data structure that describes iModel content change event arguments.\r\n * @public\r\n */\r\nexport interface IModelContentChangeEventArgs {\r\n /** Id of ruleset that was used to create content. */\r\n rulesetId: string;\r\n /** Content changes info. */\r\n updateInfo: ContentUpdateInfo;\r\n /** Key of iModel that was used to create content. It matches [[IModelConnection.key]] property. */\r\n imodelKey: string;\r\n}\r\n\r\n/**\r\n * Options for requests that can return multiple pages of items concurrently.\r\n * @public\r\n */\r\nexport type MultipleValuesRequestOptions = Paged<{\r\n /**\r\n * Max number of requests that should be made to the backend to fulfill the whole request.\r\n * `undefined` means no limit, so in that case all requests are sent at once.\r\n */\r\n maxParallelRequests?: number;\r\n\r\n /**\r\n * Size of a single batch when fetching data through multiple requests. If not set,\r\n * the fall back is requested page size. If the page size is not set, the backend\r\n * decides how many items to return.\r\n */\r\n batchSize?: number;\r\n}>;\r\n\r\n/**\r\n * Options for requests that retrieve nodes.\r\n * @public\r\n */\r\nexport type GetNodesRequestOptions = HierarchyRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Options for requests that retrieve content.\r\n * @public\r\n */\r\nexport type GetContentRequestOptions = ContentRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> &\r\n ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Options for requests that retrieve distinct values.\r\n * @public\r\n */\r\nexport type GetDistinctValuesRequestOptions = DistinctValuesRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> &\r\n ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Properties used to configure [[PresentationManager]]\r\n * @public\r\n */\r\nexport interface PresentationManagerProps {\r\n /**\r\n * Sets the active locale to use when localizing presentation-related\r\n * strings. It can later be changed through [[PresentationManager]].\r\n */\r\n activeLocale?: string;\r\n\r\n /**\r\n * Sets the active unit system to use for formatting property values with\r\n * units. The value can later be changed through [[PresentationManager.activeUnitSystem]] setter or\r\n * overriden for each request through request parameters. If not set, `IModelApp.quantityFormatter.activeUnitSystem`\r\n * is used by default.\r\n *\r\n * @deprecated in 4.0. Use [IModelApp.quantityFormatter]($core-frontend) to set the active unit system.\r\n */\r\n activeUnitSystem?: UnitSystemKey;\r\n\r\n /**\r\n * ID used to identify client that requests data. Generally, clients should\r\n * store this ID in their local storage so the ID can be reused across\r\n * sessions - this allows reusing some caches.\r\n *\r\n * Defaults to a unique GUID as a client id.\r\n */\r\n clientId?: string;\r\n\r\n /**\r\n * Timeout (in milliseconds) for how long we're going to wait for RPC request to be fulfilled before throwing\r\n * a timeout error.\r\n *\r\n * Defaults to 10 minutes.\r\n */\r\n requestTimeout?: number;\r\n\r\n /**\r\n * Callback that provides [SchemaContext]($ecschema-metadata) for supplied [IModelConnection]($core-frontend).\r\n * [SchemaContext]($ecschema-metadata) is used for getting metadata required for values formatting.\r\n */\r\n schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;\r\n\r\n /**\r\n * A map of default unit formats to use for formatting properties that don't have a presentation format\r\n * in requested unit system.\r\n *\r\n * @note Only has effect when frontend value formatting is enabled by supplying the `schemaContextProvider` prop.\r\n */\r\n defaultFormats?: FormatsMap;\r\n\r\n /** @internal */\r\n rpcRequestsHandler?: RpcRequestsHandler;\r\n\r\n /** @internal */\r\n ipcRequestsHandler?: IpcRequestsHandler;\r\n}\r\n\r\n/**\r\n * Frontend Presentation manager which basically just forwards all calls to\r\n * the backend implementation.\r\n *\r\n * @public\r\n */\r\nexport class PresentationManager implements IDisposable {\r\n private _requestsHandler: RpcRequestsHandler;\r\n private _rulesets: RulesetManager;\r\n private _localizationHelper: FrontendLocalizationHelper;\r\n private _explicitActiveUnitSystem: UnitSystemKey | undefined;\r\n private _rulesetVars: Map<string, RulesetVariablesManager>;\r\n private _clearEventListener?: () => void;\r\n private _schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;\r\n private _defaultFormats?: FormatsMap;\r\n private _ipcRequestsHandler?: IpcRequestsHandler;\r\n\r\n /**\r\n * An event raised when hierarchies created using specific ruleset change\r\n */\r\n public onIModelHierarchyChanged = new BeEvent<(args: IModelHierarchyChangeEventArgs) => void>();\r\n\r\n /**\r\n * An event raised when content created using specific ruleset changes\r\n */\r\n public onIModelContentChanged = new BeEvent<(args: IModelContentChangeEventArgs) => void>();\r\n\r\n /**\r\n * Get / set active unit system used to format property values with units.\r\n *\r\n * @deprecated in 4.0. `IModelApp.quantityFormatter` should be used to get/set the active unit system. At the moment\r\n * [[PresentationManager]] allows overriding it, but returns `IModelApp.quantityFormatter.activeUnitSystem` if override\r\n * is not set.\r\n */\r\n public get activeUnitSystem(): UnitSystemKey {\r\n return this._explicitActiveUnitSystem ?? IModelApp.quantityFormatter.activeUnitSystem;\r\n }\r\n public set activeUnitSystem(value: UnitSystemKey | undefined) {\r\n this._explicitActiveUnitSystem = value;\r\n }\r\n\r\n private constructor(props?: PresentationManagerProps) {\r\n if (props) {\r\n // eslint-disable-next-line deprecation/deprecation\r\n this._explicitActiveUnitSystem = props.activeUnitSystem;\r\n }\r\n\r\n this._requestsHandler =\r\n props?.rpcRequestsHandler ?? new RpcRequestsHandler(props ? { clientId: props.clientId, timeout: props.requestTimeout } : undefined);\r\n this._rulesetVars = new Map<string, RulesetVariablesManager>();\r\n this._rulesets = RulesetManagerImpl.create();\r\n this._localizationHelper = new FrontendLocalizationHelper(props?.activeLocale);\r\n this._schemaContextProvider = props?.schemaContextProvider;\r\n this._defaultFormats = props?.defaultFormats;\r\n\r\n if (IpcApp.isValid) {\r\n // Ipc only works in ipc apps, so the `onUpdate` callback will only be called there.\r\n this._clearEventListener = IpcApp.addListener(PresentationIpcEvents.Update, this.onUpdate);\r\n this._ipcRequestsHandler = props?.ipcRequestsHandler ?? new IpcRequestsHandler(this._requestsHandler.clientId);\r\n }\r\n }\r\n\r\n /** Get / set active locale used for localizing presentation data */\r\n public get activeLocale(): string | undefined {\r\n return this._localizationHelper.locale;\r\n }\r\n public set activeLocale(locale: string | undefined) {\r\n this._localizationHelper.locale = locale;\r\n }\r\n\r\n public dispose() {\r\n if (this._clearEventListener) {\r\n this._clearEventListener();\r\n this._clearEventListener = undefined;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onUpdate = (_evt: Event, report: UpdateInfo) => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.handleUpdateAsync(report);\r\n };\r\n\r\n /** @note This is only called in native apps after changes in iModels */\r\n private async handleUpdateAsync(report: UpdateInfo) {\r\n for (const imodelKey in report) {\r\n // istanbul ignore if\r\n if (!report.hasOwnProperty(imodelKey)) {\r\n continue;\r\n }\r\n\r\n const imodelReport = report[imodelKey];\r\n for (const rulesetId in imodelReport) {\r\n // istanbul ignore if\r\n if (!imodelReport.hasOwnProperty(rulesetId)) {\r\n continue;\r\n }\r\n\r\n const updateInfo = imodelReport[rulesetId];\r\n if (updateInfo.content) {\r\n this.onIModelContentChanged.raiseEvent({ rulesetId, updateInfo: updateInfo.content, imodelKey });\r\n }\r\n if (updateInfo.hierarchy) {\r\n this.onIModelHierarchyChanged.raiseEvent({ rulesetId, updateInfo: updateInfo.hierarchy, imodelKey });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Function that is called when a new IModelConnection is used to retrieve data.\r\n * @internal\r\n */\r\n public startIModelInitialization(_: IModelConnection) {}\r\n\r\n /**\r\n * Function that should be called to finish initialization that was started at [[PresentationManager.startIModelInitialization]].\r\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\r\n * @internal\r\n */\r\n public async ensureIModelInitialized(_: IModelConnection) {}\r\n\r\n /**\r\n * Create a new PresentationManager instance\r\n * @param props Optional properties used to configure the manager\r\n */\r\n public static create(props?: PresentationManagerProps) {\r\n return new PresentationManager(props);\r\n }\r\n\r\n /** @internal */\r\n public get rpcRequestsHandler() {\r\n return this._requestsHandler;\r\n }\r\n\r\n /** @internal */\r\n public get ipcRequestsHandler() {\r\n return this._ipcRequestsHandler;\r\n }\r\n\r\n /**\r\n * Get rulesets manager\r\n */\r\n public rulesets() {\r\n return this._rulesets;\r\n }\r\n\r\n /**\r\n * Get ruleset variables manager for specific ruleset\r\n * @param rulesetId Id of the ruleset to get the vars manager for\r\n */\r\n public vars(rulesetId: string) {\r\n if (!this._rulesetVars.has(rulesetId)) {\r\n const varsManager = new RulesetVariablesManagerImpl(rulesetId, this._ipcRequestsHandler);\r\n this._rulesetVars.set(rulesetId, varsManager);\r\n }\r\n return this._rulesetVars.get(rulesetId)!;\r\n }\r\n\r\n private toRpcTokenOptions<TOptions extends { imodel: IModelConnection; locale?: string; unitSystem?: UnitSystemKey; rulesetVariables?: RulesetVariable[] }>(\r\n requestOptions: TOptions,\r\n ) {\r\n // 1. put default `locale` and `unitSystem`\r\n // 2. put all `requestOptions` members (if `locale` or `unitSystem` are set, they'll override the defaults put at #1)\r\n // 3. put `imodel` of type `IModelRpcProps` which overwrites the `imodel` from `requestOptions` put at #2\r\n const defaultOptions: Pick<TOptions, \"locale\" | \"unitSystem\"> = {};\r\n if (this.activeLocale) {\r\n defaultOptions.locale = this.activeLocale;\r\n }\r\n defaultOptions.unitSystem = this.activeUnitSystem; // eslint-disable-line deprecation/deprecation\r\n\r\n const { imodel, rulesetVariables, ...rpcRequestOptions } = requestOptions;\r\n return {\r\n ...defaultOptions,\r\n ...rpcRequestOptions,\r\n ...(rulesetVariables ? { rulesetVariables: rulesetVariables.map(RulesetVariable.toJSON) } : {}),\r\n imodel: imodel.getRpcProps(),\r\n };\r\n }\r\n\r\n private async addRulesetAndVariablesToOptions<TOptions extends { rulesetOrId: Ruleset | string; rulesetVariables?: RulesetVariable[] }>(options: TOptions) {\r\n const { rulesetOrId, rulesetVariables } = options;\r\n let foundRulesetOrId: Ruleset | string;\r\n if (typeof rulesetOrId === \"object\") {\r\n foundRulesetOrId = rulesetOrId;\r\n } else {\r\n const foundRuleset = await this._rulesets.get(rulesetOrId);\r\n foundRulesetOrId = foundRuleset ? foundRuleset.toJSON() : rulesetOrId;\r\n }\r\n const rulesetId = typeof foundRulesetOrId === \"object\" ? foundRulesetOrId.id : foundRulesetOrId;\r\n\r\n // All Id64Array variable values must be sorted for serialization to JSON to work. RulesetVariablesManager\r\n // sorts them before storing, so that part is taken care of, but we need to ensure that variables coming from\r\n // request options are also sorted.\r\n const variables = (rulesetVariables ?? []).map((variable) => {\r\n if (variable.type === VariableValueTypes.Id64Array) {\r\n return { ...variable, value: OrderedId64Iterable.sortArray(variable.value) };\r\n }\r\n return variable;\r\n });\r\n if (!this._ipcRequestsHandler) {\r\n // only need to add variables from variables manager if there's no IPC\r\n // handler - if there is one, the variables are already known by the backend\r\n variables.push(...this.vars(rulesetId).getAllVariables());\r\n }\r\n\r\n return { ...options, rulesetOrId: foundRulesetOrId, rulesetVariables: variables };\r\n }\r\n\r\n /** Returns an iterator that polls nodes asynchronously. */\r\n public async getNodesIterator(\r\n requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<Node> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (paging) => {\r\n const result = await this._requestsHandler.getPagedNodes({ ...rpcOptions, paging });\r\n return {\r\n total: result.total,\r\n // eslint-disable-next-line deprecation/deprecation\r\n items: this._localizationHelper.getLocalizedNodes(result.items.map(Node.fromJSON)),\r\n };\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves nodes\r\n * @deprecated in 4.5. Use [[getNodesIterator]] instead.\r\n */\r\n public async getNodes(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<Node[]> {\r\n const result = await this.getNodesIterator(requestOptions);\r\n return collect(result.items);\r\n }\r\n\r\n /** Retrieves nodes count. */\r\n public async getNodesCount(requestOptions: GetNodesRequestOptions): Promise<number> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n return this._requestsHandler.getNodesCount(rpcOptions);\r\n }\r\n\r\n /**\r\n * Retrieves total nodes count and a single page of nodes.\r\n * @deprecated in 4.5. Use [[getNodesIterator]] instead.\r\n */\r\n public async getNodesAndCount(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<{ count: number; nodes: Node[] }> {\r\n const result = await this.getNodesIterator(requestOptions);\r\n return {\r\n count: result.total,\r\n nodes: await collect(result.items),\r\n };\r\n }\r\n\r\n /**\r\n * Retrieves hierarchy level descriptor.\r\n * @public\r\n */\r\n public async getNodesDescriptor(\r\n requestOptions: HierarchyLevelDescriptorRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<Descriptor | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n try {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n const result = await this._requestsHandler.getNodesDescriptor(rpcOptions);\r\n const descriptor = Descriptor.fromJSON(result);\r\n return descriptor ? this._localizationHelper.getLocalizedContentDescriptor(descriptor) : undefined;\r\n } finally {\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n }\r\n }\r\n\r\n /** Retrieves paths from root nodes to children nodes according to specified keys. Intersecting paths will be merged. */\r\n public async getNodePaths(\r\n requestOptions: FilterByInstancePathsHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<NodePathElement[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n const result = await this._requestsHandler.getNodePaths(rpcOptions);\r\n // eslint-disable-next-line deprecation/deprecation\r\n return result.map(NodePathElement.fromJSON).map((npe) => this._localizationHelper.getLocalizedNodePathElement(npe));\r\n }\r\n\r\n /** Retrieves paths from root nodes to nodes containing filter text in their label. */\r\n public async getFilteredNodePaths(\r\n requestOptions: FilterByTextHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<NodePathElement[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const result = await this._requestsHandler.getFilteredNodePaths(this.toRpcTokenOptions(options));\r\n // eslint-disable-next-line deprecation/deprecation\r\n return result.map(NodePathElement.fromJSON).map((npe) => this._localizationHelper.getLocalizedNodePathElement(npe));\r\n }\r\n\r\n /**\r\n * Get information about the sources of content when building it for specific ECClasses. Sources involve classes of the primary select instance,\r\n * its related instances for loading related and navigation properties.\r\n * @public\r\n */\r\n public async getContentSources(requestOptions: ContentSourcesRequestOptions<IModelConnection> & ClientDiagnosticsAttribute): Promise<SelectClassInfo[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions(requestOptions);\r\n const result = await this._requestsHandler.getContentSources(rpcOptions);\r\n return SelectClassInfo.listFromCompressedJSON(result.sources, result.classesMap);\r\n }\r\n\r\n /** Retrieves the content descriptor which describes the content and can be used to customize it. */\r\n public async getContentDescriptor(\r\n requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<Descriptor | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n try {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n });\r\n const result = await this._requestsHandler.getContentDescriptor(rpcOptions);\r\n const descriptor = Descriptor.fromJSON(result);\r\n return descriptor ? this._localizationHelper.getLocalizedContentDescriptor(descriptor) : undefined;\r\n } finally {\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n }\r\n }\r\n\r\n /** Retrieves overall content set size. */\r\n public async getContentSetSize(requestOptions: GetContentRequestOptions): Promise<number> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n descriptor: getDescriptorOverrides(requestOptions.descriptor),\r\n keys: stripTransientElementKeys(requestOptions.keys).toJSON(),\r\n });\r\n return this._requestsHandler.getContentSetSize(rpcOptions);\r\n }\r\n\r\n private async getContentIteratorInternal(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ descriptor: Descriptor; total: number; items: AsyncIterableIterator<Item> } | undefined> {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const firstPageSize = options.batchSize ?? requestOptions.paging?.size;\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n descriptor: getDescriptorOverrides(requestOptions.descriptor),\r\n keys: stripTransientElementKeys(requestOptions.keys).toJSON(),\r\n ...(firstPageSize ? { paging: { ...requestOptions.paging, size: firstPageSize } } : undefined),\r\n ...(!requestOptions.omitFormattedValues && this._schemaContextProvider !== undefined ? { omitFormattedValues: true } : undefined),\r\n });\r\n\r\n let contentFormatter: ContentFormatter | undefined;\r\n if (!requestOptions.omitFormattedValues && this._schemaContextProvider) {\r\n const koqPropertyFormatter = new KoqPropertyValueFormatter(this._schemaContextProvider(requestOptions.imodel), this._defaultFormats);\r\n contentFormatter = new ContentFormatter(\r\n new ContentPropertyValueFormatter(koqPropertyFormatter),\r\n requestOptions.unitSystem ?? this._explicitActiveUnitSystem ?? IModelApp.quantityFormatter.activeUnitSystem,\r\n );\r\n }\r\n\r\n let descriptor = requestOptions.descriptor instanceof Descriptor ? requestOptions.descriptor : undefined;\r\n let firstPage: PagedResponse<ItemJSON> | undefined;\r\n if (!descriptor) {\r\n const firstPageResponse = await this._requestsHandler.getPagedContent(rpcOptions);\r\n if (!firstPageResponse?.descriptor || !firstPageResponse.contentSet) {\r\n return undefined;\r\n }\r\n descriptor = Descriptor.fromJSON(firstPageResponse?.descriptor);\r\n firstPage = firstPageResponse?.contentSet;\r\n }\r\n\r\n // istanbul ignore if\r\n if (!descriptor) {\r\n return undefined;\r\n }\r\n\r\n descriptor = this._localizationHelper.getLocalizedContentDescriptor(descriptor);\r\n\r\n const getPage = async (paging: Required<PageOptions>, requestIndex: number) => {\r\n let contentSet = requestIndex === 0 ? firstPage : undefined;\r\n contentSet ??= await this._requestsHandler.getPagedContentSet({ ...rpcOptions, paging });\r\n\r\n let items = contentSet.items.map((x) => Item.fromJSON(x)).filter((x): x is Item => x !== undefined);\r\n if (contentFormatter) {\r\n items = await contentFormatter.formatContentItems(items, descriptor!);\r\n }\r\n\r\n items = this._localizationHelper.getLocalizedContentItems(items);\r\n return {\r\n total: contentSet.total,\r\n items,\r\n };\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: getPage,\r\n });\r\n\r\n return {\r\n ...(await generator.createAsyncIteratorResponse()),\r\n descriptor,\r\n };\r\n }\r\n\r\n /** Retrieves a content descriptor, item count and async generator for the items themselves. */\r\n public async getContentIterator(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ descriptor: Descriptor; total: number; items: AsyncIterableIterator<Item> } | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const response = await this.getContentIteratorInternal(requestOptions);\r\n if (!response) {\r\n return undefined;\r\n }\r\n\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves content which consists of a content descriptor and a page of records.\r\n * @deprecated in 4.5. Use [[getContentIterator]] instead.\r\n */\r\n public async getContent(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<Content | undefined> {\r\n // eslint-disable-next-line deprecation/deprecation\r\n return (await this.getContentAndSize(requestOptions))?.content;\r\n }\r\n\r\n /**\r\n * Retrieves content set size and content which consists of a content descriptor and a page of records.\r\n * @deprecated in 4.5. Use [[getContentIterator]] instead.\r\n */\r\n public async getContentAndSize(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ content: Content; size: number } | undefined> {\r\n const response = await this.getContentIterator(requestOptions);\r\n if (!response) {\r\n return undefined;\r\n }\r\n\r\n const { descriptor, total } = response;\r\n const items = await collect(response.items);\r\n return {\r\n content: new Content(descriptor, items),\r\n size: total,\r\n };\r\n }\r\n\r\n /** Returns an iterator that asynchronously polls distinct values of specific field from the content. */\r\n public async getDistinctValuesIterator(\r\n requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<DisplayValueGroup> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = {\r\n ...this.toRpcTokenOptions(options),\r\n descriptor: getDescriptorOverrides(options.descriptor),\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (paging) => {\r\n const response = await this._requestsHandler.getPagedDistinctValues({ ...rpcOptions, paging });\r\n return {\r\n total: response.total,\r\n // eslint-disable-next-line deprecation/deprecation\r\n items: response.items.map((x) => this._localizationHelper.getLocalizedDisplayValueGroup(DisplayValueGroup.fromJSON(x))),\r\n };\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves distinct values of specific field from the content.\r\n * @deprecated in 4.5. Use [[getDistinctValuesIterator]] instead.\r\n */\r\n public async getPagedDistinctValues(\r\n requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<PagedResponse<DisplayValueGroup>> {\r\n const result = await this.getDistinctValuesIterator(requestOptions);\r\n return {\r\n total: result.total,\r\n items: await collect(result.items),\r\n };\r\n }\r\n\r\n /**\r\n * Retrieves property data in a simplified format for a single element specified by ID.\r\n * @public\r\n */\r\n public async getElementProperties<TParsedContent = ElementProperties>(\r\n requestOptions: SingleElementPropertiesRequestOptions<IModelConnection, TParsedContent> & ClientDiagnosticsAttribute,\r\n ): Promise<TParsedContent | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n type TParser = Required<typeof requestOptions>[\"contentParser\"];\r\n const { elementId, contentParser, ...optionsNoElementId } = requestOptions;\r\n const parser: TParser = contentParser ?? (buildElementProperties as TParser);\r\n const iter = await this.getContentIterator({\r\n ...optionsNoElementId,\r\n descriptor: {\r\n displayType: DefaultContentDisplayTypes.PropertyPane,\r\n contentFlags: ContentFlags.ShowLabels,\r\n },\r\n rulesetOrId: \"ElementProperties\",\r\n keys: new KeySet([{ className: \"BisCore:Element\", id: elementId }]),\r\n });\r\n if (!iter || iter.total === 0) {\r\n return undefined;\r\n }\r\n return parser(iter.descriptor, (await iter.items.next()).value);\r\n }\r\n\r\n /**\r\n * Retrieves content item instance keys.\r\n * @public\r\n */\r\n public async getContentInstanceKeys(\r\n requestOptions: ContentInstanceKeysRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: () => AsyncGenerator<InstanceKey> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = {\r\n ...this.toRpcTokenOptions(options),\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (page) => {\r\n const keys = await this._requestsHandler.getContentInstanceKeys({ ...rpcOptions, paging: page });\r\n return {\r\n total: keys.total,\r\n items: keys.items.instanceKeys.reduce((instanceKeys, entry) => {\r\n for (const id of CompressedId64Set.iterable(entry[1])) {\r\n instanceKeys.push({ className: entry[0], id });\r\n }\r\n return instanceKeys;\r\n }, new Array<InstanceKey>()),\r\n };\r\n },\r\n });\r\n\r\n const { total, items } = await generator.createAsyncIteratorResponse();\r\n return {\r\n total,\r\n async *items() {\r\n yield* items;\r\n },\r\n };\r\n }\r\n\r\n /** Retrieves display label definition of specific item. */\r\n public async getDisplayLabelDefinition(\r\n requestOptions: DisplayLabelRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute,\r\n ): Promise<LabelDefinition> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions({ ...requestOptions });\r\n const result = await this._requestsHandler.getDisplayLabelDefinition(rpcOptions);\r\n return this._localizationHelper.getLocalizedLabelDefinition(result);\r\n }\r\n\r\n /** Retrieves display label definition of specific items. */\r\n public async getDisplayLabelDefinitionsIterator(\r\n requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<LabelDefinition> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions({ ...requestOptions });\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (page) => {\r\n const partialKeys = !page.start ? rpcOptions.keys : rpcOptions.keys.slice(page.start);\r\n const result = await this._requestsHandler.getPagedDisplayLabelDefinitions({ ...rpcOptions, keys: partialKeys });\r\n result.items = this._localizationHelper.getLocalizedLabelDefinitions(result.items);\r\n return result;\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves display label definition of specific items.\r\n * @deprecated in 4.5. Use [[getDisplayLabelDefinitionsIterator]] instead.\r\n */\r\n public async getDisplayLabelDefinitions(\r\n requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<LabelDefinition[]> {\r\n const { items } = await this.getDisplayLabelDefinitionsIterator(requestOptions);\r\n return collect(items);\r\n }\r\n}\r\n\r\nconst getDescriptorOverrides = (descriptorOrOverrides: Descriptor | DescriptorOverrides): DescriptorOverrides => {\r\n if (descriptorOrOverrides instanceof Descriptor) {\r\n return descriptorOrOverrides.createDescriptorOverrides();\r\n }\r\n return descriptorOrOverrides;\r\n};\r\n\r\nconst stripTransientElementKeys = (keys: KeySet) => {\r\n if (!keys.some((key) => Key.isInstanceKey(key) && key.className === TRANSIENT_ELEMENT_CLASSNAME)) {\r\n return keys;\r\n }\r\n\r\n const copy = new KeySet();\r\n copy.add(keys, (key) => {\r\n // the callback is not going to be called with EntityProps as KeySet converts them\r\n // to InstanceKeys, but we want to keep the EntityProps case for correctness\r\n // istanbul ignore next\r\n const isTransient =\r\n (Key.isInstanceKey(key) && key.className === TRANSIENT_ELEMENT_CLASSNAME) ||\r\n (Key.isEntityProps(key) && key.classFullName === TRANSIENT_ELEMENT_CLASSNAME);\r\n return !isTransient;\r\n });\r\n return copy;\r\n};\r\n\r\nasync function collect<T>(iter: AsyncIterable<T>): Promise<T[]> {\r\n const result = new Array<T>();\r\n for await (const value of iter) {\r\n result.push(value);\r\n }\r\n return result;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"PresentationManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/PresentationManager.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 { BeEvent, CompressedId64Set, IDisposable, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { IModelApp, IModelConnection, IpcApp } from \"@itwin/core-frontend\";\r\nimport { UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport { SchemaContext } from \"@itwin/ecschema-metadata\";\r\nimport {\r\n buildElementProperties,\r\n ClientDiagnosticsAttribute,\r\n Content,\r\n ContentDescriptorRequestOptions,\r\n ContentFlags,\r\n ContentFormatter,\r\n ContentInstanceKeysRequestOptions,\r\n ContentPropertyValueFormatter,\r\n ContentRequestOptions,\r\n ContentSourcesRequestOptions,\r\n ContentUpdateInfo,\r\n DefaultContentDisplayTypes,\r\n Descriptor,\r\n DescriptorOverrides,\r\n DisplayLabelRequestOptions,\r\n DisplayLabelsRequestOptions,\r\n DisplayValueGroup,\r\n DistinctValuesRequestOptions,\r\n ElementProperties,\r\n FilterByInstancePathsHierarchyRequestOptions,\r\n FilterByTextHierarchyRequestOptions,\r\n FormatsMap,\r\n HierarchyLevelDescriptorRequestOptions,\r\n HierarchyRequestOptions,\r\n HierarchyUpdateInfo,\r\n InstanceKey,\r\n Item,\r\n ItemJSON,\r\n Key,\r\n KeySet,\r\n KoqPropertyValueFormatter,\r\n LabelDefinition,\r\n Node,\r\n NodeKey,\r\n NodePathElement,\r\n Paged,\r\n PagedResponse,\r\n PageOptions,\r\n PresentationIpcEvents,\r\n RpcRequestsHandler,\r\n Ruleset,\r\n RulesetVariable,\r\n SelectClassInfo,\r\n SingleElementPropertiesRequestOptions,\r\n UpdateInfo,\r\n VariableValueTypes,\r\n} from \"@itwin/presentation-common\";\r\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler\";\r\nimport { FrontendLocalizationHelper } from \"./LocalizationHelper\";\r\nimport { RulesetManager, RulesetManagerImpl } from \"./RulesetManager\";\r\nimport { RulesetVariablesManager, RulesetVariablesManagerImpl } from \"./RulesetVariablesManager\";\r\nimport { TRANSIENT_ELEMENT_CLASSNAME } from \"./selection/SelectionManager\";\r\nimport { StreamedResponseGenerator } from \"./StreamedResponseGenerator\";\r\n\r\n/**\r\n * Data structure that describes IModel hierarchy change event arguments.\r\n * @public\r\n */\r\nexport interface IModelHierarchyChangeEventArgs {\r\n /** Id of ruleset that was used to create hierarchy. */\r\n rulesetId: string;\r\n /** Hierarchy changes info. */\r\n updateInfo: HierarchyUpdateInfo;\r\n /** Key of iModel that was used to create hierarchy. It matches [[IModelConnection.key]] property. */\r\n imodelKey: string;\r\n}\r\n\r\n/**\r\n * Data structure that describes iModel content change event arguments.\r\n * @public\r\n */\r\nexport interface IModelContentChangeEventArgs {\r\n /** Id of ruleset that was used to create content. */\r\n rulesetId: string;\r\n /** Content changes info. */\r\n updateInfo: ContentUpdateInfo;\r\n /** Key of iModel that was used to create content. It matches [[IModelConnection.key]] property. */\r\n imodelKey: string;\r\n}\r\n\r\n/**\r\n * Options for requests that can return multiple pages of items concurrently.\r\n * @public\r\n */\r\nexport type MultipleValuesRequestOptions = Paged<{\r\n /**\r\n * Max number of requests that should be made to the backend to fulfill the whole request.\r\n * `undefined` means no limit, so in that case all requests are sent at once.\r\n */\r\n maxParallelRequests?: number;\r\n\r\n /**\r\n * Size of a single batch when fetching data through multiple requests. If not set,\r\n * the fall back is requested page size. If the page size is not set, the backend\r\n * decides how many items to return.\r\n */\r\n batchSize?: number;\r\n}>;\r\n\r\n/**\r\n * Options for requests that retrieve nodes.\r\n * @public\r\n */\r\nexport type GetNodesRequestOptions = HierarchyRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Options for requests that retrieve content.\r\n * @public\r\n */\r\nexport type GetContentRequestOptions = ContentRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> &\r\n ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Options for requests that retrieve distinct values.\r\n * @public\r\n */\r\nexport type GetDistinctValuesRequestOptions = DistinctValuesRequestOptions<IModelConnection, Descriptor | DescriptorOverrides, KeySet, RulesetVariable> &\r\n ClientDiagnosticsAttribute;\r\n\r\n/**\r\n * Properties used to configure [[PresentationManager]]\r\n * @public\r\n */\r\nexport interface PresentationManagerProps {\r\n /**\r\n * Sets the active locale to use when localizing presentation-related\r\n * strings. It can later be changed through [[PresentationManager]].\r\n */\r\n activeLocale?: string;\r\n\r\n /**\r\n * Sets the active unit system to use for formatting property values with\r\n * units. The value can later be changed through [[PresentationManager.activeUnitSystem]] setter or\r\n * overriden for each request through request parameters. If not set, `IModelApp.quantityFormatter.activeUnitSystem`\r\n * is used by default.\r\n *\r\n * @deprecated in 4.0. Use [IModelApp.quantityFormatter]($core-frontend) to set the active unit system.\r\n */\r\n activeUnitSystem?: UnitSystemKey;\r\n\r\n /**\r\n * ID used to identify client that requests data. Generally, clients should\r\n * store this ID in their local storage so the ID can be reused across\r\n * sessions - this allows reusing some caches.\r\n *\r\n * Defaults to a unique GUID as a client id.\r\n */\r\n clientId?: string;\r\n\r\n /**\r\n * Timeout (in milliseconds) for how long we're going to wait for RPC request to be fulfilled before throwing\r\n * a timeout error.\r\n *\r\n * Defaults to 10 minutes.\r\n */\r\n requestTimeout?: number;\r\n\r\n /**\r\n * Callback that provides [SchemaContext]($ecschema-metadata) for supplied [IModelConnection]($core-frontend).\r\n * [SchemaContext]($ecschema-metadata) is used for getting metadata required for values formatting.\r\n */\r\n schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;\r\n\r\n /**\r\n * A map of default unit formats to use for formatting properties that don't have a presentation format\r\n * in requested unit system.\r\n *\r\n * @note Only has effect when frontend value formatting is enabled by supplying the `schemaContextProvider` prop.\r\n */\r\n defaultFormats?: FormatsMap;\r\n\r\n /** @internal */\r\n rpcRequestsHandler?: RpcRequestsHandler;\r\n\r\n /** @internal */\r\n ipcRequestsHandler?: IpcRequestsHandler;\r\n}\r\n\r\n/**\r\n * Frontend Presentation manager which basically just forwards all calls to\r\n * the backend implementation.\r\n *\r\n * @public\r\n */\r\nexport class PresentationManager implements IDisposable {\r\n private _requestsHandler: RpcRequestsHandler;\r\n private _rulesets: RulesetManager;\r\n private _localizationHelper: FrontendLocalizationHelper;\r\n private _explicitActiveUnitSystem: UnitSystemKey | undefined;\r\n private _rulesetVars: Map<string, RulesetVariablesManager>;\r\n private _clearEventListener?: () => void;\r\n private _schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;\r\n private _defaultFormats?: FormatsMap;\r\n private _ipcRequestsHandler?: IpcRequestsHandler;\r\n\r\n /**\r\n * An event raised when hierarchies created using specific ruleset change\r\n */\r\n public onIModelHierarchyChanged = new BeEvent<(args: IModelHierarchyChangeEventArgs) => void>();\r\n\r\n /**\r\n * An event raised when content created using specific ruleset changes\r\n */\r\n public onIModelContentChanged = new BeEvent<(args: IModelContentChangeEventArgs) => void>();\r\n\r\n /**\r\n * Get / set active unit system used to format property values with units.\r\n *\r\n * @deprecated in 4.0. `IModelApp.quantityFormatter` should be used to get/set the active unit system. At the moment\r\n * [[PresentationManager]] allows overriding it, but returns `IModelApp.quantityFormatter.activeUnitSystem` if override\r\n * is not set.\r\n */\r\n public get activeUnitSystem(): UnitSystemKey {\r\n return this._explicitActiveUnitSystem ?? IModelApp.quantityFormatter.activeUnitSystem;\r\n }\r\n public set activeUnitSystem(value: UnitSystemKey | undefined) {\r\n this._explicitActiveUnitSystem = value;\r\n }\r\n\r\n private constructor(props?: PresentationManagerProps) {\r\n if (props) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._explicitActiveUnitSystem = props.activeUnitSystem;\r\n }\r\n\r\n this._requestsHandler =\r\n props?.rpcRequestsHandler ?? new RpcRequestsHandler(props ? { clientId: props.clientId, timeout: props.requestTimeout } : undefined);\r\n this._rulesetVars = new Map<string, RulesetVariablesManager>();\r\n this._rulesets = RulesetManagerImpl.create();\r\n this._localizationHelper = new FrontendLocalizationHelper(props?.activeLocale);\r\n this._schemaContextProvider = props?.schemaContextProvider;\r\n this._defaultFormats = props?.defaultFormats;\r\n\r\n if (IpcApp.isValid) {\r\n // Ipc only works in ipc apps, so the `onUpdate` callback will only be called there.\r\n this._clearEventListener = IpcApp.addListener(PresentationIpcEvents.Update, this.onUpdate);\r\n this._ipcRequestsHandler = props?.ipcRequestsHandler ?? new IpcRequestsHandler(this._requestsHandler.clientId);\r\n }\r\n }\r\n\r\n /** Get / set active locale used for localizing presentation data */\r\n public get activeLocale(): string | undefined {\r\n return this._localizationHelper.locale;\r\n }\r\n public set activeLocale(locale: string | undefined) {\r\n this._localizationHelper.locale = locale;\r\n }\r\n\r\n public dispose() {\r\n if (this._clearEventListener) {\r\n this._clearEventListener();\r\n this._clearEventListener = undefined;\r\n }\r\n }\r\n\r\n private onUpdate = (_evt: Event, report: UpdateInfo) => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.handleUpdateAsync(report);\r\n };\r\n\r\n /** @note This is only called in native apps after changes in iModels */\r\n private async handleUpdateAsync(report: UpdateInfo) {\r\n for (const imodelKey in report) {\r\n // istanbul ignore if\r\n if (!report.hasOwnProperty(imodelKey)) {\r\n continue;\r\n }\r\n\r\n const imodelReport = report[imodelKey];\r\n for (const rulesetId in imodelReport) {\r\n // istanbul ignore if\r\n if (!imodelReport.hasOwnProperty(rulesetId)) {\r\n continue;\r\n }\r\n\r\n const updateInfo = imodelReport[rulesetId];\r\n if (updateInfo.content) {\r\n this.onIModelContentChanged.raiseEvent({ rulesetId, updateInfo: updateInfo.content, imodelKey });\r\n }\r\n if (updateInfo.hierarchy) {\r\n this.onIModelHierarchyChanged.raiseEvent({ rulesetId, updateInfo: updateInfo.hierarchy, imodelKey });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Function that is called when a new IModelConnection is used to retrieve data.\r\n * @internal\r\n */\r\n public startIModelInitialization(_: IModelConnection) {}\r\n\r\n /**\r\n * Function that should be called to finish initialization that was started at [[PresentationManager.startIModelInitialization]].\r\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\r\n * @internal\r\n */\r\n public async ensureIModelInitialized(_: IModelConnection) {}\r\n\r\n /**\r\n * Create a new PresentationManager instance\r\n * @param props Optional properties used to configure the manager\r\n */\r\n public static create(props?: PresentationManagerProps) {\r\n return new PresentationManager(props);\r\n }\r\n\r\n /** @internal */\r\n public get rpcRequestsHandler() {\r\n return this._requestsHandler;\r\n }\r\n\r\n /** @internal */\r\n public get ipcRequestsHandler() {\r\n return this._ipcRequestsHandler;\r\n }\r\n\r\n /**\r\n * Get rulesets manager\r\n */\r\n public rulesets() {\r\n return this._rulesets;\r\n }\r\n\r\n /**\r\n * Get ruleset variables manager for specific ruleset\r\n * @param rulesetId Id of the ruleset to get the vars manager for\r\n */\r\n public vars(rulesetId: string) {\r\n if (!this._rulesetVars.has(rulesetId)) {\r\n const varsManager = new RulesetVariablesManagerImpl(rulesetId, this._ipcRequestsHandler);\r\n this._rulesetVars.set(rulesetId, varsManager);\r\n }\r\n return this._rulesetVars.get(rulesetId)!;\r\n }\r\n\r\n private toRpcTokenOptions<TOptions extends { imodel: IModelConnection; locale?: string; unitSystem?: UnitSystemKey; rulesetVariables?: RulesetVariable[] }>(\r\n requestOptions: TOptions,\r\n ) {\r\n // 1. put default `locale` and `unitSystem`\r\n // 2. put all `requestOptions` members (if `locale` or `unitSystem` are set, they'll override the defaults put at #1)\r\n // 3. put `imodel` of type `IModelRpcProps` which overwrites the `imodel` from `requestOptions` put at #2\r\n const defaultOptions: Pick<TOptions, \"locale\" | \"unitSystem\"> = {};\r\n if (this.activeLocale) {\r\n defaultOptions.locale = this.activeLocale;\r\n }\r\n defaultOptions.unitSystem = this.activeUnitSystem; // eslint-disable-line @typescript-eslint/no-deprecated\r\n\r\n const { imodel, rulesetVariables, ...rpcRequestOptions } = requestOptions;\r\n return {\r\n ...defaultOptions,\r\n ...rpcRequestOptions,\r\n ...(rulesetVariables ? { rulesetVariables: rulesetVariables.map(RulesetVariable.toJSON) } : {}),\r\n imodel: imodel.getRpcProps(),\r\n };\r\n }\r\n\r\n private async addRulesetAndVariablesToOptions<TOptions extends { rulesetOrId: Ruleset | string; rulesetVariables?: RulesetVariable[] }>(options: TOptions) {\r\n const { rulesetOrId, rulesetVariables } = options;\r\n let foundRulesetOrId: Ruleset | string;\r\n if (typeof rulesetOrId === \"object\") {\r\n foundRulesetOrId = rulesetOrId;\r\n } else {\r\n const foundRuleset = await this._rulesets.get(rulesetOrId);\r\n foundRulesetOrId = foundRuleset ? foundRuleset.toJSON() : rulesetOrId;\r\n }\r\n const rulesetId = typeof foundRulesetOrId === \"object\" ? foundRulesetOrId.id : foundRulesetOrId;\r\n\r\n // All Id64Array variable values must be sorted for serialization to JSON to work. RulesetVariablesManager\r\n // sorts them before storing, so that part is taken care of, but we need to ensure that variables coming from\r\n // request options are also sorted.\r\n const variables = (rulesetVariables ?? []).map((variable) => {\r\n if (variable.type === VariableValueTypes.Id64Array) {\r\n return { ...variable, value: OrderedId64Iterable.sortArray(variable.value) };\r\n }\r\n return variable;\r\n });\r\n if (!this._ipcRequestsHandler) {\r\n // only need to add variables from variables manager if there's no IPC\r\n // handler - if there is one, the variables are already known by the backend\r\n variables.push(...this.vars(rulesetId).getAllVariables());\r\n }\r\n\r\n return { ...options, rulesetOrId: foundRulesetOrId, rulesetVariables: variables };\r\n }\r\n\r\n /** Returns an iterator that polls nodes asynchronously. */\r\n public async getNodesIterator(\r\n requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<Node> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (paging) => {\r\n const result = await this._requestsHandler.getPagedNodes({ ...rpcOptions, paging });\r\n return {\r\n total: result.total,\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n items: this._localizationHelper.getLocalizedNodes(result.items.map(Node.fromJSON)),\r\n };\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves nodes\r\n * @deprecated in 4.5. Use [[getNodesIterator]] instead.\r\n */\r\n public async getNodes(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<Node[]> {\r\n const result = await this.getNodesIterator(requestOptions);\r\n return collect(result.items);\r\n }\r\n\r\n /** Retrieves nodes count. */\r\n public async getNodesCount(requestOptions: GetNodesRequestOptions): Promise<number> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n return this._requestsHandler.getNodesCount(rpcOptions);\r\n }\r\n\r\n /**\r\n * Retrieves total nodes count and a single page of nodes.\r\n * @deprecated in 4.5. Use [[getNodesIterator]] instead.\r\n */\r\n public async getNodesAndCount(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<{ count: number; nodes: Node[] }> {\r\n const result = await this.getNodesIterator(requestOptions);\r\n return {\r\n count: result.total,\r\n nodes: await collect(result.items),\r\n };\r\n }\r\n\r\n /**\r\n * Retrieves hierarchy level descriptor.\r\n * @public\r\n */\r\n public async getNodesDescriptor(\r\n requestOptions: HierarchyLevelDescriptorRequestOptions<IModelConnection, NodeKey, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<Descriptor | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n try {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n const result = await this._requestsHandler.getNodesDescriptor(rpcOptions);\r\n const descriptor = Descriptor.fromJSON(result);\r\n return descriptor ? this._localizationHelper.getLocalizedContentDescriptor(descriptor) : undefined;\r\n } finally {\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n }\r\n }\r\n\r\n /** Retrieves paths from root nodes to children nodes according to specified keys. Intersecting paths will be merged. */\r\n public async getNodePaths(\r\n requestOptions: FilterByInstancePathsHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<NodePathElement[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({ ...options });\r\n const result = await this._requestsHandler.getNodePaths(rpcOptions);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return result.map(NodePathElement.fromJSON).map((npe) => this._localizationHelper.getLocalizedNodePathElement(npe));\r\n }\r\n\r\n /** Retrieves paths from root nodes to nodes containing filter text in their label. */\r\n public async getFilteredNodePaths(\r\n requestOptions: FilterByTextHierarchyRequestOptions<IModelConnection, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<NodePathElement[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const result = await this._requestsHandler.getFilteredNodePaths(this.toRpcTokenOptions(options));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return result.map(NodePathElement.fromJSON).map((npe) => this._localizationHelper.getLocalizedNodePathElement(npe));\r\n }\r\n\r\n /**\r\n * Get information about the sources of content when building it for specific ECClasses. Sources involve classes of the primary select instance,\r\n * its related instances for loading related and navigation properties.\r\n * @public\r\n */\r\n public async getContentSources(requestOptions: ContentSourcesRequestOptions<IModelConnection> & ClientDiagnosticsAttribute): Promise<SelectClassInfo[]> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions(requestOptions);\r\n const result = await this._requestsHandler.getContentSources(rpcOptions);\r\n return SelectClassInfo.listFromCompressedJSON(result.sources, result.classesMap);\r\n }\r\n\r\n /** Retrieves the content descriptor which describes the content and can be used to customize it. */\r\n public async getContentDescriptor(\r\n requestOptions: ContentDescriptorRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute,\r\n ): Promise<Descriptor | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n try {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n });\r\n const result = await this._requestsHandler.getContentDescriptor(rpcOptions);\r\n const descriptor = Descriptor.fromJSON(result);\r\n return descriptor ? this._localizationHelper.getLocalizedContentDescriptor(descriptor) : undefined;\r\n } finally {\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n }\r\n }\r\n\r\n /** Retrieves overall content set size. */\r\n public async getContentSetSize(requestOptions: GetContentRequestOptions): Promise<number> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n descriptor: getDescriptorOverrides(requestOptions.descriptor),\r\n keys: stripTransientElementKeys(requestOptions.keys).toJSON(),\r\n });\r\n return this._requestsHandler.getContentSetSize(rpcOptions);\r\n }\r\n\r\n private async getContentIteratorInternal(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ descriptor: Descriptor; total: number; items: AsyncIterableIterator<Item> } | undefined> {\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const firstPageSize = options.batchSize ?? requestOptions.paging?.size;\r\n const rpcOptions = this.toRpcTokenOptions({\r\n ...options,\r\n descriptor: getDescriptorOverrides(requestOptions.descriptor),\r\n keys: stripTransientElementKeys(requestOptions.keys).toJSON(),\r\n ...(firstPageSize ? { paging: { ...requestOptions.paging, size: firstPageSize } } : undefined),\r\n ...(!requestOptions.omitFormattedValues && this._schemaContextProvider !== undefined ? { omitFormattedValues: true } : undefined),\r\n });\r\n\r\n let contentFormatter: ContentFormatter | undefined;\r\n if (!requestOptions.omitFormattedValues && this._schemaContextProvider) {\r\n const koqPropertyFormatter = new KoqPropertyValueFormatter(this._schemaContextProvider(requestOptions.imodel), this._defaultFormats);\r\n contentFormatter = new ContentFormatter(\r\n new ContentPropertyValueFormatter(koqPropertyFormatter),\r\n requestOptions.unitSystem ?? this._explicitActiveUnitSystem ?? IModelApp.quantityFormatter.activeUnitSystem,\r\n );\r\n }\r\n\r\n let descriptor = requestOptions.descriptor instanceof Descriptor ? requestOptions.descriptor : undefined;\r\n let firstPage: PagedResponse<ItemJSON> | undefined;\r\n if (!descriptor) {\r\n const firstPageResponse = await this._requestsHandler.getPagedContent(rpcOptions);\r\n if (!firstPageResponse?.descriptor || !firstPageResponse.contentSet) {\r\n return undefined;\r\n }\r\n descriptor = Descriptor.fromJSON(firstPageResponse?.descriptor);\r\n firstPage = firstPageResponse?.contentSet;\r\n }\r\n\r\n // istanbul ignore if\r\n if (!descriptor) {\r\n return undefined;\r\n }\r\n\r\n descriptor = this._localizationHelper.getLocalizedContentDescriptor(descriptor);\r\n\r\n const getPage = async (paging: Required<PageOptions>, requestIndex: number) => {\r\n let contentSet = requestIndex === 0 ? firstPage : undefined;\r\n contentSet ??= await this._requestsHandler.getPagedContentSet({ ...rpcOptions, paging });\r\n\r\n let items = contentSet.items.map((x) => Item.fromJSON(x)).filter((x): x is Item => x !== undefined);\r\n if (contentFormatter) {\r\n items = await contentFormatter.formatContentItems(items, descriptor);\r\n }\r\n\r\n items = this._localizationHelper.getLocalizedContentItems(items);\r\n return {\r\n total: contentSet.total,\r\n items,\r\n };\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: getPage,\r\n });\r\n\r\n return {\r\n ...(await generator.createAsyncIteratorResponse()),\r\n descriptor,\r\n };\r\n }\r\n\r\n /** Retrieves a content descriptor, item count and async generator for the items themselves. */\r\n public async getContentIterator(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ descriptor: Descriptor; total: number; items: AsyncIterableIterator<Item> } | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const response = await this.getContentIteratorInternal(requestOptions);\r\n if (!response) {\r\n return undefined;\r\n }\r\n\r\n await this.ensureIModelInitialized(requestOptions.imodel);\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves content which consists of a content descriptor and a page of records.\r\n * @deprecated in 4.5. Use [[getContentIterator]] instead.\r\n */\r\n public async getContent(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<Content | undefined> {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return (await this.getContentAndSize(requestOptions))?.content;\r\n }\r\n\r\n /**\r\n * Retrieves content set size and content which consists of a content descriptor and a page of records.\r\n * @deprecated in 4.5. Use [[getContentIterator]] instead.\r\n */\r\n public async getContentAndSize(\r\n requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ content: Content; size: number } | undefined> {\r\n const response = await this.getContentIterator(requestOptions);\r\n if (!response) {\r\n return undefined;\r\n }\r\n\r\n const { descriptor, total } = response;\r\n const items = await collect(response.items);\r\n return {\r\n content: new Content(descriptor, items),\r\n size: total,\r\n };\r\n }\r\n\r\n /** Returns an iterator that asynchronously polls distinct values of specific field from the content. */\r\n public async getDistinctValuesIterator(\r\n requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<DisplayValueGroup> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = {\r\n ...this.toRpcTokenOptions(options),\r\n descriptor: getDescriptorOverrides(options.descriptor),\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (paging) => {\r\n const response = await this._requestsHandler.getPagedDistinctValues({ ...rpcOptions, paging });\r\n return {\r\n total: response.total,\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n items: response.items.map((x) => this._localizationHelper.getLocalizedDisplayValueGroup(DisplayValueGroup.fromJSON(x))),\r\n };\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves distinct values of specific field from the content.\r\n * @deprecated in 4.5. Use [[getDistinctValuesIterator]] instead.\r\n */\r\n public async getPagedDistinctValues(\r\n requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions,\r\n ): Promise<PagedResponse<DisplayValueGroup>> {\r\n const result = await this.getDistinctValuesIterator(requestOptions);\r\n return {\r\n total: result.total,\r\n items: await collect(result.items),\r\n };\r\n }\r\n\r\n /**\r\n * Retrieves property data in a simplified format for a single element specified by ID.\r\n * @public\r\n */\r\n public async getElementProperties<TParsedContent = ElementProperties>(\r\n requestOptions: SingleElementPropertiesRequestOptions<IModelConnection, TParsedContent> & ClientDiagnosticsAttribute,\r\n ): Promise<TParsedContent | undefined> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n type TParser = Required<typeof requestOptions>[\"contentParser\"];\r\n const { elementId, contentParser, ...optionsNoElementId } = requestOptions;\r\n const parser: TParser = contentParser ?? (buildElementProperties as TParser);\r\n const iter = await this.getContentIterator({\r\n ...optionsNoElementId,\r\n descriptor: {\r\n displayType: DefaultContentDisplayTypes.PropertyPane,\r\n contentFlags: ContentFlags.ShowLabels,\r\n },\r\n rulesetOrId: \"ElementProperties\",\r\n keys: new KeySet([{ className: \"BisCore:Element\", id: elementId }]),\r\n });\r\n if (!iter || iter.total === 0) {\r\n return undefined;\r\n }\r\n return parser(iter.descriptor, (await iter.items.next()).value);\r\n }\r\n\r\n /**\r\n * Retrieves content item instance keys.\r\n * @public\r\n */\r\n public async getContentInstanceKeys(\r\n requestOptions: ContentInstanceKeysRequestOptions<IModelConnection, KeySet, RulesetVariable> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: () => AsyncGenerator<InstanceKey> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const options = await this.addRulesetAndVariablesToOptions(requestOptions);\r\n const rpcOptions = {\r\n ...this.toRpcTokenOptions(options),\r\n keys: stripTransientElementKeys(options.keys).toJSON(),\r\n };\r\n\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (page) => {\r\n const keys = await this._requestsHandler.getContentInstanceKeys({ ...rpcOptions, paging: page });\r\n return {\r\n total: keys.total,\r\n items: keys.items.instanceKeys.reduce((instanceKeys, entry) => {\r\n for (const id of CompressedId64Set.iterable(entry[1])) {\r\n instanceKeys.push({ className: entry[0], id });\r\n }\r\n return instanceKeys;\r\n }, new Array<InstanceKey>()),\r\n };\r\n },\r\n });\r\n\r\n const { total, items } = await generator.createAsyncIteratorResponse();\r\n return {\r\n total,\r\n async *items() {\r\n yield* items;\r\n },\r\n };\r\n }\r\n\r\n /** Retrieves display label definition of specific item. */\r\n public async getDisplayLabelDefinition(\r\n requestOptions: DisplayLabelRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute,\r\n ): Promise<LabelDefinition> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions({ ...requestOptions });\r\n const result = await this._requestsHandler.getDisplayLabelDefinition(rpcOptions);\r\n return this._localizationHelper.getLocalizedLabelDefinition(result);\r\n }\r\n\r\n /** Retrieves display label definition of specific items. */\r\n public async getDisplayLabelDefinitionsIterator(\r\n requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<{ total: number; items: AsyncIterableIterator<LabelDefinition> }> {\r\n this.startIModelInitialization(requestOptions.imodel);\r\n const rpcOptions = this.toRpcTokenOptions({ ...requestOptions });\r\n const generator = new StreamedResponseGenerator({\r\n ...requestOptions,\r\n getBatch: async (page) => {\r\n const partialKeys = !page.start ? rpcOptions.keys : rpcOptions.keys.slice(page.start);\r\n const result = await this._requestsHandler.getPagedDisplayLabelDefinitions({ ...rpcOptions, keys: partialKeys });\r\n result.items = this._localizationHelper.getLocalizedLabelDefinitions(result.items);\r\n return result;\r\n },\r\n });\r\n\r\n return generator.createAsyncIteratorResponse();\r\n }\r\n\r\n /**\r\n * Retrieves display label definition of specific items.\r\n * @deprecated in 4.5. Use [[getDisplayLabelDefinitionsIterator]] instead.\r\n */\r\n public async getDisplayLabelDefinitions(\r\n requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions,\r\n ): Promise<LabelDefinition[]> {\r\n const { items } = await this.getDisplayLabelDefinitionsIterator(requestOptions);\r\n return collect(items);\r\n }\r\n}\r\n\r\nconst getDescriptorOverrides = (descriptorOrOverrides: Descriptor | DescriptorOverrides): DescriptorOverrides => {\r\n if (descriptorOrOverrides instanceof Descriptor) {\r\n return descriptorOrOverrides.createDescriptorOverrides();\r\n }\r\n return descriptorOrOverrides;\r\n};\r\n\r\nconst stripTransientElementKeys = (keys: KeySet) => {\r\n if (!keys.some((key) => Key.isInstanceKey(key) && key.className === TRANSIENT_ELEMENT_CLASSNAME)) {\r\n return keys;\r\n }\r\n\r\n const copy = new KeySet();\r\n copy.add(keys, (key) => {\r\n // the callback is not going to be called with EntityProps as KeySet converts them\r\n // to InstanceKeys, but we want to keep the EntityProps case for correctness\r\n // istanbul ignore next\r\n const isTransient =\r\n (Key.isInstanceKey(key) && key.className === TRANSIENT_ELEMENT_CLASSNAME) ||\r\n (Key.isEntityProps(key) && key.classFullName === TRANSIENT_ELEMENT_CLASSNAME);\r\n return !isTransient;\r\n });\r\n return copy;\r\n};\r\n\r\nasync function collect<T>(iter: AsyncIterable<T>): Promise<T[]> {\r\n const result = new Array<T>();\r\n for await (const value of iter) {\r\n result.push(value);\r\n }\r\n return result;\r\n}\r\n"]}
|
package/lib/esm/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":"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
|
|
1
|
+
{"version":3,"file":"FavoritePropertiesManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -179,7 +179,7 @@ export class FavoritePropertiesManager {
|
|
|
179
179
|
*/
|
|
180
180
|
startConnectionInitialization(imodel) {
|
|
181
181
|
if (!this.isInitialized(imodel) && !this._imodelInitializationPromises.has(imodel)) {
|
|
182
|
-
// eslint-disable-next-line
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
183
183
|
this._imodelInitializationPromises.set(imodel, this.initializeConnection(imodel));
|
|
184
184
|
}
|
|
185
185
|
}
|
|
@@ -193,7 +193,7 @@ export class FavoritePropertiesManager {
|
|
|
193
193
|
}
|
|
194
194
|
let promise = this._imodelInitializationPromises.get(imodel);
|
|
195
195
|
if (!promise) {
|
|
196
|
-
// eslint-disable-next-line
|
|
196
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
197
197
|
promise = this.initializeConnection(imodel);
|
|
198
198
|
// Put the promise in the map to avoid possible multiple initializations from different promises.
|
|
199
199
|
this._imodelInitializationPromises.set(imodel, promise);
|
|
@@ -346,7 +346,7 @@ export class FavoritePropertiesManager {
|
|
|
346
346
|
*/
|
|
347
347
|
async hasAsync(field, imodel, scope) {
|
|
348
348
|
await this.ensureInitialized(imodel);
|
|
349
|
-
// eslint-disable-next-line
|
|
349
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
350
350
|
return this.has(field, imodel, scope);
|
|
351
351
|
}
|
|
352
352
|
/**
|
|
@@ -357,7 +357,7 @@ export class FavoritePropertiesManager {
|
|
|
357
357
|
*/
|
|
358
358
|
async sortFieldsAsync(imodel, fields) {
|
|
359
359
|
await this.ensureInitialized(imodel);
|
|
360
|
-
// eslint-disable-next-line
|
|
360
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
361
361
|
return this.sortFields(imodel, fields);
|
|
362
362
|
}
|
|
363
363
|
getFieldPriority(field, iTwinId, imodelId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePropertiesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAe,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD;;;GAGG;AACH,MAAM,CAAN,IAAY,uBAIX;AAJD,WAAY,uBAAuB;IACjC,yEAAM,CAAA;IACN,uEAAK,CAAA;IACL,yEAAM,CAAA;AACR,CAAC,EAJW,uBAAuB,KAAvB,uBAAuB,QAIlC;AAkCD;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IAoBpC,YAAmB,KAAqC;QAbxD,2DAA2D;QACpD,uBAAkB,GAAG,IAAI,OAAO,EAAc,CAAC;QA4BtD;;;WAGG;QACI,yBAAoB,GAAG,KAAK,EAAE,MAAwB,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;YAEhC,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;YACjG,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;gBACrG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAClE,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;gBAChH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3F,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC;QAEF;;;WAGG;QACK,8BAAyB,GAAG,KAAK,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;YAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;YAErF,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAkB,CAAC;YACjD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;YACvF,6EAA6E;YAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;YAEnG,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrD,IAAI,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5C,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,eAAe,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,IAAI;gBACV,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC;gBAC3C,gBAAgB,EAAE,IAAI,IAAI,EAAE;gBAC5B,QAAQ,EAAE,CAAC;aACZ,CAAC,CACH,CAAC;YAEF,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC;YACtC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC;QA+NF;;;;;;;WAOG;QACI,eAAU,GAAG,CAAC,MAAwB,EAAE,MAAe,EAAW,EAAE;YACzE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;YAElC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiB,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YAErG,MAAM,YAAY,GAAG,CAAC,IAAW,EAAE,KAAY,EAAU,EAAE;gBACzD,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;gBACpC,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;gBACrC,OAAO,EAAE,GAAG,EAAE;oBACZ,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,EAAE,GAAG,EAAE;wBACP,CAAC,CAAC,CAAC,CAAC;wBACJ,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;4BAC9B,CAAC,CAAC,CAAC,CAAC,mEAAmE;4BACvE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;gCAC9B,CAAC,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,CAAC;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC,CAAC;QAwBM,2BAAsB,GAAG,KAAK,EAAE,MAAwB,EAAE,aAA0B,EAA8C,EAAE;YAC1I,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;YAElC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,WAA8C,CAAC;YACnD,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;YACzC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAClC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3C,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,MAAM,KAAK,GAAG;;;;;;;iEAO+C,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACnI,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC5G,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,EAAE,CAAC;oBACxC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;gBACtC,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;QAtYA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAiC,CAAC;QACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAiC,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAyC,CAAC;QACzE,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAA6C,CAAC;QACtF,IAAI,CAAC,6BAA6B,GAAG,IAAI,GAAG,EAAmC,CAAC;IAClF,CAAC;IAEM,OAAO;QACZ,uBAAuB;QACvB,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IA8DO,aAAa,CAAC,MAAwB;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACK,sBAAsB,CAAC,MAAwB;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,CACT,wDAAwD,QAAQ,iBAAiB,OAAO,wEAAwE,CACjK,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,6BAA6B,CAAC,MAAwB;QAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACnF,mDAAmD;YACnD,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,iBAAiB,CAAC,MAAwB;QACrD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,mDAAmD;YACnD,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAE5C,iGAAiG;YACjG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,CAAC;QAEd,0HAA0H;QAC1H,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAAC,KAAY,EAAE,MAAwB,EAAE,KAA8B;QACrF,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAElC,IAAI,kBAAyC,CAAC;QAC9C,IAAI,cAAoE,CAAC;QACzE,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,uBAAuB,CAAC,MAAM;gBACjC,kBAAkB,GAAG,IAAI,CAAC,iBAAkB,CAAC;gBAC7C,cAAc,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAChF,MAAM;YACR,KAAK,uBAAuB,CAAC,KAAK;gBAChC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;gBACzD,cAAc,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACzF,MAAM;YACR;gBACE,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;gBACnF,cAAc,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,kBAAkB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAyB,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAE/C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;YACrF,aAAa,CAAC,eAAe,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YAElF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,KAAY,EAAE,MAAwB,EAAE,KAA8B;QACxF,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAElC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,aAAa,GAA6G,EAAE,CAAC;QACnI,aAAa,CAAC,IAAI,CAAC;YACjB,UAAU,EAAE,IAAI,CAAC,iBAAkB;YACnC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,KAAK,KAAK,uBAAuB,CAAC,KAAK,IAAI,KAAK,KAAK,uBAAuB,CAAC,MAAM,EAAE,CAAC;YACxF,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE;gBAC/C,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC;aAC9E,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,KAAK,uBAAuB,CAAC,MAAM,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE;gBACzE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;aACxF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;YACpC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7B,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;QACrF,gBAAgB,CAAC,eAAe,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAElF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK,CAAC,MAAwB,EAAE,KAA8B;QACzE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAElC,IAAI,kBAAyC,CAAC;QAC9C,IAAI,cAAmC,CAAC;QACxC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,uBAAuB,CAAC,MAAM;gBACjC,kBAAkB,GAAG,IAAI,CAAC,iBAAkB,CAAC;gBAC7C,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,EAAoB,CAAC,CAAC;gBACvF,MAAM;YACR,KAAK,uBAAuB,CAAC,KAAK;gBAChC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;gBACzD,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,EAAoB,EAAE,OAAO,CAAC,CAAC;gBAChG,MAAM;YACR;gBACE,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;gBACnF,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,EAAoB,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;;OAOG;IACI,GAAG,CAAC,KAAY,EAAE,MAAwB,EAAE,KAA8B;QAC/E,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAElC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,CACL,SAAS,CAAC,IAAI,CAAC,iBAAkB,EAAE,UAAU,CAAC;YAC9C,CAAC,KAAK,KAAK,uBAAuB,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,UAAU,CAAC,CAAC;YACxG,CAAC,KAAK,KAAK,uBAAuB,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC,CACnI,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,QAAQ,CAAC,KAAY,EAAE,MAAwB,EAAE,KAA8B;QAC1F,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,mDAAmD;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAmCD;;;;;OAKG;IACI,KAAK,CAAC,eAAe,CAAC,MAAwB,EAAE,MAAe;QACpE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,mDAAmD;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,gBAAgB,CAAC,KAAY,EAAE,OAAe,EAAE,QAAgB;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;QAChF,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QACD,MAAM,UAAU,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IA2CD;;;;;OAKG;IACI,KAAK,CAAC,mBAAmB,CAAC,MAAwB,EAAE,KAAY,EAAE,UAA6B,EAAE,aAAsB;QAC5H;;;;;;;;;;;WAWG;QACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;QAElC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAE,CAAC;QAEnF,MAAM,sBAAsB,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC1C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,CAAC,CAAC;QAEF,MAAM,EACJ,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GACtC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,cAAuD,CAAC;QAC5D,IAAI,mBAAmB,CAAC;QACxB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,cAAc,GAAG,SAAS,CAAC;YAC3B,mBAAmB,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,CAAC;gBACC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE;aACjE,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,SAAoB,CAAC,CAAC,mDAAmD;QAC7E,IAAI,UAAkB,CAAC;QACvB,IAAI,cAAc,GAAG,mBAAmB,EAAE,CAAC;YACzC,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG,mBAAmB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;YAC3B,UAAU,GAAG,mBAAmB,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,gBAAgB,GAAgB,aAAa,CAAC,MAAM,CAAC,CAAC,UAAuB,EAAE,EAAE,EAAE,EAAE;YACzF,IAAI,EAAE,CAAC,eAAe,EAAE,CAAC;gBACvB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;QACtB,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAEvF,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAC5C,CAAC,KAAoC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EAC/G,EAAE,CACH,CAAC;QACF,MAAM,oBAAoB,GAAkC,EAAE,CAAC,CAAC,oFAAoF;QACpJ,MAAM,eAAe,GAAiB,IAAI,GAAG,EAAW,CAAC,CAAC,6BAA6B;QAEvF,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,KAAK,cAAc,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAC9D,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAEvC,oHAAoH;YACpH,IAAI,aAAa,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAI,OAAO,EAAE,CAAC;gBACZ,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,MAAM,cAAc,GAAG,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACzH,IAAI,cAAc,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACjC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,KAAK,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAClH,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,KAAK,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAClH,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAErE,mBAAmB,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAChG,aAAa,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC;QACtE,aAAa,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC;QAEvI,4BAA4B;QAC5B,IAAI,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;QACpC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;;AAjiBD;;;GAGG;AACW,qDAA2B,GAAG,EAAE,AAAL,CAAM;AAgiBjD,IAAK,SAGJ;AAHD,WAAK,SAAS;IACZ,sCAAO,CAAA;IACP,yCAAQ,CAAA;AACV,CAAC,EAHI,SAAS,KAAT,SAAS,QAGb;AAED,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,QAAgB,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;AAEtF,MAAM,+BAA+B,GAAG,CAAC,KAAsB,EAAE,EAAE;IACjE,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CACzB,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,yBAAyB,CAAC,2BAA2B,GAAG,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CACtJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CAAC,KAAyB,EAAE,EAAE;IACtE,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,GAAG,yBAAyB,CAAC,2BAA2B,GAAG,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAClH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAqC,EAAE,EAAE;IACjE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACtC,+GAA+G;YAC/G,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,YAA8B,EAAsB,EAAE;IAClF,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,YAAY;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,mFAAmF;QACnF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,wCAAwC;IACxC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAyB,EAAE;IACnE,MAAM,UAAU,GAA0B,IAAI,GAAG,EAAoB,CAAC;IACtE,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC9B,+BAA+B,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACxC,UAAU,CAAC,GAAG,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC,2BAA2B,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAgB,EAAE,MAAmB,EAAE,EAAE;IAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAmC,EAAE,MAAqC,EAAE,EAAE;IACnG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,EAAE,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,SAAwC,EAAE,QAAuC,EAAE,EAAE;IAC7G,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,0BAA0B;QAC1B,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAiC,EAAE;IACnF,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,iCAAiC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO;YACL;gBACE,eAAe,EAAE,oBAAoB,CAAC,YAAY,CAAC;gBACnD,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,CAAC;gBACX,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC9B,OAAO,+BAA+B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnE,eAAe,EAAE,oBAAoB,CAAC,YAAY,CAAC;YACnD,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,IAAI,IAAI,EAAE;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO;QACL;YACE,eAAe,EAAE,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,IAAI,IAAI,EAAE;SAC7B;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,UAAyC,EAAiC,EAAE;IACpH,MAAM,eAAe,GAAkC,EAAE,CAAC;IAC1D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;QACvC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACjE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC9B,+BAA+B,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACxC,eAAe,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,UAAyC,EAAE,EAAE,CAC3E,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,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 { BeEvent, IDisposable, isIDisposable } from \"@itwin/core-bentley\";\r\nimport { QueryRowFormat } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { ClassId, Field, NestedContentField, PropertiesField } from \"@itwin/presentation-common\";\r\nimport { IFavoritePropertiesStorage } from \"./FavoritePropertiesStorage\";\r\n\r\n/**\r\n * Scopes that favorite properties can be stored in.\r\n * @public\r\n */\r\nexport enum FavoritePropertiesScope {\r\n Global,\r\n ITwin,\r\n IModel,\r\n}\r\n\r\n/**\r\n * Format:\r\n * Regular property - [{path from parent class}-]{schema name}:{class name}:{property name}.\r\n * Nested property - [{path from parent class}-]{content class schema name}:{content class name}.\r\n * Primitive property - {field name}.\r\n * @public\r\n */\r\nexport type PropertyFullName = string;\r\n\r\n/**\r\n * Holds the information of favorite properties ordering.\r\n * @public\r\n */\r\nexport interface FavoritePropertiesOrderInfo {\r\n parentClassName: string | undefined;\r\n name: PropertyFullName;\r\n priority: number;\r\n orderedTimestamp: Date;\r\n}\r\n\r\n/**\r\n * Properties for initializing [[FavoritePropertiesManager]]\r\n * @public\r\n */\r\nexport interface FavoritePropertiesManagerProps {\r\n /**\r\n * Implementation of a persistence layer for storing favorite properties and their order.\r\n * @public\r\n */\r\n storage: IFavoritePropertiesStorage;\r\n}\r\n\r\n/**\r\n * The favorite property manager which lets to store favorite properties\r\n * and check if field contains favorite properties.\r\n *\r\n * @public\r\n */\r\nexport class FavoritePropertiesManager implements IDisposable {\r\n /**\r\n * Used in tests to avoid collisions between multiple runs using the same storage\r\n * @internal\r\n */\r\n public static FAVORITES_IDENTIFIER_PREFIX = \"\";\r\n\r\n /** Event raised after favorite properties have changed. */\r\n public onFavoritesChanged = new BeEvent<() => void>();\r\n\r\n private _storage: IFavoritePropertiesStorage;\r\n private _globalProperties: Set<PropertyFullName> | undefined;\r\n private _iTwinProperties: Map<string, Set<PropertyFullName>>;\r\n private _imodelProperties: Map<string, Set<PropertyFullName>>;\r\n private _imodelBaseClassesByClass: Map<string, { [className: string]: string[] }>;\r\n private _imodelInitializationPromises: Map<IModelConnection, Promise<void>>;\r\n\r\n /** Property order is saved only in iModel scope */\r\n private _propertiesOrder: Map<string, FavoritePropertiesOrderInfo[]>;\r\n\r\n public constructor(props: FavoritePropertiesManagerProps) {\r\n this._storage = props.storage;\r\n this._iTwinProperties = new Map<string, Set<PropertyFullName>>();\r\n this._imodelProperties = new Map<string, Set<PropertyFullName>>();\r\n this._propertiesOrder = new Map<string, FavoritePropertiesOrderInfo[]>();\r\n this._imodelBaseClassesByClass = new Map<string, { [className: string]: string[] }>();\r\n this._imodelInitializationPromises = new Map<IModelConnection, Promise<void>>();\r\n }\r\n\r\n public dispose() {\r\n // istanbul ignore else\r\n if (isIDisposable(this._storage)) {\r\n this._storage.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize favorite properties for the provided IModelConnection.\r\n * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].\r\n */\r\n public initializeConnection = async (imodel: IModelConnection) => {\r\n const imodelId = imodel.iModelId!;\r\n const iTwinId = imodel.iTwinId!;\r\n\r\n if (this._globalProperties === undefined) {\r\n this._globalProperties = (await this._storage.loadProperties()) || new Set<PropertyFullName>();\r\n }\r\n\r\n if (!this._iTwinProperties.has(iTwinId)) {\r\n const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set<PropertyFullName>();\r\n this._iTwinProperties.set(iTwinId, iTwinProperties);\r\n }\r\n\r\n if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {\r\n const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set<PropertyFullName>();\r\n this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);\r\n }\r\n const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];\r\n this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);\r\n await this._adjustPropertyOrderInfos(iTwinId, imodelId);\r\n };\r\n\r\n /**\r\n * Function that removes order information of properties that are no longer\r\n * favorited and adds missing order information for favorited properties.\r\n */\r\n private _adjustPropertyOrderInfos = async (iTwinId: string, imodelId: string) => {\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n\r\n const globalProperties = this._globalProperties!;\r\n const iTwinProperties = this._iTwinProperties.get(iTwinId)!;\r\n const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n // favorite property infos that need to be added to the propertiesOrder array\r\n const infosToAdd = new Set<string>([...globalProperties, ...iTwinProperties, ...imodelProperties]);\r\n\r\n for (let i = propertiesOrder.length - 1; i >= 0; i--) {\r\n if (infosToAdd.has(propertiesOrder[i].name)) {\r\n infosToAdd.delete(propertiesOrder[i].name);\r\n } else {\r\n propertiesOrder.splice(i, 1);\r\n }\r\n }\r\n\r\n infosToAdd.forEach((info) =>\r\n propertiesOrder.push({\r\n name: info,\r\n parentClassName: getPropertyClassName(info),\r\n orderedTimestamp: new Date(),\r\n priority: 0,\r\n }),\r\n );\r\n\r\n let priority = propertiesOrder.length;\r\n propertiesOrder.forEach((oi) => (oi.priority = priority--));\r\n };\r\n\r\n private isInitialized(imodel: IModelConnection): boolean {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n return this._imodelProperties.has(getiModelInfo(iTwinId, imodelId));\r\n }\r\n\r\n /**\r\n * Checks if [[FavoritePropertiesManager.initializeConnection]] has been called for a given imodel.\r\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\r\n */\r\n private validateInitialization(imodel: IModelConnection) {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n if (!this.isInitialized(imodel)) {\r\n throw Error(\r\n `Favorite properties are not initialized for iModel: '${imodelId}', in iTwin: '${iTwinId}'. Call initializeConnection() with an IModelConnection to initialize.`,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Calls [[FavoritePropertiesManager.initializeConnection]] and caches the promise which should be awaited by calling [[FavoritePropertiesManager.ensureInitialized]].\r\n * @internal\r\n */\r\n public startConnectionInitialization(imodel: IModelConnection) {\r\n if (!this.isInitialized(imodel) && !this._imodelInitializationPromises.has(imodel)) {\r\n // eslint-disable-next-line deprecation/deprecation\r\n this._imodelInitializationPromises.set(imodel, this.initializeConnection(imodel));\r\n }\r\n }\r\n\r\n /**\r\n * Performs the initialization process or finishes the one that was started by [[FavoritePropertiesManager.startConnectionInitialization]].\r\n * @internal\r\n */\r\n public async ensureInitialized(imodel: IModelConnection) {\r\n if (this.isInitialized(imodel)) {\r\n return;\r\n }\r\n\r\n let promise = this._imodelInitializationPromises.get(imodel);\r\n if (!promise) {\r\n // eslint-disable-next-line deprecation/deprecation\r\n promise = this.initializeConnection(imodel);\r\n\r\n // Put the promise in the map to avoid possible multiple initializations from different promises.\r\n this._imodelInitializationPromises.set(imodel, promise);\r\n }\r\n\r\n await promise;\r\n\r\n // Remove this promise from the map, because the next time this method is called, `this.isInitialized` should return true.\r\n this._imodelInitializationPromises.delete(imodel);\r\n }\r\n\r\n /**\r\n * Adds favorite properties into a certain scope.\r\n * @param field Field that contains properties. If field contains multiple properties, all of them will be favorited.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to put the favorite properties into.\r\n */\r\n public async add(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n let favoriteProperties: Set<PropertyFullName>;\r\n let saveProperties: (properties: Set<PropertyFullName>) => Promise<void>;\r\n switch (scope) {\r\n case FavoritePropertiesScope.Global:\r\n favoriteProperties = this._globalProperties!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties);\r\n break;\r\n case FavoritePropertiesScope.ITwin:\r\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId);\r\n break;\r\n default:\r\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId);\r\n }\r\n\r\n const countBefore = favoriteProperties.size;\r\n const fieldInfos = getFieldInfos(field);\r\n fieldInfos.forEach((info) => favoriteProperties.add(info));\r\n if (favoriteProperties.size !== countBefore) {\r\n const saves: Array<Promise<void>> = [];\r\n saves.push(saveProperties(favoriteProperties));\r\n\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n addOrderInfos(propertiesOrder, createFieldOrderInfos(field));\r\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\r\n\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n }\r\n\r\n /**\r\n * Removes favorite properties from a scope specified and all the more general scopes.\r\n * @param field Field that contains properties. If field contains multiple properties, all of them will be un-favorited.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to remove the favorite properties from. It also removes from more general scopes.\r\n */\r\n public async remove(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldInfos = getFieldInfos(field);\r\n const workingScopes: Array<{ properties: Set<PropertyFullName>; save: (properties: Set<PropertyFullName>) => Promise<void> }> = [];\r\n workingScopes.push({\r\n properties: this._globalProperties!,\r\n save: async (properties) => this._storage.saveProperties(properties),\r\n });\r\n if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {\r\n workingScopes.push({\r\n properties: this._iTwinProperties.get(iTwinId)!,\r\n save: async (properties) => this._storage.saveProperties(properties, iTwinId),\r\n });\r\n }\r\n if (scope === FavoritePropertiesScope.IModel) {\r\n workingScopes.push({\r\n properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!,\r\n save: async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId),\r\n });\r\n }\r\n\r\n const saves: Array<Promise<void>> = [];\r\n let favoritesChanged = false;\r\n for (const { properties, save } of workingScopes) {\r\n const countBefore = properties.size;\r\n fieldInfos.forEach((info) => properties.delete(info));\r\n if (properties.size !== countBefore) {\r\n saves.push(save(properties));\r\n favoritesChanged = true;\r\n }\r\n }\r\n if (!favoritesChanged) {\r\n return;\r\n }\r\n\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n removeOrderInfos(propertiesOrder, createFieldOrderInfos(field));\r\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\r\n\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n\r\n /**\r\n * Removes all favorite properties from a certain scope.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to remove the favorite properties from.\r\n */\r\n public async clear(imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n let favoriteProperties: Set<PropertyFullName>;\r\n let saveProperties: () => Promise<void>;\r\n switch (scope) {\r\n case FavoritePropertiesScope.Global:\r\n favoriteProperties = this._globalProperties!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>());\r\n break;\r\n case FavoritePropertiesScope.ITwin:\r\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId);\r\n break;\r\n default:\r\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId, imodelId);\r\n }\r\n\r\n if (favoriteProperties.size === 0) {\r\n return;\r\n }\r\n\r\n favoriteProperties.clear();\r\n const saves: Array<Promise<void>> = [];\r\n saves.push(saveProperties());\r\n saves.push(this._adjustPropertyOrderInfos(iTwinId, imodelId));\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n\r\n /**\r\n * Check if field contains at least one favorite property.\r\n * @param field Field that contains properties.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\r\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\r\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.hasAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\r\n */\r\n public has(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): boolean {\r\n this.validateInitialization(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldInfos = getFieldInfos(field);\r\n return (\r\n setHasAny(this._globalProperties!, fieldInfos) ||\r\n (scope !== FavoritePropertiesScope.Global && setHasAny(this._iTwinProperties.get(iTwinId)!, fieldInfos)) ||\r\n (scope === FavoritePropertiesScope.IModel && setHasAny(this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!, fieldInfos))\r\n );\r\n }\r\n\r\n /**\r\n * Check if field contains at least one favorite property.\r\n * @param field Field that contains properties.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\r\n */\r\n public async hasAsync(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<boolean> {\r\n await this.ensureInitialized(imodel);\r\n // eslint-disable-next-line deprecation/deprecation\r\n return this.has(field, imodel, scope);\r\n }\r\n\r\n /**\r\n * Sorts an array of fields with respect to favorite property order.\r\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\r\n * @param imodel IModelConnection.\r\n * @param fields Array of Field's that needs to be sorted.\r\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\r\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\r\n */\r\n public sortFields = (imodel: IModelConnection, fields: Field[]): Field[] => {\r\n this.validateInitialization(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldPriority = new Map<Field, number>();\r\n fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));\r\n\r\n const sortFunction = (left: Field, right: Field): number => {\r\n const lp = fieldPriority.get(left)!;\r\n const rp = fieldPriority.get(right)!;\r\n return lp < rp\r\n ? 1\r\n : lp > rp\r\n ? -1\r\n : left.priority < right.priority\r\n ? 1 // if favorite fields have equal priorities, sort by field priority\r\n : left.priority > right.priority\r\n ? -1\r\n : left.name.localeCompare(right.name);\r\n };\r\n\r\n return fields.sort(sortFunction);\r\n };\r\n\r\n /**\r\n * Sorts an array of fields with respect to favorite property order.\r\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\r\n * @param imodel IModelConnection.\r\n * @param fields Array of Field's that needs to be sorted.\r\n */\r\n public async sortFieldsAsync(imodel: IModelConnection, fields: Field[]): Promise<Field[]> {\r\n await this.ensureInitialized(imodel);\r\n // eslint-disable-next-line deprecation/deprecation\r\n return this.sortFields(imodel, fields);\r\n }\r\n\r\n private getFieldPriority(field: Field, iTwinId: string, imodelId: string): number {\r\n const orderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n const fieldOrderInfos = getFieldOrderInfos(field, orderInfos);\r\n if (fieldOrderInfos.length === 0) {\r\n return -1;\r\n }\r\n const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);\r\n return mostRecent.priority;\r\n }\r\n\r\n private _getBaseClassesByClass = async (imodel: IModelConnection, neededClasses: Set<string>): Promise<{ [className: string]: string[] }> => {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const imodelInfo = getiModelInfo(iTwinId, imodelId);\r\n let baseClasses: { [className: string]: string[] };\r\n if (this._imodelBaseClassesByClass.has(imodelInfo)) {\r\n baseClasses = this._imodelBaseClassesByClass.get(imodelInfo)!;\r\n } else {\r\n this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));\r\n }\r\n\r\n const missingClasses = new Set<string>();\r\n neededClasses.forEach((className) => {\r\n if (!baseClasses.hasOwnProperty(className)) {\r\n missingClasses.add(className);\r\n }\r\n });\r\n if (missingClasses.size === 0) {\r\n return baseClasses;\r\n }\r\n\r\n const query = `\r\n SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS \"ClassFullName\", (baseSchema.Name || ':' || baseClass.Name) AS \"BaseClassFullName\"\r\n FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels\r\n INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId\r\n INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id\r\n INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\r\n INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\r\n WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(\",\")})`;\r\n const reader = imodel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n while (await reader.step()) {\r\n const row = reader.current.toRow();\r\n if (!(row.classFullName in baseClasses)) {\r\n baseClasses[row.classFullName] = [];\r\n }\r\n baseClasses[row.classFullName].push(row.baseClassFullName);\r\n }\r\n return baseClasses;\r\n };\r\n\r\n /** Changes field properties priorities to lower than another fields priority\r\n * @param imodel IModelConnection.\r\n * @param field Field that priority is being changed.\r\n * @param afterField Field that goes before the moved field. If undefined the moving field is changed to the highest priority (to the top).\r\n * @param visibleFields Array of fields to move the field in.\r\n */\r\n public async changeFieldPriority(imodel: IModelConnection, field: Field, afterField: Field | undefined, visibleFields: Field[]) {\r\n /**\r\n * How it works:\r\n * 1. Gets the orderInfo's for `field` (`orderInfo`) and `afterField` (`afterOrderInfo`) by selecting the most recent order informations for each field\r\n * 2. Iterates all orderInfo's that are in between `afterOrderInfo` and `orderInfo` when sorted by priority\r\n * 3. For each iterated orderInfo it checks if it is relevant:\r\n * 3.1. If orderInfo belongs to a primitive property, orderInfo is relevant\r\n * 3.2. If orderInfo's field is visible, orderInfo is relevant\r\n * 3.3. If orderInfo's class has a base class or itself in previously labeled relevant orderInfo's, orderInfo is relevant\r\n * 3.4. If 3.1 - 3.3 don't pass, orderInfo is irrelevant\r\n * 4. Irrelevant orderInfos's get moved after `orderInfo` (depends on the direction)\r\n * 5. All `field` orderInfo's get moved after `afterOrderInfo`\r\n */\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n if (field === afterField) {\r\n throw Error(\"`field` can not be the same as `afterField`.\");\r\n }\r\n\r\n const allOrderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n\r\n const findFieldOrderInfoData = (f: Field) => {\r\n if (!visibleFields.includes(f)) {\r\n throw Error(\"Field is not contained in visible fields.\");\r\n }\r\n const infos = getFieldOrderInfos(f, allOrderInfos);\r\n\r\n if (infos.length === 0) {\r\n throw Error(\"Field has no property order information.\");\r\n }\r\n const info = getMostRecentOrderInfo(infos);\r\n const index = allOrderInfos.indexOf(info);\r\n return { infos, mostRecent: { info, index } };\r\n };\r\n\r\n const {\r\n infos: movingOrderInfos,\r\n mostRecent: { index: orderInfoIndex },\r\n } = findFieldOrderInfoData(field);\r\n\r\n let afterOrderInfo: FavoritePropertiesOrderInfo | undefined;\r\n let afterOrderInfoIndex;\r\n if (afterField === undefined) {\r\n afterOrderInfo = undefined;\r\n afterOrderInfoIndex = -1;\r\n } else {\r\n ({\r\n mostRecent: { info: afterOrderInfo, index: afterOrderInfoIndex },\r\n } = findFieldOrderInfoData(afterField));\r\n }\r\n\r\n let direction: Direction; // where to go from `afterOrderInfo` to `orderInfo`\r\n let startIndex: number;\r\n if (orderInfoIndex < afterOrderInfoIndex) {\r\n direction = Direction.Up;\r\n startIndex = afterOrderInfoIndex;\r\n } else {\r\n direction = Direction.Down;\r\n startIndex = afterOrderInfoIndex + 1;\r\n }\r\n\r\n const neededClassNames: Set<string> = allOrderInfos.reduce((classNames: Set<string>, oi) => {\r\n if (oi.parentClassName) {\r\n classNames.add(oi.parentClassName);\r\n }\r\n return classNames;\r\n }, new Set<string>());\r\n const baseClassesByClass = await this._getBaseClassesByClass(imodel, neededClassNames);\r\n\r\n const visibleOrderInfos = visibleFields.reduce(\r\n (union: FavoritePropertiesOrderInfo[], currField) => union.concat(getFieldOrderInfos(currField, allOrderInfos)),\r\n [],\r\n );\r\n const irrelevantOrderInfos: FavoritePropertiesOrderInfo[] = []; // orderInfos's that won't change their logical order in respect to other properties\r\n const relevantClasses: Set<ClassId> = new Set<ClassId>(); // currently relevant classes\r\n\r\n for (let i = startIndex; i !== orderInfoIndex; i += direction) {\r\n const currOrderInfo = allOrderInfos[i];\r\n\r\n // primitive properties are always relevant, because we can't determine their relevance based on the class hierarchy\r\n if (currOrderInfo.parentClassName === undefined) {\r\n continue;\r\n }\r\n\r\n const visible = visibleOrderInfos.includes(currOrderInfo);\r\n if (visible) {\r\n relevantClasses.add(currOrderInfo.parentClassName);\r\n continue;\r\n }\r\n\r\n const hasBaseClasses = baseClassesByClass[currOrderInfo.parentClassName].some((classId) => relevantClasses.has(classId));\r\n if (hasBaseClasses) {\r\n continue;\r\n }\r\n\r\n if (direction === Direction.Down) {\r\n irrelevantOrderInfos.push(currOrderInfo);\r\n } else {\r\n irrelevantOrderInfos.unshift(currOrderInfo);\r\n }\r\n }\r\n\r\n // remove irrelevantOrderInfo's to add them after the `orderInfo`\r\n irrelevantOrderInfos.forEach((foi) => {\r\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\r\n allOrderInfos.splice(index, 1);\r\n });\r\n\r\n // remove movingOrderInfos's to add them after the `afterOrderInfo`\r\n movingOrderInfos.forEach((foi) => {\r\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\r\n allOrderInfos.splice(index, 1);\r\n });\r\n movingOrderInfos.forEach((oi) => (oi.orderedTimestamp = new Date()));\r\n\r\n afterOrderInfoIndex = afterOrderInfo === undefined ? -1 : allOrderInfos.indexOf(afterOrderInfo);\r\n allOrderInfos.splice(afterOrderInfoIndex + 1, 0, ...movingOrderInfos);\r\n allOrderInfos.splice(afterOrderInfoIndex + 1 + (direction === Direction.Up ? movingOrderInfos.length : 0), 0, ...irrelevantOrderInfos);\r\n\r\n // reassign priority numbers\r\n let priority = allOrderInfos.length;\r\n allOrderInfos.forEach((oi) => (oi.priority = priority--));\r\n\r\n await this._storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n}\r\n\r\nenum Direction {\r\n Up = -1,\r\n Down = 1,\r\n}\r\n\r\nconst getiModelInfo = (iTwinId: string, imodelId: string) => `${iTwinId}/${imodelId}`;\r\n\r\nconst getPropertiesFieldPropertyNames = (field: PropertiesField) => {\r\n const nestingPrefix = getNestingPrefix(field.parent);\r\n return field.properties.map(\r\n (property) => `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${property.property.classInfo.name}:${property.property.name}`,\r\n );\r\n};\r\n\r\nconst getNestedContentFieldPropertyName = (field: NestedContentField) => {\r\n const nestingPrefix = getNestingPrefix(field);\r\n return `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${field.contentClassInfo.name}`;\r\n};\r\n\r\nconst getNestingPrefix = (field: NestedContentField | undefined) => {\r\n const path: string[] = [];\r\n let curr = field;\r\n while (curr !== undefined) {\r\n curr.pathToPrimaryClass.forEach((rel) => {\r\n // Relationship directions are reversed, because we are generating a relationship list starting from the parent\r\n path.push(`${rel.isForwardRelationship ? \"B\" : \"F\"}:${rel.relationshipInfo.name}`);\r\n path.push(rel.targetClassInfo.name);\r\n });\r\n curr = curr.parent;\r\n }\r\n if (path.length === 0) {\r\n return \"\";\r\n }\r\n\r\n path.reverse();\r\n return `${path.join(\"-\")}-`;\r\n};\r\n\r\nconst getPropertyClassName = (propertyName: PropertyFullName): string | undefined => {\r\n const propertyNameStart = propertyName.split(\"-\")[0];\r\n const parts = propertyNameStart.split(\":\").length;\r\n if (parts === 1) {\r\n // primitive\r\n return undefined;\r\n }\r\n if (parts === 2) {\r\n // nested property OR nested property parent class OR regular property parent class\r\n return propertyNameStart;\r\n }\r\n // regular property without parent class\r\n return propertyNameStart.substring(0, propertyName.lastIndexOf(\":\"));\r\n};\r\n\r\n/** @internal */\r\nexport const getFieldInfos = (field: Field): Set<PropertyFullName> => {\r\n const fieldInfos: Set<PropertyFullName> = new Set<PropertyFullName>();\r\n if (field.isPropertiesField()) {\r\n getPropertiesFieldPropertyNames(field).forEach((info) => fieldInfos.add(info));\r\n } else if (field.isNestedContentField()) {\r\n fieldInfos.add(getNestedContentFieldPropertyName(field));\r\n } else {\r\n fieldInfos.add(`${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${field.name}`);\r\n }\r\n return fieldInfos;\r\n};\r\n\r\nconst setHasAny = (set: Set<string>, lookup: Set<string>) => {\r\n for (const key of lookup) {\r\n if (set.has(key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst addOrderInfos = (dest: FavoritePropertiesOrderInfo[], source: FavoritePropertiesOrderInfo[]) => {\r\n source.forEach((si) => {\r\n const index = dest.findIndex((di) => di.name === si.name);\r\n if (index === -1) {\r\n si.orderedTimestamp = new Date();\r\n dest.push(si);\r\n }\r\n });\r\n let priority = dest.length;\r\n dest.forEach((info) => (info.priority = priority--));\r\n};\r\n\r\nconst removeOrderInfos = (container: FavoritePropertiesOrderInfo[], toRemove: FavoritePropertiesOrderInfo[]) => {\r\n toRemove.forEach((roi) => {\r\n const index = container.findIndex((oi) => oi.name === roi.name);\r\n /* istanbul ignore else */\r\n if (index >= 0) {\r\n container.splice(index, 1);\r\n }\r\n });\r\n};\r\n\r\n/** @internal */\r\nexport const createFieldOrderInfos = (field: Field): FavoritePropertiesOrderInfo[] => {\r\n if (field.isNestedContentField()) {\r\n const propertyName = getNestedContentFieldPropertyName(field);\r\n return [\r\n {\r\n parentClassName: getPropertyClassName(propertyName),\r\n name: propertyName,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n },\r\n ];\r\n }\r\n if (field.isPropertiesField()) {\r\n return getPropertiesFieldPropertyNames(field).map((propertyName) => ({\r\n parentClassName: getPropertyClassName(propertyName),\r\n name: propertyName,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n }));\r\n }\r\n return [\r\n {\r\n parentClassName: undefined,\r\n name: field.name,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n },\r\n ];\r\n};\r\n\r\nconst getFieldOrderInfos = (field: Field, orderInfos: FavoritePropertiesOrderInfo[]): FavoritePropertiesOrderInfo[] => {\r\n const fieldOrderInfos: FavoritePropertiesOrderInfo[] = [];\r\n const tryAddOrderInfo = (name: string) => {\r\n const fieldOrderInfo = orderInfos.find((oi) => oi.name === name);\r\n if (fieldOrderInfo !== undefined) {\r\n fieldOrderInfos.push(fieldOrderInfo);\r\n }\r\n };\r\n\r\n if (field.isPropertiesField()) {\r\n getPropertiesFieldPropertyNames(field).forEach(tryAddOrderInfo);\r\n } else if (field.isNestedContentField()) {\r\n tryAddOrderInfo(getNestedContentFieldPropertyName(field));\r\n } else {\r\n tryAddOrderInfo(field.name);\r\n }\r\n\r\n return fieldOrderInfos;\r\n};\r\n\r\nconst getMostRecentOrderInfo = (orderInfos: FavoritePropertiesOrderInfo[]) =>\r\n orderInfos.reduce((recent, curr) => (recent && recent.orderedTimestamp >= curr.orderedTimestamp ? recent : curr));\r\n"]}
|
|
1
|
+
{"version":3,"file":"FavoritePropertiesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.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 { BeEvent, IDisposable, isIDisposable } from \"@itwin/core-bentley\";\r\nimport { QueryRowFormat } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { ClassId, Field, NestedContentField, PropertiesField } from \"@itwin/presentation-common\";\r\nimport { IFavoritePropertiesStorage } from \"./FavoritePropertiesStorage\";\r\n\r\n/**\r\n * Scopes that favorite properties can be stored in.\r\n * @public\r\n */\r\nexport enum FavoritePropertiesScope {\r\n Global,\r\n ITwin,\r\n IModel,\r\n}\r\n\r\n/**\r\n * Format:\r\n * Regular property - [{path from parent class}-]{schema name}:{class name}:{property name}.\r\n * Nested property - [{path from parent class}-]{content class schema name}:{content class name}.\r\n * Primitive property - {field name}.\r\n * @public\r\n */\r\nexport type PropertyFullName = string;\r\n\r\n/**\r\n * Holds the information of favorite properties ordering.\r\n * @public\r\n */\r\nexport interface FavoritePropertiesOrderInfo {\r\n parentClassName: string | undefined;\r\n name: PropertyFullName;\r\n priority: number;\r\n orderedTimestamp: Date;\r\n}\r\n\r\n/**\r\n * Properties for initializing [[FavoritePropertiesManager]]\r\n * @public\r\n */\r\nexport interface FavoritePropertiesManagerProps {\r\n /**\r\n * Implementation of a persistence layer for storing favorite properties and their order.\r\n * @public\r\n */\r\n storage: IFavoritePropertiesStorage;\r\n}\r\n\r\n/**\r\n * The favorite property manager which lets to store favorite properties\r\n * and check if field contains favorite properties.\r\n *\r\n * @public\r\n */\r\nexport class FavoritePropertiesManager implements IDisposable {\r\n /**\r\n * Used in tests to avoid collisions between multiple runs using the same storage\r\n * @internal\r\n */\r\n public static FAVORITES_IDENTIFIER_PREFIX = \"\";\r\n\r\n /** Event raised after favorite properties have changed. */\r\n public onFavoritesChanged = new BeEvent<() => void>();\r\n\r\n private _storage: IFavoritePropertiesStorage;\r\n private _globalProperties: Set<PropertyFullName> | undefined;\r\n private _iTwinProperties: Map<string, Set<PropertyFullName>>;\r\n private _imodelProperties: Map<string, Set<PropertyFullName>>;\r\n private _imodelBaseClassesByClass: Map<string, { [className: string]: string[] }>;\r\n private _imodelInitializationPromises: Map<IModelConnection, Promise<void>>;\r\n\r\n /** Property order is saved only in iModel scope */\r\n private _propertiesOrder: Map<string, FavoritePropertiesOrderInfo[]>;\r\n\r\n public constructor(props: FavoritePropertiesManagerProps) {\r\n this._storage = props.storage;\r\n this._iTwinProperties = new Map<string, Set<PropertyFullName>>();\r\n this._imodelProperties = new Map<string, Set<PropertyFullName>>();\r\n this._propertiesOrder = new Map<string, FavoritePropertiesOrderInfo[]>();\r\n this._imodelBaseClassesByClass = new Map<string, { [className: string]: string[] }>();\r\n this._imodelInitializationPromises = new Map<IModelConnection, Promise<void>>();\r\n }\r\n\r\n public dispose() {\r\n // istanbul ignore else\r\n if (isIDisposable(this._storage)) {\r\n this._storage.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Initialize favorite properties for the provided IModelConnection.\r\n * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].\r\n */\r\n public initializeConnection = async (imodel: IModelConnection) => {\r\n const imodelId = imodel.iModelId!;\r\n const iTwinId = imodel.iTwinId!;\r\n\r\n if (this._globalProperties === undefined) {\r\n this._globalProperties = (await this._storage.loadProperties()) || new Set<PropertyFullName>();\r\n }\r\n\r\n if (!this._iTwinProperties.has(iTwinId)) {\r\n const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set<PropertyFullName>();\r\n this._iTwinProperties.set(iTwinId, iTwinProperties);\r\n }\r\n\r\n if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {\r\n const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set<PropertyFullName>();\r\n this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);\r\n }\r\n const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];\r\n this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);\r\n await this._adjustPropertyOrderInfos(iTwinId, imodelId);\r\n };\r\n\r\n /**\r\n * Function that removes order information of properties that are no longer\r\n * favorited and adds missing order information for favorited properties.\r\n */\r\n private _adjustPropertyOrderInfos = async (iTwinId: string, imodelId: string) => {\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n\r\n const globalProperties = this._globalProperties!;\r\n const iTwinProperties = this._iTwinProperties.get(iTwinId)!;\r\n const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n // favorite property infos that need to be added to the propertiesOrder array\r\n const infosToAdd = new Set<string>([...globalProperties, ...iTwinProperties, ...imodelProperties]);\r\n\r\n for (let i = propertiesOrder.length - 1; i >= 0; i--) {\r\n if (infosToAdd.has(propertiesOrder[i].name)) {\r\n infosToAdd.delete(propertiesOrder[i].name);\r\n } else {\r\n propertiesOrder.splice(i, 1);\r\n }\r\n }\r\n\r\n infosToAdd.forEach((info) =>\r\n propertiesOrder.push({\r\n name: info,\r\n parentClassName: getPropertyClassName(info),\r\n orderedTimestamp: new Date(),\r\n priority: 0,\r\n }),\r\n );\r\n\r\n let priority = propertiesOrder.length;\r\n propertiesOrder.forEach((oi) => (oi.priority = priority--));\r\n };\r\n\r\n private isInitialized(imodel: IModelConnection): boolean {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n return this._imodelProperties.has(getiModelInfo(iTwinId, imodelId));\r\n }\r\n\r\n /**\r\n * Checks if [[FavoritePropertiesManager.initializeConnection]] has been called for a given imodel.\r\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\r\n */\r\n private validateInitialization(imodel: IModelConnection) {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n if (!this.isInitialized(imodel)) {\r\n throw Error(\r\n `Favorite properties are not initialized for iModel: '${imodelId}', in iTwin: '${iTwinId}'. Call initializeConnection() with an IModelConnection to initialize.`,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Calls [[FavoritePropertiesManager.initializeConnection]] and caches the promise which should be awaited by calling [[FavoritePropertiesManager.ensureInitialized]].\r\n * @internal\r\n */\r\n public startConnectionInitialization(imodel: IModelConnection) {\r\n if (!this.isInitialized(imodel) && !this._imodelInitializationPromises.has(imodel)) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._imodelInitializationPromises.set(imodel, this.initializeConnection(imodel));\r\n }\r\n }\r\n\r\n /**\r\n * Performs the initialization process or finishes the one that was started by [[FavoritePropertiesManager.startConnectionInitialization]].\r\n * @internal\r\n */\r\n public async ensureInitialized(imodel: IModelConnection) {\r\n if (this.isInitialized(imodel)) {\r\n return;\r\n }\r\n\r\n let promise = this._imodelInitializationPromises.get(imodel);\r\n if (!promise) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n promise = this.initializeConnection(imodel);\r\n\r\n // Put the promise in the map to avoid possible multiple initializations from different promises.\r\n this._imodelInitializationPromises.set(imodel, promise);\r\n }\r\n\r\n await promise;\r\n\r\n // Remove this promise from the map, because the next time this method is called, `this.isInitialized` should return true.\r\n this._imodelInitializationPromises.delete(imodel);\r\n }\r\n\r\n /**\r\n * Adds favorite properties into a certain scope.\r\n * @param field Field that contains properties. If field contains multiple properties, all of them will be favorited.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to put the favorite properties into.\r\n */\r\n public async add(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n let favoriteProperties: Set<PropertyFullName>;\r\n let saveProperties: (properties: Set<PropertyFullName>) => Promise<void>;\r\n switch (scope) {\r\n case FavoritePropertiesScope.Global:\r\n favoriteProperties = this._globalProperties!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties);\r\n break;\r\n case FavoritePropertiesScope.ITwin:\r\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId);\r\n break;\r\n default:\r\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId);\r\n }\r\n\r\n const countBefore = favoriteProperties.size;\r\n const fieldInfos = getFieldInfos(field);\r\n fieldInfos.forEach((info) => favoriteProperties.add(info));\r\n if (favoriteProperties.size !== countBefore) {\r\n const saves: Array<Promise<void>> = [];\r\n saves.push(saveProperties(favoriteProperties));\r\n\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n addOrderInfos(propertiesOrder, createFieldOrderInfos(field));\r\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\r\n\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n }\r\n\r\n /**\r\n * Removes favorite properties from a scope specified and all the more general scopes.\r\n * @param field Field that contains properties. If field contains multiple properties, all of them will be un-favorited.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to remove the favorite properties from. It also removes from more general scopes.\r\n */\r\n public async remove(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldInfos = getFieldInfos(field);\r\n const workingScopes: Array<{ properties: Set<PropertyFullName>; save: (properties: Set<PropertyFullName>) => Promise<void> }> = [];\r\n workingScopes.push({\r\n properties: this._globalProperties!,\r\n save: async (properties) => this._storage.saveProperties(properties),\r\n });\r\n if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {\r\n workingScopes.push({\r\n properties: this._iTwinProperties.get(iTwinId)!,\r\n save: async (properties) => this._storage.saveProperties(properties, iTwinId),\r\n });\r\n }\r\n if (scope === FavoritePropertiesScope.IModel) {\r\n workingScopes.push({\r\n properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!,\r\n save: async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId),\r\n });\r\n }\r\n\r\n const saves: Array<Promise<void>> = [];\r\n let favoritesChanged = false;\r\n for (const { properties, save } of workingScopes) {\r\n const countBefore = properties.size;\r\n fieldInfos.forEach((info) => properties.delete(info));\r\n if (properties.size !== countBefore) {\r\n saves.push(save(properties));\r\n favoritesChanged = true;\r\n }\r\n }\r\n if (!favoritesChanged) {\r\n return;\r\n }\r\n\r\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n removeOrderInfos(propertiesOrder, createFieldOrderInfos(field));\r\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\r\n\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n\r\n /**\r\n * Removes all favorite properties from a certain scope.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to remove the favorite properties from.\r\n */\r\n public async clear(imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n let favoriteProperties: Set<PropertyFullName>;\r\n let saveProperties: () => Promise<void>;\r\n switch (scope) {\r\n case FavoritePropertiesScope.Global:\r\n favoriteProperties = this._globalProperties!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>());\r\n break;\r\n case FavoritePropertiesScope.ITwin:\r\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId);\r\n break;\r\n default:\r\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\r\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId, imodelId);\r\n }\r\n\r\n if (favoriteProperties.size === 0) {\r\n return;\r\n }\r\n\r\n favoriteProperties.clear();\r\n const saves: Array<Promise<void>> = [];\r\n saves.push(saveProperties());\r\n saves.push(this._adjustPropertyOrderInfos(iTwinId, imodelId));\r\n await Promise.all(saves);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n\r\n /**\r\n * Check if field contains at least one favorite property.\r\n * @param field Field that contains properties.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\r\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\r\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.hasAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\r\n */\r\n public has(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): boolean {\r\n this.validateInitialization(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldInfos = getFieldInfos(field);\r\n return (\r\n setHasAny(this._globalProperties!, fieldInfos) ||\r\n (scope !== FavoritePropertiesScope.Global && setHasAny(this._iTwinProperties.get(iTwinId)!, fieldInfos)) ||\r\n (scope === FavoritePropertiesScope.IModel && setHasAny(this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!, fieldInfos))\r\n );\r\n }\r\n\r\n /**\r\n * Check if field contains at least one favorite property.\r\n * @param field Field that contains properties.\r\n * @param imodel IModelConnection.\r\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\r\n */\r\n public async hasAsync(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<boolean> {\r\n await this.ensureInitialized(imodel);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this.has(field, imodel, scope);\r\n }\r\n\r\n /**\r\n * Sorts an array of fields with respect to favorite property order.\r\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\r\n * @param imodel IModelConnection.\r\n * @param fields Array of Field's that needs to be sorted.\r\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\r\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\r\n */\r\n public sortFields = (imodel: IModelConnection, fields: Field[]): Field[] => {\r\n this.validateInitialization(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const fieldPriority = new Map<Field, number>();\r\n fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));\r\n\r\n const sortFunction = (left: Field, right: Field): number => {\r\n const lp = fieldPriority.get(left)!;\r\n const rp = fieldPriority.get(right)!;\r\n return lp < rp\r\n ? 1\r\n : lp > rp\r\n ? -1\r\n : left.priority < right.priority\r\n ? 1 // if favorite fields have equal priorities, sort by field priority\r\n : left.priority > right.priority\r\n ? -1\r\n : left.name.localeCompare(right.name);\r\n };\r\n\r\n return fields.sort(sortFunction);\r\n };\r\n\r\n /**\r\n * Sorts an array of fields with respect to favorite property order.\r\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\r\n * @param imodel IModelConnection.\r\n * @param fields Array of Field's that needs to be sorted.\r\n */\r\n public async sortFieldsAsync(imodel: IModelConnection, fields: Field[]): Promise<Field[]> {\r\n await this.ensureInitialized(imodel);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this.sortFields(imodel, fields);\r\n }\r\n\r\n private getFieldPriority(field: Field, iTwinId: string, imodelId: string): number {\r\n const orderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n const fieldOrderInfos = getFieldOrderInfos(field, orderInfos);\r\n if (fieldOrderInfos.length === 0) {\r\n return -1;\r\n }\r\n const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);\r\n return mostRecent.priority;\r\n }\r\n\r\n private _getBaseClassesByClass = async (imodel: IModelConnection, neededClasses: Set<string>): Promise<{ [className: string]: string[] }> => {\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n const imodelInfo = getiModelInfo(iTwinId, imodelId);\r\n let baseClasses: { [className: string]: string[] };\r\n if (this._imodelBaseClassesByClass.has(imodelInfo)) {\r\n baseClasses = this._imodelBaseClassesByClass.get(imodelInfo)!;\r\n } else {\r\n this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));\r\n }\r\n\r\n const missingClasses = new Set<string>();\r\n neededClasses.forEach((className) => {\r\n if (!baseClasses.hasOwnProperty(className)) {\r\n missingClasses.add(className);\r\n }\r\n });\r\n if (missingClasses.size === 0) {\r\n return baseClasses;\r\n }\r\n\r\n const query = `\r\n SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS \"ClassFullName\", (baseSchema.Name || ':' || baseClass.Name) AS \"BaseClassFullName\"\r\n FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels\r\n INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId\r\n INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id\r\n INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\r\n INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\r\n WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(\",\")})`;\r\n const reader = imodel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\r\n while (await reader.step()) {\r\n const row = reader.current.toRow();\r\n if (!(row.classFullName in baseClasses)) {\r\n baseClasses[row.classFullName] = [];\r\n }\r\n baseClasses[row.classFullName].push(row.baseClassFullName);\r\n }\r\n return baseClasses;\r\n };\r\n\r\n /** Changes field properties priorities to lower than another fields priority\r\n * @param imodel IModelConnection.\r\n * @param field Field that priority is being changed.\r\n * @param afterField Field that goes before the moved field. If undefined the moving field is changed to the highest priority (to the top).\r\n * @param visibleFields Array of fields to move the field in.\r\n */\r\n public async changeFieldPriority(imodel: IModelConnection, field: Field, afterField: Field | undefined, visibleFields: Field[]) {\r\n /**\r\n * How it works:\r\n * 1. Gets the orderInfo's for `field` (`orderInfo`) and `afterField` (`afterOrderInfo`) by selecting the most recent order informations for each field\r\n * 2. Iterates all orderInfo's that are in between `afterOrderInfo` and `orderInfo` when sorted by priority\r\n * 3. For each iterated orderInfo it checks if it is relevant:\r\n * 3.1. If orderInfo belongs to a primitive property, orderInfo is relevant\r\n * 3.2. If orderInfo's field is visible, orderInfo is relevant\r\n * 3.3. If orderInfo's class has a base class or itself in previously labeled relevant orderInfo's, orderInfo is relevant\r\n * 3.4. If 3.1 - 3.3 don't pass, orderInfo is irrelevant\r\n * 4. Irrelevant orderInfos's get moved after `orderInfo` (depends on the direction)\r\n * 5. All `field` orderInfo's get moved after `afterOrderInfo`\r\n */\r\n await this.ensureInitialized(imodel);\r\n const iTwinId = imodel.iTwinId!;\r\n const imodelId = imodel.iModelId!;\r\n\r\n if (field === afterField) {\r\n throw Error(\"`field` can not be the same as `afterField`.\");\r\n }\r\n\r\n const allOrderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\r\n\r\n const findFieldOrderInfoData = (f: Field) => {\r\n if (!visibleFields.includes(f)) {\r\n throw Error(\"Field is not contained in visible fields.\");\r\n }\r\n const infos = getFieldOrderInfos(f, allOrderInfos);\r\n\r\n if (infos.length === 0) {\r\n throw Error(\"Field has no property order information.\");\r\n }\r\n const info = getMostRecentOrderInfo(infos);\r\n const index = allOrderInfos.indexOf(info);\r\n return { infos, mostRecent: { info, index } };\r\n };\r\n\r\n const {\r\n infos: movingOrderInfos,\r\n mostRecent: { index: orderInfoIndex },\r\n } = findFieldOrderInfoData(field);\r\n\r\n let afterOrderInfo: FavoritePropertiesOrderInfo | undefined;\r\n let afterOrderInfoIndex;\r\n if (afterField === undefined) {\r\n afterOrderInfo = undefined;\r\n afterOrderInfoIndex = -1;\r\n } else {\r\n ({\r\n mostRecent: { info: afterOrderInfo, index: afterOrderInfoIndex },\r\n } = findFieldOrderInfoData(afterField));\r\n }\r\n\r\n let direction: Direction; // where to go from `afterOrderInfo` to `orderInfo`\r\n let startIndex: number;\r\n if (orderInfoIndex < afterOrderInfoIndex) {\r\n direction = Direction.Up;\r\n startIndex = afterOrderInfoIndex;\r\n } else {\r\n direction = Direction.Down;\r\n startIndex = afterOrderInfoIndex + 1;\r\n }\r\n\r\n const neededClassNames: Set<string> = allOrderInfos.reduce((classNames: Set<string>, oi) => {\r\n if (oi.parentClassName) {\r\n classNames.add(oi.parentClassName);\r\n }\r\n return classNames;\r\n }, new Set<string>());\r\n const baseClassesByClass = await this._getBaseClassesByClass(imodel, neededClassNames);\r\n\r\n const visibleOrderInfos = visibleFields.reduce(\r\n (union: FavoritePropertiesOrderInfo[], currField) => union.concat(getFieldOrderInfos(currField, allOrderInfos)),\r\n [],\r\n );\r\n const irrelevantOrderInfos: FavoritePropertiesOrderInfo[] = []; // orderInfos's that won't change their logical order in respect to other properties\r\n const relevantClasses: Set<ClassId> = new Set<ClassId>(); // currently relevant classes\r\n\r\n for (let i = startIndex; i !== orderInfoIndex; i += direction) {\r\n const currOrderInfo = allOrderInfos[i];\r\n\r\n // primitive properties are always relevant, because we can't determine their relevance based on the class hierarchy\r\n if (currOrderInfo.parentClassName === undefined) {\r\n continue;\r\n }\r\n\r\n const visible = visibleOrderInfos.includes(currOrderInfo);\r\n if (visible) {\r\n relevantClasses.add(currOrderInfo.parentClassName);\r\n continue;\r\n }\r\n\r\n const hasBaseClasses = baseClassesByClass[currOrderInfo.parentClassName].some((classId) => relevantClasses.has(classId));\r\n if (hasBaseClasses) {\r\n continue;\r\n }\r\n\r\n if (direction === Direction.Down) {\r\n irrelevantOrderInfos.push(currOrderInfo);\r\n } else {\r\n irrelevantOrderInfos.unshift(currOrderInfo);\r\n }\r\n }\r\n\r\n // remove irrelevantOrderInfo's to add them after the `orderInfo`\r\n irrelevantOrderInfos.forEach((foi) => {\r\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\r\n allOrderInfos.splice(index, 1);\r\n });\r\n\r\n // remove movingOrderInfos's to add them after the `afterOrderInfo`\r\n movingOrderInfos.forEach((foi) => {\r\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\r\n allOrderInfos.splice(index, 1);\r\n });\r\n movingOrderInfos.forEach((oi) => (oi.orderedTimestamp = new Date()));\r\n\r\n afterOrderInfoIndex = afterOrderInfo === undefined ? -1 : allOrderInfos.indexOf(afterOrderInfo);\r\n allOrderInfos.splice(afterOrderInfoIndex + 1, 0, ...movingOrderInfos);\r\n allOrderInfos.splice(afterOrderInfoIndex + 1 + (direction === Direction.Up ? movingOrderInfos.length : 0), 0, ...irrelevantOrderInfos);\r\n\r\n // reassign priority numbers\r\n let priority = allOrderInfos.length;\r\n allOrderInfos.forEach((oi) => (oi.priority = priority--));\r\n\r\n await this._storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);\r\n this.onFavoritesChanged.raiseEvent();\r\n }\r\n}\r\n\r\nenum Direction {\r\n Up = -1,\r\n Down = 1,\r\n}\r\n\r\nconst getiModelInfo = (iTwinId: string, imodelId: string) => `${iTwinId}/${imodelId}`;\r\n\r\nconst getPropertiesFieldPropertyNames = (field: PropertiesField) => {\r\n const nestingPrefix = getNestingPrefix(field.parent);\r\n return field.properties.map(\r\n (property) => `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${property.property.classInfo.name}:${property.property.name}`,\r\n );\r\n};\r\n\r\nconst getNestedContentFieldPropertyName = (field: NestedContentField) => {\r\n const nestingPrefix = getNestingPrefix(field);\r\n return `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${field.contentClassInfo.name}`;\r\n};\r\n\r\nconst getNestingPrefix = (field: NestedContentField | undefined) => {\r\n const path: string[] = [];\r\n let curr = field;\r\n while (curr !== undefined) {\r\n curr.pathToPrimaryClass.forEach((rel) => {\r\n // Relationship directions are reversed, because we are generating a relationship list starting from the parent\r\n path.push(`${rel.isForwardRelationship ? \"B\" : \"F\"}:${rel.relationshipInfo.name}`);\r\n path.push(rel.targetClassInfo.name);\r\n });\r\n curr = curr.parent;\r\n }\r\n if (path.length === 0) {\r\n return \"\";\r\n }\r\n\r\n path.reverse();\r\n return `${path.join(\"-\")}-`;\r\n};\r\n\r\nconst getPropertyClassName = (propertyName: PropertyFullName): string | undefined => {\r\n const propertyNameStart = propertyName.split(\"-\")[0];\r\n const parts = propertyNameStart.split(\":\").length;\r\n if (parts === 1) {\r\n // primitive\r\n return undefined;\r\n }\r\n if (parts === 2) {\r\n // nested property OR nested property parent class OR regular property parent class\r\n return propertyNameStart;\r\n }\r\n // regular property without parent class\r\n return propertyNameStart.substring(0, propertyName.lastIndexOf(\":\"));\r\n};\r\n\r\n/** @internal */\r\nexport const getFieldInfos = (field: Field): Set<PropertyFullName> => {\r\n const fieldInfos: Set<PropertyFullName> = new Set<PropertyFullName>();\r\n if (field.isPropertiesField()) {\r\n getPropertiesFieldPropertyNames(field).forEach((info) => fieldInfos.add(info));\r\n } else if (field.isNestedContentField()) {\r\n fieldInfos.add(getNestedContentFieldPropertyName(field));\r\n } else {\r\n fieldInfos.add(`${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${field.name}`);\r\n }\r\n return fieldInfos;\r\n};\r\n\r\nconst setHasAny = (set: Set<string>, lookup: Set<string>) => {\r\n for (const key of lookup) {\r\n if (set.has(key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nconst addOrderInfos = (dest: FavoritePropertiesOrderInfo[], source: FavoritePropertiesOrderInfo[]) => {\r\n source.forEach((si) => {\r\n const index = dest.findIndex((di) => di.name === si.name);\r\n if (index === -1) {\r\n si.orderedTimestamp = new Date();\r\n dest.push(si);\r\n }\r\n });\r\n let priority = dest.length;\r\n dest.forEach((info) => (info.priority = priority--));\r\n};\r\n\r\nconst removeOrderInfos = (container: FavoritePropertiesOrderInfo[], toRemove: FavoritePropertiesOrderInfo[]) => {\r\n toRemove.forEach((roi) => {\r\n const index = container.findIndex((oi) => oi.name === roi.name);\r\n /* istanbul ignore else */\r\n if (index >= 0) {\r\n container.splice(index, 1);\r\n }\r\n });\r\n};\r\n\r\n/** @internal */\r\nexport const createFieldOrderInfos = (field: Field): FavoritePropertiesOrderInfo[] => {\r\n if (field.isNestedContentField()) {\r\n const propertyName = getNestedContentFieldPropertyName(field);\r\n return [\r\n {\r\n parentClassName: getPropertyClassName(propertyName),\r\n name: propertyName,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n },\r\n ];\r\n }\r\n if (field.isPropertiesField()) {\r\n return getPropertiesFieldPropertyNames(field).map((propertyName) => ({\r\n parentClassName: getPropertyClassName(propertyName),\r\n name: propertyName,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n }));\r\n }\r\n return [\r\n {\r\n parentClassName: undefined,\r\n name: field.name,\r\n priority: 0,\r\n orderedTimestamp: new Date(),\r\n },\r\n ];\r\n};\r\n\r\nconst getFieldOrderInfos = (field: Field, orderInfos: FavoritePropertiesOrderInfo[]): FavoritePropertiesOrderInfo[] => {\r\n const fieldOrderInfos: FavoritePropertiesOrderInfo[] = [];\r\n const tryAddOrderInfo = (name: string) => {\r\n const fieldOrderInfo = orderInfos.find((oi) => oi.name === name);\r\n if (fieldOrderInfo !== undefined) {\r\n fieldOrderInfos.push(fieldOrderInfo);\r\n }\r\n };\r\n\r\n if (field.isPropertiesField()) {\r\n getPropertiesFieldPropertyNames(field).forEach(tryAddOrderInfo);\r\n } else if (field.isNestedContentField()) {\r\n tryAddOrderInfo(getNestedContentFieldPropertyName(field));\r\n } else {\r\n tryAddOrderInfo(field.name);\r\n }\r\n\r\n return fieldOrderInfos;\r\n};\r\n\r\nconst getMostRecentOrderInfo = (orderInfos: FavoritePropertiesOrderInfo[]) =>\r\n orderInfos.reduce((recent, curr) => (recent && recent.orderedTimestamp >= curr.orderedTimestamp ? recent : curr));\r\n"]}
|
package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePropertiesStorage.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesStorage.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAiD,WAAW,EAAoC,MAAM,qBAAqB,CAAC;AAInI,OAAO,EAAmC,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACvH,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE5F,gBAAgB;AAChB,eAAO,MAAM,uCAAuC,0BAA0B,CAAC;AAC/E,gBAAgB;AAChB,eAAO,MAAM,uCAAuC,eAAe,CAAC;AACpE,gBAAgB;AAChB,eAAO,MAAM,gCAAgC,uBAAuB,CAAC;AACrE,gBAAgB;AAChB,eAAO,MAAM,2CAA2C,gCAAgC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC;IAChG;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,GAAG,SAAS,CAAC,CAAC;IACvH;;;;;OAKG;IACH,mBAAmB,CAAC,UAAU,EAAE,2BAA2B,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9H;AAED;;;GAGG;AACH,oBAAY,qCAAqC;IAC/C,qIAAqI;IACrI,IAAI,IAAA;IACJ,wFAAwF;IACxF,mBAAmB,IAAA;IACnB,mHAAmH;IACnH,sBAAsB,IAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,qCAAqC,GAAG,0BAA0B,CASvH;AAED;;GAEG;AACH,qBAAa,kCAAmC,YAAW,0BAA0B;YACrE,gBAAgB;IAQjB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAuC/F,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,GAAG,SAAS,CAAC;IAgBtH,mBAAmB,CAAC,UAAU,EAAE,2BAA2B,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM;CAe1H;AAED,gBAAgB;AAChB,MAAM,WAAW,4CAA4C;IAC3D,IAAI,EAAE,0BAA0B,CAAC;IACjC,gBAAgB,CAAC,EAAE,gCAAgC,CAAC;CACrD;AACD,gBAAgB;AAChB,qBAAa,uCAAwC,YAAW,0BAA0B,EAAE,WAAW;IACrG,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,uBAAuB,CAA6G;IAC5I,OAAO,CAAC,4BAA4B,CAAqH;gBAEtI,KAAK,EAAE,4CAA4C;IAO/D,OAAO;IAMd,IAAW,IAAI,+BAEd;
|
|
1
|
+
{"version":3,"file":"FavoritePropertiesStorage.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesStorage.ts"],"names":[],"mappings":"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"}
|