@itwin/presentation-frontend 5.1.0-dev.9 → 5.2.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 +65 -1
- package/lib/cjs/presentation-frontend/Presentation.d.ts +2 -2
- package/lib/cjs/presentation-frontend/Presentation.js +1 -1
- package/lib/cjs/presentation-frontend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts +16 -11
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.js +24 -15
- package/lib/cjs/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +4 -4
- 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/selection/HiliteSetProvider.d.ts +3 -3
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js +1 -1
- package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts +4 -4
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js +2 -2
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts +3 -3
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js +2 -2
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.d.ts +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.js +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHelper.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts +3 -3
- package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js +2 -2
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts +3 -3
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js +2 -2
- package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend.js +20 -0
- package/lib/cjs/presentation-frontend.js.map +1 -1
- package/lib/esm/presentation-frontend/Presentation.d.ts +2 -2
- package/lib/esm/presentation-frontend/Presentation.js +1 -1
- package/lib/esm/presentation-frontend/Presentation.js.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.d.ts +16 -11
- package/lib/esm/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.js +24 -15
- package/lib/esm/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +4 -4
- 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/selection/HiliteSetProvider.d.ts +3 -3
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js +1 -1
- package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts +4 -4
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js +2 -2
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts +3 -3
- package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js +2 -2
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.d.ts +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.js +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHelper.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts +3 -3
- package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.js +2 -2
- package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts +3 -3
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js +2 -2
- package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
- package/lib/esm/presentation-frontend.js +20 -0
- package/lib/esm/presentation-frontend.js.map +1 -1
- package/package.json +20 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { defer, EMPTY, mergeMap, Observable, of, Subject, Subscription, takeUntil, tap } from \"rxjs\";\nimport { Id64, Id64Arg, Id64Array } from \"@itwin/core-bentley\";\nimport { IModelConnection, SelectableIds, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\nimport { BaseNodeKey, InstanceKey, Key, Keys, KeySet, NodeKey, SelectionScope, SelectionScopeProps } from \"@itwin/presentation-common\";\nimport { AsyncTasksTracker } from \"@itwin/presentation-common/internal\";\nimport {\n createStorage,\n CustomSelectable,\n Selectable,\n Selectables,\n SelectionStorage,\n StorageSelectionChangeEventArgs,\n StorageSelectionChangeType,\n TRANSIENT_ELEMENT_CLASSNAME,\n} from \"@itwin/unified-selection\";\nimport { Presentation } from \"../Presentation.js\";\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider.js\";\nimport { ISelectionProvider } from \"./ISelectionProvider.js\";\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent.js\";\nimport { createSelectionScopeProps, SelectionScopesManager } from \"./SelectionScopesManager.js\";\n\n/**\n * Properties for creating [[SelectionManager]].\n * @public\n * @deprecated in 5.0. Use `SelectionStorage` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package instead.\n */\nexport interface SelectionManagerProps {\n /** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\n scopes: SelectionScopesManager;\n\n /**\n * Custom unified selection storage to be used by [[SelectionManager]]. If not provided [[SelectionManager]] creates\n * and maintains storage.\n */\n selectionStorage?: SelectionStorage;\n\n /**\n * An optional function that returns a key for the given iModel. The key is what \"glues\" iModel selection\n * changes made in `selectionStorage`, where iModels are identified by key, and `SelectionManager`, where\n * iModels are specified as `IModelConnection`.\n *\n * If not provided, [IModelConnection.key]($core-frontend) or [IModelConnection.name]($core-frontend) is used.\n */\n imodelKeyFactory?: (imodel: IModelConnection) => string;\n}\n\n/**\n * The selection manager which stores the overall selection.\n * @public\n * @deprecated in 5.0. Use `SelectionStorage` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package instead.\n */\nexport class SelectionManager implements ISelectionProvider, Disposable {\n private _imodelKeyFactory: (imodel: IModelConnection) => string;\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number; handler: ToolSelectionSyncHandler }>();\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\n private _ownsStorage: boolean;\n\n private _knownIModels = new Set<IModelConnection>();\n private _currentSelection = new CurrentSelectionStorage();\n private _selectionChanges = new Subject<StorageSelectionChangeEventArgs>();\n private _selectionEventsSubscription: Subscription;\n private _listeners: Array<() => void> = [];\n\n /**\n * Underlying selection storage used by this selection manager. Ideally, consumers should use\n * the storage directly instead of using this manager to manipulate selection.\n */\n public readonly selectionStorage: SelectionStorage;\n\n /** An event which gets broadcasted on selection changes */\n public readonly selectionChange: SelectionChangeEvent;\n\n /** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\n public readonly scopes: SelectionScopesManager;\n\n /**\n * Creates an instance of SelectionManager.\n */\n constructor(props: SelectionManagerProps) {\n this.selectionChange = new SelectionChangeEvent();\n this.scopes = props.scopes;\n this.selectionStorage = props.selectionStorage ?? createStorage();\n this._imodelKeyFactory = props.imodelKeyFactory ?? ((imodel) => (imodel.key.length ? imodel.key : imodel.name));\n this._ownsStorage = props.selectionStorage === undefined;\n this.selectionStorage.selectionChangeEvent.addListener((args) => this._selectionChanges.next(args));\n this._selectionEventsSubscription = this.streamSelectionEvents();\n this._listeners.push(\n IModelConnection.onOpen.addListener((imodel) => {\n this._knownIModels.add(imodel);\n }),\n );\n this._listeners.push(\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\n this.onConnectionClose(imodel);\n }),\n );\n }\n\n public [Symbol.dispose]() {\n this._selectionEventsSubscription.unsubscribe();\n this._listeners.forEach((dispose) => dispose());\n }\n\n /** @deprecated in 5.0. Use [Symbol.dispose] instead. */\n /* c8 ignore next 3 */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n private onConnectionClose(imodel: IModelConnection): void {\n const imodelKey = this._imodelKeyFactory(imodel);\n this._hiliteSetProviders.delete(imodel);\n this._knownIModels.delete(imodel);\n this._currentSelection.clear(imodelKey);\n if (this._ownsStorage) {\n this.clearSelection(\"Connection Close Event\", imodel);\n this.selectionStorage.clearStorage({ imodelKey });\n }\n }\n\n /**\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\n */\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (sync) {\n if (!registration || registration.requestorsCount === 0) {\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\n } else {\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\n }\n } else {\n if (registration && registration.requestorsCount > 0) {\n const requestorsCount = registration.requestorsCount - 1;\n if (requestorsCount > 0) {\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\n } else {\n this._imodelToolSelectionSyncHandlers.delete(imodel);\n registration.handler[Symbol.dispose]();\n }\n }\n }\n }\n\n /**\n * Temporarily suspends tool selection synchronization until the returned `Disposable`\n * is disposed.\n */\n public suspendIModelToolSelectionSync(imodel: IModelConnection) {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (!registration) {\n const noop = () => {};\n return { [Symbol.dispose]: noop, dispose: noop };\n }\n\n const wasSuspended = registration.handler.isSuspended;\n registration.handler.isSuspended = true;\n const doDispose = () => (registration.handler.isSuspended = wasSuspended);\n return { [Symbol.dispose]: doDispose, dispose: doDispose };\n }\n\n /** Get the selection levels currently stored in this manager for the specified imodel */\n public getSelectionLevels(imodel: IModelConnection): number[] {\n const imodelKey = this._imodelKeyFactory(imodel);\n return this.selectionStorage.getSelectionLevels({ imodelKey });\n }\n\n /**\n * Get the selection currently stored in this manager\n *\n * @note Calling immediately after `add*`|`replace*`|`remove*`|`clear*` method call does not guarantee\n * that returned `KeySet` will include latest changes. Listen for `selectionChange` event to get the\n * latest selection after changes.\n */\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\n const imodelKey = this._imodelKeyFactory(imodel);\n return this._currentSelection.getSelection(imodelKey, level);\n }\n\n private handleEvent(evt: SelectionChangeEventArgs): void {\n const imodelKey = this._imodelKeyFactory(evt.imodel);\n this._knownIModels.add(evt.imodel);\n switch (evt.changeType) {\n case SelectionChangeType.Add:\n this.selectionStorage.addToSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Remove:\n this.selectionStorage.removeFromSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Replace:\n this.selectionStorage.replaceSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Clear:\n this.selectionStorage.clearSelection({ imodelKey, source: evt.source, level: evt.level });\n break;\n }\n }\n\n /**\n * Add keys to the selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to add\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Add,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Remove keys from current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to remove\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Remove,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Replace current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to add\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Replace,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Clear current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Clear,\n keys: new KeySet(),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to add\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async addToSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to remove\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async removeFromSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to replace with\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async replaceSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Get the current hilite set for the specified imodel\n * @public\n */\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\n return this.getHiliteSetProvider(imodel).getHiliteSet(this.getSelection(imodel));\n }\n\n /**\n * Get the current hilite set iterator for the specified imodel.\n * @public\n */\n public getHiliteSetIterator(imodel: IModelConnection) {\n return this.getHiliteSetProvider(imodel).getHiliteSetIterator(this.getSelection(imodel));\n }\n\n private getHiliteSetProvider(imodel: IModelConnection) {\n let provider = this._hiliteSetProviders.get(imodel);\n if (!provider) {\n provider = HiliteSetProvider.create({ imodel });\n this._hiliteSetProviders.set(imodel, provider);\n }\n return provider;\n }\n\n private streamSelectionEvents() {\n return this._selectionChanges\n .pipe(\n mergeMap((args) => {\n const currentSelectables = this.selectionStorage.getSelection({ imodelKey: args.imodelKey, level: args.level });\n return this._currentSelection.computeSelection(args.imodelKey, args.level, currentSelectables, args.selectables).pipe(\n mergeMap(({ level, changedSelection }): Observable<SelectionChangeEventArgs> => {\n const imodel = findIModel(this._knownIModels, this._imodelKeyFactory, args.imodelKey);\n /* c8 ignore next 3 */\n if (!imodel) {\n return EMPTY;\n }\n return of({\n imodel,\n keys: changedSelection,\n level,\n source: args.source,\n timestamp: args.timestamp,\n changeType: getChangeType(args.changeType),\n });\n }),\n );\n }),\n )\n .subscribe({\n next: (args) => {\n this.selectionChange.raiseEvent(args, this);\n },\n });\n }\n}\n\nfunction findIModel(set: Set<IModelConnection>, imodelKeyFactory: (imodel: IModelConnection) => string, key: string) {\n for (const imodel of set) {\n if (imodelKeyFactory(imodel) === key) {\n return imodel;\n }\n }\n return undefined;\n}\n\n/** @internal */\nexport class ToolSelectionSyncHandler implements Disposable {\n private _selectionSourceName = \"Tool\";\n private _logicalSelection: SelectionManager;\n private _imodel: IModelConnection;\n private _imodelToolSelectionListenerDisposeFunc: () => void;\n private _asyncsTracker = new AsyncTasksTracker();\n public isSuspended?: boolean;\n\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\n this._imodel = imodel;\n this._logicalSelection = logicalSelection;\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\n }\n\n public [Symbol.dispose]() {\n this._imodelToolSelectionListenerDisposeFunc();\n }\n\n /** note: used only it tests */\n public get pendingAsyncs() {\n return this._asyncsTracker.pendingAsyncs;\n }\n\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\n // ignore selection change event if the handler is suspended\n if (this.isSuspended) {\n return;\n }\n\n // this component only cares about its own imodel\n const imodel = ev.set.iModel;\n if (imodel !== this._imodel) {\n return;\n }\n\n // determine the level of selection changes\n // wip: may want to allow selecting at different levels?\n const selectionLevel = 0;\n\n let ids: SelectableIds;\n switch (ev.type) {\n case SelectionSetEventType.Add:\n ids = ev.additions;\n break;\n case SelectionSetEventType.Replace:\n ids = ev.set.active;\n break;\n default:\n ids = ev.removals;\n break;\n }\n\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\n // we can't because otherwise our keys compare fails (presentation components load data with\n // concrete classes)\n const changer = new ScopedSelectionChanger(\n this._selectionSourceName,\n this._imodel,\n this._logicalSelection,\n createSelectionScopeProps(this._logicalSelection.scopes.activeScope),\n );\n\n using _r = this._asyncsTracker.trackAsyncTask();\n switch (ev.type) {\n case SelectionSetEventType.Add:\n await changer.add(ids, selectionLevel);\n break;\n case SelectionSetEventType.Replace:\n await changer.replace(ids, selectionLevel);\n break;\n case SelectionSetEventType.Remove:\n await changer.remove(ids, selectionLevel);\n break;\n case SelectionSetEventType.Clear:\n await changer.clear(selectionLevel);\n break;\n }\n };\n}\n\nconst parseElementIds = (ids: Id64Arg): { persistent: Id64Arg; transient: Id64Arg } => {\n let allPersistent = true;\n let allTransient = true;\n for (const id of Id64.iterable(ids)) {\n if (Id64.isTransient(id)) {\n allPersistent = false;\n } else {\n allTransient = false;\n }\n\n if (!allPersistent && !allTransient) {\n break;\n }\n }\n\n // avoid making a copy if ids are only persistent or only transient\n if (allPersistent) {\n return { persistent: ids, transient: [] };\n } else if (allTransient) {\n return { persistent: [], transient: ids };\n }\n\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\n // a Set for performance\n const persistentElementIds: Id64Array = [];\n const transientElementIds: Id64Array = [];\n for (const id of Id64.iterable(ids)) {\n if (Id64.isTransient(id)) {\n transientElementIds.push(id);\n } else {\n persistentElementIds.push(id);\n }\n }\n\n return { persistent: persistentElementIds, transient: transientElementIds };\n};\n\nfunction addKeys(target: KeySet, className: string, ids: Id64Arg) {\n for (const id of Id64.iterable(ids)) {\n target.add({ className, id });\n }\n}\n\nclass ScopedSelectionChanger {\n public readonly name: string;\n public readonly imodel: IModelConnection;\n public readonly manager: SelectionManager;\n public readonly scope: SelectionScopeProps | SelectionScope | string;\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScopeProps | SelectionScope | string) {\n this.name = name;\n this.imodel = imodel;\n this.manager = manager;\n this.scope = scope;\n }\n public async clear(level: number): Promise<void> {\n this.manager.clearSelection(this.name, this.imodel, level);\n }\n public async add(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.addToSelection(this.name, this.imodel, keys, level);\n }\n public async remove(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\n }\n public async replace(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\n }\n async #computeSelection(ids: SelectableIds) {\n let keys = new KeySet();\n if (ids.elements) {\n const { persistent, transient } = parseElementIds(ids.elements);\n keys = await this.manager.scopes.computeSelection(this.imodel, persistent, this.scope);\n addKeys(keys, TRANSIENT_ELEMENT_CLASSNAME, transient);\n }\n if (ids.models) {\n addKeys(keys, \"BisCore.Model\", ids.models);\n }\n if (ids.subcategories) {\n addKeys(keys, \"BisCore.SubCategory\", ids.subcategories);\n }\n return keys;\n }\n}\n\n/** Stores current selection in `KeySet` format per iModel. */\nclass CurrentSelectionStorage {\n private _currentSelection = new Map<string, IModelSelectionStorage>();\n\n private getCurrentSelectionStorage(imodelKey: string) {\n let storage = this._currentSelection.get(imodelKey);\n if (!storage) {\n storage = new IModelSelectionStorage();\n this._currentSelection.set(imodelKey, storage);\n }\n return storage;\n }\n\n public getSelection(imodelKey: string, level: number) {\n return this.getCurrentSelectionStorage(imodelKey).getSelection(level);\n }\n\n public clear(imodelKey: string) {\n this._currentSelection.delete(imodelKey);\n }\n\n public computeSelection(imodelKey: string, level: number, currSelectables: Selectables, changedSelectables: Selectables) {\n return this.getCurrentSelectionStorage(imodelKey).computeSelection(level, currSelectables, changedSelectables);\n }\n}\n\ninterface StorageEntry {\n value: KeySet;\n ongoingComputationDisposers: Set<Subject<void>>;\n}\n\n/**\n * Computes and stores current selection in `KeySet` format.\n * It always stores result of latest resolved call to `computeSelection`.\n */\nclass IModelSelectionStorage {\n private _currentSelection = new Map<number, StorageEntry>();\n\n public getSelection(level: number): KeySet {\n let entry = this._currentSelection.get(level);\n if (!entry) {\n entry = { value: new KeySet(), ongoingComputationDisposers: new Set() };\n this._currentSelection.set(level, entry);\n }\n return entry.value;\n }\n\n private clearSelections(level: number) {\n const clearedLevels = [];\n for (const [storedLevel] of this._currentSelection.entries()) {\n if (storedLevel > level) {\n clearedLevels.push(storedLevel);\n }\n }\n clearedLevels.forEach((storedLevel) => {\n const entry = this._currentSelection.get(storedLevel);\n /* c8 ignore next 3 */\n if (!entry) {\n return;\n }\n\n for (const disposer of entry.ongoingComputationDisposers) {\n disposer.next();\n }\n this._currentSelection.delete(storedLevel);\n });\n }\n\n private addDisposer(level: number, disposer: Subject<void>) {\n const entry = this._currentSelection.get(level);\n if (!entry) {\n this._currentSelection.set(level, { value: new KeySet(), ongoingComputationDisposers: new Set([disposer]) });\n return;\n }\n entry.ongoingComputationDisposers.add(disposer);\n }\n\n private setSelection(level: number, keys: KeySet, disposer: Subject<void>) {\n const currEntry = this._currentSelection.get(level);\n if (currEntry) {\n currEntry.ongoingComputationDisposers.delete(disposer);\n }\n this._currentSelection.set(level, {\n value: keys,\n ongoingComputationDisposers: currEntry?.ongoingComputationDisposers ?? /* c8 ignore next */ new Set(),\n });\n }\n\n public computeSelection(level: number, currSelectables: Selectables, changedSelectables: Selectables) {\n this.clearSelections(level);\n\n const prevComputationsDisposers = [...(this._currentSelection.get(level)?.ongoingComputationDisposers ?? [])];\n const currDisposer = new Subject<void>();\n this.addDisposer(level, currDisposer);\n\n return defer(async () => {\n const convertedSelectables: SelectableKeys[] = [];\n const [current, changed] = await Promise.all([\n selectablesToKeys(currSelectables, convertedSelectables),\n selectablesToKeys(changedSelectables, convertedSelectables),\n ]);\n\n const currentSelection = new KeySet([...current.keys, ...current.selectableKeys.flatMap((selectable) => selectable.keys)]);\n const changedSelection = new KeySet([...changed.keys, ...changed.selectableKeys.flatMap((selectable) => selectable.keys)]);\n\n return {\n level,\n currentSelection,\n changedSelection,\n };\n }).pipe(\n takeUntil(currDisposer),\n tap({\n next: (val) => {\n prevComputationsDisposers.forEach((disposer) => disposer.next());\n this.setSelection(val.level, val.currentSelection, currDisposer);\n },\n }),\n );\n }\n}\n\nfunction keysToSelectable(imodel: IModelConnection, keys: Readonly<KeySet>) {\n const selectables: Selectable[] = [];\n keys.forEach((key) => {\n if (\"id\" in key) {\n selectables.push(key);\n return;\n }\n\n const customSelectable: CustomSelectable = {\n identifier: key.pathFromRoot.join(\"/\"),\n data: key,\n loadInstanceKeys: () => createInstanceKeysIterator(imodel, key),\n };\n selectables.push(customSelectable);\n });\n return selectables;\n}\n\ninterface SelectableKeys {\n identifier: string;\n keys: Key[];\n}\n\nasync function selectablesToKeys(selectables: Selectables, convertedList: SelectableKeys[]) {\n const keys: Key[] = [];\n const selectableKeys: SelectableKeys[] = [];\n\n for (const [className, ids] of selectables.instanceKeys) {\n for (const id of ids) {\n keys.push({ id, className });\n }\n }\n\n for (const [_, selectable] of selectables.custom) {\n if (isNodeKey(selectable.data)) {\n selectableKeys.push({ identifier: selectable.identifier, keys: [selectable.data] });\n continue;\n }\n const converted = convertedList.find((con) => con.identifier === selectable.identifier);\n if (converted) {\n selectableKeys.push(converted);\n continue;\n }\n\n const newConverted: SelectableKeys = { identifier: selectable.identifier, keys: [] };\n convertedList.push(newConverted);\n for await (const instanceKey of selectable.loadInstanceKeys()) {\n newConverted.keys.push(instanceKey);\n }\n selectableKeys.push(newConverted);\n }\n\n return { keys, selectableKeys };\n}\n\nasync function* createInstanceKeysIterator(imodel: IModelConnection, nodeKey: NodeKey): AsyncIterableIterator<InstanceKey> {\n if (NodeKey.isInstancesNodeKey(nodeKey)) {\n for (const key of nodeKey.instanceKeys) {\n yield key;\n }\n return;\n }\n\n const content = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n keys: new KeySet([nodeKey]),\n rulesetOrId: {\n id: \"grouped-instances\",\n rules: [\n {\n ruleType: \"Content\",\n specifications: [\n {\n specType: \"SelectedNodeInstances\",\n },\n ],\n },\n ],\n },\n });\n\n for await (const key of content.items()) {\n yield key;\n }\n}\n\nfunction isNodeKey(data: unknown): data is NodeKey {\n const key = data as BaseNodeKey;\n return key.pathFromRoot !== undefined && key.type !== undefined;\n}\n\nfunction getChangeType(type: StorageSelectionChangeType): SelectionChangeType {\n switch (type) {\n case \"add\":\n return SelectionChangeType.Add;\n case \"remove\":\n return SelectionChangeType.Remove;\n case \"replace\":\n return SelectionChangeType.Replace;\n case \"clear\":\n return SelectionChangeType.Clear;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { defer, EMPTY, mergeMap, Observable, of, Subject, Subscription, takeUntil, tap } from \"rxjs\";\nimport { Id64, Id64Arg, Id64Array } from \"@itwin/core-bentley\";\nimport { IModelConnection, SelectableIds, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\nimport { BaseNodeKey, InstanceKey, Key, Keys, KeySet, NodeKey, SelectionScope, SelectionScopeProps } from \"@itwin/presentation-common\";\nimport { AsyncTasksTracker } from \"@itwin/presentation-common/internal\";\nimport {\n createStorage,\n CustomSelectable,\n Selectable,\n Selectables,\n SelectionStorage,\n StorageSelectionChangeEventArgs,\n StorageSelectionChangeType,\n TRANSIENT_ELEMENT_CLASSNAME,\n} from \"@itwin/unified-selection\";\nimport { Presentation } from \"../Presentation.js\";\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider.js\";\nimport { ISelectionProvider } from \"./ISelectionProvider.js\";\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent.js\";\nimport { createSelectionScopeProps, SelectionScopesManager } from \"./SelectionScopesManager.js\";\n\n/**\n * Properties for creating [[SelectionManager]].\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `SelectionStorage` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package instead.\n */\nexport interface SelectionManagerProps {\n /** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\n scopes: SelectionScopesManager;\n\n /**\n * Custom unified selection storage to be used by [[SelectionManager]]. If not provided [[SelectionManager]] creates\n * and maintains storage.\n */\n selectionStorage?: SelectionStorage;\n\n /**\n * An optional function that returns a key for the given iModel. The key is what \"glues\" iModel selection\n * changes made in `selectionStorage`, where iModels are identified by key, and `SelectionManager`, where\n * iModels are specified as `IModelConnection`.\n *\n * If not provided, [IModelConnection.key]($core-frontend) or [IModelConnection.name]($core-frontend) is used.\n */\n imodelKeyFactory?: (imodel: IModelConnection) => string;\n}\n\n/**\n * The selection manager which stores the overall selection.\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `SelectionStorage` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package instead.\n */\nexport class SelectionManager implements ISelectionProvider, Disposable {\n private _imodelKeyFactory: (imodel: IModelConnection) => string;\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number; handler: ToolSelectionSyncHandler }>();\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\n private _ownsStorage: boolean;\n\n private _knownIModels = new Set<IModelConnection>();\n private _currentSelection = new CurrentSelectionStorage();\n private _selectionChanges = new Subject<StorageSelectionChangeEventArgs>();\n private _selectionEventsSubscription: Subscription;\n private _listeners: Array<() => void> = [];\n\n /**\n * Underlying selection storage used by this selection manager. Ideally, consumers should use\n * the storage directly instead of using this manager to manipulate selection.\n */\n public readonly selectionStorage: SelectionStorage;\n\n /** An event which gets broadcasted on selection changes */\n public readonly selectionChange: SelectionChangeEvent;\n\n /** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\n public readonly scopes: SelectionScopesManager;\n\n /**\n * Creates an instance of SelectionManager.\n */\n constructor(props: SelectionManagerProps) {\n this.selectionChange = new SelectionChangeEvent();\n this.scopes = props.scopes;\n this.selectionStorage = props.selectionStorage ?? createStorage();\n this._imodelKeyFactory = props.imodelKeyFactory ?? ((imodel) => (imodel.key.length ? imodel.key : imodel.name));\n this._ownsStorage = props.selectionStorage === undefined;\n this.selectionStorage.selectionChangeEvent.addListener((args) => this._selectionChanges.next(args));\n this._selectionEventsSubscription = this.streamSelectionEvents();\n this._listeners.push(\n IModelConnection.onOpen.addListener((imodel) => {\n this._knownIModels.add(imodel);\n }),\n );\n this._listeners.push(\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\n this.onConnectionClose(imodel);\n }),\n );\n }\n\n public [Symbol.dispose]() {\n this._selectionEventsSubscription.unsubscribe();\n this._listeners.forEach((dispose) => dispose());\n }\n\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */\n /* c8 ignore next 3 */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n private onConnectionClose(imodel: IModelConnection): void {\n const imodelKey = this._imodelKeyFactory(imodel);\n this._hiliteSetProviders.delete(imodel);\n this._knownIModels.delete(imodel);\n this._currentSelection.clear(imodelKey);\n if (this._ownsStorage) {\n this.clearSelection(\"Connection Close Event\", imodel);\n this.selectionStorage.clearStorage({ imodelKey });\n }\n }\n\n /**\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\n */\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (sync) {\n if (!registration || registration.requestorsCount === 0) {\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\n } else {\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\n }\n } else {\n if (registration && registration.requestorsCount > 0) {\n const requestorsCount = registration.requestorsCount - 1;\n if (requestorsCount > 0) {\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\n } else {\n this._imodelToolSelectionSyncHandlers.delete(imodel);\n registration.handler[Symbol.dispose]();\n }\n }\n }\n }\n\n /**\n * Temporarily suspends tool selection synchronization until the returned `Disposable`\n * is disposed.\n */\n public suspendIModelToolSelectionSync(imodel: IModelConnection) {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (!registration) {\n const noop = () => {};\n return { [Symbol.dispose]: noop, dispose: noop };\n }\n\n const wasSuspended = registration.handler.isSuspended;\n registration.handler.isSuspended = true;\n const doDispose = () => (registration.handler.isSuspended = wasSuspended);\n return { [Symbol.dispose]: doDispose, dispose: doDispose };\n }\n\n /** Get the selection levels currently stored in this manager for the specified imodel */\n public getSelectionLevels(imodel: IModelConnection): number[] {\n const imodelKey = this._imodelKeyFactory(imodel);\n return this.selectionStorage.getSelectionLevels({ imodelKey });\n }\n\n /**\n * Get the selection currently stored in this manager\n *\n * @note Calling immediately after `add*`|`replace*`|`remove*`|`clear*` method call does not guarantee\n * that returned `KeySet` will include latest changes. Listen for `selectionChange` event to get the\n * latest selection after changes.\n */\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\n const imodelKey = this._imodelKeyFactory(imodel);\n return this._currentSelection.getSelection(imodelKey, level);\n }\n\n private handleEvent(evt: SelectionChangeEventArgs): void {\n const imodelKey = this._imodelKeyFactory(evt.imodel);\n this._knownIModels.add(evt.imodel);\n switch (evt.changeType) {\n case SelectionChangeType.Add:\n this.selectionStorage.addToSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Remove:\n this.selectionStorage.removeFromSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Replace:\n this.selectionStorage.replaceSelection({\n imodelKey,\n source: evt.source,\n level: evt.level,\n selectables: keysToSelectable(evt.imodel, evt.keys),\n });\n break;\n case SelectionChangeType.Clear:\n this.selectionStorage.clearSelection({ imodelKey, source: evt.source, level: evt.level });\n break;\n }\n }\n\n /**\n * Add keys to the selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to add\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Add,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Remove keys from current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to remove\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Remove,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Replace current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param keys Keys to add\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Replace,\n keys: new KeySet(keys),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Clear current selection\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\n const evt: SelectionChangeEventArgs = {\n source,\n level,\n imodel,\n changeType: SelectionChangeType.Clear,\n keys: new KeySet(),\n timestamp: new Date(),\n rulesetId,\n };\n this.handleEvent(evt);\n }\n\n /**\n * Add keys to selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to add\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async addToSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Remove keys from current selection after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to remove\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async removeFromSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Replace current selection with keys after applying [selection scope]($docs/presentation/unified-selection/index#selection-scopes) on them.\n * @param source Name of the selection source\n * @param imodel iModel associated with the selection\n * @param ids Element IDs to replace with\n * @param scope Selection scope to apply\n * @param level Selection level (see [selection levels documentation section]($docs/presentation/unified-selection/index#selection-levels))\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\n */\n public async replaceSelectionWithScope(\n source: string,\n imodel: IModelConnection,\n ids: Id64Arg,\n scope: SelectionScopeProps | SelectionScope | string,\n level: number = 0,\n rulesetId?: string,\n ): Promise<void> {\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\n }\n\n /**\n * Get the current hilite set for the specified imodel\n * @public\n */\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\n return this.getHiliteSetProvider(imodel).getHiliteSet(this.getSelection(imodel));\n }\n\n /**\n * Get the current hilite set iterator for the specified imodel.\n * @public\n */\n public getHiliteSetIterator(imodel: IModelConnection) {\n return this.getHiliteSetProvider(imodel).getHiliteSetIterator(this.getSelection(imodel));\n }\n\n private getHiliteSetProvider(imodel: IModelConnection) {\n let provider = this._hiliteSetProviders.get(imodel);\n if (!provider) {\n provider = HiliteSetProvider.create({ imodel });\n this._hiliteSetProviders.set(imodel, provider);\n }\n return provider;\n }\n\n private streamSelectionEvents() {\n return this._selectionChanges\n .pipe(\n mergeMap((args) => {\n const currentSelectables = this.selectionStorage.getSelection({ imodelKey: args.imodelKey, level: args.level });\n return this._currentSelection.computeSelection(args.imodelKey, args.level, currentSelectables, args.selectables).pipe(\n mergeMap(({ level, changedSelection }): Observable<SelectionChangeEventArgs> => {\n const imodel = findIModel(this._knownIModels, this._imodelKeyFactory, args.imodelKey);\n /* c8 ignore next 3 */\n if (!imodel) {\n return EMPTY;\n }\n return of({\n imodel,\n keys: changedSelection,\n level,\n source: args.source,\n timestamp: args.timestamp,\n changeType: getChangeType(args.changeType),\n });\n }),\n );\n }),\n )\n .subscribe({\n next: (args) => {\n this.selectionChange.raiseEvent(args, this);\n },\n });\n }\n}\n\nfunction findIModel(set: Set<IModelConnection>, imodelKeyFactory: (imodel: IModelConnection) => string, key: string) {\n for (const imodel of set) {\n if (imodelKeyFactory(imodel) === key) {\n return imodel;\n }\n }\n return undefined;\n}\n\n/** @internal */\nexport class ToolSelectionSyncHandler implements Disposable {\n private _selectionSourceName = \"Tool\";\n private _logicalSelection: SelectionManager;\n private _imodel: IModelConnection;\n private _imodelToolSelectionListenerDisposeFunc: () => void;\n private _asyncsTracker = new AsyncTasksTracker();\n public isSuspended?: boolean;\n\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\n this._imodel = imodel;\n this._logicalSelection = logicalSelection;\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\n }\n\n public [Symbol.dispose]() {\n this._imodelToolSelectionListenerDisposeFunc();\n }\n\n /** note: used only it tests */\n public get pendingAsyncs() {\n return this._asyncsTracker.pendingAsyncs;\n }\n\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\n // ignore selection change event if the handler is suspended\n if (this.isSuspended) {\n return;\n }\n\n // this component only cares about its own imodel\n const imodel = ev.set.iModel;\n if (imodel !== this._imodel) {\n return;\n }\n\n // determine the level of selection changes\n // wip: may want to allow selecting at different levels?\n const selectionLevel = 0;\n\n let ids: SelectableIds;\n switch (ev.type) {\n case SelectionSetEventType.Add:\n ids = ev.additions;\n break;\n case SelectionSetEventType.Replace:\n ids = ev.set.active;\n break;\n default:\n ids = ev.removals;\n break;\n }\n\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\n // we can't because otherwise our keys compare fails (presentation components load data with\n // concrete classes)\n const changer = new ScopedSelectionChanger(\n this._selectionSourceName,\n this._imodel,\n this._logicalSelection,\n createSelectionScopeProps(this._logicalSelection.scopes.activeScope),\n );\n\n using _r = this._asyncsTracker.trackAsyncTask();\n switch (ev.type) {\n case SelectionSetEventType.Add:\n await changer.add(ids, selectionLevel);\n break;\n case SelectionSetEventType.Replace:\n await changer.replace(ids, selectionLevel);\n break;\n case SelectionSetEventType.Remove:\n await changer.remove(ids, selectionLevel);\n break;\n case SelectionSetEventType.Clear:\n await changer.clear(selectionLevel);\n break;\n }\n };\n}\n\nconst parseElementIds = (ids: Id64Arg): { persistent: Id64Arg; transient: Id64Arg } => {\n let allPersistent = true;\n let allTransient = true;\n for (const id of Id64.iterable(ids)) {\n if (Id64.isTransient(id)) {\n allPersistent = false;\n } else {\n allTransient = false;\n }\n\n if (!allPersistent && !allTransient) {\n break;\n }\n }\n\n // avoid making a copy if ids are only persistent or only transient\n if (allPersistent) {\n return { persistent: ids, transient: [] };\n } else if (allTransient) {\n return { persistent: [], transient: ids };\n }\n\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\n // a Set for performance\n const persistentElementIds: Id64Array = [];\n const transientElementIds: Id64Array = [];\n for (const id of Id64.iterable(ids)) {\n if (Id64.isTransient(id)) {\n transientElementIds.push(id);\n } else {\n persistentElementIds.push(id);\n }\n }\n\n return { persistent: persistentElementIds, transient: transientElementIds };\n};\n\nfunction addKeys(target: KeySet, className: string, ids: Id64Arg) {\n for (const id of Id64.iterable(ids)) {\n target.add({ className, id });\n }\n}\n\nclass ScopedSelectionChanger {\n public readonly name: string;\n public readonly imodel: IModelConnection;\n public readonly manager: SelectionManager;\n public readonly scope: SelectionScopeProps | SelectionScope | string;\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScopeProps | SelectionScope | string) {\n this.name = name;\n this.imodel = imodel;\n this.manager = manager;\n this.scope = scope;\n }\n public async clear(level: number): Promise<void> {\n this.manager.clearSelection(this.name, this.imodel, level);\n }\n public async add(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.addToSelection(this.name, this.imodel, keys, level);\n }\n public async remove(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\n }\n public async replace(ids: SelectableIds, level: number): Promise<void> {\n const keys = await this.#computeSelection(ids);\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\n }\n async #computeSelection(ids: SelectableIds) {\n let keys = new KeySet();\n if (ids.elements) {\n const { persistent, transient } = parseElementIds(ids.elements);\n keys = await this.manager.scopes.computeSelection(this.imodel, persistent, this.scope);\n addKeys(keys, TRANSIENT_ELEMENT_CLASSNAME, transient);\n }\n if (ids.models) {\n addKeys(keys, \"BisCore.Model\", ids.models);\n }\n if (ids.subcategories) {\n addKeys(keys, \"BisCore.SubCategory\", ids.subcategories);\n }\n return keys;\n }\n}\n\n/** Stores current selection in `KeySet` format per iModel. */\nclass CurrentSelectionStorage {\n private _currentSelection = new Map<string, IModelSelectionStorage>();\n\n private getCurrentSelectionStorage(imodelKey: string) {\n let storage = this._currentSelection.get(imodelKey);\n if (!storage) {\n storage = new IModelSelectionStorage();\n this._currentSelection.set(imodelKey, storage);\n }\n return storage;\n }\n\n public getSelection(imodelKey: string, level: number) {\n return this.getCurrentSelectionStorage(imodelKey).getSelection(level);\n }\n\n public clear(imodelKey: string) {\n this._currentSelection.delete(imodelKey);\n }\n\n public computeSelection(imodelKey: string, level: number, currSelectables: Selectables, changedSelectables: Selectables) {\n return this.getCurrentSelectionStorage(imodelKey).computeSelection(level, currSelectables, changedSelectables);\n }\n}\n\ninterface StorageEntry {\n value: KeySet;\n ongoingComputationDisposers: Set<Subject<void>>;\n}\n\n/**\n * Computes and stores current selection in `KeySet` format.\n * It always stores result of latest resolved call to `computeSelection`.\n */\nclass IModelSelectionStorage {\n private _currentSelection = new Map<number, StorageEntry>();\n\n public getSelection(level: number): KeySet {\n let entry = this._currentSelection.get(level);\n if (!entry) {\n entry = { value: new KeySet(), ongoingComputationDisposers: new Set() };\n this._currentSelection.set(level, entry);\n }\n return entry.value;\n }\n\n private clearSelections(level: number) {\n const clearedLevels = [];\n for (const [storedLevel] of this._currentSelection.entries()) {\n if (storedLevel > level) {\n clearedLevels.push(storedLevel);\n }\n }\n clearedLevels.forEach((storedLevel) => {\n const entry = this._currentSelection.get(storedLevel);\n /* c8 ignore next 3 */\n if (!entry) {\n return;\n }\n\n for (const disposer of entry.ongoingComputationDisposers) {\n disposer.next();\n }\n this._currentSelection.delete(storedLevel);\n });\n }\n\n private addDisposer(level: number, disposer: Subject<void>) {\n const entry = this._currentSelection.get(level);\n if (!entry) {\n this._currentSelection.set(level, { value: new KeySet(), ongoingComputationDisposers: new Set([disposer]) });\n return;\n }\n entry.ongoingComputationDisposers.add(disposer);\n }\n\n private setSelection(level: number, keys: KeySet, disposer: Subject<void>) {\n const currEntry = this._currentSelection.get(level);\n if (currEntry) {\n currEntry.ongoingComputationDisposers.delete(disposer);\n }\n this._currentSelection.set(level, {\n value: keys,\n ongoingComputationDisposers: currEntry?.ongoingComputationDisposers ?? /* c8 ignore next */ new Set(),\n });\n }\n\n public computeSelection(level: number, currSelectables: Selectables, changedSelectables: Selectables) {\n this.clearSelections(level);\n\n const prevComputationsDisposers = [...(this._currentSelection.get(level)?.ongoingComputationDisposers ?? [])];\n const currDisposer = new Subject<void>();\n this.addDisposer(level, currDisposer);\n\n return defer(async () => {\n const convertedSelectables: SelectableKeys[] = [];\n const [current, changed] = await Promise.all([\n selectablesToKeys(currSelectables, convertedSelectables),\n selectablesToKeys(changedSelectables, convertedSelectables),\n ]);\n\n const currentSelection = new KeySet([...current.keys, ...current.selectableKeys.flatMap((selectable) => selectable.keys)]);\n const changedSelection = new KeySet([...changed.keys, ...changed.selectableKeys.flatMap((selectable) => selectable.keys)]);\n\n return {\n level,\n currentSelection,\n changedSelection,\n };\n }).pipe(\n takeUntil(currDisposer),\n tap({\n next: (val) => {\n prevComputationsDisposers.forEach((disposer) => disposer.next());\n this.setSelection(val.level, val.currentSelection, currDisposer);\n },\n }),\n );\n }\n}\n\nfunction keysToSelectable(imodel: IModelConnection, keys: Readonly<KeySet>) {\n const selectables: Selectable[] = [];\n keys.forEach((key) => {\n if (\"id\" in key) {\n selectables.push(key);\n return;\n }\n\n const customSelectable: CustomSelectable = {\n identifier: key.pathFromRoot.join(\"/\"),\n data: key,\n loadInstanceKeys: () => createInstanceKeysIterator(imodel, key),\n };\n selectables.push(customSelectable);\n });\n return selectables;\n}\n\ninterface SelectableKeys {\n identifier: string;\n keys: Key[];\n}\n\nasync function selectablesToKeys(selectables: Selectables, convertedList: SelectableKeys[]) {\n const keys: Key[] = [];\n const selectableKeys: SelectableKeys[] = [];\n\n for (const [className, ids] of selectables.instanceKeys) {\n for (const id of ids) {\n keys.push({ id, className });\n }\n }\n\n for (const [_, selectable] of selectables.custom) {\n if (isNodeKey(selectable.data)) {\n selectableKeys.push({ identifier: selectable.identifier, keys: [selectable.data] });\n continue;\n }\n const converted = convertedList.find((con) => con.identifier === selectable.identifier);\n if (converted) {\n selectableKeys.push(converted);\n continue;\n }\n\n const newConverted: SelectableKeys = { identifier: selectable.identifier, keys: [] };\n convertedList.push(newConverted);\n for await (const instanceKey of selectable.loadInstanceKeys()) {\n newConverted.keys.push(instanceKey);\n }\n selectableKeys.push(newConverted);\n }\n\n return { keys, selectableKeys };\n}\n\nasync function* createInstanceKeysIterator(imodel: IModelConnection, nodeKey: NodeKey): AsyncIterableIterator<InstanceKey> {\n if (NodeKey.isInstancesNodeKey(nodeKey)) {\n for (const key of nodeKey.instanceKeys) {\n yield key;\n }\n return;\n }\n\n const content = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n keys: new KeySet([nodeKey]),\n rulesetOrId: {\n id: \"grouped-instances\",\n rules: [\n {\n ruleType: \"Content\",\n specifications: [\n {\n specType: \"SelectedNodeInstances\",\n },\n ],\n },\n ],\n },\n });\n\n for await (const key of content.items()) {\n yield key;\n }\n}\n\nfunction isNodeKey(data: unknown): data is NodeKey {\n const key = data as BaseNodeKey;\n return key.pathFromRoot !== undefined && key.type !== undefined;\n}\n\nfunction getChangeType(type: StorageSelectionChangeType): SelectionChangeType {\n switch (type) {\n case \"add\":\n return SelectionChangeType.Add;\n case \"remove\":\n return SelectionChangeType.Remove;\n case \"replace\":\n return SelectionChangeType.Replace;\n case \"clear\":\n return SelectionChangeType.Clear;\n }\n}\n"]}
|
|
@@ -8,7 +8,7 @@ import { ClientDiagnosticsAttribute, ComputeSelectionRequestOptions, KeySet, Key
|
|
|
8
8
|
/**
|
|
9
9
|
* Properties for creating [[SelectionScopesManager]].
|
|
10
10
|
* @public
|
|
11
|
-
* @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
11
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
12
12
|
*/
|
|
13
13
|
export interface SelectionScopesManagerProps {
|
|
14
14
|
/** RPC handler to use for requesting selection scopes */
|
|
@@ -26,7 +26,7 @@ export interface SelectionScopesManagerProps {
|
|
|
26
26
|
* and can compute logical selection based on element IDs and selection scope.
|
|
27
27
|
*
|
|
28
28
|
* @public
|
|
29
|
-
* @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
29
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
30
30
|
*/
|
|
31
31
|
export declare class SelectionScopesManager {
|
|
32
32
|
private _rpcRequestsHandler;
|
|
@@ -56,7 +56,7 @@ export declare class SelectionScopesManager {
|
|
|
56
56
|
* calculating selection with scope.
|
|
57
57
|
*
|
|
58
58
|
* @public
|
|
59
|
-
* @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
59
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
60
60
|
*/
|
|
61
61
|
export declare function createSelectionScopeProps(scope: SelectionScopeProps | SelectionScope | string | undefined): SelectionScopeProps;
|
|
62
62
|
//# sourceMappingURL=SelectionScopesManager.d.ts.map
|
|
@@ -16,7 +16,7 @@ const presentation_common_1 = require("@itwin/presentation-common");
|
|
|
16
16
|
* and can compute logical selection based on element IDs and selection scope.
|
|
17
17
|
*
|
|
18
18
|
* @public
|
|
19
|
-
* @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
19
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
20
20
|
*/
|
|
21
21
|
class SelectionScopesManager {
|
|
22
22
|
_rpcRequestsHandler;
|
|
@@ -84,7 +84,7 @@ exports.SelectionScopesManager = SelectionScopesManager;
|
|
|
84
84
|
* calculating selection with scope.
|
|
85
85
|
*
|
|
86
86
|
* @public
|
|
87
|
-
* @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
87
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.
|
|
88
88
|
*/
|
|
89
89
|
function createSelectionScopeProps(scope) {
|
|
90
90
|
if (!scope) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { Id64Arg } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"@itwin/core-common\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport {\n ClientDiagnosticsAttribute,\n ComputeSelectionRequestOptions,\n DEFAULT_KEYS_BATCH_SIZE,\n KeySet,\n KeySetJSON,\n SelectionScope,\n SelectionScopeProps,\n SelectionScopeRequestOptions,\n} from \"@itwin/presentation-common\";\nimport { RpcRequestsHandler } from \"@itwin/presentation-common/internal\";\n\n/**\n * Properties for creating [[SelectionScopesManager]].\n * @public\n * @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport interface SelectionScopesManagerProps {\n /** RPC handler to use for requesting selection scopes */\n rpcRequestsHandler: {\n /** Requests available selection scopes */\n getSelectionScopes: (args: SelectionScopeRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute) => Promise<SelectionScope[]>;\n /** Requests keys to be added to logical selection based on provided element IDs and selection scope */\n computeSelection: (args: ComputeSelectionRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute) => Promise<KeySetJSON>;\n };\n\n /** Provider of active locale to use for localizing scopes */\n localeProvider?: () => string | undefined;\n}\n\n/**\n * A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)\n * and can compute logical selection based on element IDs and selection scope.\n *\n * @public\n * @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport class SelectionScopesManager {\n private _rpcRequestsHandler: Pick<RpcRequestsHandler, \"getSelectionScopes\" | \"computeSelection\">;\n private _getLocale: () => string | undefined;\n private _activeScope: SelectionScopeProps | SelectionScope | string | undefined;\n\n public constructor(props: SelectionScopesManagerProps) {\n this._rpcRequestsHandler = props.rpcRequestsHandler;\n this._getLocale = props.localeProvider ? props.localeProvider : () => undefined;\n }\n\n /** Get active locale */\n public get activeLocale() {\n return this._getLocale();\n }\n\n /** The active selection scope or its id */\n public get activeScope() {\n return this._activeScope;\n }\n public set activeScope(scope: SelectionScopeProps | SelectionScope | string | undefined) {\n this._activeScope = scope;\n }\n\n /**\n * Get available selection scopes.\n * @param imodel The iModel to get selection scopes for\n * @param locale Optional locale to use when localizing scopes' label and description\n */\n public async getSelectionScopes(imodel: IModelConnection, locale?: string): Promise<SelectionScope[]> {\n if (!locale) {\n locale = this._getLocale();\n }\n return this._rpcRequestsHandler.getSelectionScopes({ imodel: imodel.getRpcProps(), locale });\n }\n\n /**\n * Computes keys that need to be added to logical selection based on provided selection scope.\n * @param ids Element IDs to compute selection for\n * @param scope Selection scope to apply\n */\n public async computeSelection(imodel: IModelConnection, ids: Id64Arg, scope: SelectionScopeProps | SelectionScope | string): Promise<KeySet> {\n const scopeProps = createSelectionScopeProps(scope);\n\n // convert ids input to array\n if (typeof ids === \"string\") {\n ids = [ids];\n } else if (ids instanceof Set) {\n ids = [...ids];\n }\n\n // compute selection in batches to avoid HTTP 413\n const keys = new KeySet();\n const batchSize = DEFAULT_KEYS_BATCH_SIZE;\n const batchesCount = Math.ceil(ids.length / batchSize);\n const batchKeyPromises = [];\n for (let batchIndex = 0; batchIndex < batchesCount; ++batchIndex) {\n const batchStart = batchSize * batchIndex;\n const batchEnd = batchStart + batchSize > ids.length ? ids.length : batchStart + batchSize;\n const batchIds = 0 === batchIndex && ids.length <= batchEnd ? ids : ids.slice(batchStart, batchEnd);\n batchKeyPromises.push(this._rpcRequestsHandler.computeSelection({ imodel: imodel.getRpcProps(), elementIds: batchIds, scope: scopeProps }));\n }\n const batchKeys = (await Promise.all(batchKeyPromises)).map((json) => KeySet.fromJSON(json));\n batchKeys.forEach((bk) => keys.add(bk));\n return keys;\n }\n}\n\n/**\n * Normalizes given scope options and returns [[SelectionScopeProps]] that can be used for\n * calculating selection with scope.\n *\n * @public\n * @deprecated in 5.0. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport function createSelectionScopeProps(scope: SelectionScopeProps | SelectionScope | string | undefined): SelectionScopeProps {\n if (!scope) {\n return { id: \"element\" };\n }\n if (typeof scope === \"string\") {\n return { id: scope };\n }\n return scope;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionScopesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionScopesManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { Id64Arg } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"@itwin/core-common\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport {\n ClientDiagnosticsAttribute,\n ComputeSelectionRequestOptions,\n DEFAULT_KEYS_BATCH_SIZE,\n KeySet,\n KeySetJSON,\n SelectionScope,\n SelectionScopeProps,\n SelectionScopeRequestOptions,\n} from \"@itwin/presentation-common\";\nimport { RpcRequestsHandler } from \"@itwin/presentation-common/internal\";\n\n/**\n * Properties for creating [[SelectionScopesManager]].\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport interface SelectionScopesManagerProps {\n /** RPC handler to use for requesting selection scopes */\n rpcRequestsHandler: {\n /** Requests available selection scopes */\n getSelectionScopes: (args: SelectionScopeRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute) => Promise<SelectionScope[]>;\n /** Requests keys to be added to logical selection based on provided element IDs and selection scope */\n computeSelection: (args: ComputeSelectionRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute) => Promise<KeySetJSON>;\n };\n\n /** Provider of active locale to use for localizing scopes */\n localeProvider?: () => string | undefined;\n}\n\n/**\n * A manager that knows available [selection scopes]($docs/presentation/unified-selection/index#selection-scopes)\n * and can compute logical selection based on element IDs and selection scope.\n *\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport class SelectionScopesManager {\n private _rpcRequestsHandler: Pick<RpcRequestsHandler, \"getSelectionScopes\" | \"computeSelection\">;\n private _getLocale: () => string | undefined;\n private _activeScope: SelectionScopeProps | SelectionScope | string | undefined;\n\n public constructor(props: SelectionScopesManagerProps) {\n this._rpcRequestsHandler = props.rpcRequestsHandler;\n this._getLocale = props.localeProvider ? props.localeProvider : () => undefined;\n }\n\n /** Get active locale */\n public get activeLocale() {\n return this._getLocale();\n }\n\n /** The active selection scope or its id */\n public get activeScope() {\n return this._activeScope;\n }\n public set activeScope(scope: SelectionScopeProps | SelectionScope | string | undefined) {\n this._activeScope = scope;\n }\n\n /**\n * Get available selection scopes.\n * @param imodel The iModel to get selection scopes for\n * @param locale Optional locale to use when localizing scopes' label and description\n */\n public async getSelectionScopes(imodel: IModelConnection, locale?: string): Promise<SelectionScope[]> {\n if (!locale) {\n locale = this._getLocale();\n }\n return this._rpcRequestsHandler.getSelectionScopes({ imodel: imodel.getRpcProps(), locale });\n }\n\n /**\n * Computes keys that need to be added to logical selection based on provided selection scope.\n * @param ids Element IDs to compute selection for\n * @param scope Selection scope to apply\n */\n public async computeSelection(imodel: IModelConnection, ids: Id64Arg, scope: SelectionScopeProps | SelectionScope | string): Promise<KeySet> {\n const scopeProps = createSelectionScopeProps(scope);\n\n // convert ids input to array\n if (typeof ids === \"string\") {\n ids = [ids];\n } else if (ids instanceof Set) {\n ids = [...ids];\n }\n\n // compute selection in batches to avoid HTTP 413\n const keys = new KeySet();\n const batchSize = DEFAULT_KEYS_BATCH_SIZE;\n const batchesCount = Math.ceil(ids.length / batchSize);\n const batchKeyPromises = [];\n for (let batchIndex = 0; batchIndex < batchesCount; ++batchIndex) {\n const batchStart = batchSize * batchIndex;\n const batchEnd = batchStart + batchSize > ids.length ? ids.length : batchStart + batchSize;\n const batchIds = 0 === batchIndex && ids.length <= batchEnd ? ids : ids.slice(batchStart, batchEnd);\n batchKeyPromises.push(this._rpcRequestsHandler.computeSelection({ imodel: imodel.getRpcProps(), elementIds: batchIds, scope: scopeProps }));\n }\n const batchKeys = (await Promise.all(batchKeyPromises)).map((json) => KeySet.fromJSON(json));\n batchKeys.forEach((bk) => keys.add(bk));\n return keys;\n }\n}\n\n/**\n * Normalizes given scope options and returns [[SelectionScopeProps]] that can be used for\n * calculating selection with scope.\n *\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `computeSelection` from [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md#selection-scopes) package instead.\n */\nexport function createSelectionScopeProps(scope: SelectionScopeProps | SelectionScope | string | undefined): SelectionScopeProps {\n if (!scope) {\n return { id: \"element\" };\n }\n if (typeof scope === \"string\") {\n return { id: scope };\n }\n return scope;\n}\n"]}
|
|
@@ -52,4 +52,24 @@ var HiliteSetProvider_js_1 = require("./presentation-frontend/selection/HiliteSe
|
|
|
52
52
|
Object.defineProperty(exports, "HiliteSetProvider", { enumerable: true, get: function () { return HiliteSetProvider_js_1.HiliteSetProvider; } });
|
|
53
53
|
var SelectionHelper_js_1 = require("./presentation-frontend/selection/SelectionHelper.js");
|
|
54
54
|
Object.defineProperty(exports, "SelectionHelper", { enumerable: true, get: function () { return SelectionHelper_js_1.SelectionHelper; } });
|
|
55
|
+
const globalSymbolPresentationFrontend = Symbol.for("itwin.presentation.frontend.globals");
|
|
56
|
+
if (globalThis[globalSymbolPresentationFrontend]) {
|
|
57
|
+
// Get the stack trace from when the module was first loaded
|
|
58
|
+
const firstLoadStack = globalThis[globalSymbolPresentationFrontend].stack;
|
|
59
|
+
const error = new Error("Multiple @itwin/presentation-frontend imports detected! This may happen if:\n" +
|
|
60
|
+
"- You have multiple versions of the package installed\n" +
|
|
61
|
+
"- Your bundling configuration is incorrect\n" +
|
|
62
|
+
"- You're importing from both ESM and CommonJS versions");
|
|
63
|
+
/* eslint-disable no-console */
|
|
64
|
+
console.error("Duplicate @itwin/presentation-frontend import:", error);
|
|
65
|
+
console.error("First import occurred at:", firstLoadStack);
|
|
66
|
+
console.error("Current import occurred at:", error.stack);
|
|
67
|
+
/* eslint-enable no-console */
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
globalThis[globalSymbolPresentationFrontend] = {
|
|
72
|
+
stack: new Error().stack,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
55
75
|
//# sourceMappingURL=presentation-frontend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,2EAA0F;AAA9D,+GAAA,YAAY,OAAA;AACxC,yFASwD;AADtD,6HAAA,mBAAmB,OAAA;AAIrB,yHAMkF;AALhF,uIAAA,uBAAuB,OAAA;AAIvB,yIAAA,yBAAyB,OAAA;AAE3B,yHAIkF;AAFhF,qJAAA,qCAAqC,OAAA;AACrC,+IAAA,+BAA+B,OAAA;AAEjC,yEAAqH;AAA5G,2HAAA,yBAAyB,OAAA;AAAE,kIAAA,gCAAgC,OAAA;AAEpE;;;;;GAKG;AACH,+FAAuG;AAA9F,+IAAA,kCAAkC,OAAA;AAE3C;;;;;GAKG;AACH,qGAKmE;AAHjE,+HAAA,oBAAoB,OAAA;AACpB,8HAAA,mBAAmB,OAAA;AAIrB,6FAAgH;AAAhF,uHAAA,gBAAgB,OAAA;AAChD,yGAA6J;AAAvH,mIAAA,sBAAsB,OAAA;AAAE,sIAAA,yBAAyB,OAAA;AACvF,6FAAgH;AAAhF,uHAAA,gBAAgB,OAAA;AAChD,+FAA8H;AAAlF,yHAAA,iBAAiB,OAAA;AAC7D,2FAAuF;AAA9E,qHAAA,eAAe,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used for retrieving presentation data from iModels.\n */\nexport { PresentationProps, Presentation } from \"./presentation-frontend/Presentation.js\";\nexport {\n IModelHierarchyChangeEventArgs,\n IModelContentChangeEventArgs,\n MultipleValuesRequestOptions,\n GetNodesRequestOptions,\n GetContentRequestOptions,\n GetDistinctValuesRequestOptions,\n PresentationManagerProps,\n PresentationManager,\n} from \"./presentation-frontend/PresentationManager.js\";\nexport { RulesetManager } from \"./presentation-frontend/RulesetManager.js\";\nexport { RulesetVariablesManager } from \"./presentation-frontend/RulesetVariablesManager.js\";\nexport {\n FavoritePropertiesScope,\n PropertyFullName,\n FavoritePropertiesOrderInfo,\n FavoritePropertiesManagerProps,\n FavoritePropertiesManager,\n} from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager.js\";\nexport {\n IFavoritePropertiesStorage,\n DefaultFavoritePropertiesStorageTypes,\n createFavoritePropertiesStorage,\n} from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage.js\";\nexport { consoleDiagnosticsHandler, createCombinedDiagnosticsHandler } from \"./presentation-frontend/Diagnostics.js\";\n\n/**\n * @module Logging\n *\n * @docs-group-description Logging\n * Types related to logging in this package.\n */\nexport { PresentationFrontendLoggerCategory } from \"./presentation-frontend/FrontendLoggerCategory.js\";\n\n/**\n * @module UnifiedSelection\n *\n * @docs-group-description UnifiedSelection\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\n */\nexport {\n SelectionChangesListener,\n SelectionChangeEvent,\n SelectionChangeType,\n SelectionChangeEventArgs,\n} from \"./presentation-frontend/selection/SelectionChangeEvent.js\";\nexport { ISelectionProvider } from \"./presentation-frontend/selection/ISelectionProvider.js\";\nexport { SelectionManagerProps, SelectionManager } from \"./presentation-frontend/selection/SelectionManager.js\";\nexport { SelectionScopesManagerProps, SelectionScopesManager, createSelectionScopeProps } from \"./presentation-frontend/selection/SelectionScopesManager.js\";\nexport { SelectionHandlerProps, SelectionHandler } from \"./presentation-frontend/selection/SelectionHandler.js\";\nexport { HiliteSet, HiliteSetProviderProps, HiliteSetProvider } from \"./presentation-frontend/selection/HiliteSetProvider.js\";\nexport { SelectionHelper } from \"./presentation-frontend/selection/SelectionHelper.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,2EAA0F;AAA9D,+GAAA,YAAY,OAAA;AACxC,yFASwD;AADtD,6HAAA,mBAAmB,OAAA;AAIrB,yHAMkF;AALhF,uIAAA,uBAAuB,OAAA;AAIvB,yIAAA,yBAAyB,OAAA;AAE3B,yHAIkF;AAFhF,qJAAA,qCAAqC,OAAA;AACrC,+IAAA,+BAA+B,OAAA;AAEjC,yEAAqH;AAA5G,2HAAA,yBAAyB,OAAA;AAAE,kIAAA,gCAAgC,OAAA;AAEpE;;;;;GAKG;AACH,+FAAuG;AAA9F,+IAAA,kCAAkC,OAAA;AAE3C;;;;;GAKG;AACH,qGAKmE;AAHjE,+HAAA,oBAAoB,OAAA;AACpB,8HAAA,mBAAmB,OAAA;AAIrB,6FAAgH;AAAhF,uHAAA,gBAAgB,OAAA;AAChD,yGAA6J;AAAvH,mIAAA,sBAAsB,OAAA;AAAE,sIAAA,yBAAyB,OAAA;AACvF,6FAAgH;AAAhF,uHAAA,gBAAgB,OAAA;AAChD,+FAA8H;AAAlF,yHAAA,iBAAiB,OAAA;AAC7D,2FAAuF;AAA9E,qHAAA,eAAe,OAAA;AAExB,MAAM,gCAAgC,GAAG,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AAC3F,IAAK,UAAkB,CAAC,gCAAgC,CAAC,EAAE,CAAC;IAC1D,4DAA4D;IAC5D,MAAM,cAAc,GAAI,UAAkB,CAAC,gCAAgC,CAAC,CAAC,KAAK,CAAC;IAEnF,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,+EAA+E;QAC7E,yDAAyD;QACzD,8CAA8C;QAC9C,wDAAwD,CAC3D,CAAC;IAEF,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,8BAA8B;IAE9B,MAAM,KAAK,CAAC;AACd,CAAC;KAAM,CAAC;IACL,UAAkB,CAAC,gCAAgC,CAAC,GAAG;QACtD,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used for retrieving presentation data from iModels.\n */\nexport { PresentationProps, Presentation } from \"./presentation-frontend/Presentation.js\";\nexport {\n IModelHierarchyChangeEventArgs,\n IModelContentChangeEventArgs,\n MultipleValuesRequestOptions,\n GetNodesRequestOptions,\n GetContentRequestOptions,\n GetDistinctValuesRequestOptions,\n PresentationManagerProps,\n PresentationManager,\n} from \"./presentation-frontend/PresentationManager.js\";\nexport { RulesetManager } from \"./presentation-frontend/RulesetManager.js\";\nexport { RulesetVariablesManager } from \"./presentation-frontend/RulesetVariablesManager.js\";\nexport {\n FavoritePropertiesScope,\n PropertyFullName,\n FavoritePropertiesOrderInfo,\n FavoritePropertiesManagerProps,\n FavoritePropertiesManager,\n} from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager.js\";\nexport {\n IFavoritePropertiesStorage,\n DefaultFavoritePropertiesStorageTypes,\n createFavoritePropertiesStorage,\n} from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage.js\";\nexport { consoleDiagnosticsHandler, createCombinedDiagnosticsHandler } from \"./presentation-frontend/Diagnostics.js\";\n\n/**\n * @module Logging\n *\n * @docs-group-description Logging\n * Types related to logging in this package.\n */\nexport { PresentationFrontendLoggerCategory } from \"./presentation-frontend/FrontendLoggerCategory.js\";\n\n/**\n * @module UnifiedSelection\n *\n * @docs-group-description UnifiedSelection\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\n */\nexport {\n SelectionChangesListener,\n SelectionChangeEvent,\n SelectionChangeType,\n SelectionChangeEventArgs,\n} from \"./presentation-frontend/selection/SelectionChangeEvent.js\";\nexport { ISelectionProvider } from \"./presentation-frontend/selection/ISelectionProvider.js\";\nexport { SelectionManagerProps, SelectionManager } from \"./presentation-frontend/selection/SelectionManager.js\";\nexport { SelectionScopesManagerProps, SelectionScopesManager, createSelectionScopeProps } from \"./presentation-frontend/selection/SelectionScopesManager.js\";\nexport { SelectionHandlerProps, SelectionHandler } from \"./presentation-frontend/selection/SelectionHandler.js\";\nexport { HiliteSet, HiliteSetProviderProps, HiliteSetProvider } from \"./presentation-frontend/selection/HiliteSetProvider.js\";\nexport { SelectionHelper } from \"./presentation-frontend/selection/SelectionHelper.js\";\n\nconst globalSymbolPresentationFrontend = Symbol.for(\"itwin.presentation.frontend.globals\");\nif ((globalThis as any)[globalSymbolPresentationFrontend]) {\n // Get the stack trace from when the module was first loaded\n const firstLoadStack = (globalThis as any)[globalSymbolPresentationFrontend].stack;\n\n const error = new Error(\n \"Multiple @itwin/presentation-frontend imports detected! This may happen if:\\n\" +\n \"- You have multiple versions of the package installed\\n\" +\n \"- Your bundling configuration is incorrect\\n\" +\n \"- You're importing from both ESM and CommonJS versions\",\n );\n\n /* eslint-disable no-console */\n console.error(\"Duplicate @itwin/presentation-frontend import:\", error);\n console.error(\"First import occurred at:\", firstLoadStack);\n console.error(\"Current import occurred at:\", error.stack);\n /* eslint-enable no-console */\n\n throw error;\n} else {\n (globalThis as any)[globalSymbolPresentationFrontend] = {\n stack: new Error().stack,\n };\n}"]}
|
|
@@ -15,7 +15,7 @@ export interface PresentationProps {
|
|
|
15
15
|
/**
|
|
16
16
|
* Props for [[SelectionManager]].
|
|
17
17
|
*
|
|
18
|
-
* @deprecated in 5.0. The whole unified selection system in this package is deprecated in favor of the new
|
|
18
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new
|
|
19
19
|
* [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.
|
|
20
20
|
*/
|
|
21
21
|
selection?: Partial<SelectionManagerProps>;
|
|
@@ -59,7 +59,7 @@ export declare class Presentation {
|
|
|
59
59
|
/**
|
|
60
60
|
* The singleton [[SelectionManager]].
|
|
61
61
|
*
|
|
62
|
-
* @deprecated in 5.0. The whole unified selection system in this package is deprecated in favor of the new
|
|
62
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new
|
|
63
63
|
* [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.
|
|
64
64
|
*/
|
|
65
65
|
static get selection(): SelectionManager;
|
|
@@ -125,7 +125,7 @@ export class Presentation {
|
|
|
125
125
|
/**
|
|
126
126
|
* The singleton [[SelectionManager]].
|
|
127
127
|
*
|
|
128
|
-
* @deprecated in 5.0. The whole unified selection system in this package is deprecated in favor of the new
|
|
128
|
+
* @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new
|
|
129
129
|
* [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.
|
|
130
130
|
*/
|
|
131
131
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presentation.js","sourceRoot":"","sources":["../../../src/presentation-frontend/Presentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { Localization } from \"@itwin/core-common\";\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\nimport { FavoritePropertiesManager, FavoritePropertiesManagerProps } from \"./favorite-properties/FavoritePropertiesManager.js\";\nimport { createFavoritePropertiesStorage, DefaultFavoritePropertiesStorageTypes } from \"./favorite-properties/FavoritePropertiesStorage.js\";\nimport { FrontendLocalizationHelper } from \"./LocalizationHelper.js\";\nimport { PresentationManager, PresentationManagerProps } from \"./PresentationManager.js\";\nimport { SelectionManager, SelectionManagerProps } from \"./selection/SelectionManager.js\";\nimport { SelectionScopesManager } from \"./selection/SelectionScopesManager.js\";\nimport { imodelInitializationHandlers } from \"./IModelConnectionInitialization.js\";\nimport { _presentation_manager_rpcRequestsHandler } from \"./InternalSymbols.js\";\n\nlet localization: Localization | undefined;\nlet presentationManager: PresentationManager | undefined;\nlet selectionManager: SelectionManager | undefined; // eslint-disable-line @typescript-eslint/no-deprecated\nlet favoritePropertiesManager: FavoritePropertiesManager | undefined;\nconst initializationHandlers: Array<() => Promise<(() => void) | void>> = [];\nconst terminationHandlers: Array<() => void> = [];\n\n/**\n * Props for initializing [[Presentation]].\n * @public\n */\nexport interface PresentationProps {\n /** Props for [[PresentationManager]]. */\n presentation?: PresentationManagerProps;\n\n /**\n * Props for [[SelectionManager]].\n *\n * @deprecated in 5.0. The whole unified selection system in this package is deprecated in favor of the new\n * [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n selection?: Partial<SelectionManagerProps>;\n\n /** Props for [[FavoritePropertiesManager]]. */\n favorites?: FavoritePropertiesManagerProps;\n}\n\n/**\n * Static class used to statically set up Presentation library for the frontend.\n * Basically what it does is:\n * - Create a singleton [[PresentationManager]] instance\n * - Create a singleton [[SelectionManager]] instance\n * - Create a singleton [[FavoritePropertiesManager]]] instance\n *\n * @public\n */\nexport class Presentation {\n /* c8 ignore next */\n private constructor() {}\n\n /**\n * Initializes Presentation library for the frontend.\n *\n * Example:\n * ``` ts\n * [[include:Presentation.Frontend.Initialization]]\n * ```\n *\n * The method should be called after a call to [IModelApp.startup]($core-frontend).\n */\n public static async initialize(props?: PresentationProps): Promise<void> {\n if (!IModelApp.initialized) {\n throw new PresentationError(PresentationStatus.NotInitialized, \"IModelApp.startup must be called before calling Presentation.initialize\");\n }\n if (!localization) {\n localization = IModelApp.localization;\n }\n if (!presentationManager) {\n const managerProps = props?.presentation ?? {};\n if (!managerProps.activeLocale) {\n const languages = Presentation.localization.getLanguageList();\n managerProps.activeLocale = languages.length ? languages[0] : undefined;\n }\n presentationManager = PresentationManager.create(managerProps);\n }\n if (!selectionManager) {\n /* eslint-disable @typescript-eslint/no-deprecated */\n selectionManager = new SelectionManager({\n ...props?.selection,\n scopes:\n props?.selection?.scopes ??\n new SelectionScopesManager({\n rpcRequestsHandler: presentationManager[_presentation_manager_rpcRequestsHandler],\n localeProvider: () => this.presentation.activeLocale,\n }),\n });\n /* eslint-enable @typescript-eslint/no-deprecated */\n }\n if (!favoritePropertiesManager) {\n favoritePropertiesManager = new FavoritePropertiesManager({\n storage: props?.favorites ? props.favorites.storage : createFavoritePropertiesStorage(DefaultFavoritePropertiesStorageTypes.Noop),\n });\n }\n\n await FrontendLocalizationHelper.registerNamespaces();\n for (const handler of initializationHandlers) {\n const cleanup = await handler();\n if (cleanup) {\n terminationHandlers.push(cleanup);\n }\n }\n }\n\n /**\n * Terminates Presentation library frontend. This method should be called\n * before a call to [IModelApp.shutdown]($core-frontend)\n */\n public static terminate(): void {\n terminationHandlers.forEach((handler) => handler());\n terminationHandlers.length = 0;\n\n imodelInitializationHandlers.clear();\n\n if (localization) {\n FrontendLocalizationHelper.unregisterNamespaces();\n }\n\n if (presentationManager) {\n presentationManager[Symbol.dispose]();\n }\n presentationManager = undefined;\n\n if (favoritePropertiesManager) {\n favoritePropertiesManager[Symbol.dispose]();\n }\n favoritePropertiesManager = undefined;\n\n if (selectionManager) {\n selectionManager[Symbol.dispose]();\n }\n selectionManager = undefined;\n localization = undefined;\n }\n\n /**\n * Registers an additional handler which will be invoked during Presentation library frontend\n * initialization.\n */\n public static registerInitializationHandler(handler: () => Promise<() => void>): void {\n initializationHandlers.push(handler);\n }\n\n /** The singleton [[PresentationManager]] */\n public static get presentation(): PresentationManager {\n if (!presentationManager) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return presentationManager;\n }\n\n /**\n * The singleton [[SelectionManager]].\n *\n * @deprecated in 5.0. The whole unified selection system in this package is deprecated in favor of the new\n * [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static get selection(): SelectionManager {\n if (!selectionManager) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return selectionManager;\n }\n\n /**\n * The singleton [[FavoritePropertiesManager]]\n */\n public static get favoriteProperties(): FavoritePropertiesManager {\n if (!favoritePropertiesManager) {\n throw new Error(\"Favorite Properties must be first initialized by calling Presentation.initialize\");\n }\n return favoritePropertiesManager;\n }\n\n /**\n * The localization manager used by Presentation frontend. Returns the result of `IModelApp.i18n`.\n */\n public static get localization(): Localization {\n if (!localization) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return localization;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Presentation.js","sourceRoot":"","sources":["../../../src/presentation-frontend/Presentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { Localization } from \"@itwin/core-common\";\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\nimport { FavoritePropertiesManager, FavoritePropertiesManagerProps } from \"./favorite-properties/FavoritePropertiesManager.js\";\nimport { createFavoritePropertiesStorage, DefaultFavoritePropertiesStorageTypes } from \"./favorite-properties/FavoritePropertiesStorage.js\";\nimport { FrontendLocalizationHelper } from \"./LocalizationHelper.js\";\nimport { PresentationManager, PresentationManagerProps } from \"./PresentationManager.js\";\nimport { SelectionManager, SelectionManagerProps } from \"./selection/SelectionManager.js\";\nimport { SelectionScopesManager } from \"./selection/SelectionScopesManager.js\";\nimport { imodelInitializationHandlers } from \"./IModelConnectionInitialization.js\";\nimport { _presentation_manager_rpcRequestsHandler } from \"./InternalSymbols.js\";\n\nlet localization: Localization | undefined;\nlet presentationManager: PresentationManager | undefined;\nlet selectionManager: SelectionManager | undefined; // eslint-disable-line @typescript-eslint/no-deprecated\nlet favoritePropertiesManager: FavoritePropertiesManager | undefined;\nconst initializationHandlers: Array<() => Promise<(() => void) | void>> = [];\nconst terminationHandlers: Array<() => void> = [];\n\n/**\n * Props for initializing [[Presentation]].\n * @public\n */\nexport interface PresentationProps {\n /** Props for [[PresentationManager]]. */\n presentation?: PresentationManagerProps;\n\n /**\n * Props for [[SelectionManager]].\n *\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new\n * [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n selection?: Partial<SelectionManagerProps>;\n\n /** Props for [[FavoritePropertiesManager]]. */\n favorites?: FavoritePropertiesManagerProps;\n}\n\n/**\n * Static class used to statically set up Presentation library for the frontend.\n * Basically what it does is:\n * - Create a singleton [[PresentationManager]] instance\n * - Create a singleton [[SelectionManager]] instance\n * - Create a singleton [[FavoritePropertiesManager]]] instance\n *\n * @public\n */\nexport class Presentation {\n /* c8 ignore next */\n private constructor() {}\n\n /**\n * Initializes Presentation library for the frontend.\n *\n * Example:\n * ``` ts\n * [[include:Presentation.Frontend.Initialization]]\n * ```\n *\n * The method should be called after a call to [IModelApp.startup]($core-frontend).\n */\n public static async initialize(props?: PresentationProps): Promise<void> {\n if (!IModelApp.initialized) {\n throw new PresentationError(PresentationStatus.NotInitialized, \"IModelApp.startup must be called before calling Presentation.initialize\");\n }\n if (!localization) {\n localization = IModelApp.localization;\n }\n if (!presentationManager) {\n const managerProps = props?.presentation ?? {};\n if (!managerProps.activeLocale) {\n const languages = Presentation.localization.getLanguageList();\n managerProps.activeLocale = languages.length ? languages[0] : undefined;\n }\n presentationManager = PresentationManager.create(managerProps);\n }\n if (!selectionManager) {\n /* eslint-disable @typescript-eslint/no-deprecated */\n selectionManager = new SelectionManager({\n ...props?.selection,\n scopes:\n props?.selection?.scopes ??\n new SelectionScopesManager({\n rpcRequestsHandler: presentationManager[_presentation_manager_rpcRequestsHandler],\n localeProvider: () => this.presentation.activeLocale,\n }),\n });\n /* eslint-enable @typescript-eslint/no-deprecated */\n }\n if (!favoritePropertiesManager) {\n favoritePropertiesManager = new FavoritePropertiesManager({\n storage: props?.favorites ? props.favorites.storage : createFavoritePropertiesStorage(DefaultFavoritePropertiesStorageTypes.Noop),\n });\n }\n\n await FrontendLocalizationHelper.registerNamespaces();\n for (const handler of initializationHandlers) {\n const cleanup = await handler();\n if (cleanup) {\n terminationHandlers.push(cleanup);\n }\n }\n }\n\n /**\n * Terminates Presentation library frontend. This method should be called\n * before a call to [IModelApp.shutdown]($core-frontend)\n */\n public static terminate(): void {\n terminationHandlers.forEach((handler) => handler());\n terminationHandlers.length = 0;\n\n imodelInitializationHandlers.clear();\n\n if (localization) {\n FrontendLocalizationHelper.unregisterNamespaces();\n }\n\n if (presentationManager) {\n presentationManager[Symbol.dispose]();\n }\n presentationManager = undefined;\n\n if (favoritePropertiesManager) {\n favoritePropertiesManager[Symbol.dispose]();\n }\n favoritePropertiesManager = undefined;\n\n if (selectionManager) {\n selectionManager[Symbol.dispose]();\n }\n selectionManager = undefined;\n localization = undefined;\n }\n\n /**\n * Registers an additional handler which will be invoked during Presentation library frontend\n * initialization.\n */\n public static registerInitializationHandler(handler: () => Promise<() => void>): void {\n initializationHandlers.push(handler);\n }\n\n /** The singleton [[PresentationManager]] */\n public static get presentation(): PresentationManager {\n if (!presentationManager) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return presentationManager;\n }\n\n /**\n * The singleton [[SelectionManager]].\n *\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new\n * [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static get selection(): SelectionManager {\n if (!selectionManager) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return selectionManager;\n }\n\n /**\n * The singleton [[FavoritePropertiesManager]]\n */\n public static get favoriteProperties(): FavoritePropertiesManager {\n if (!favoritePropertiesManager) {\n throw new Error(\"Favorite Properties must be first initialized by calling Presentation.initialize\");\n }\n return favoritePropertiesManager;\n }\n\n /**\n * The localization manager used by Presentation frontend. Returns the result of `IModelApp.i18n`.\n */\n public static get localization(): Localization {\n if (!localization) {\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n }\n return localization;\n }\n}\n"]}
|
|
@@ -7,10 +7,10 @@ import { UnitSystemKey } from "@itwin/core-quantity";
|
|
|
7
7
|
import { SchemaContext } from "@itwin/ecschema-metadata";
|
|
8
8
|
import { ClientDiagnosticsAttribute, Content, ContentDescriptorRequestOptions, ContentInstanceKeysRequestOptions, ContentRequestOptions, ContentSourcesRequestOptions, ContentUpdateInfo, Descriptor, DescriptorOverrides, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DisplayValueGroup, DistinctValuesRequestOptions, ElementProperties, FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, FormatsMap, HierarchyLevelDescriptorRequestOptions, HierarchyRequestOptions, HierarchyUpdateInfo, InstanceKey, Item, KeySet, LabelDefinition, Node, NodeKey, NodePathElement, Paged, PagedResponse, RulesetVariable, SelectClassInfo, SingleElementPropertiesRequestOptions } from "@itwin/presentation-common";
|
|
9
9
|
import { RpcRequestsHandler } from "@itwin/presentation-common/internal";
|
|
10
|
+
import { _presentation_manager_ipcRequestsHandler, _presentation_manager_rpcRequestsHandler } from "./InternalSymbols.js";
|
|
10
11
|
import { IpcRequestsHandler } from "./IpcRequestsHandler.js";
|
|
11
12
|
import { RulesetManager } from "./RulesetManager.js";
|
|
12
13
|
import { RulesetVariablesManager } from "./RulesetVariablesManager.js";
|
|
13
|
-
import { _presentation_manager_ipcRequestsHandler, _presentation_manager_rpcRequestsHandler } from "./InternalSymbols.js";
|
|
14
14
|
/**
|
|
15
15
|
* Data structure that describes IModel hierarchy change event arguments.
|
|
16
16
|
* @public
|
|
@@ -83,7 +83,7 @@ export interface PresentationManagerProps {
|
|
|
83
83
|
* overriden for each request through request parameters. If not set, `IModelApp.quantityFormatter.activeUnitSystem`
|
|
84
84
|
* is used by default.
|
|
85
85
|
*
|
|
86
|
-
* @deprecated in 4.0. Use [IModelApp.quantityFormatter]($core-frontend) to set the active unit system.
|
|
86
|
+
* @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [IModelApp.quantityFormatter]($core-frontend) to set the active unit system.
|
|
87
87
|
*/
|
|
88
88
|
activeUnitSystem?: UnitSystemKey;
|
|
89
89
|
/**
|
|
@@ -104,6 +104,8 @@ export interface PresentationManagerProps {
|
|
|
104
104
|
/**
|
|
105
105
|
* Callback that provides [SchemaContext]($ecschema-metadata) for supplied [IModelConnection]($core-frontend).
|
|
106
106
|
* [SchemaContext]($ecschema-metadata) is used for getting metadata required for values formatting.
|
|
107
|
+
*
|
|
108
|
+
* @deprecated in 5.1. By default [IModelConnection.schemaContext]($core-frontend) is now used instead.
|
|
107
109
|
*/
|
|
108
110
|
schemaContextProvider?: (imodel: IModelConnection) => SchemaContext;
|
|
109
111
|
/**
|
|
@@ -111,6 +113,9 @@ export interface PresentationManagerProps {
|
|
|
111
113
|
* in requested unit system.
|
|
112
114
|
*
|
|
113
115
|
* @note Only has effect when frontend value formatting is enabled by supplying the `schemaContextProvider` prop.
|
|
116
|
+
*
|
|
117
|
+
* @deprecated in 5.1. All formats' logic is now handled by [IModelApp.formatsProvider]($core-frontend). Until the prop is removed, when
|
|
118
|
+
* supplied, this map will be used as a fallback if IModelApp's formats provider doesn't return anything for requested format.
|
|
114
119
|
*/
|
|
115
120
|
defaultFormats?: FormatsMap;
|
|
116
121
|
}
|
|
@@ -127,7 +132,7 @@ export declare class PresentationManager implements Disposable {
|
|
|
127
132
|
private _explicitActiveUnitSystem;
|
|
128
133
|
private _rulesetVars;
|
|
129
134
|
private _clearEventListener?;
|
|
130
|
-
private _schemaContextProvider
|
|
135
|
+
private _schemaContextProvider;
|
|
131
136
|
private _defaultFormats?;
|
|
132
137
|
private _ipcRequestsHandler?;
|
|
133
138
|
/**
|
|
@@ -141,7 +146,7 @@ export declare class PresentationManager implements Disposable {
|
|
|
141
146
|
/**
|
|
142
147
|
* Get / set active unit system used to format property values with units.
|
|
143
148
|
*
|
|
144
|
-
* @deprecated in 4.0. `IModelApp.quantityFormatter` should be used to get/set the active unit system. At the moment
|
|
149
|
+
* @deprecated in 4.0 - will not be removed until after 2026-06-13. `IModelApp.quantityFormatter` should be used to get/set the active unit system. At the moment
|
|
145
150
|
* [[PresentationManager]] allows overriding it, but returns `IModelApp.quantityFormatter.activeUnitSystem` if override
|
|
146
151
|
* is not set.
|
|
147
152
|
*/
|
|
@@ -152,7 +157,7 @@ export declare class PresentationManager implements Disposable {
|
|
|
152
157
|
get activeLocale(): string | undefined;
|
|
153
158
|
set activeLocale(locale: string | undefined);
|
|
154
159
|
[Symbol.dispose](): void;
|
|
155
|
-
/** @deprecated in 5.0 Use [Symbol.dispose] instead. */
|
|
160
|
+
/** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */
|
|
156
161
|
dispose(): void;
|
|
157
162
|
private onUpdate;
|
|
158
163
|
/** @note This is only called in native apps after changes in iModels */
|
|
@@ -184,14 +189,14 @@ export declare class PresentationManager implements Disposable {
|
|
|
184
189
|
}>;
|
|
185
190
|
/**
|
|
186
191
|
* Retrieves nodes
|
|
187
|
-
* @deprecated in 4.5. Use [[getNodesIterator]] instead.
|
|
192
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getNodesIterator]] instead.
|
|
188
193
|
*/
|
|
189
194
|
getNodes(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<Node[]>;
|
|
190
195
|
/** Retrieves nodes count. */
|
|
191
196
|
getNodesCount(requestOptions: GetNodesRequestOptions): Promise<number>;
|
|
192
197
|
/**
|
|
193
198
|
* Retrieves total nodes count and a single page of nodes.
|
|
194
|
-
* @deprecated in 4.5. Use [[getNodesIterator]] instead.
|
|
199
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getNodesIterator]] instead.
|
|
195
200
|
*/
|
|
196
201
|
getNodesAndCount(requestOptions: GetNodesRequestOptions & MultipleValuesRequestOptions): Promise<{
|
|
197
202
|
count: number;
|
|
@@ -225,12 +230,12 @@ export declare class PresentationManager implements Disposable {
|
|
|
225
230
|
} | undefined>;
|
|
226
231
|
/**
|
|
227
232
|
* Retrieves content which consists of a content descriptor and a page of records.
|
|
228
|
-
* @deprecated in 4.5. Use [[getContentIterator]] instead.
|
|
233
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getContentIterator]] instead.
|
|
229
234
|
*/
|
|
230
235
|
getContent(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<Content | undefined>;
|
|
231
236
|
/**
|
|
232
237
|
* Retrieves content set size and content which consists of a content descriptor and a page of records.
|
|
233
|
-
* @deprecated in 4.5. Use [[getContentIterator]] instead.
|
|
238
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getContentIterator]] instead.
|
|
234
239
|
*/
|
|
235
240
|
getContentAndSize(requestOptions: GetContentRequestOptions & MultipleValuesRequestOptions): Promise<{
|
|
236
241
|
content: Content;
|
|
@@ -243,7 +248,7 @@ export declare class PresentationManager implements Disposable {
|
|
|
243
248
|
}>;
|
|
244
249
|
/**
|
|
245
250
|
* Retrieves distinct values of specific field from the content.
|
|
246
|
-
* @deprecated in 4.5. Use [[getDistinctValuesIterator]] instead.
|
|
251
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getDistinctValuesIterator]] instead.
|
|
247
252
|
*/
|
|
248
253
|
getPagedDistinctValues(requestOptions: GetDistinctValuesRequestOptions & MultipleValuesRequestOptions): Promise<PagedResponse<DisplayValueGroup>>;
|
|
249
254
|
/**
|
|
@@ -268,7 +273,7 @@ export declare class PresentationManager implements Disposable {
|
|
|
268
273
|
}>;
|
|
269
274
|
/**
|
|
270
275
|
* Retrieves display label definition of specific items.
|
|
271
|
-
* @deprecated in 4.5. Use [[getDisplayLabelDefinitionsIterator]] instead.
|
|
276
|
+
* @deprecated in 4.5 - will not be removed until after 2026-06-13. Use [[getDisplayLabelDefinitionsIterator]] instead.
|
|
272
277
|
*/
|
|
273
278
|
getDisplayLabelDefinitions(requestOptions: DisplayLabelsRequestOptions<IModelConnection, InstanceKey> & ClientDiagnosticsAttribute & MultipleValuesRequestOptions): Promise<LabelDefinition[]>;
|
|
274
279
|
}
|