@itwin/presentation-frontend 5.0.0-dev.4 → 5.0.0-dev.40

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.
@@ -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/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { defer, EMPTY, mergeMap, Observable, of, Subject, Subscription, takeUntil, tap } from \"rxjs\";\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\nimport { AsyncTasksTracker, BaseNodeKey, InstanceKey, Key, Keys, KeySet, NodeKey, SelectionScope, SelectionScopeProps } from \"@itwin/presentation-common\";\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\";\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\nimport { ISelectionProvider } from \"./ISelectionProvider\";\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\nimport { createSelectionScopeProps, SelectionScopesManager } from \"./SelectionScopesManager\";\n\n/**\n * Properties for creating [[SelectionManager]].\n * @public\n */\nexport interface SelectionManagerProps {\n /** A manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */\n scopes: SelectionScopesManager;\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/**\n * The selection manager which stores the overall selection.\n * @public\n */\nexport class SelectionManager implements ISelectionProvider {\n private _selectionStorage: SelectionStorage;\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 Map<string, IModelConnection>();\n private _currentSelection = new CurrentSelectionStorage();\n private _selectionChanges = new Subject<StorageSelectionChangeEventArgs>();\n private _selectionEventsSubscription: Subscription;\n private _listeners: Array<() => void> = [];\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._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.set(imodel.key, imodel);\n }),\n );\n this._listeners.push(\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\n this.onConnectionClose(imodel);\n }),\n );\n }\n\n public dispose() {\n this._selectionEventsSubscription.unsubscribe();\n this._listeners.forEach((dispose) => dispose());\n }\n\n private onConnectionClose(imodel: IModelConnection): void {\n this._hiliteSetProviders.delete(imodel);\n this._knownIModels.delete(imodel.key);\n this._currentSelection.clear(imodel.key);\n if (this._ownsStorage) {\n this.clearSelection(\"Connection Close Event\", imodel);\n this._selectionStorage.clearStorage({ iModelKey: imodel.key });\n }\n }\n\n /** @internal */\n // istanbul ignore next\n public getToolSelectionSyncHandler(imodel: IModelConnection) {\n return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler;\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.dispose();\n }\n }\n }\n }\n\n /**\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\n * is disposed.\n */\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (!registration) {\n return { dispose: () => {} };\n }\n\n const wasSuspended = registration.handler.isSuspended;\n registration.handler.isSuspended = true;\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\n }\n\n /** Get the selection levels currently stored in this manager for the specified imodel */\n public getSelectionLevels(imodel: IModelConnection): number[] {\n return this._selectionStorage.getSelectionLevels({ iModelKey: imodel.key });\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 return this._currentSelection.getSelection(imodel.key, level);\n }\n\n private handleEvent(evt: SelectionChangeEventArgs): void {\n if (!this._knownIModels.has(evt.imodel.key)) {\n this._knownIModels.set(evt.imodel.key, evt.imodel);\n }\n\n switch (evt.changeType) {\n case SelectionChangeType.Add:\n this._selectionStorage.addToSelection({\n iModelKey: evt.imodel.key,\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: evt.imodel.key,\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: evt.imodel.key,\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: evt.imodel.key, 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 = this._knownIModels.get(args.imodelKey);\n // istanbul ignore if\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\n/** @internal */\nexport class ToolSelectionSyncHandler implements IDisposable {\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 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: Id64Arg;\n switch (ev.type) {\n case SelectionSetEventType.Add:\n ids = ev.added;\n break;\n case SelectionSetEventType.Replace:\n ids = ev.set.elements;\n break;\n default:\n ids = ev.removed;\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 // we know what to do immediately on `clear` events\n if (SelectionSetEventType.Clear === ev.type) {\n await changer.clear(selectionLevel);\n return;\n }\n\n const parsedIds = parseIds(ids);\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\n switch (ev.type) {\n case SelectionSetEventType.Add:\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\n break;\n case SelectionSetEventType.Replace:\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\n break;\n case SelectionSetEventType.Remove:\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\n break;\n }\n });\n };\n}\n\nconst parseIds = (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 addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\n for (const id of Id64.iterable(transientIds)) {\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\n }\n}\n\n/** @internal */\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(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\n addTransientKeys(transientIds, keys);\n this.manager.addToSelection(this.name, this.imodel, keys, level);\n }\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\n addTransientKeys(transientIds, keys);\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\n }\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\n addTransientKeys(transientIds, keys);\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\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 // istanbul ignore if\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 // istanbul ignore else\n if (currEntry) {\n currEntry.ongoingComputationDisposers.delete(disposer);\n }\n this._currentSelection.set(level, {\n value: keys,\n ongoingComputationDisposers: currEntry?.ongoingComputationDisposers ?? /* istanbul 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/** @packageDocumentation\n * @module UnifiedSelection\n */\n\nimport { defer, EMPTY, mergeMap, Observable, of, Subject, Subscription, takeUntil, tap } from \"rxjs\";\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\nimport { IModelConnection, SelectableIds, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\nimport { AsyncTasksTracker, BaseNodeKey, InstanceKey, Key, Keys, KeySet, NodeKey, SelectionScope, SelectionScopeProps } from \"@itwin/presentation-common\";\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\";\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\nimport { ISelectionProvider } from \"./ISelectionProvider\";\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\nimport { createSelectionScopeProps, SelectionScopesManager } from \"./SelectionScopesManager\";\n\n/**\n * Properties for creating [[SelectionManager]].\n * @public\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 */\nexport class SelectionManager implements ISelectionProvider {\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 dispose() {\n this._selectionEventsSubscription.unsubscribe();\n this._listeners.forEach((dispose) => 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 /** @internal */\n // istanbul ignore next\n public getToolSelectionSyncHandler(imodel: IModelConnection) {\n return this._imodelToolSelectionSyncHandlers.get(imodel)?.handler;\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.dispose();\n }\n }\n }\n }\n\n /**\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\n * is disposed.\n */\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\n if (!registration) {\n return { dispose: () => {} };\n }\n\n const wasSuspended = registration.handler.isSuspended;\n registration.handler.isSuspended = true;\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\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 // istanbul ignore if\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 IDisposable {\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 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 await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\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}\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 // istanbul ignore if\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 // istanbul ignore else\n if (currEntry) {\n currEntry.ongoingComputationDisposers.delete(disposer);\n }\n this._currentSelection.set(level, {\n value: keys,\n ongoingComputationDisposers: currEntry?.ongoingComputationDisposers ?? /* istanbul 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"]}
@@ -24,6 +24,11 @@ export var FavoritePropertiesScope;
24
24
  * @public
25
25
  */
26
26
  export class FavoritePropertiesManager {
27
+ /**
28
+ * Used in tests to avoid collisions between multiple runs using the same storage
29
+ * @internal
30
+ */
31
+ static { this.FAVORITES_IDENTIFIER_PREFIX = ""; }
27
32
  constructor(props) {
28
33
  /** Event raised after favorite properties have changed. */
29
34
  this.onFavoritesChanged = new BeEvent();
@@ -482,11 +487,6 @@ export class FavoritePropertiesManager {
482
487
  this.onFavoritesChanged.raiseEvent();
483
488
  }
484
489
  }
485
- /**
486
- * Used in tests to avoid collisions between multiple runs using the same storage
487
- * @internal
488
- */
489
- FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX = "";
490
490
  var Direction;
491
491
  (function (Direction) {
492
492
  Direction[Direction["Up"] = -1] = "Up";
@@ -1 +1 @@
1
- {"version":3,"file":"FavoritePropertiesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.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 { BeEvent, IDisposable, isIDisposable } from \"@itwin/core-bentley\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport { ClassId, Field, NestedContentField, PropertiesField } from \"@itwin/presentation-common\";\nimport { IFavoritePropertiesStorage } from \"./FavoritePropertiesStorage\";\n\n/**\n * Scopes that favorite properties can be stored in.\n * @public\n */\nexport enum FavoritePropertiesScope {\n Global,\n ITwin,\n IModel,\n}\n\n/**\n * Format:\n * Regular property - [{path from parent class}-]{schema name}:{class name}:{property name}.\n * Nested property - [{path from parent class}-]{content class schema name}:{content class name}.\n * Primitive property - {field name}.\n * @public\n */\nexport type PropertyFullName = string;\n\n/**\n * Holds the information of favorite properties ordering.\n * @public\n */\nexport interface FavoritePropertiesOrderInfo {\n parentClassName: string | undefined;\n name: PropertyFullName;\n priority: number;\n orderedTimestamp: Date;\n}\n\n/**\n * Properties for initializing [[FavoritePropertiesManager]]\n * @public\n */\nexport interface FavoritePropertiesManagerProps {\n /**\n * Implementation of a persistence layer for storing favorite properties and their order.\n * @public\n */\n storage: IFavoritePropertiesStorage;\n}\n\n/**\n * The favorite property manager which lets to store favorite properties\n * and check if field contains favorite properties.\n *\n * @public\n */\nexport class FavoritePropertiesManager implements IDisposable {\n /**\n * Used in tests to avoid collisions between multiple runs using the same storage\n * @internal\n */\n public static FAVORITES_IDENTIFIER_PREFIX = \"\";\n\n /** Event raised after favorite properties have changed. */\n public onFavoritesChanged = new BeEvent<() => void>();\n\n private _storage: IFavoritePropertiesStorage;\n private _globalProperties: Set<PropertyFullName> | undefined;\n private _iTwinProperties: Map<string, Set<PropertyFullName>>;\n private _imodelProperties: Map<string, Set<PropertyFullName>>;\n private _imodelBaseClassesByClass: Map<string, { [className: string]: string[] }>;\n private _imodelInitializationPromises: Map<IModelConnection, Promise<void>>;\n\n /** Property order is saved only in iModel scope */\n private _propertiesOrder: Map<string, FavoritePropertiesOrderInfo[]>;\n\n public constructor(props: FavoritePropertiesManagerProps) {\n this._storage = props.storage;\n this._iTwinProperties = new Map<string, Set<PropertyFullName>>();\n this._imodelProperties = new Map<string, Set<PropertyFullName>>();\n this._propertiesOrder = new Map<string, FavoritePropertiesOrderInfo[]>();\n this._imodelBaseClassesByClass = new Map<string, { [className: string]: string[] }>();\n this._imodelInitializationPromises = new Map<IModelConnection, Promise<void>>();\n }\n\n public dispose() {\n // istanbul ignore else\n if (isIDisposable(this._storage)) {\n this._storage.dispose();\n }\n }\n\n /**\n * Initialize favorite properties for the provided IModelConnection.\n * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].\n */\n public initializeConnection = async (imodel: IModelConnection) => {\n const imodelId = imodel.iModelId!;\n const iTwinId = imodel.iTwinId!;\n\n if (this._globalProperties === undefined) {\n this._globalProperties = (await this._storage.loadProperties()) || new Set<PropertyFullName>();\n }\n\n if (!this._iTwinProperties.has(iTwinId)) {\n const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set<PropertyFullName>();\n this._iTwinProperties.set(iTwinId, iTwinProperties);\n }\n\n if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {\n const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set<PropertyFullName>();\n this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);\n }\n const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];\n this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);\n await this._adjustPropertyOrderInfos(iTwinId, imodelId);\n };\n\n /**\n * Function that removes order information of properties that are no longer\n * favorited and adds missing order information for favorited properties.\n */\n private _adjustPropertyOrderInfos = async (iTwinId: string, imodelId: string) => {\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n\n const globalProperties = this._globalProperties!;\n const iTwinProperties = this._iTwinProperties.get(iTwinId)!;\n const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n // favorite property infos that need to be added to the propertiesOrder array\n const infosToAdd = new Set<string>([...globalProperties, ...iTwinProperties, ...imodelProperties]);\n\n for (let i = propertiesOrder.length - 1; i >= 0; i--) {\n if (infosToAdd.has(propertiesOrder[i].name)) {\n infosToAdd.delete(propertiesOrder[i].name);\n } else {\n propertiesOrder.splice(i, 1);\n }\n }\n\n infosToAdd.forEach((info) =>\n propertiesOrder.push({\n name: info,\n parentClassName: getPropertyClassName(info),\n orderedTimestamp: new Date(),\n priority: 0,\n }),\n );\n\n let priority = propertiesOrder.length;\n propertiesOrder.forEach((oi) => (oi.priority = priority--));\n };\n\n private isInitialized(imodel: IModelConnection): boolean {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n return this._imodelProperties.has(getiModelInfo(iTwinId, imodelId));\n }\n\n /**\n * Checks if [[FavoritePropertiesManager.initializeConnection]] has been called for a given imodel.\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\n */\n private validateInitialization(imodel: IModelConnection) {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n if (!this.isInitialized(imodel)) {\n throw Error(\n `Favorite properties are not initialized for iModel: '${imodelId}', in iTwin: '${iTwinId}'. Call initializeConnection() with an IModelConnection to initialize.`,\n );\n }\n }\n\n /**\n * Calls [[FavoritePropertiesManager.initializeConnection]] and caches the promise which should be awaited by calling [[FavoritePropertiesManager.ensureInitialized]].\n * @internal\n */\n public startConnectionInitialization(imodel: IModelConnection) {\n if (!this.isInitialized(imodel) && !this._imodelInitializationPromises.has(imodel)) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._imodelInitializationPromises.set(imodel, this.initializeConnection(imodel));\n }\n }\n\n /**\n * Performs the initialization process or finishes the one that was started by [[FavoritePropertiesManager.startConnectionInitialization]].\n * @internal\n */\n public async ensureInitialized(imodel: IModelConnection) {\n if (this.isInitialized(imodel)) {\n return;\n }\n\n let promise = this._imodelInitializationPromises.get(imodel);\n if (!promise) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n promise = this.initializeConnection(imodel);\n\n // Put the promise in the map to avoid possible multiple initializations from different promises.\n this._imodelInitializationPromises.set(imodel, promise);\n }\n\n await promise;\n\n // Remove this promise from the map, because the next time this method is called, `this.isInitialized` should return true.\n this._imodelInitializationPromises.delete(imodel);\n }\n\n /**\n * Adds favorite properties into a certain scope.\n * @param field Field that contains properties. If field contains multiple properties, all of them will be favorited.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to put the favorite properties into.\n */\n public async add(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n let favoriteProperties: Set<PropertyFullName>;\n let saveProperties: (properties: Set<PropertyFullName>) => Promise<void>;\n switch (scope) {\n case FavoritePropertiesScope.Global:\n favoriteProperties = this._globalProperties!;\n saveProperties = async (properties) => this._storage.saveProperties(properties);\n break;\n case FavoritePropertiesScope.ITwin:\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId);\n break;\n default:\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId);\n }\n\n const countBefore = favoriteProperties.size;\n const fieldInfos = getFieldInfos(field);\n fieldInfos.forEach((info) => favoriteProperties.add(info));\n if (favoriteProperties.size !== countBefore) {\n const saves: Array<Promise<void>> = [];\n saves.push(saveProperties(favoriteProperties));\n\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n addOrderInfos(propertiesOrder, createFieldOrderInfos(field));\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\n\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n }\n\n /**\n * Removes favorite properties from a scope specified and all the more general scopes.\n * @param field Field that contains properties. If field contains multiple properties, all of them will be un-favorited.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to remove the favorite properties from. It also removes from more general scopes.\n */\n public async remove(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldInfos = getFieldInfos(field);\n const workingScopes: Array<{ properties: Set<PropertyFullName>; save: (properties: Set<PropertyFullName>) => Promise<void> }> = [];\n workingScopes.push({\n properties: this._globalProperties!,\n save: async (properties) => this._storage.saveProperties(properties),\n });\n if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {\n workingScopes.push({\n properties: this._iTwinProperties.get(iTwinId)!,\n save: async (properties) => this._storage.saveProperties(properties, iTwinId),\n });\n }\n if (scope === FavoritePropertiesScope.IModel) {\n workingScopes.push({\n properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!,\n save: async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId),\n });\n }\n\n const saves: Array<Promise<void>> = [];\n let favoritesChanged = false;\n for (const { properties, save } of workingScopes) {\n const countBefore = properties.size;\n fieldInfos.forEach((info) => properties.delete(info));\n if (properties.size !== countBefore) {\n saves.push(save(properties));\n favoritesChanged = true;\n }\n }\n if (!favoritesChanged) {\n return;\n }\n\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n removeOrderInfos(propertiesOrder, createFieldOrderInfos(field));\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\n\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n\n /**\n * Removes all favorite properties from a certain scope.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to remove the favorite properties from.\n */\n public async clear(imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n let favoriteProperties: Set<PropertyFullName>;\n let saveProperties: () => Promise<void>;\n switch (scope) {\n case FavoritePropertiesScope.Global:\n favoriteProperties = this._globalProperties!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>());\n break;\n case FavoritePropertiesScope.ITwin:\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId);\n break;\n default:\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId, imodelId);\n }\n\n if (favoriteProperties.size === 0) {\n return;\n }\n\n favoriteProperties.clear();\n const saves: Array<Promise<void>> = [];\n saves.push(saveProperties());\n saves.push(this._adjustPropertyOrderInfos(iTwinId, imodelId));\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n\n /**\n * Check if field contains at least one favorite property.\n * @param field Field that contains properties.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.hasAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\n */\n public has(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): boolean {\n this.validateInitialization(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldInfos = getFieldInfos(field);\n return (\n setHasAny(this._globalProperties!, fieldInfos) ||\n (scope !== FavoritePropertiesScope.Global && setHasAny(this._iTwinProperties.get(iTwinId)!, fieldInfos)) ||\n (scope === FavoritePropertiesScope.IModel && setHasAny(this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!, fieldInfos))\n );\n }\n\n /**\n * Check if field contains at least one favorite property.\n * @param field Field that contains properties.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\n */\n public async hasAsync(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<boolean> {\n await this.ensureInitialized(imodel);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.has(field, imodel, scope);\n }\n\n /**\n * Sorts an array of fields with respect to favorite property order.\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\n * @param imodel IModelConnection.\n * @param fields Array of Field's that needs to be sorted.\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\n */\n public sortFields = (imodel: IModelConnection, fields: Field[]): Field[] => {\n this.validateInitialization(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldPriority = new Map<Field, number>();\n fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));\n\n const sortFunction = (left: Field, right: Field): number => {\n const lp = fieldPriority.get(left)!;\n const rp = fieldPriority.get(right)!;\n return lp < rp\n ? 1\n : lp > rp\n ? -1\n : left.priority < right.priority\n ? 1 // if favorite fields have equal priorities, sort by field priority\n : left.priority > right.priority\n ? -1\n : left.name.localeCompare(right.name);\n };\n\n return fields.sort(sortFunction);\n };\n\n /**\n * Sorts an array of fields with respect to favorite property order.\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\n * @param imodel IModelConnection.\n * @param fields Array of Field's that needs to be sorted.\n */\n public async sortFieldsAsync(imodel: IModelConnection, fields: Field[]): Promise<Field[]> {\n await this.ensureInitialized(imodel);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.sortFields(imodel, fields);\n }\n\n private getFieldPriority(field: Field, iTwinId: string, imodelId: string): number {\n const orderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n const fieldOrderInfos = getFieldOrderInfos(field, orderInfos);\n if (fieldOrderInfos.length === 0) {\n return -1;\n }\n const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);\n return mostRecent.priority;\n }\n\n private _getBaseClassesByClass = async (imodel: IModelConnection, neededClasses: Set<string>): Promise<{ [className: string]: string[] }> => {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const imodelInfo = getiModelInfo(iTwinId, imodelId);\n let baseClasses: { [className: string]: string[] };\n if (this._imodelBaseClassesByClass.has(imodelInfo)) {\n baseClasses = this._imodelBaseClassesByClass.get(imodelInfo)!;\n } else {\n this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));\n }\n\n const missingClasses = new Set<string>();\n neededClasses.forEach((className) => {\n if (!baseClasses.hasOwnProperty(className)) {\n missingClasses.add(className);\n }\n });\n if (missingClasses.size === 0) {\n return baseClasses;\n }\n\n const query = `\n SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS \"ClassFullName\", (baseSchema.Name || ':' || baseClass.Name) AS \"BaseClassFullName\"\n FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels\n INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId\n INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id\n INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\n INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\n WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(\",\")})`;\n const reader = imodel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n while (await reader.step()) {\n const row = reader.current.toRow();\n if (!(row.classFullName in baseClasses)) {\n baseClasses[row.classFullName] = [];\n }\n baseClasses[row.classFullName].push(row.baseClassFullName);\n }\n return baseClasses;\n };\n\n /** Changes field properties priorities to lower than another fields priority\n * @param imodel IModelConnection.\n * @param field Field that priority is being changed.\n * @param afterField Field that goes before the moved field. If undefined the moving field is changed to the highest priority (to the top).\n * @param visibleFields Array of fields to move the field in.\n */\n public async changeFieldPriority(imodel: IModelConnection, field: Field, afterField: Field | undefined, visibleFields: Field[]) {\n /**\n * How it works:\n * 1. Gets the orderInfo's for `field` (`orderInfo`) and `afterField` (`afterOrderInfo`) by selecting the most recent order informations for each field\n * 2. Iterates all orderInfo's that are in between `afterOrderInfo` and `orderInfo` when sorted by priority\n * 3. For each iterated orderInfo it checks if it is relevant:\n * 3.1. If orderInfo belongs to a primitive property, orderInfo is relevant\n * 3.2. If orderInfo's field is visible, orderInfo is relevant\n * 3.3. If orderInfo's class has a base class or itself in previously labeled relevant orderInfo's, orderInfo is relevant\n * 3.4. If 3.1 - 3.3 don't pass, orderInfo is irrelevant\n * 4. Irrelevant orderInfos's get moved after `orderInfo` (depends on the direction)\n * 5. All `field` orderInfo's get moved after `afterOrderInfo`\n */\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n if (field === afterField) {\n throw Error(\"`field` can not be the same as `afterField`.\");\n }\n\n const allOrderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n\n const findFieldOrderInfoData = (f: Field) => {\n if (!visibleFields.includes(f)) {\n throw Error(\"Field is not contained in visible fields.\");\n }\n const infos = getFieldOrderInfos(f, allOrderInfos);\n\n if (infos.length === 0) {\n throw Error(\"Field has no property order information.\");\n }\n const info = getMostRecentOrderInfo(infos);\n const index = allOrderInfos.indexOf(info);\n return { infos, mostRecent: { info, index } };\n };\n\n const {\n infos: movingOrderInfos,\n mostRecent: { index: orderInfoIndex },\n } = findFieldOrderInfoData(field);\n\n let afterOrderInfo: FavoritePropertiesOrderInfo | undefined;\n let afterOrderInfoIndex;\n if (afterField === undefined) {\n afterOrderInfo = undefined;\n afterOrderInfoIndex = -1;\n } else {\n ({\n mostRecent: { info: afterOrderInfo, index: afterOrderInfoIndex },\n } = findFieldOrderInfoData(afterField));\n }\n\n let direction: Direction; // where to go from `afterOrderInfo` to `orderInfo`\n let startIndex: number;\n if (orderInfoIndex < afterOrderInfoIndex) {\n direction = Direction.Up;\n startIndex = afterOrderInfoIndex;\n } else {\n direction = Direction.Down;\n startIndex = afterOrderInfoIndex + 1;\n }\n\n const neededClassNames: Set<string> = allOrderInfos.reduce((classNames: Set<string>, oi) => {\n if (oi.parentClassName) {\n classNames.add(oi.parentClassName);\n }\n return classNames;\n }, new Set<string>());\n const baseClassesByClass = await this._getBaseClassesByClass(imodel, neededClassNames);\n\n const visibleOrderInfos = visibleFields.reduce(\n (union: FavoritePropertiesOrderInfo[], currField) => union.concat(getFieldOrderInfos(currField, allOrderInfos)),\n [],\n );\n const irrelevantOrderInfos: FavoritePropertiesOrderInfo[] = []; // orderInfos's that won't change their logical order in respect to other properties\n const relevantClasses: Set<ClassId> = new Set<ClassId>(); // currently relevant classes\n\n for (let i = startIndex; i !== orderInfoIndex; i += direction) {\n const currOrderInfo = allOrderInfos[i];\n\n // primitive properties are always relevant, because we can't determine their relevance based on the class hierarchy\n if (currOrderInfo.parentClassName === undefined) {\n continue;\n }\n\n const visible = visibleOrderInfos.includes(currOrderInfo);\n if (visible) {\n relevantClasses.add(currOrderInfo.parentClassName);\n continue;\n }\n\n const hasBaseClasses = baseClassesByClass[currOrderInfo.parentClassName].some((classId) => relevantClasses.has(classId));\n if (hasBaseClasses) {\n continue;\n }\n\n if (direction === Direction.Down) {\n irrelevantOrderInfos.push(currOrderInfo);\n } else {\n irrelevantOrderInfos.unshift(currOrderInfo);\n }\n }\n\n // remove irrelevantOrderInfo's to add them after the `orderInfo`\n irrelevantOrderInfos.forEach((foi) => {\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\n allOrderInfos.splice(index, 1);\n });\n\n // remove movingOrderInfos's to add them after the `afterOrderInfo`\n movingOrderInfos.forEach((foi) => {\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\n allOrderInfos.splice(index, 1);\n });\n movingOrderInfos.forEach((oi) => (oi.orderedTimestamp = new Date()));\n\n afterOrderInfoIndex = afterOrderInfo === undefined ? -1 : allOrderInfos.indexOf(afterOrderInfo);\n allOrderInfos.splice(afterOrderInfoIndex + 1, 0, ...movingOrderInfos);\n allOrderInfos.splice(afterOrderInfoIndex + 1 + (direction === Direction.Up ? movingOrderInfos.length : 0), 0, ...irrelevantOrderInfos);\n\n // reassign priority numbers\n let priority = allOrderInfos.length;\n allOrderInfos.forEach((oi) => (oi.priority = priority--));\n\n await this._storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);\n this.onFavoritesChanged.raiseEvent();\n }\n}\n\nenum Direction {\n Up = -1,\n Down = 1,\n}\n\nconst getiModelInfo = (iTwinId: string, imodelId: string) => `${iTwinId}/${imodelId}`;\n\nconst getPropertiesFieldPropertyNames = (field: PropertiesField) => {\n const nestingPrefix = getNestingPrefix(field.parent);\n return field.properties.map(\n (property) => `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${property.property.classInfo.name}:${property.property.name}`,\n );\n};\n\nconst getNestedContentFieldPropertyName = (field: NestedContentField) => {\n const nestingPrefix = getNestingPrefix(field);\n return `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${field.contentClassInfo.name}`;\n};\n\nconst getNestingPrefix = (field: NestedContentField | undefined) => {\n const path: string[] = [];\n let curr = field;\n while (curr !== undefined) {\n curr.pathToPrimaryClass.forEach((rel) => {\n // Relationship directions are reversed, because we are generating a relationship list starting from the parent\n path.push(`${rel.isForwardRelationship ? \"B\" : \"F\"}:${rel.relationshipInfo.name}`);\n path.push(rel.targetClassInfo.name);\n });\n curr = curr.parent;\n }\n if (path.length === 0) {\n return \"\";\n }\n\n path.reverse();\n return `${path.join(\"-\")}-`;\n};\n\nconst getPropertyClassName = (propertyName: PropertyFullName): string | undefined => {\n const propertyNameStart = propertyName.split(\"-\")[0];\n const parts = propertyNameStart.split(\":\").length;\n if (parts === 1) {\n // primitive\n return undefined;\n }\n if (parts === 2) {\n // nested property OR nested property parent class OR regular property parent class\n return propertyNameStart;\n }\n // regular property without parent class\n return propertyNameStart.substring(0, propertyName.lastIndexOf(\":\"));\n};\n\n/** @internal */\nexport const getFieldInfos = (field: Field): Set<PropertyFullName> => {\n const fieldInfos: Set<PropertyFullName> = new Set<PropertyFullName>();\n if (field.isPropertiesField()) {\n getPropertiesFieldPropertyNames(field).forEach((info) => fieldInfos.add(info));\n } else if (field.isNestedContentField()) {\n fieldInfos.add(getNestedContentFieldPropertyName(field));\n } else {\n fieldInfos.add(`${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${field.name}`);\n }\n return fieldInfos;\n};\n\nconst setHasAny = (set: Set<string>, lookup: Set<string>) => {\n for (const key of lookup) {\n if (set.has(key)) {\n return true;\n }\n }\n return false;\n};\n\nconst addOrderInfos = (dest: FavoritePropertiesOrderInfo[], source: FavoritePropertiesOrderInfo[]) => {\n source.forEach((si) => {\n const index = dest.findIndex((di) => di.name === si.name);\n if (index === -1) {\n si.orderedTimestamp = new Date();\n dest.push(si);\n }\n });\n let priority = dest.length;\n dest.forEach((info) => (info.priority = priority--));\n};\n\nconst removeOrderInfos = (container: FavoritePropertiesOrderInfo[], toRemove: FavoritePropertiesOrderInfo[]) => {\n toRemove.forEach((roi) => {\n const index = container.findIndex((oi) => oi.name === roi.name);\n /* istanbul ignore else */\n if (index >= 0) {\n container.splice(index, 1);\n }\n });\n};\n\n/** @internal */\nexport const createFieldOrderInfos = (field: Field): FavoritePropertiesOrderInfo[] => {\n if (field.isNestedContentField()) {\n const propertyName = getNestedContentFieldPropertyName(field);\n return [\n {\n parentClassName: getPropertyClassName(propertyName),\n name: propertyName,\n priority: 0,\n orderedTimestamp: new Date(),\n },\n ];\n }\n if (field.isPropertiesField()) {\n return getPropertiesFieldPropertyNames(field).map((propertyName) => ({\n parentClassName: getPropertyClassName(propertyName),\n name: propertyName,\n priority: 0,\n orderedTimestamp: new Date(),\n }));\n }\n return [\n {\n parentClassName: undefined,\n name: field.name,\n priority: 0,\n orderedTimestamp: new Date(),\n },\n ];\n};\n\nconst getFieldOrderInfos = (field: Field, orderInfos: FavoritePropertiesOrderInfo[]): FavoritePropertiesOrderInfo[] => {\n const fieldOrderInfos: FavoritePropertiesOrderInfo[] = [];\n const tryAddOrderInfo = (name: string) => {\n const fieldOrderInfo = orderInfos.find((oi) => oi.name === name);\n if (fieldOrderInfo !== undefined) {\n fieldOrderInfos.push(fieldOrderInfo);\n }\n };\n\n if (field.isPropertiesField()) {\n getPropertiesFieldPropertyNames(field).forEach(tryAddOrderInfo);\n } else if (field.isNestedContentField()) {\n tryAddOrderInfo(getNestedContentFieldPropertyName(field));\n } else {\n tryAddOrderInfo(field.name);\n }\n\n return fieldOrderInfos;\n};\n\nconst getMostRecentOrderInfo = (orderInfos: FavoritePropertiesOrderInfo[]) =>\n orderInfos.reduce((recent, curr) => (recent && recent.orderedTimestamp >= curr.orderedTimestamp ? recent : curr));\n"]}
1
+ {"version":3,"file":"FavoritePropertiesManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.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 { BeEvent, IDisposable, isIDisposable } from \"@itwin/core-bentley\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport { ClassId, Field, NestedContentField, PropertiesField } from \"@itwin/presentation-common\";\nimport { IFavoritePropertiesStorage } from \"./FavoritePropertiesStorage\";\n\n/**\n * Scopes that favorite properties can be stored in.\n * @public\n */\nexport enum FavoritePropertiesScope {\n Global,\n ITwin,\n IModel,\n}\n\n/**\n * Format:\n * Regular property - [{path from parent class}-]{schema name}:{class name}:{property name}.\n * Nested property - [{path from parent class}-]{content class schema name}:{content class name}.\n * Primitive property - {field name}.\n * @public\n */\nexport type PropertyFullName = string;\n\n/**\n * Holds the information of favorite properties ordering.\n * @public\n */\nexport interface FavoritePropertiesOrderInfo {\n parentClassName: string | undefined;\n name: PropertyFullName;\n priority: number;\n orderedTimestamp: Date;\n}\n\n/**\n * Properties for initializing [[FavoritePropertiesManager]]\n * @public\n */\nexport interface FavoritePropertiesManagerProps {\n /**\n * Implementation of a persistence layer for storing favorite properties and their order.\n * @public\n */\n storage: IFavoritePropertiesStorage;\n}\n\n/**\n * The favorite property manager which lets to store favorite properties\n * and check if field contains favorite properties.\n *\n * @public\n */\nexport class FavoritePropertiesManager implements IDisposable {\n /**\n * Used in tests to avoid collisions between multiple runs using the same storage\n * @internal\n */\n public static FAVORITES_IDENTIFIER_PREFIX = \"\";\n\n /** Event raised after favorite properties have changed. */\n public onFavoritesChanged = new BeEvent<() => void>();\n\n private _storage: IFavoritePropertiesStorage;\n private _globalProperties: Set<PropertyFullName> | undefined;\n private _iTwinProperties: Map<string, Set<PropertyFullName>>;\n private _imodelProperties: Map<string, Set<PropertyFullName>>;\n private _imodelBaseClassesByClass: Map<string, { [className: string]: string[] }>;\n private _imodelInitializationPromises: Map<IModelConnection, Promise<void>>;\n\n /** Property order is saved only in iModel scope */\n private _propertiesOrder: Map<string, FavoritePropertiesOrderInfo[]>;\n\n public constructor(props: FavoritePropertiesManagerProps) {\n this._storage = props.storage;\n this._iTwinProperties = new Map<string, Set<PropertyFullName>>();\n this._imodelProperties = new Map<string, Set<PropertyFullName>>();\n this._propertiesOrder = new Map<string, FavoritePropertiesOrderInfo[]>();\n this._imodelBaseClassesByClass = new Map<string, { [className: string]: string[] }>();\n this._imodelInitializationPromises = new Map<IModelConnection, Promise<void>>();\n }\n\n public dispose() {\n // istanbul ignore else\n if (isIDisposable(this._storage)) {\n this._storage.dispose();\n }\n }\n\n /**\n * Initialize favorite properties for the provided IModelConnection.\n * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].\n */\n public initializeConnection = async (imodel: IModelConnection) => {\n const imodelId = imodel.iModelId!;\n const iTwinId = imodel.iTwinId!;\n\n if (this._globalProperties === undefined) {\n this._globalProperties = (await this._storage.loadProperties()) || new Set<PropertyFullName>();\n }\n\n if (!this._iTwinProperties.has(iTwinId)) {\n const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set<PropertyFullName>();\n this._iTwinProperties.set(iTwinId, iTwinProperties);\n }\n\n if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {\n const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set<PropertyFullName>();\n this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);\n }\n const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];\n this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);\n await this._adjustPropertyOrderInfos(iTwinId, imodelId);\n };\n\n /**\n * Function that removes order information of properties that are no longer\n * favorited and adds missing order information for favorited properties.\n */\n private _adjustPropertyOrderInfos = async (iTwinId: string, imodelId: string) => {\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n\n const globalProperties = this._globalProperties!;\n const iTwinProperties = this._iTwinProperties.get(iTwinId)!;\n const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n // favorite property infos that need to be added to the propertiesOrder array\n const infosToAdd = new Set<string>([...globalProperties, ...iTwinProperties, ...imodelProperties]);\n\n for (let i = propertiesOrder.length - 1; i >= 0; i--) {\n if (infosToAdd.has(propertiesOrder[i].name)) {\n infosToAdd.delete(propertiesOrder[i].name);\n } else {\n propertiesOrder.splice(i, 1);\n }\n }\n\n infosToAdd.forEach((info) =>\n propertiesOrder.push({\n name: info,\n parentClassName: getPropertyClassName(info),\n orderedTimestamp: new Date(),\n priority: 0,\n }),\n );\n\n let priority = propertiesOrder.length;\n propertiesOrder.forEach((oi) => (oi.priority = priority--));\n };\n\n private isInitialized(imodel: IModelConnection): boolean {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n return this._imodelProperties.has(getiModelInfo(iTwinId, imodelId));\n }\n\n /**\n * Checks if [[FavoritePropertiesManager.initializeConnection]] has been called for a given imodel.\n * Can be removed when [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]] are removed.\n */\n private validateInitialization(imodel: IModelConnection) {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n if (!this.isInitialized(imodel)) {\n throw Error(\n `Favorite properties are not initialized for iModel: '${imodelId}', in iTwin: '${iTwinId}'. Call initializeConnection() with an IModelConnection to initialize.`,\n );\n }\n }\n\n /**\n * Calls [[FavoritePropertiesManager.initializeConnection]] and caches the promise which should be awaited by calling [[FavoritePropertiesManager.ensureInitialized]].\n * @internal\n */\n public startConnectionInitialization(imodel: IModelConnection) {\n if (!this.isInitialized(imodel) && !this._imodelInitializationPromises.has(imodel)) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._imodelInitializationPromises.set(imodel, this.initializeConnection(imodel));\n }\n }\n\n /**\n * Performs the initialization process or finishes the one that was started by [[FavoritePropertiesManager.startConnectionInitialization]].\n * @internal\n */\n public async ensureInitialized(imodel: IModelConnection) {\n if (this.isInitialized(imodel)) {\n return;\n }\n\n let promise = this._imodelInitializationPromises.get(imodel);\n if (!promise) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n promise = this.initializeConnection(imodel);\n\n // Put the promise in the map to avoid possible multiple initializations from different promises.\n this._imodelInitializationPromises.set(imodel, promise);\n }\n\n await promise;\n\n // Remove this promise from the map, because the next time this method is called, `this.isInitialized` should return true.\n this._imodelInitializationPromises.delete(imodel);\n }\n\n /**\n * Adds favorite properties into a certain scope.\n * @param field Field that contains properties. If field contains multiple properties, all of them will be favorited.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to put the favorite properties into.\n */\n public async add(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n let favoriteProperties: Set<PropertyFullName>;\n let saveProperties: (properties: Set<PropertyFullName>) => Promise<void>;\n switch (scope) {\n case FavoritePropertiesScope.Global:\n favoriteProperties = this._globalProperties!;\n saveProperties = async (properties) => this._storage.saveProperties(properties);\n break;\n case FavoritePropertiesScope.ITwin:\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId);\n break;\n default:\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId);\n }\n\n const countBefore = favoriteProperties.size;\n const fieldInfos = getFieldInfos(field);\n fieldInfos.forEach((info) => favoriteProperties.add(info));\n if (favoriteProperties.size !== countBefore) {\n const saves: Array<Promise<void>> = [];\n saves.push(saveProperties(favoriteProperties));\n\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n addOrderInfos(propertiesOrder, createFieldOrderInfos(field));\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\n\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n }\n\n /**\n * Removes favorite properties from a scope specified and all the more general scopes.\n * @param field Field that contains properties. If field contains multiple properties, all of them will be un-favorited.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to remove the favorite properties from. It also removes from more general scopes.\n */\n public async remove(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldInfos = getFieldInfos(field);\n const workingScopes: Array<{ properties: Set<PropertyFullName>; save: (properties: Set<PropertyFullName>) => Promise<void> }> = [];\n workingScopes.push({\n properties: this._globalProperties!,\n save: async (properties) => this._storage.saveProperties(properties),\n });\n if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {\n workingScopes.push({\n properties: this._iTwinProperties.get(iTwinId)!,\n save: async (properties) => this._storage.saveProperties(properties, iTwinId),\n });\n }\n if (scope === FavoritePropertiesScope.IModel) {\n workingScopes.push({\n properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!,\n save: async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId),\n });\n }\n\n const saves: Array<Promise<void>> = [];\n let favoritesChanged = false;\n for (const { properties, save } of workingScopes) {\n const countBefore = properties.size;\n fieldInfos.forEach((info) => properties.delete(info));\n if (properties.size !== countBefore) {\n saves.push(save(properties));\n favoritesChanged = true;\n }\n }\n if (!favoritesChanged) {\n return;\n }\n\n const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n removeOrderInfos(propertiesOrder, createFieldOrderInfos(field));\n saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));\n\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n\n /**\n * Removes all favorite properties from a certain scope.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to remove the favorite properties from.\n */\n public async clear(imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<void> {\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n let favoriteProperties: Set<PropertyFullName>;\n let saveProperties: () => Promise<void>;\n switch (scope) {\n case FavoritePropertiesScope.Global:\n favoriteProperties = this._globalProperties!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>());\n break;\n case FavoritePropertiesScope.ITwin:\n favoriteProperties = this._iTwinProperties.get(iTwinId)!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId);\n break;\n default:\n favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!;\n saveProperties = async () => this._storage.saveProperties(new Set<PropertyFullName>(), iTwinId, imodelId);\n }\n\n if (favoriteProperties.size === 0) {\n return;\n }\n\n favoriteProperties.clear();\n const saves: Array<Promise<void>> = [];\n saves.push(saveProperties());\n saves.push(this._adjustPropertyOrderInfos(iTwinId, imodelId));\n await Promise.all(saves);\n this.onFavoritesChanged.raiseEvent();\n }\n\n /**\n * Check if field contains at least one favorite property.\n * @param field Field that contains properties.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.hasAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\n */\n public has(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): boolean {\n this.validateInitialization(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldInfos = getFieldInfos(field);\n return (\n setHasAny(this._globalProperties!, fieldInfos) ||\n (scope !== FavoritePropertiesScope.Global && setHasAny(this._iTwinProperties.get(iTwinId)!, fieldInfos)) ||\n (scope === FavoritePropertiesScope.IModel && setHasAny(this._imodelProperties.get(getiModelInfo(iTwinId, imodelId))!, fieldInfos))\n );\n }\n\n /**\n * Check if field contains at least one favorite property.\n * @param field Field that contains properties.\n * @param imodel IModelConnection.\n * @param scope FavoritePropertiesScope to check for favorite properties. It also checks the more general scopes.\n */\n public async hasAsync(field: Field, imodel: IModelConnection, scope: FavoritePropertiesScope): Promise<boolean> {\n await this.ensureInitialized(imodel);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.has(field, imodel, scope);\n }\n\n /**\n * Sorts an array of fields with respect to favorite property order.\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\n * @param imodel IModelConnection.\n * @param fields Array of Field's that needs to be sorted.\n * @note `initializeConnection` must be called with the `imodel` before calling this function.\n * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].\n */\n public sortFields = (imodel: IModelConnection, fields: Field[]): Field[] => {\n this.validateInitialization(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const fieldPriority = new Map<Field, number>();\n fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));\n\n const sortFunction = (left: Field, right: Field): number => {\n const lp = fieldPriority.get(left)!;\n const rp = fieldPriority.get(right)!;\n return lp < rp\n ? 1\n : lp > rp\n ? -1\n : left.priority < right.priority\n ? 1 // if favorite fields have equal priorities, sort by field priority\n : left.priority > right.priority\n ? -1\n : left.name.localeCompare(right.name);\n };\n\n return fields.sort(sortFunction);\n };\n\n /**\n * Sorts an array of fields with respect to favorite property order.\n * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.\n * @param imodel IModelConnection.\n * @param fields Array of Field's that needs to be sorted.\n */\n public async sortFieldsAsync(imodel: IModelConnection, fields: Field[]): Promise<Field[]> {\n await this.ensureInitialized(imodel);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.sortFields(imodel, fields);\n }\n\n private getFieldPriority(field: Field, iTwinId: string, imodelId: string): number {\n const orderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n const fieldOrderInfos = getFieldOrderInfos(field, orderInfos);\n if (fieldOrderInfos.length === 0) {\n return -1;\n }\n const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);\n return mostRecent.priority;\n }\n\n private _getBaseClassesByClass = async (imodel: IModelConnection, neededClasses: Set<string>): Promise<{ [className: string]: string[] }> => {\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n const imodelInfo = getiModelInfo(iTwinId, imodelId);\n let baseClasses: { [className: string]: string[] };\n if (this._imodelBaseClassesByClass.has(imodelInfo)) {\n baseClasses = this._imodelBaseClassesByClass.get(imodelInfo)!;\n } else {\n this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));\n }\n\n const missingClasses = new Set<string>();\n neededClasses.forEach((className) => {\n if (!baseClasses.hasOwnProperty(className)) {\n missingClasses.add(className);\n }\n });\n if (missingClasses.size === 0) {\n return baseClasses;\n }\n\n const query = `\n SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS \"ClassFullName\", (baseSchema.Name || ':' || baseClass.Name) AS \"BaseClassFullName\"\n FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels\n INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId\n INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id\n INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\n INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\n WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(\",\")})`;\n const reader = imodel.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n while (await reader.step()) {\n const row = reader.current.toRow();\n if (!(row.classFullName in baseClasses)) {\n baseClasses[row.classFullName] = [];\n }\n baseClasses[row.classFullName].push(row.baseClassFullName);\n }\n return baseClasses;\n };\n\n /** Changes field properties priorities to lower than another fields priority\n * @param imodel IModelConnection.\n * @param field Field that priority is being changed.\n * @param afterField Field that goes before the moved field. If undefined the moving field is changed to the highest priority (to the top).\n * @param visibleFields Array of fields to move the field in.\n */\n public async changeFieldPriority(imodel: IModelConnection, field: Field, afterField: Field | undefined, visibleFields: Field[]) {\n /**\n * How it works:\n * 1. Gets the orderInfo's for `field` (`orderInfo`) and `afterField` (`afterOrderInfo`) by selecting the most recent order informations for each field\n * 2. Iterates all orderInfo's that are in between `afterOrderInfo` and `orderInfo` when sorted by priority\n * 3. For each iterated orderInfo it checks if it is relevant:\n * 3.1. If orderInfo belongs to a primitive property, orderInfo is relevant\n * 3.2. If orderInfo's field is visible, orderInfo is relevant\n * 3.3. If orderInfo's class has a base class or itself in previously labeled relevant orderInfo's, orderInfo is relevant\n * 3.4. If 3.1 - 3.3 don't pass, orderInfo is irrelevant\n * 4. Irrelevant orderInfos's get moved after `orderInfo` (depends on the direction)\n * 5. All `field` orderInfo's get moved after `afterOrderInfo`\n */\n await this.ensureInitialized(imodel);\n const iTwinId = imodel.iTwinId!;\n const imodelId = imodel.iModelId!;\n\n if (field === afterField) {\n throw Error(\"`field` can not be the same as `afterField`.\");\n }\n\n const allOrderInfos = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId))!;\n\n const findFieldOrderInfoData = (f: Field) => {\n if (!visibleFields.includes(f)) {\n throw Error(\"Field is not contained in visible fields.\");\n }\n const infos = getFieldOrderInfos(f, allOrderInfos);\n\n if (infos.length === 0) {\n throw Error(\"Field has no property order information.\");\n }\n const info = getMostRecentOrderInfo(infos);\n const index = allOrderInfos.indexOf(info);\n return { infos, mostRecent: { info, index } };\n };\n\n const {\n infos: movingOrderInfos,\n mostRecent: { index: orderInfoIndex },\n } = findFieldOrderInfoData(field);\n\n let afterOrderInfo: FavoritePropertiesOrderInfo | undefined;\n let afterOrderInfoIndex;\n if (afterField === undefined) {\n afterOrderInfo = undefined;\n afterOrderInfoIndex = -1;\n } else {\n ({\n mostRecent: { info: afterOrderInfo, index: afterOrderInfoIndex },\n } = findFieldOrderInfoData(afterField));\n }\n\n let direction: Direction; // where to go from `afterOrderInfo` to `orderInfo`\n let startIndex: number;\n if (orderInfoIndex < afterOrderInfoIndex) {\n direction = Direction.Up;\n startIndex = afterOrderInfoIndex;\n } else {\n direction = Direction.Down;\n startIndex = afterOrderInfoIndex + 1;\n }\n\n const neededClassNames: Set<string> = allOrderInfos.reduce((classNames: Set<string>, oi) => {\n if (oi.parentClassName) {\n classNames.add(oi.parentClassName);\n }\n return classNames;\n }, new Set<string>());\n const baseClassesByClass = await this._getBaseClassesByClass(imodel, neededClassNames);\n\n const visibleOrderInfos = visibleFields.reduce(\n (union: FavoritePropertiesOrderInfo[], currField) => union.concat(getFieldOrderInfos(currField, allOrderInfos)),\n [],\n );\n const irrelevantOrderInfos: FavoritePropertiesOrderInfo[] = []; // orderInfos's that won't change their logical order in respect to other properties\n const relevantClasses: Set<ClassId> = new Set<ClassId>(); // currently relevant classes\n\n for (let i = startIndex; i !== orderInfoIndex; i += direction) {\n const currOrderInfo = allOrderInfos[i];\n\n // primitive properties are always relevant, because we can't determine their relevance based on the class hierarchy\n if (currOrderInfo.parentClassName === undefined) {\n continue;\n }\n\n const visible = visibleOrderInfos.includes(currOrderInfo);\n if (visible) {\n relevantClasses.add(currOrderInfo.parentClassName);\n continue;\n }\n\n const hasBaseClasses = baseClassesByClass[currOrderInfo.parentClassName].some((classId) => relevantClasses.has(classId));\n if (hasBaseClasses) {\n continue;\n }\n\n if (direction === Direction.Down) {\n irrelevantOrderInfos.push(currOrderInfo);\n } else {\n irrelevantOrderInfos.unshift(currOrderInfo);\n }\n }\n\n // remove irrelevantOrderInfo's to add them after the `orderInfo`\n irrelevantOrderInfos.forEach((foi) => {\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\n allOrderInfos.splice(index, 1);\n });\n\n // remove movingOrderInfos's to add them after the `afterOrderInfo`\n movingOrderInfos.forEach((foi) => {\n const index = allOrderInfos.findIndex((oi) => oi.parentClassName === foi.parentClassName && oi.name === foi.name);\n allOrderInfos.splice(index, 1);\n });\n movingOrderInfos.forEach((oi) => (oi.orderedTimestamp = new Date()));\n\n afterOrderInfoIndex = afterOrderInfo === undefined ? -1 : allOrderInfos.indexOf(afterOrderInfo);\n allOrderInfos.splice(afterOrderInfoIndex + 1, 0, ...movingOrderInfos);\n allOrderInfos.splice(afterOrderInfoIndex + 1 + (direction === Direction.Up ? movingOrderInfos.length : 0), 0, ...irrelevantOrderInfos);\n\n // reassign priority numbers\n let priority = allOrderInfos.length;\n allOrderInfos.forEach((oi) => (oi.priority = priority--));\n\n await this._storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);\n this.onFavoritesChanged.raiseEvent();\n }\n}\n\nenum Direction {\n Up = -1,\n Down = 1,\n}\n\nconst getiModelInfo = (iTwinId: string, imodelId: string) => `${iTwinId}/${imodelId}`;\n\nconst getPropertiesFieldPropertyNames = (field: PropertiesField) => {\n const nestingPrefix = getNestingPrefix(field.parent);\n return field.properties.map(\n (property) => `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${property.property.classInfo.name}:${property.property.name}`,\n );\n};\n\nconst getNestedContentFieldPropertyName = (field: NestedContentField) => {\n const nestingPrefix = getNestingPrefix(field);\n return `${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${nestingPrefix}${field.contentClassInfo.name}`;\n};\n\nconst getNestingPrefix = (field: NestedContentField | undefined) => {\n const path: string[] = [];\n let curr = field;\n while (curr !== undefined) {\n curr.pathToPrimaryClass.forEach((rel) => {\n // Relationship directions are reversed, because we are generating a relationship list starting from the parent\n path.push(`${rel.isForwardRelationship ? \"B\" : \"F\"}:${rel.relationshipInfo.name}`);\n path.push(rel.targetClassInfo.name);\n });\n curr = curr.parent;\n }\n if (path.length === 0) {\n return \"\";\n }\n\n path.reverse();\n return `${path.join(\"-\")}-`;\n};\n\nconst getPropertyClassName = (propertyName: PropertyFullName): string | undefined => {\n const propertyNameStart = propertyName.split(\"-\")[0];\n const parts = propertyNameStart.split(\":\").length;\n if (parts === 1) {\n // primitive\n return undefined;\n }\n if (parts === 2) {\n // nested property OR nested property parent class OR regular property parent class\n return propertyNameStart;\n }\n // regular property without parent class\n return propertyNameStart.substring(0, propertyName.lastIndexOf(\":\"));\n};\n\n/** @internal */\nexport const getFieldInfos = (field: Field): Set<PropertyFullName> => {\n const fieldInfos: Set<PropertyFullName> = new Set<PropertyFullName>();\n if (field.isPropertiesField()) {\n getPropertiesFieldPropertyNames(field).forEach((info) => fieldInfos.add(info));\n } else if (field.isNestedContentField()) {\n fieldInfos.add(getNestedContentFieldPropertyName(field));\n } else {\n fieldInfos.add(`${FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX}${field.name}`);\n }\n return fieldInfos;\n};\n\nconst setHasAny = (set: Set<string>, lookup: Set<string>) => {\n for (const key of lookup) {\n if (set.has(key)) {\n return true;\n }\n }\n return false;\n};\n\nconst addOrderInfos = (dest: FavoritePropertiesOrderInfo[], source: FavoritePropertiesOrderInfo[]) => {\n source.forEach((si) => {\n const index = dest.findIndex((di) => di.name === si.name);\n if (index === -1) {\n si.orderedTimestamp = new Date();\n dest.push(si);\n }\n });\n let priority = dest.length;\n dest.forEach((info) => (info.priority = priority--));\n};\n\nconst removeOrderInfos = (container: FavoritePropertiesOrderInfo[], toRemove: FavoritePropertiesOrderInfo[]) => {\n toRemove.forEach((roi) => {\n const index = container.findIndex((oi) => oi.name === roi.name);\n /* istanbul ignore else */\n if (index >= 0) {\n container.splice(index, 1);\n }\n });\n};\n\n/** @internal */\nexport const createFieldOrderInfos = (field: Field): FavoritePropertiesOrderInfo[] => {\n if (field.isNestedContentField()) {\n const propertyName = getNestedContentFieldPropertyName(field);\n return [\n {\n parentClassName: getPropertyClassName(propertyName),\n name: propertyName,\n priority: 0,\n orderedTimestamp: new Date(),\n },\n ];\n }\n if (field.isPropertiesField()) {\n return getPropertiesFieldPropertyNames(field).map((propertyName) => ({\n parentClassName: getPropertyClassName(propertyName),\n name: propertyName,\n priority: 0,\n orderedTimestamp: new Date(),\n }));\n }\n return [\n {\n parentClassName: undefined,\n name: field.name,\n priority: 0,\n orderedTimestamp: new Date(),\n },\n ];\n};\n\nconst getFieldOrderInfos = (field: Field, orderInfos: FavoritePropertiesOrderInfo[]): FavoritePropertiesOrderInfo[] => {\n const fieldOrderInfos: FavoritePropertiesOrderInfo[] = [];\n const tryAddOrderInfo = (name: string) => {\n const fieldOrderInfo = orderInfos.find((oi) => oi.name === name);\n if (fieldOrderInfo !== undefined) {\n fieldOrderInfos.push(fieldOrderInfo);\n }\n };\n\n if (field.isPropertiesField()) {\n getPropertiesFieldPropertyNames(field).forEach(tryAddOrderInfo);\n } else if (field.isNestedContentField()) {\n tryAddOrderInfo(getNestedContentFieldPropertyName(field));\n } else {\n tryAddOrderInfo(field.name);\n }\n\n return fieldOrderInfos;\n};\n\nconst getMostRecentOrderInfo = (orderInfos: FavoritePropertiesOrderInfo[]) =>\n orderInfos.reduce((recent, curr) => (recent && recent.orderedTimestamp >= curr.orderedTimestamp ? recent : curr));\n"]}
@@ -21,13 +21,21 @@ export interface SelectionManagerProps {
21
21
  * and maintains storage.
22
22
  */
23
23
  selectionStorage?: SelectionStorage;
24
+ /**
25
+ * An optional function that returns a key for the given iModel. The key is what "glues" iModel selection
26
+ * changes made in `selectionStorage`, where iModels are identified by key, and `SelectionManager`, where
27
+ * iModels are specified as `IModelConnection`.
28
+ *
29
+ * If not provided, [IModelConnection.key]($core-frontend) or [IModelConnection.name]($core-frontend) is used.
30
+ */
31
+ imodelKeyFactory?: (imodel: IModelConnection) => string;
24
32
  }
25
33
  /**
26
34
  * The selection manager which stores the overall selection.
27
35
  * @public
28
36
  */
29
37
  export declare class SelectionManager implements ISelectionProvider {
30
- private _selectionStorage;
38
+ private _imodelKeyFactory;
31
39
  private _imodelToolSelectionSyncHandlers;
32
40
  private _hiliteSetProviders;
33
41
  private _ownsStorage;
@@ -36,6 +44,11 @@ export declare class SelectionManager implements ISelectionProvider {
36
44
  private _selectionChanges;
37
45
  private _selectionEventsSubscription;
38
46
  private _listeners;
47
+ /**
48
+ * Underlying selection storage used by this selection manager. Ideally, consumers should use
49
+ * the storage directly instead of using this manager to manipulate selection.
50
+ */
51
+ readonly selectionStorage: SelectionStorage;
39
52
  /** An event which gets broadcasted on selection changes */
40
53
  readonly selectionChange: SelectionChangeEvent;
41
54
  /** Manager for [selection scopes]($docs/presentation/unified-selection/index#selection-scopes) */
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAQ,OAAO,EAAa,WAAW,EAAS,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAA2D,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAoD,IAAI,EAAE,MAAM,EAAW,cAAc,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC1J,OAAO,EAKL,gBAAgB,EAIjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAqB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAiD,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAA6B,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE7F;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,MAAM,EAAE,sBAAsB,CAAC;IAE/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC;CACzD;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,gCAAgC,CAA+F;IACvI,OAAO,CAAC,mBAAmB,CAAkD;IAC7E,OAAO,CAAC,YAAY,CAAU;IAE9B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,iBAAiB,CAAkD;IAC3E,OAAO,CAAC,4BAA4B,CAAe;IACnD,OAAO,CAAC,UAAU,CAAyB;IAE3C;;;OAGG;IACH,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IAEnD,2DAA2D;IAC3D,SAAgB,eAAe,EAAE,oBAAoB,CAAC;IAEtD,kGAAkG;IAClG,SAAgB,MAAM,EAAE,sBAAsB,CAAC;IAE/C;;OAEG;gBACS,KAAK,EAAE,qBAAqB;IAoBjC,OAAO;IAKd,OAAO,CAAC,iBAAiB;IAWzB,gBAAgB;IAET,2BAA2B,CAAC,MAAM,EAAE,gBAAgB;IAI3D;;OAEG;IACI,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,UAAO;IAqB3E;;;OAGG;IACI,8BAA8B,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAW5E,yFAAyF;IAClF,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAK7D;;;;;;OAMG;IACI,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,GAAE,MAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IAKlF,OAAO,CAAC,WAAW;IAkCnB;;;;;;;OAOG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAaxH;;;;;;;OAOG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAa7H;;;;;;;OAOG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAa1H;;;;;;OAMG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAa5G;;;;;;;;OAQG;IACU,uBAAuB,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,GAAG,cAAc,GAAG,MAAM,EACpD,KAAK,GAAE,MAAU,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;OAQG;IACU,4BAA4B,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,GAAG,cAAc,GAAG,MAAM,EACpD,KAAK,GAAE,MAAU,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;OAQG;IACU,yBAAyB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,GAAG,cAAc,GAAG,MAAM,EACpD,KAAK,GAAE,MAAU,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;OAGG;IACU,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAIvE;;;OAGG;IACI,oBAAoB,CAAC,MAAM,EAAE,gBAAgB;IAIpD,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;CA8B9B;AAWD,gBAAgB;AAChB,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,uCAAuC,CAAa;IAC5D,OAAO,CAAC,cAAc,CAA2B;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;gBAEV,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;IAMxE,OAAO;IAId,+BAA+B;IAC/B,IAAW,aAAa,gBAEvB;IAED,OAAO,CAAC,sBAAsB,CAwD5B;CACH"}