@itwin/presentation-frontend 3.0.0-dev.83 → 3.0.0-dev.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +904 -904
- package/README.md +12 -12
- package/lib/cjs/presentation-frontend/Presentation.js +1 -1
- package/lib/cjs/presentation-frontend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts +8 -2
- package/lib/cjs/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/cjs/presentation-frontend/PresentationManager.js +7 -5
- package/lib/cjs/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/RulesetManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/RulesetVariablesManager.js.map +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +1 -1
- package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/cjs/presentation-frontend.js.map +1 -1
- package/lib/esm/presentation-frontend/Presentation.js +1 -1
- package/lib/esm/presentation-frontend/Presentation.js.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.d.ts +8 -2
- package/lib/esm/presentation-frontend/PresentationManager.d.ts.map +1 -1
- package/lib/esm/presentation-frontend/PresentationManager.js +8 -6
- package/lib/esm/presentation-frontend/PresentationManager.js.map +1 -1
- package/lib/esm/presentation-frontend/RulesetManager.js.map +1 -1
- package/lib/esm/presentation-frontend/RulesetVariablesManager.js.map +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +1 -1
- package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionHandler.js.map +1 -1
- package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
- package/lib/esm/presentation-frontend.js.map +1 -1
- package/package.json +21 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePropertiesStorage.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesStorage.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { compareStrings, Dictionary, Guid, IDisposable, isIDisposable, OrderedComparator } from \"@itwin/core-bentley\";\r\nimport { InternetConnectivityStatus } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\r\nimport { ConnectivityInformationProvider, IConnectivityInformationProvider } from \"../ConnectivityInformationProvider\";\r\nimport { FavoritePropertiesOrderInfo, PropertyFullName } from \"./FavoritePropertiesManager\";\r\n\r\nconst IMODELJS_PRESENTATION_SETTING_NAMESPACE = \"imodeljs.presentation\";\r\nconst DEPRECATED_PROPERTIES_SETTING_NAMESPACE = \"Properties\";\r\nconst FAVORITE_PROPERTIES_SETTING_NAME = \"FavoriteProperties\";\r\nconst FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME = \"FavoritePropertiesOrderInfo\";\r\n\r\n/**\r\n * Stores user settings for favorite properties.\r\n * @public\r\n */\r\nexport interface IFavoritePropertiesStorage {\r\n /** Load Favorite properties from user-specific settings.\r\n * @param iTwinId ITwin Id, if the settings is specific to a iTwin, otherwise undefined.\r\n * @param imodelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.\r\n */\r\n loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined>;\r\n /** Saves Favorite properties to user-specific settings.\r\n * @param properties Favorite properties to save.\r\n * @param iTwinId iTwin Id, if the settings is specific to a iTwin, otherwise undefined.\r\n * @param iModelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.\r\n */\r\n saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;\r\n /** Load array of FavoritePropertiesOrderInfo from user-specific settings.\r\n * Setting is specific to an iModel.\r\n * @param iTwinId iTwin Id.\r\n * @param imodelId iModel Id.\r\n */\r\n loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;\r\n /** Saves FavoritePropertiesOrderInfo array to user-specific settings.\r\n * Setting is specific to an iModel.\r\n * @param orderInfo Array of FavoritePropertiesOrderInfo to save.\r\n * @param iTwinId iTwin Id.\r\n * @param imodelId iModel Id.\r\n */\r\n savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;\r\n}\r\n\r\n/**\r\n * Available implementations of [[IFavoritePropertiesStorage]].\r\n * @public\r\n */\r\nexport enum DefaultFavoritePropertiesStorageTypes {\r\n /** A no-op storage that doesn't store or return anything. Used for cases when favorite properties aren't used by the application. */\r\n Noop,\r\n /** A storage that stores favorite properties information in a browser local storage. */\r\n BrowserLocalStorage,\r\n /** A storage that stores favorite properties in a user settings service (see [[IModelApp.settings]]). */\r\n UserSettingsServiceStorage,\r\n}\r\n\r\n/**\r\n * A factory method to create one of the available [[IFavoritePropertiesStorage]] implementations.\r\n * @public\r\n */\r\nexport function createFavoritePropertiesStorage(type: DefaultFavoritePropertiesStorageTypes): IFavoritePropertiesStorage {\r\n switch (type) {\r\n case DefaultFavoritePropertiesStorageTypes.Noop: return new NoopFavoritePropertiesStorage();\r\n case DefaultFavoritePropertiesStorageTypes.BrowserLocalStorage: return new BrowserLocalFavoritePropertiesStorage();\r\n case DefaultFavoritePropertiesStorageTypes.UserSettingsServiceStorage: return new OfflineCachingFavoritePropertiesStorage({ impl: new IModelAppFavoritePropertiesStorage() });\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class IModelAppFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private async isSignedIn(): Promise<boolean> {\r\n // If the authorization client is provided, it should give a valid response to getAccessToken\r\n return !!IModelApp.authorizationClient && !!(await IModelApp.authorizationClient.getAccessToken());\r\n }\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n\r\n const accessToken = await IModelApp.getAccessToken();\r\n let settingResult = await IModelApp.settings.getUserSetting(accessToken, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n let setting = settingResult.setting;\r\n\r\n if (setting !== undefined)\r\n return new Set<PropertyFullName>(setting);\r\n\r\n // try to check the old namespace\r\n settingResult = await IModelApp.settings.getUserSetting(accessToken, DEPRECATED_PROPERTIES_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n setting = settingResult.setting;\r\n\r\n if (setting !== undefined && setting.hasOwnProperty(\"nestedContentInfos\") && setting.hasOwnProperty(\"propertyInfos\") && setting.hasOwnProperty(\"baseFieldInfos\"))\r\n return new Set<PropertyFullName>([...setting.nestedContentInfos, ...setting.propertyInfos, ...setting.baseFieldInfos]);\r\n\r\n return undefined;\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n await IModelApp.settings.saveUserSetting(accessToken, Array.from(properties), IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n const settingResult = await IModelApp.settings.getUserSetting(accessToken, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME, true, iTwinId, imodelId);\r\n return settingResult.setting as FavoritePropertiesOrderInfo[];\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string) {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n await IModelApp.settings.saveUserSetting(accessToken, orderInfos, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME, true, iTwinId, imodelId);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface OfflineCachingFavoritePropertiesStorageProps {\r\n impl: IFavoritePropertiesStorage;\r\n connectivityInfo?: IConnectivityInformationProvider;\r\n}\r\n/** @internal */\r\nexport class OfflineCachingFavoritePropertiesStorage implements IFavoritePropertiesStorage, IDisposable {\r\n\r\n private _connectivityInfo: IConnectivityInformationProvider;\r\n private _impl: IFavoritePropertiesStorage;\r\n private _propertiesOfflineCache = new DictionaryWithReservations<ITwinAndIModelIdsKey, Set<PropertyFullName>>(iTwinAndIModelIdsKeyComparer);\r\n private _propertiesOrderOfflineCache = new DictionaryWithReservations<ITwinAndIModelIdsKey, FavoritePropertiesOrderInfo[]>(iTwinAndIModelIdsKeyComparer);\r\n\r\n public constructor(props: OfflineCachingFavoritePropertiesStorageProps) {\r\n this._impl = props.impl;\r\n // istanbul ignore next\r\n this._connectivityInfo = props.connectivityInfo ?? new ConnectivityInformationProvider();\r\n this._connectivityInfo.onInternetConnectivityChanged.addListener(this.onConnectivityStatusChanged);\r\n }\r\n\r\n public dispose() {\r\n if (isIDisposable(this._connectivityInfo))\r\n this._connectivityInfo.dispose();\r\n }\r\n\r\n public get impl() { return this._impl; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onConnectivityStatusChanged = (args: { status: InternetConnectivityStatus }) => {\r\n // istanbul ignore else\r\n if (args.status === InternetConnectivityStatus.Online) {\r\n // note: we're copying the cached values to temp arrays because `saveProperties` and `savePropertiesOrder` both\r\n // attempt to modify cache dictionaries\r\n\r\n const propertiesCache = new Array<{ properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string }>();\r\n this._propertiesOfflineCache.forEach((key, value) => propertiesCache.push({ properties: value, iTwinId: key[0], imodelId: key[1] }));\r\n propertiesCache.forEach(async (cached) => this.saveProperties(cached.properties, cached.iTwinId, cached.imodelId));\r\n\r\n const ordersCache = new Array<{ order: FavoritePropertiesOrderInfo[], iTwinId?: string, imodelId: string }>();\r\n this._propertiesOrderOfflineCache.forEach((key, value) => ordersCache.push({ order: value, iTwinId: key[0], imodelId: key[1]! }));\r\n ordersCache.forEach(async (cached) => this.savePropertiesOrder(cached.order, cached.iTwinId, cached.imodelId));\r\n }\r\n };\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string) {\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Online) {\r\n try {\r\n return await this._impl.loadProperties(iTwinId, imodelId);\r\n } catch {\r\n // return from offline cache if the above fails\r\n }\r\n }\r\n return this._propertiesOfflineCache.get([iTwinId, imodelId]);\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string) {\r\n const key: ITwinAndIModelIdsKey = [iTwinId, imodelId];\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Offline) {\r\n this._propertiesOfflineCache.set(key, properties);\r\n return;\r\n }\r\n const reservationId = this._propertiesOfflineCache.reserve(key);\r\n try {\r\n await this._impl.saveProperties(properties, iTwinId, imodelId);\r\n this._propertiesOfflineCache.reservedDelete(key, reservationId);\r\n } catch {\r\n this._propertiesOfflineCache.reservedSet(key, properties, reservationId);\r\n }\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string) {\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Online) {\r\n try {\r\n return await this._impl.loadPropertiesOrder(iTwinId, imodelId);\r\n } catch {\r\n // return from offline cache if the above fails\r\n }\r\n }\r\n return this._propertiesOrderOfflineCache.get([iTwinId, imodelId]);\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string) {\r\n const key: ITwinAndIModelIdsKey = [iTwinId, imodelId];\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Offline) {\r\n this._propertiesOrderOfflineCache.set(key, orderInfos);\r\n return;\r\n }\r\n const reservationId = this._propertiesOrderOfflineCache.reserve(key);\r\n try {\r\n await this._impl.savePropertiesOrder(orderInfos, iTwinId, imodelId);\r\n this._propertiesOrderOfflineCache.reservedDelete(key, reservationId);\r\n } catch {\r\n this._propertiesOrderOfflineCache.reservedSet(key, orderInfos, reservationId);\r\n }\r\n }\r\n\r\n}\r\n\r\nclass DictionaryWithReservations<TKey, TValue> {\r\n private _impl: Dictionary<TKey, { value?: TValue, lastReservationId?: string }>;\r\n public constructor(compareKeys: OrderedComparator<TKey>) {\r\n this._impl = new Dictionary(compareKeys);\r\n }\r\n public get(key: TKey) { return this._impl.get(key)?.value; }\r\n public forEach(func: (key: TKey, value: TValue) => void): void {\r\n this._impl.forEach((key, entry) => {\r\n // istanbul ignore else\r\n if (entry.value)\r\n func(key, entry.value);\r\n });\r\n }\r\n public reserve(key: TKey) {\r\n const reservationId = Guid.createValue();\r\n this._impl.set(key, { lastReservationId: reservationId });\r\n return reservationId;\r\n }\r\n public set(key: TKey, value: TValue) { return this._impl.set(key, { value }); }\r\n public reservedSet(key: TKey, value: TValue, reservationId: string) {\r\n const entry = this._impl.get(key);\r\n if (entry && entry.lastReservationId === reservationId)\r\n this._impl.set(key, { value });\r\n }\r\n public reservedDelete(key: TKey, reservationId: string) {\r\n const entry = this._impl.get(key);\r\n if (entry && entry.lastReservationId === reservationId)\r\n this._impl.delete(key);\r\n }\r\n}\r\ntype ITwinAndIModelIdsKey = [string | undefined, string | undefined];\r\n\r\n// istanbul ignore nex\r\nfunction iTwinAndIModelIdsKeyComparer(lhs: ITwinAndIModelIdsKey, rhs: ITwinAndIModelIdsKey) {\r\n const iTwinIdCompare = compareStrings(lhs[0] ?? \"\", rhs[0] ?? \"\");\r\n return (iTwinIdCompare !== 0) ? iTwinIdCompare : compareStrings(lhs[1] ?? \"\", rhs[1] ?? \"\");\r\n}\r\n\r\n/** @internal */\r\nexport class NoopFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n // istanbul ignore next\r\n public async loadProperties(_iTwinId?: string, _imodelId?: string): Promise<Set<PropertyFullName> | undefined> { return undefined; }\r\n // istanbul ignore next\r\n public async saveProperties(_properties: Set<PropertyFullName>, _iTwinId?: string, _imodelId?: string) { }\r\n // istanbul ignore next\r\n public async loadPropertiesOrder(_iTwinId: string | undefined, _imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> { return undefined; }\r\n // istanbul ignore next\r\n public async savePropertiesOrder(_orderInfos: FavoritePropertiesOrderInfo[], _iTwinId: string | undefined, _imodelId: string): Promise<void> { }\r\n}\r\n\r\n/** @internal */\r\nexport class BrowserLocalFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n private _localStorage: Storage;\r\n\r\n public constructor(props?: { localStorage?: Storage }) {\r\n // istanbul ignore next\r\n this._localStorage = props?.localStorage ?? window.localStorage;\r\n }\r\n\r\n public createFavoritesSettingItemKey(iTwinId?: string, imodelId?: string): string {\r\n return `${IMODELJS_PRESENTATION_SETTING_NAMESPACE}${FAVORITE_PROPERTIES_SETTING_NAME}?iTwinId=${iTwinId}&imodelId=${imodelId}`;\r\n }\r\n public createOrderSettingItemKey(iTwinId?: string, imodelId?: string): string {\r\n return `${IMODELJS_PRESENTATION_SETTING_NAMESPACE}${FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME}?iTwinId=${iTwinId}&imodelId=${imodelId}`;\r\n }\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined> {\r\n const value = this._localStorage.getItem(this.createFavoritesSettingItemKey(iTwinId, imodelId));\r\n if (!value)\r\n return undefined;\r\n\r\n const properties: PropertyFullName[] = JSON.parse(value);\r\n return new Set(properties);\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string) {\r\n this._localStorage.setItem(this.createFavoritesSettingItemKey(iTwinId, imodelId), JSON.stringify([...properties]));\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> {\r\n const value = this._localStorage.getItem(this.createOrderSettingItemKey(iTwinId, imodelId));\r\n if (!value)\r\n return undefined;\r\n\r\n const orderInfos: FavoritePropertiesOrderInfo[] = JSON.parse(value).map((json: any) => ({\r\n ...json,\r\n orderedTimestamp: new Date(json.orderedTimestamp),\r\n }));\r\n return orderInfos;\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void> {\r\n this._localStorage.setItem(this.createOrderSettingItemKey(iTwinId, imodelId), JSON.stringify(orderInfos));\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FavoritePropertiesStorage.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesStorage.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { compareStrings, Dictionary, Guid, IDisposable, isIDisposable, OrderedComparator } from \"@itwin/core-bentley\";\r\nimport { InternetConnectivityStatus } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\r\nimport { ConnectivityInformationProvider, IConnectivityInformationProvider } from \"../ConnectivityInformationProvider\";\r\nimport { FavoritePropertiesOrderInfo, PropertyFullName } from \"./FavoritePropertiesManager\";\r\n\r\nconst IMODELJS_PRESENTATION_SETTING_NAMESPACE = \"imodeljs.presentation\";\r\nconst DEPRECATED_PROPERTIES_SETTING_NAMESPACE = \"Properties\";\r\nconst FAVORITE_PROPERTIES_SETTING_NAME = \"FavoriteProperties\";\r\nconst FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME = \"FavoritePropertiesOrderInfo\";\r\n\r\n/**\r\n * Stores user settings for favorite properties.\r\n * @public\r\n */\r\nexport interface IFavoritePropertiesStorage {\r\n /** Load Favorite properties from user-specific settings.\r\n * @param iTwinId ITwin Id, if the settings is specific to a iTwin, otherwise undefined.\r\n * @param imodelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.\r\n */\r\n loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined>;\r\n /** Saves Favorite properties to user-specific settings.\r\n * @param properties Favorite properties to save.\r\n * @param iTwinId iTwin Id, if the settings is specific to a iTwin, otherwise undefined.\r\n * @param iModelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.\r\n */\r\n saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;\r\n /** Load array of FavoritePropertiesOrderInfo from user-specific settings.\r\n * Setting is specific to an iModel.\r\n * @param iTwinId iTwin Id.\r\n * @param imodelId iModel Id.\r\n */\r\n loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;\r\n /** Saves FavoritePropertiesOrderInfo array to user-specific settings.\r\n * Setting is specific to an iModel.\r\n * @param orderInfo Array of FavoritePropertiesOrderInfo to save.\r\n * @param iTwinId iTwin Id.\r\n * @param imodelId iModel Id.\r\n */\r\n savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;\r\n}\r\n\r\n/**\r\n * Available implementations of [[IFavoritePropertiesStorage]].\r\n * @public\r\n */\r\nexport enum DefaultFavoritePropertiesStorageTypes {\r\n /** A no-op storage that doesn't store or return anything. Used for cases when favorite properties aren't used by the application. */\r\n Noop,\r\n /** A storage that stores favorite properties information in a browser local storage. */\r\n BrowserLocalStorage,\r\n /** A storage that stores favorite properties in a user settings service (see [[IModelApp.settings]]). */\r\n UserSettingsServiceStorage,\r\n}\r\n\r\n/**\r\n * A factory method to create one of the available [[IFavoritePropertiesStorage]] implementations.\r\n * @public\r\n */\r\nexport function createFavoritePropertiesStorage(type: DefaultFavoritePropertiesStorageTypes): IFavoritePropertiesStorage {\r\n switch (type) {\r\n case DefaultFavoritePropertiesStorageTypes.Noop: return new NoopFavoritePropertiesStorage();\r\n case DefaultFavoritePropertiesStorageTypes.BrowserLocalStorage: return new BrowserLocalFavoritePropertiesStorage();\r\n case DefaultFavoritePropertiesStorageTypes.UserSettingsServiceStorage: return new OfflineCachingFavoritePropertiesStorage({ impl: new IModelAppFavoritePropertiesStorage() });\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class IModelAppFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private async isSignedIn(): Promise<boolean> {\r\n // If the authorization client is provided, it should give a valid response to getAccessToken\r\n return !!IModelApp.authorizationClient && !!(await IModelApp.authorizationClient.getAccessToken());\r\n }\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n\r\n const accessToken = await IModelApp.getAccessToken();\r\n let settingResult = await IModelApp.settings.getUserSetting(accessToken, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n let setting = settingResult.setting;\r\n\r\n if (setting !== undefined)\r\n return new Set<PropertyFullName>(setting);\r\n\r\n // try to check the old namespace\r\n settingResult = await IModelApp.settings.getUserSetting(accessToken, DEPRECATED_PROPERTIES_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n setting = settingResult.setting;\r\n\r\n if (setting !== undefined && setting.hasOwnProperty(\"nestedContentInfos\") && setting.hasOwnProperty(\"propertyInfos\") && setting.hasOwnProperty(\"baseFieldInfos\"))\r\n return new Set<PropertyFullName>([...setting.nestedContentInfos, ...setting.propertyInfos, ...setting.baseFieldInfos]);\r\n\r\n return undefined;\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n await IModelApp.settings.saveUserSetting(accessToken, Array.from(properties), IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_SETTING_NAME, true, iTwinId, imodelId);\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n const settingResult = await IModelApp.settings.getUserSetting(accessToken, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME, true, iTwinId, imodelId);\r\n return settingResult.setting as FavoritePropertiesOrderInfo[];\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string) {\r\n if (!(await this.isSignedIn())) {\r\n throw new PresentationError(PresentationStatus.Error, \"Current user is not authorized to use the settings service\");\r\n }\r\n const accessToken = await IModelApp.getAccessToken();\r\n await IModelApp.settings.saveUserSetting(accessToken, orderInfos, IMODELJS_PRESENTATION_SETTING_NAMESPACE, FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME, true, iTwinId, imodelId);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface OfflineCachingFavoritePropertiesStorageProps {\r\n impl: IFavoritePropertiesStorage;\r\n connectivityInfo?: IConnectivityInformationProvider;\r\n}\r\n/** @internal */\r\nexport class OfflineCachingFavoritePropertiesStorage implements IFavoritePropertiesStorage, IDisposable {\r\n\r\n private _connectivityInfo: IConnectivityInformationProvider;\r\n private _impl: IFavoritePropertiesStorage;\r\n private _propertiesOfflineCache = new DictionaryWithReservations<ITwinAndIModelIdsKey, Set<PropertyFullName>>(iTwinAndIModelIdsKeyComparer);\r\n private _propertiesOrderOfflineCache = new DictionaryWithReservations<ITwinAndIModelIdsKey, FavoritePropertiesOrderInfo[]>(iTwinAndIModelIdsKeyComparer);\r\n\r\n public constructor(props: OfflineCachingFavoritePropertiesStorageProps) {\r\n this._impl = props.impl;\r\n // istanbul ignore next\r\n this._connectivityInfo = props.connectivityInfo ?? new ConnectivityInformationProvider();\r\n this._connectivityInfo.onInternetConnectivityChanged.addListener(this.onConnectivityStatusChanged);\r\n }\r\n\r\n public dispose() {\r\n if (isIDisposable(this._connectivityInfo))\r\n this._connectivityInfo.dispose();\r\n }\r\n\r\n public get impl() { return this._impl; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onConnectivityStatusChanged = (args: { status: InternetConnectivityStatus }) => {\r\n // istanbul ignore else\r\n if (args.status === InternetConnectivityStatus.Online) {\r\n // note: we're copying the cached values to temp arrays because `saveProperties` and `savePropertiesOrder` both\r\n // attempt to modify cache dictionaries\r\n\r\n const propertiesCache = new Array<{ properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string }>();\r\n this._propertiesOfflineCache.forEach((key, value) => propertiesCache.push({ properties: value, iTwinId: key[0], imodelId: key[1] }));\r\n propertiesCache.forEach(async (cached) => this.saveProperties(cached.properties, cached.iTwinId, cached.imodelId));\r\n\r\n const ordersCache = new Array<{ order: FavoritePropertiesOrderInfo[], iTwinId?: string, imodelId: string }>();\r\n this._propertiesOrderOfflineCache.forEach((key, value) => ordersCache.push({ order: value, iTwinId: key[0], imodelId: key[1]! }));\r\n ordersCache.forEach(async (cached) => this.savePropertiesOrder(cached.order, cached.iTwinId, cached.imodelId));\r\n }\r\n };\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string) {\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Online) {\r\n try {\r\n return await this._impl.loadProperties(iTwinId, imodelId);\r\n } catch {\r\n // return from offline cache if the above fails\r\n }\r\n }\r\n return this._propertiesOfflineCache.get([iTwinId, imodelId]);\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string) {\r\n const key: ITwinAndIModelIdsKey = [iTwinId, imodelId];\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Offline) {\r\n this._propertiesOfflineCache.set(key, properties);\r\n return;\r\n }\r\n const reservationId = this._propertiesOfflineCache.reserve(key);\r\n try {\r\n await this._impl.saveProperties(properties, iTwinId, imodelId);\r\n this._propertiesOfflineCache.reservedDelete(key, reservationId);\r\n } catch {\r\n this._propertiesOfflineCache.reservedSet(key, properties, reservationId);\r\n }\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string) {\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Online) {\r\n try {\r\n return await this._impl.loadPropertiesOrder(iTwinId, imodelId);\r\n } catch {\r\n // return from offline cache if the above fails\r\n }\r\n }\r\n return this._propertiesOrderOfflineCache.get([iTwinId, imodelId]);\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string) {\r\n const key: ITwinAndIModelIdsKey = [iTwinId, imodelId];\r\n if (this._connectivityInfo.status === InternetConnectivityStatus.Offline) {\r\n this._propertiesOrderOfflineCache.set(key, orderInfos);\r\n return;\r\n }\r\n const reservationId = this._propertiesOrderOfflineCache.reserve(key);\r\n try {\r\n await this._impl.savePropertiesOrder(orderInfos, iTwinId, imodelId);\r\n this._propertiesOrderOfflineCache.reservedDelete(key, reservationId);\r\n } catch {\r\n this._propertiesOrderOfflineCache.reservedSet(key, orderInfos, reservationId);\r\n }\r\n }\r\n\r\n}\r\n\r\nclass DictionaryWithReservations<TKey, TValue> {\r\n private _impl: Dictionary<TKey, { value?: TValue, lastReservationId?: string }>;\r\n public constructor(compareKeys: OrderedComparator<TKey>) {\r\n this._impl = new Dictionary(compareKeys);\r\n }\r\n public get(key: TKey) { return this._impl.get(key)?.value; }\r\n public forEach(func: (key: TKey, value: TValue) => void): void {\r\n this._impl.forEach((key, entry) => {\r\n // istanbul ignore else\r\n if (entry.value)\r\n func(key, entry.value);\r\n });\r\n }\r\n public reserve(key: TKey) {\r\n const reservationId = Guid.createValue();\r\n this._impl.set(key, { lastReservationId: reservationId });\r\n return reservationId;\r\n }\r\n public set(key: TKey, value: TValue) { return this._impl.set(key, { value }); }\r\n public reservedSet(key: TKey, value: TValue, reservationId: string) {\r\n const entry = this._impl.get(key);\r\n if (entry && entry.lastReservationId === reservationId)\r\n this._impl.set(key, { value });\r\n }\r\n public reservedDelete(key: TKey, reservationId: string) {\r\n const entry = this._impl.get(key);\r\n if (entry && entry.lastReservationId === reservationId)\r\n this._impl.delete(key);\r\n }\r\n}\r\ntype ITwinAndIModelIdsKey = [string | undefined, string | undefined];\r\n\r\n// istanbul ignore next\r\nfunction iTwinAndIModelIdsKeyComparer(lhs: ITwinAndIModelIdsKey, rhs: ITwinAndIModelIdsKey) {\r\n const iTwinIdCompare = compareStrings(lhs[0] ?? \"\", rhs[0] ?? \"\");\r\n return (iTwinIdCompare !== 0) ? iTwinIdCompare : compareStrings(lhs[1] ?? \"\", rhs[1] ?? \"\");\r\n}\r\n\r\n/** @internal */\r\nexport class NoopFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n // istanbul ignore next\r\n public async loadProperties(_iTwinId?: string, _imodelId?: string): Promise<Set<PropertyFullName> | undefined> { return undefined; }\r\n // istanbul ignore next\r\n public async saveProperties(_properties: Set<PropertyFullName>, _iTwinId?: string, _imodelId?: string) { }\r\n // istanbul ignore next\r\n public async loadPropertiesOrder(_iTwinId: string | undefined, _imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> { return undefined; }\r\n // istanbul ignore next\r\n public async savePropertiesOrder(_orderInfos: FavoritePropertiesOrderInfo[], _iTwinId: string | undefined, _imodelId: string): Promise<void> { }\r\n}\r\n\r\n/** @internal */\r\nexport class BrowserLocalFavoritePropertiesStorage implements IFavoritePropertiesStorage {\r\n private _localStorage: Storage;\r\n\r\n public constructor(props?: { localStorage?: Storage }) {\r\n // istanbul ignore next\r\n this._localStorage = props?.localStorage ?? window.localStorage;\r\n }\r\n\r\n public createFavoritesSettingItemKey(iTwinId?: string, imodelId?: string): string {\r\n return `${IMODELJS_PRESENTATION_SETTING_NAMESPACE}${FAVORITE_PROPERTIES_SETTING_NAME}?iTwinId=${iTwinId}&imodelId=${imodelId}`;\r\n }\r\n public createOrderSettingItemKey(iTwinId?: string, imodelId?: string): string {\r\n return `${IMODELJS_PRESENTATION_SETTING_NAMESPACE}${FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME}?iTwinId=${iTwinId}&imodelId=${imodelId}`;\r\n }\r\n\r\n public async loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined> {\r\n const value = this._localStorage.getItem(this.createFavoritesSettingItemKey(iTwinId, imodelId));\r\n if (!value)\r\n return undefined;\r\n\r\n const properties: PropertyFullName[] = JSON.parse(value);\r\n return new Set(properties);\r\n }\r\n\r\n public async saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string) {\r\n this._localStorage.setItem(this.createFavoritesSettingItemKey(iTwinId, imodelId), JSON.stringify([...properties]));\r\n }\r\n\r\n public async loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined> {\r\n const value = this._localStorage.getItem(this.createOrderSettingItemKey(iTwinId, imodelId));\r\n if (!value)\r\n return undefined;\r\n\r\n const orderInfos: FavoritePropertiesOrderInfo[] = JSON.parse(value).map((json: any) => ({\r\n ...json,\r\n orderedTimestamp: new Date(json.orderedTimestamp),\r\n }));\r\n return orderInfos;\r\n }\r\n\r\n public async savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void> {\r\n this._localStorage.setItem(this.createOrderSettingItemKey(iTwinId, imodelId), JSON.stringify(orderInfos));\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 { IModelConnection } from \"@itwin/core-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\n\n/**\n * Selection provider interface which provides main selection and sub-selection.\n * @public\n */\nexport interface ISelectionProvider {\n /** An event that's fired when selection changes */\n selectionChange: SelectionChangeEvent;\n\n /** Get the selection stored in the provider.\n * @param imodel iModel connection which the selection is associated with.\n * @param level Level of the selection (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\n */\n getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ISelectionProvider.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/ISelectionProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { SelectionChangeEvent } from \"./SelectionChangeEvent\";\r\n\r\n/**\r\n * Selection provider interface which provides main selection and sub-selection.\r\n * @public\r\n */\r\nexport interface ISelectionProvider {\r\n /** An event that's fired when selection changes */\r\n selectionChange: SelectionChangeEvent;\r\n\r\n /** Get the selection stored in the provider.\r\n * @param imodel iModel connection which the selection is associated with.\r\n * @param level Level of the selection (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n */\r\n getSelection(imodel: IModelConnection, level: number): Readonly<KeySet>;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAW9C;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,sBAAiC;CAAI;AAA/E,oDAA+E;AAE/E;;;GAGG;AACH,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAY9B","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 { BeEvent } from \"@itwin/core-bentley\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport { KeySet } from \"@itwin/presentation-common\";\nimport { ISelectionProvider } from \"./ISelectionProvider\";\n\n/**\n * An interface for selection change listeners.\n * @public\n */\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\n\n/**\n * An event broadcasted on selection changes\n * @public\n */\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\n\n/**\n * The type of selection change\n * @public\n */\nexport enum SelectionChangeType {\n /** Added to selection. */\n Add,\n\n /** Removed from selection. */\n Remove,\n\n /** Selection was replaced. */\n Replace,\n\n /** Selection was cleared. */\n Clear,\n}\n\n/**\n * The event object that's sent when the selection changes.\n * @public\n */\nexport interface SelectionChangeEventArgs {\n /** The name of the selection source which caused the selection change. */\n source: string;\n\n /** Level of the selection. See [selection levels]($docs/presentation/Unified-Selection/index#selection-levels). */\n level: number;\n\n /** The selection change type. */\n changeType: SelectionChangeType;\n\n /** Set of keys affected by this selection change event. */\n keys: Readonly<KeySet>;\n\n /** iModel connection with which the selection is associated with. */\n imodel: IModelConnection;\n\n /** The timestamp of when the selection change happened */\n timestamp: Date;\n\n /** Id of the ruleset associated with the selection change. */\n rulesetId?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionChangeEvent.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionChangeEvent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAW9C;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,sBAAiC;CAAI;AAA/E,oDAA+E;AAE/E;;;GAGG;AACH,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B,0BAA0B;IAC1B,2DAAG,CAAA;IAEH,8BAA8B;IAC9B,iEAAM,CAAA;IAEN,8BAA8B;IAC9B,mEAAO,CAAA;IAEP,6BAA6B;IAC7B,+DAAK,CAAA;AACP,CAAC,EAZW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAY9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\n\r\n/**\r\n * An interface for selection change listeners.\r\n * @public\r\n */\r\nexport declare type SelectionChangesListener = (args: SelectionChangeEventArgs, provider: ISelectionProvider) => void;\r\n\r\n/**\r\n * An event broadcasted on selection changes\r\n * @public\r\n */\r\nexport class SelectionChangeEvent extends BeEvent<SelectionChangesListener> { }\r\n\r\n/**\r\n * The type of selection change\r\n * @public\r\n */\r\nexport enum SelectionChangeType {\r\n /** Added to selection. */\r\n Add,\r\n\r\n /** Removed from selection. */\r\n Remove,\r\n\r\n /** Selection was replaced. */\r\n Replace,\r\n\r\n /** Selection was cleared. */\r\n Clear,\r\n}\r\n\r\n/**\r\n * The event object that's sent when the selection changes.\r\n * @public\r\n */\r\nexport interface SelectionChangeEventArgs {\r\n /** The name of the selection source which caused the selection change. */\r\n source: string;\r\n\r\n /** Level of the selection. See [selection levels]($docs/presentation/Unified-Selection/index#selection-levels). */\r\n level: number;\r\n\r\n /** The selection change type. */\r\n changeType: SelectionChangeType;\r\n\r\n /** Set of keys affected by this selection change event. */\r\n keys: Readonly<KeySet>;\r\n\r\n /** iModel connection with which the selection is associated with. */\r\n imodel: IModelConnection;\r\n\r\n /** The timestamp of when the selection change happened */\r\n timestamp: Date;\r\n\r\n /** Id of the ruleset associated with the selection change. */\r\n rulesetId?: string;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionHandler.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionHandler.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 { DisposableList, IDisposable } from \"@itwin/core-bentley\";\nimport { IModelConnection } from \"@itwin/core-frontend\";\nimport { Keys, KeySet } from \"@itwin/presentation-common\";\nimport { ISelectionProvider } from \"./ISelectionProvider\";\nimport { SelectionChangeEventArgs, SelectionChangesListener } from \"./SelectionChangeEvent\";\nimport { SelectionManager } from \"./SelectionManager\";\n\n/**\n * Properties for creating a `SelectionHandler` instance.\n * @public\n */\nexport interface SelectionHandlerProps {\n /** SelectionManager used to store overall selection. */\n manager: SelectionManager;\n /** iModel connection the selection changes will be associated with. */\n imodel: IModelConnection;\n /**\n * Name of the selection handler. This is an identifier of what caused the\n * selection to change, set as `SelectionChangeEventArgs.source` when firing\n * selection change events. `SelectionHandler.shouldHandle` uses `name` to filter\n * events that it doesn't need to handle.\n */\n name: string;\n /**\n * ID of presentation ruleset used by the component using this handler. The ID is set as\n * `SelectionChangeEventArgs.rulesetId` when making selection changes and event\n * listeners can use or ignore this information.\n */\n rulesetId?: string;\n /** Callback function called when selection changes. */\n onSelect?: SelectionChangesListener;\n}\n\n/**\n * A class that handles selection changes and helps to change\n * internal the selection state.\n *\n * @public\n */\nexport class SelectionHandler implements IDisposable {\n private _inSelect: boolean;\n private _disposables: DisposableList;\n\n /** Selection manager used by this handler to manage selection */\n public readonly manager: SelectionManager;\n /** Name that's used as `SelectionChangeEventArgs.source` when making selection changes */\n public name: string;\n /** iModel whose selection is being handled */\n public imodel: IModelConnection;\n /**\n * Id of a ruleset selection changes will be associated with.\n * @see `SelectionHandlerProps.rulesetId`\n */\n public rulesetId?: string;\n /** Callback function called when selection changes */\n public onSelect?: SelectionChangesListener;\n\n /**\n * Constructor.\n */\n constructor(props: SelectionHandlerProps) {\n this._inSelect = false;\n this.manager = props.manager;\n this._disposables = new DisposableList();\n this.name = props.name;\n this.rulesetId = props.rulesetId;\n this.imodel = props.imodel;\n this.onSelect = props.onSelect;\n this._disposables.add(this.manager.selectionChange.addListener(this.onSelectionChanged));\n }\n\n /**\n * Destructor. Must be called before disposing this object to make sure it cleans\n * up correctly.\n */\n public dispose(): void {\n this._disposables.dispose();\n }\n\n /**\n * Called when the selection changes. Handles this callback by first checking whether\n * the event should be handled at all (using the `shouldHandle` method) and then calling `onSelect`\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n protected onSelectionChanged = (evt: SelectionChangeEventArgs, provider: ISelectionProvider): void => {\n if (!this.onSelect || !this.shouldHandle(evt))\n return;\n\n this._inSelect = true;\n this.onSelect(evt, provider);\n this._inSelect = false;\n };\n\n /** Called to check whether the event should be handled by this handler */\n protected shouldHandle(evt: SelectionChangeEventArgs): boolean {\n if (this.name === evt.source)\n return false;\n return true;\n }\n\n /** Get selection levels for the imodel managed by this handler */\n public getSelectionLevels(): number[] {\n return this.manager.getSelectionLevels(this.imodel);\n }\n\n /**\n * Get selection for the imodel managed by this handler.\n * @param level Level of the selection to get. Defaults to 0.\n */\n public getSelection(level?: number): Readonly<KeySet> {\n return this.manager.getSelection(this.imodel, level);\n }\n\n /**\n * Add to selection.\n * @param keys The keys to add to selection.\n * @param level Level of the selection.\n */\n public addToSelection(keys: Keys, level: number = 0): void {\n if (this._inSelect)\n return;\n\n return this.manager.addToSelection(this.name, this.imodel, keys, level, this.rulesetId);\n }\n\n /**\n * Remove from selection.\n * @param keys The keys to remove from selection.\n * @param level Level of the selection.\n */\n public removeFromSelection(keys: Keys, level: number = 0): void {\n if (this._inSelect)\n return;\n\n return this.manager.removeFromSelection(this.name, this.imodel, keys, level, this.rulesetId);\n }\n\n /**\n * Change selection.\n * @param keys The keys indicating the new selection.\n * @param level Level of the selection.\n */\n public replaceSelection(keys: Keys, level: number = 0): void {\n if (this._inSelect)\n return;\n\n return this.manager.replaceSelection(this.name, this.imodel, keys, level, this.rulesetId);\n }\n\n /**\n * Clear selection.\n * @param level Level of the selection.\n */\n public clearSelection(level: number = 0): void {\n if (this._inSelect)\n return;\n\n return this.manager.clearSelection(this.name, this.imodel, level, this.rulesetId);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionHandler.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { DisposableList, IDisposable } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"@itwin/core-frontend\";\r\nimport { Keys, KeySet } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEventArgs, SelectionChangesListener } from \"./SelectionChangeEvent\";\r\nimport { SelectionManager } from \"./SelectionManager\";\r\n\r\n/**\r\n * Properties for creating a `SelectionHandler` instance.\r\n * @public\r\n */\r\nexport interface SelectionHandlerProps {\r\n /** SelectionManager used to store overall selection. */\r\n manager: SelectionManager;\r\n /** iModel connection the selection changes will be associated with. */\r\n imodel: IModelConnection;\r\n /**\r\n * Name of the selection handler. This is an identifier of what caused the\r\n * selection to change, set as `SelectionChangeEventArgs.source` when firing\r\n * selection change events. `SelectionHandler.shouldHandle` uses `name` to filter\r\n * events that it doesn't need to handle.\r\n */\r\n name: string;\r\n /**\r\n * ID of presentation ruleset used by the component using this handler. The ID is set as\r\n * `SelectionChangeEventArgs.rulesetId` when making selection changes and event\r\n * listeners can use or ignore this information.\r\n */\r\n rulesetId?: string;\r\n /** Callback function called when selection changes. */\r\n onSelect?: SelectionChangesListener;\r\n}\r\n\r\n/**\r\n * A class that handles selection changes and helps to change\r\n * internal the selection state.\r\n *\r\n * @public\r\n */\r\nexport class SelectionHandler implements IDisposable {\r\n private _inSelect: boolean;\r\n private _disposables: DisposableList;\r\n\r\n /** Selection manager used by this handler to manage selection */\r\n public readonly manager: SelectionManager;\r\n /** Name that's used as `SelectionChangeEventArgs.source` when making selection changes */\r\n public name: string;\r\n /** iModel whose selection is being handled */\r\n public imodel: IModelConnection;\r\n /**\r\n * Id of a ruleset selection changes will be associated with.\r\n * @see `SelectionHandlerProps.rulesetId`\r\n */\r\n public rulesetId?: string;\r\n /** Callback function called when selection changes */\r\n public onSelect?: SelectionChangesListener;\r\n\r\n /**\r\n * Constructor.\r\n */\r\n constructor(props: SelectionHandlerProps) {\r\n this._inSelect = false;\r\n this.manager = props.manager;\r\n this._disposables = new DisposableList();\r\n this.name = props.name;\r\n this.rulesetId = props.rulesetId;\r\n this.imodel = props.imodel;\r\n this.onSelect = props.onSelect;\r\n this._disposables.add(this.manager.selectionChange.addListener(this.onSelectionChanged));\r\n }\r\n\r\n /**\r\n * Destructor. Must be called before disposing this object to make sure it cleans\r\n * up correctly.\r\n */\r\n public dispose(): void {\r\n this._disposables.dispose();\r\n }\r\n\r\n /**\r\n * Called when the selection changes. Handles this callback by first checking whether\r\n * the event should be handled at all (using the `shouldHandle` method) and then calling `onSelect`\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected onSelectionChanged = (evt: SelectionChangeEventArgs, provider: ISelectionProvider): void => {\r\n if (!this.onSelect || !this.shouldHandle(evt))\r\n return;\r\n\r\n this._inSelect = true;\r\n this.onSelect(evt, provider);\r\n this._inSelect = false;\r\n };\r\n\r\n /** Called to check whether the event should be handled by this handler */\r\n protected shouldHandle(evt: SelectionChangeEventArgs): boolean {\r\n if (this.name === evt.source)\r\n return false;\r\n return true;\r\n }\r\n\r\n /** Get selection levels for the imodel managed by this handler */\r\n public getSelectionLevels(): number[] {\r\n return this.manager.getSelectionLevels(this.imodel);\r\n }\r\n\r\n /**\r\n * Get selection for the imodel managed by this handler.\r\n * @param level Level of the selection to get. Defaults to 0.\r\n */\r\n public getSelection(level?: number): Readonly<KeySet> {\r\n return this.manager.getSelection(this.imodel, level);\r\n }\r\n\r\n /**\r\n * Add to selection.\r\n * @param keys The keys to add to selection.\r\n * @param level Level of the selection.\r\n */\r\n public addToSelection(keys: Keys, level: number = 0): void {\r\n if (this._inSelect)\r\n return;\r\n\r\n return this.manager.addToSelection(this.name, this.imodel, keys, level, this.rulesetId);\r\n }\r\n\r\n /**\r\n * Remove from selection.\r\n * @param keys The keys to remove from selection.\r\n * @param level Level of the selection.\r\n */\r\n public removeFromSelection(keys: Keys, level: number = 0): void {\r\n if (this._inSelect)\r\n return;\r\n\r\n return this.manager.removeFromSelection(this.name, this.imodel, keys, level, this.rulesetId);\r\n }\r\n\r\n /**\r\n * Change selection.\r\n * @param keys The keys indicating the new selection.\r\n * @param level Level of the selection.\r\n */\r\n public replaceSelection(keys: Keys, level: number = 0): void {\r\n if (this._inSelect)\r\n return;\r\n\r\n return this.manager.replaceSelection(this.name, this.imodel, keys, level, this.rulesetId);\r\n }\r\n\r\n /**\r\n * Clear selection.\r\n * @param level Level of the selection.\r\n */\r\n public clearSelection(level: number = 0): void {\r\n if (this._inSelect)\r\n return;\r\n\r\n return this.manager.clearSelection(this.name, this.imodel, level, this.rulesetId);\r\n }\r\n}\r\n"]}
|
|
@@ -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 { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\nimport { ISelectionProvider } from \"./ISelectionProvider\";\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\nimport { getScopeId, 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/**\n * The selection manager which stores the overall selection.\n * @public\n */\nexport class SelectionManager implements ISelectionProvider {\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\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 IModelConnection.onClose.addListener((imodel: IModelConnection) => {\n this.onConnectionClose(imodel);\n });\n }\n\n private onConnectionClose(imodel: IModelConnection): void {\n this.clearSelection(\"Connection Close Event\", imodel);\n this._selectionContainerMap.delete(imodel);\n this._hiliteSetProviders.delete(imodel);\n }\n\n private getContainer(imodel: IModelConnection): SelectionContainer {\n let selectionContainer = this._selectionContainerMap.get(imodel);\n if (!selectionContainer) {\n selectionContainer = new SelectionContainer();\n this._selectionContainerMap.set(imodel, selectionContainer);\n }\n return selectionContainer;\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 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.getContainer(imodel).getSelectionLevels();\n }\n\n /** Get the selection currently stored in this manager */\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\n return this.getContainer(imodel).getSelection(level);\n }\n\n private handleEvent(evt: SelectionChangeEventArgs): void {\n const container = this.getContainer(evt.imodel);\n const selectedItemsSet = container.getSelection(evt.level);\n const guidBefore = selectedItemsSet.guid;\n switch (evt.changeType) {\n case SelectionChangeType.Add:\n selectedItemsSet.add(evt.keys);\n break;\n case SelectionChangeType.Remove:\n selectedItemsSet.delete(evt.keys);\n break;\n case SelectionChangeType.Replace:\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\n // note: the above check is only needed to avoid changing\n // guid of the keyset if we're replacing keyset with the same keys\n selectedItemsSet.clear().add(evt.keys);\n }\n break;\n case SelectionChangeType.Clear:\n selectedItemsSet.clear();\n break;\n }\n\n if (selectedItemsSet.guid === guidBefore)\n return;\n\n container.clear(evt.level + 1);\n this.selectionChange.raiseEvent(evt, this);\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]($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]($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]($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]($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]($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(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): 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]($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(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): 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]($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(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): 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 let provider = this._hiliteSetProviders.get(imodel);\n if (!provider) {\n provider = HiliteSetProvider.create({ imodel });\n this._hiliteSetProviders.set(imodel, provider);\n }\n return provider.getHiliteSet(this.getSelection(imodel));\n }\n}\n\n/** @internal */\nclass SelectionContainer {\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\n\n constructor() {\n this._selectedItemsSetMap = new Map<number, KeySet>();\n }\n\n public getSelection(level: number): KeySet {\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\n if (!selectedItemsSet) {\n selectedItemsSet = new KeySet();\n this._selectedItemsSetMap.set(level, selectedItemsSet);\n }\n return selectedItemsSet;\n }\n\n public getSelectionLevels(): number[] {\n const levels = new Array<number>();\n for (const entry of this._selectedItemsSetMap.entries()) {\n if (!entry[1].isEmpty)\n levels.push(entry[0]);\n }\n return levels.sort();\n }\n\n public clear(level: number) {\n const keys = this._selectedItemsSetMap.keys();\n for (const key of keys) {\n if (key >= level) {\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\n selectedItemsSet.clear();\n }\n }\n }\n}\n\n/** @internal */\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\n\n/** @internal */\nexport class ToolSelectionSyncHandler implements IDisposable {\n\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() { return this._asyncsTracker.pendingAsyncs; }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // this component only cares about its own imodel\n const imodel = ev.set.iModel;\n if (imodel !== this._imodel)\n return;\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 const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\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(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\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 if (!allPersistent && !allTransient)\n break;\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 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/** @internal */\nclass ScopedSelectionChanger {\n public readonly name: string;\n public readonly imodel: IModelConnection;\n public readonly manager: SelectionManager;\n public readonly scope: SelectionScope | string;\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: 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"]}
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../../src/presentation-frontend/selection/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module UnifiedSelection\r\n */\r\n\r\nimport { Id64, Id64Arg, Id64Array, IDisposable, using } from \"@itwin/core-bentley\";\r\nimport { IModelConnection, SelectionSetEvent, SelectionSetEventType } from \"@itwin/core-frontend\";\r\nimport { AsyncTasksTracker, Keys, KeySet, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { HiliteSet, HiliteSetProvider } from \"./HiliteSetProvider\";\r\nimport { ISelectionProvider } from \"./ISelectionProvider\";\r\nimport { SelectionChangeEvent, SelectionChangeEventArgs, SelectionChangeType } from \"./SelectionChangeEvent\";\r\nimport { getScopeId, SelectionScopesManager } from \"./SelectionScopesManager\";\r\n\r\n/**\r\n * Properties for creating [[SelectionManager]].\r\n * @public\r\n */\r\nexport interface SelectionManagerProps {\r\n /** A manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n scopes: SelectionScopesManager;\r\n}\r\n\r\n/**\r\n * The selection manager which stores the overall selection.\r\n * @public\r\n */\r\nexport class SelectionManager implements ISelectionProvider {\r\n private _selectionContainerMap = new Map<IModelConnection, SelectionContainer>();\r\n private _imodelToolSelectionSyncHandlers = new Map<IModelConnection, { requestorsCount: number, handler: ToolSelectionSyncHandler }>();\r\n private _hiliteSetProviders = new Map<IModelConnection, HiliteSetProvider>();\r\n\r\n /** An event which gets broadcasted on selection changes */\r\n public readonly selectionChange: SelectionChangeEvent;\r\n\r\n /** Manager for [selection scopes]($docs/presentation/Unified-Selection/index#selection-scopes) */\r\n public readonly scopes: SelectionScopesManager;\r\n\r\n /**\r\n * Creates an instance of SelectionManager.\r\n */\r\n constructor(props: SelectionManagerProps) {\r\n this.selectionChange = new SelectionChangeEvent();\r\n this.scopes = props.scopes;\r\n IModelConnection.onClose.addListener((imodel: IModelConnection) => {\r\n this.onConnectionClose(imodel);\r\n });\r\n }\r\n\r\n private onConnectionClose(imodel: IModelConnection): void {\r\n this.clearSelection(\"Connection Close Event\", imodel);\r\n this._selectionContainerMap.delete(imodel);\r\n this._hiliteSetProviders.delete(imodel);\r\n }\r\n\r\n private getContainer(imodel: IModelConnection): SelectionContainer {\r\n let selectionContainer = this._selectionContainerMap.get(imodel);\r\n if (!selectionContainer) {\r\n selectionContainer = new SelectionContainer();\r\n this._selectionContainerMap.set(imodel, selectionContainer);\r\n }\r\n return selectionContainer;\r\n }\r\n\r\n /**\r\n * Request the manager to sync with imodel's tool selection (see `IModelConnection.selectionSet`).\r\n */\r\n public setSyncWithIModelToolSelection(imodel: IModelConnection, sync = true) {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (sync) {\r\n if (!registration || registration.requestorsCount === 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { requestorsCount: 1, handler: new ToolSelectionSyncHandler(imodel, this) });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount: registration.requestorsCount + 1 });\r\n }\r\n } else {\r\n if (registration && registration.requestorsCount > 0) {\r\n const requestorsCount = registration.requestorsCount - 1;\r\n if (requestorsCount > 0) {\r\n this._imodelToolSelectionSyncHandlers.set(imodel, { ...registration, requestorsCount });\r\n } else {\r\n this._imodelToolSelectionSyncHandlers.delete(imodel);\r\n registration.handler.dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Temporarily suspends tool selection synchronization until the returned `IDisposable`\r\n * is disposed.\r\n */\r\n public suspendIModelToolSelectionSync(imodel: IModelConnection): IDisposable {\r\n const registration = this._imodelToolSelectionSyncHandlers.get(imodel);\r\n if (!registration)\r\n return { dispose: () => { } };\r\n\r\n const wasSuspended = registration.handler.isSuspended;\r\n registration.handler.isSuspended = true;\r\n return { dispose: () => (registration.handler.isSuspended = wasSuspended) };\r\n }\r\n\r\n /** Get the selection levels currently stored in this manager for the specified imodel */\r\n public getSelectionLevels(imodel: IModelConnection): number[] {\r\n return this.getContainer(imodel).getSelectionLevels();\r\n }\r\n\r\n /** Get the selection currently stored in this manager */\r\n public getSelection(imodel: IModelConnection, level: number = 0): Readonly<KeySet> {\r\n return this.getContainer(imodel).getSelection(level);\r\n }\r\n\r\n private handleEvent(evt: SelectionChangeEventArgs): void {\r\n const container = this.getContainer(evt.imodel);\r\n const selectedItemsSet = container.getSelection(evt.level);\r\n const guidBefore = selectedItemsSet.guid;\r\n switch (evt.changeType) {\r\n case SelectionChangeType.Add:\r\n selectedItemsSet.add(evt.keys);\r\n break;\r\n case SelectionChangeType.Remove:\r\n selectedItemsSet.delete(evt.keys);\r\n break;\r\n case SelectionChangeType.Replace:\r\n if (selectedItemsSet.size !== evt.keys.size || !selectedItemsSet.hasAll(evt.keys)) {\r\n // note: the above check is only needed to avoid changing\r\n // guid of the keyset if we're replacing keyset with the same keys\r\n selectedItemsSet.clear().add(evt.keys);\r\n }\r\n break;\r\n case SelectionChangeType.Clear:\r\n selectedItemsSet.clear();\r\n break;\r\n }\r\n\r\n if (selectedItemsSet.guid === guidBefore)\r\n return;\r\n\r\n container.clear(evt.level + 1);\r\n this.selectionChange.raiseEvent(evt, this);\r\n }\r\n\r\n /**\r\n * Add keys to the selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public addToSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Add,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to remove\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public removeFromSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Remove,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Replace current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param keys Keys to add\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public replaceSelection(source: string, imodel: IModelConnection, keys: Keys, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Replace,\r\n keys: new KeySet(keys),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public clearSelection(source: string, imodel: IModelConnection, level: number = 0, rulesetId?: string): void {\r\n const evt: SelectionChangeEventArgs = {\r\n source,\r\n level,\r\n imodel,\r\n changeType: SelectionChangeType.Clear,\r\n keys: new KeySet(),\r\n timestamp: new Date(),\r\n rulesetId,\r\n };\r\n this.handleEvent(evt);\r\n }\r\n\r\n /**\r\n * Add keys to selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to add\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async addToSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.addToSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Remove keys from current selection after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to remove\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async removeFromSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.removeFromSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Replace current selection with keys after applying [selection scope]($docs/presentation/Unified-Selection/index#selection-scopes) on them.\r\n * @param source Name of the selection source\r\n * @param imodel iModel associated with the selection\r\n * @param ids Element IDs to replace with\r\n * @param scope Selection scope to apply\r\n * @param level Selection level (see [Selection levels]($docs/presentation/Unified-Selection/index#selection-levels))\r\n * @param rulesetId ID of the ruleset in case the selection was changed from a rules-driven control\r\n */\r\n public async replaceSelectionWithScope(source: string, imodel: IModelConnection, ids: Id64Arg, scope: SelectionScope | string, level: number = 0, rulesetId?: string): Promise<void> {\r\n const scopedKeys = await this.scopes.computeSelection(imodel, ids, scope);\r\n this.replaceSelection(source, imodel, scopedKeys, level, rulesetId);\r\n }\r\n\r\n /**\r\n * Get the current hilite set for the specified imodel\r\n * @public\r\n */\r\n public async getHiliteSet(imodel: IModelConnection): Promise<HiliteSet> {\r\n let provider = this._hiliteSetProviders.get(imodel);\r\n if (!provider) {\r\n provider = HiliteSetProvider.create({ imodel });\r\n this._hiliteSetProviders.set(imodel, provider);\r\n }\r\n return provider.getHiliteSet(this.getSelection(imodel));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SelectionContainer {\r\n private readonly _selectedItemsSetMap: Map<number, KeySet>;\r\n\r\n constructor() {\r\n this._selectedItemsSetMap = new Map<number, KeySet>();\r\n }\r\n\r\n public getSelection(level: number): KeySet {\r\n let selectedItemsSet = this._selectedItemsSetMap.get(level);\r\n if (!selectedItemsSet) {\r\n selectedItemsSet = new KeySet();\r\n this._selectedItemsSetMap.set(level, selectedItemsSet);\r\n }\r\n return selectedItemsSet;\r\n }\r\n\r\n public getSelectionLevels(): number[] {\r\n const levels = new Array<number>();\r\n for (const entry of this._selectedItemsSetMap.entries()) {\r\n if (!entry[1].isEmpty)\r\n levels.push(entry[0]);\r\n }\r\n return levels.sort();\r\n }\r\n\r\n public clear(level: number) {\r\n const keys = this._selectedItemsSetMap.keys();\r\n for (const key of keys) {\r\n if (key >= level) {\r\n const selectedItemsSet = this._selectedItemsSetMap.get(key)!;\r\n selectedItemsSet.clear();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const TRANSIENT_ELEMENT_CLASSNAME = \"/TRANSIENT\";\r\n\r\n/** @internal */\r\nexport class ToolSelectionSyncHandler implements IDisposable {\r\n\r\n private _selectionSourceName = \"Tool\";\r\n private _logicalSelection: SelectionManager;\r\n private _imodel: IModelConnection;\r\n private _imodelToolSelectionListenerDisposeFunc: () => void;\r\n private _asyncsTracker = new AsyncTasksTracker();\r\n public isSuspended?: boolean;\r\n\r\n public constructor(imodel: IModelConnection, logicalSelection: SelectionManager) {\r\n this._imodel = imodel;\r\n this._logicalSelection = logicalSelection;\r\n this._imodelToolSelectionListenerDisposeFunc = imodel.selectionSet.onChanged.addListener(this.onToolSelectionChanged);\r\n }\r\n\r\n public dispose() {\r\n this._imodelToolSelectionListenerDisposeFunc();\r\n }\r\n\r\n /** note: used only it tests */\r\n public get pendingAsyncs() { return this._asyncsTracker.pendingAsyncs; }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private onToolSelectionChanged = async (ev: SelectionSetEvent): Promise<void> => {\r\n // ignore selection change event if the handler is suspended\r\n if (this.isSuspended)\r\n return;\r\n\r\n // this component only cares about its own imodel\r\n const imodel = ev.set.iModel;\r\n if (imodel !== this._imodel)\r\n return;\r\n\r\n // determine the level of selection changes\r\n // wip: may want to allow selecting at different levels?\r\n const selectionLevel = 0;\r\n\r\n let ids: Id64Arg;\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n ids = ev.added;\r\n break;\r\n case SelectionSetEventType.Replace:\r\n ids = ev.set.elements;\r\n break;\r\n default:\r\n ids = ev.removed;\r\n break;\r\n }\r\n\r\n const scopeId = getScopeId(this._logicalSelection.scopes.activeScope);\r\n\r\n // we're always using scoped selection changer even if the scope is set to \"element\" - that\r\n // makes sure we're adding to selection keys with concrete classes and not \"BisCore:Element\", which\r\n // we can't because otherwise our keys compare fails (presentation components load data with\r\n // concrete classes)\r\n const changer = new ScopedSelectionChanger(this._selectionSourceName, this._imodel, this._logicalSelection, scopeId);\r\n\r\n // we know what to do immediately on `clear` events\r\n if (SelectionSetEventType.Clear === ev.type) {\r\n await changer.clear(selectionLevel);\r\n return;\r\n }\r\n\r\n const parsedIds = parseIds(ids);\r\n await using(this._asyncsTracker.trackAsyncTask(), async (_r) => {\r\n switch (ev.type) {\r\n case SelectionSetEventType.Add:\r\n await changer.add(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Replace:\r\n await changer.replace(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n case SelectionSetEventType.Remove:\r\n await changer.remove(parsedIds.transient, parsedIds.persistent, selectionLevel);\r\n break;\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst parseIds = (ids: Id64Arg): { persistent: Id64Arg, transient: Id64Arg } => {\r\n let allPersistent = true;\r\n let allTransient = true;\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n allPersistent = false;\r\n else\r\n allTransient = false;\r\n\r\n if (!allPersistent && !allTransient)\r\n break;\r\n }\r\n\r\n // avoid making a copy if ids are only persistent or only transient\r\n if (allPersistent) {\r\n return { persistent: ids, transient: [] };\r\n } else if (allTransient) {\r\n return { persistent: [], transient: ids };\r\n }\r\n\r\n // if `ids` contain mixed ids, we have to copy.. use Array instead of\r\n // a Set for performance\r\n const persistentElementIds: Id64Array = [];\r\n const transientElementIds: Id64Array = [];\r\n for (const id of Id64.iterable(ids)) {\r\n if (Id64.isTransient(id))\r\n transientElementIds.push(id);\r\n else\r\n persistentElementIds.push(id);\r\n }\r\n\r\n return { persistent: persistentElementIds, transient: transientElementIds };\r\n};\r\n\r\nfunction addTransientKeys(transientIds: Id64Arg, keys: KeySet): void {\r\n for (const id of Id64.iterable(transientIds))\r\n keys.add({ className: TRANSIENT_ELEMENT_CLASSNAME, id });\r\n}\r\n\r\n/** @internal */\r\nclass ScopedSelectionChanger {\r\n public readonly name: string;\r\n public readonly imodel: IModelConnection;\r\n public readonly manager: SelectionManager;\r\n public readonly scope: SelectionScope | string;\r\n public constructor(name: string, imodel: IModelConnection, manager: SelectionManager, scope: SelectionScope | string) {\r\n this.name = name;\r\n this.imodel = imodel;\r\n this.manager = manager;\r\n this.scope = scope;\r\n }\r\n public async clear(level: number): Promise<void> {\r\n this.manager.clearSelection(this.name, this.imodel, level);\r\n }\r\n public async add(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.addToSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async remove(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.removeFromSelection(this.name, this.imodel, keys, level);\r\n }\r\n public async replace(transientIds: Id64Arg, persistentIds: Id64Arg, level: number): Promise<void> {\r\n const keys = await this.manager.scopes.computeSelection(this.imodel, persistentIds, this.scope);\r\n addTransientKeys(transientIds, keys);\r\n this.manager.replaceSelection(this.name, this.imodel, keys, level);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,uEAAqD;AACrD,8EAA4D;AAC5D,yEAAuD;AACvD,kFAAgE;AAChE,wGAAsF;AACtF,wGAAsF;AACtF,uEAAqD;AACrD,sEAAoD;AAEpD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yFAAuE;AACvE,uFAAqE;AACrE,qFAAmE;AACnE,2FAAyE;AACzE,qFAAmE;AACnE,sFAAoE;AACpE,oFAAkE","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used for retrieving presentation data from iModels.\n */\nexport * from \"./presentation-frontend/Presentation\";\nexport * from \"./presentation-frontend/PresentationManager\";\nexport * from \"./presentation-frontend/RulesetManager\";\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\nexport * from \"./presentation-frontend/StateTracker\";\nexport * from \"./presentation-frontend/Diagnostics\";\n\n/**\n * @module Logging\n *\n * @docs-group-description Logging\n * Types related to logging in this package.\n */\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\n\n/**\n * @module UnifiedSelection\n *\n * @docs-group-description UnifiedSelection\n * Types related to [unified selection]($docs/presentation/Unified-Selection/index.md).\n */\nexport * from \"./presentation-frontend/selection/SelectionChangeEvent\";\nexport * from \"./presentation-frontend/selection/ISelectionProvider\";\nexport * from \"./presentation-frontend/selection/SelectionManager\";\nexport * from \"./presentation-frontend/selection/SelectionScopesManager\";\nexport * from \"./presentation-frontend/selection/SelectionHandler\";\nexport * from \"./presentation-frontend/selection/HiliteSetProvider\";\nexport * from \"./presentation-frontend/selection/SelectionHelper\";\n"]}
|
|
1
|
+
{"version":3,"file":"presentation-frontend.js","sourceRoot":"","sources":["../../src/presentation-frontend.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,uEAAqD;AACrD,8EAA4D;AAC5D,yEAAuD;AACvD,kFAAgE;AAChE,wGAAsF;AACtF,wGAAsF;AACtF,uEAAqD;AACrD,sEAAoD;AAEpD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yFAAuE;AACvE,uFAAqE;AACrE,qFAAmE;AACnE,2FAAyE;AACzE,qFAAmE;AACnE,sFAAoE;AACpE,oFAAkE","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport * from \"./presentation-frontend/Presentation\";\r\nexport * from \"./presentation-frontend/PresentationManager\";\r\nexport * from \"./presentation-frontend/RulesetManager\";\r\nexport * from \"./presentation-frontend/RulesetVariablesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesManager\";\r\nexport * from \"./presentation-frontend/favorite-properties/FavoritePropertiesStorage\";\r\nexport * from \"./presentation-frontend/StateTracker\";\r\nexport * from \"./presentation-frontend/Diagnostics\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport * from \"./presentation-frontend/FrontendLoggerCategory\";\r\n\r\n/**\r\n * @module UnifiedSelection\r\n *\r\n * @docs-group-description UnifiedSelection\r\n * Types related to [unified selection]($docs/presentation/Unified-Selection/index.md).\r\n */\r\nexport * from \"./presentation-frontend/selection/SelectionChangeEvent\";\r\nexport * from \"./presentation-frontend/selection/ISelectionProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionScopesManager\";\r\nexport * from \"./presentation-frontend/selection/SelectionHandler\";\r\nexport * from \"./presentation-frontend/selection/HiliteSetProvider\";\r\nexport * from \"./presentation-frontend/selection/SelectionHelper\";\r\n"]}
|
|
@@ -52,7 +52,7 @@ export class Presentation {
|
|
|
52
52
|
if (!presentationManager) {
|
|
53
53
|
const managerProps = (_a = props === null || props === void 0 ? void 0 : props.presentation) !== null && _a !== void 0 ? _a : {};
|
|
54
54
|
if (!managerProps.activeLocale) {
|
|
55
|
-
const languages = Presentation.localization.
|
|
55
|
+
const languages = Presentation.localization.getLanguageList();
|
|
56
56
|
managerProps.activeLocale = (languages.length ? languages[0] : undefined);
|
|
57
57
|
}
|
|
58
58
|
presentationManager = PresentationManager.create(managerProps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presentation.js","sourceRoot":"","sources":["../../../src/presentation-frontend/Presentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { Localization } from \"@itwin/core-common\";\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\nimport { FavoritePropertiesManager, FavoritePropertiesManagerProps } from \"./favorite-properties/FavoritePropertiesManager\";\nimport { createFavoritePropertiesStorage, DefaultFavoritePropertiesStorageTypes } from \"./favorite-properties/FavoritePropertiesStorage\";\nimport { LocalizationHelper } from \"./LocalizationHelper\";\nimport { PresentationManager, PresentationManagerProps } from \"./PresentationManager\";\nimport { SelectionManager, SelectionManagerProps } from \"./selection/SelectionManager\";\nimport { SelectionScopesManager } from \"./selection/SelectionScopesManager\";\n\nlet localization: Localization | undefined;\nlet presentationManager: PresentationManager | undefined;\nlet selectionManager: SelectionManager | undefined;\nlet favoritePropertiesManager: FavoritePropertiesManager | undefined;\nconst initializationHandlers: Array<() => Promise<(() => void) | void>> = [];\nconst terminationHandlers: Array<() => void> = [];\n\n/**\n * Props for initializing [[Presentation]].\n * @public\n */\nexport interface PresentationProps {\n /** Props for [[PresentationManager]]. */\n presentation?: PresentationManagerProps;\n\n /** Props for [[SelectionManager]]. */\n selection?: SelectionManagerProps;\n\n /** Props for [[FavoritePropertiesManager]]. */\n favorites?: FavoritePropertiesManagerProps;\n}\n\n/**\n * Static class used to statically set up Presentation library for the frontend.\n * Basically what it does is:\n * - Create a singleton [[PresentationManager]] instance\n * - Create a singleton [[SelectionManager]] instance\n * - Create a singleton [[FavoritePropertiesManager]]] instance\n *\n * @public\n */\nexport class Presentation {\n\n /* istanbul ignore next */\n private constructor() { }\n\n /**\n * Initializes Presentation library for the frontend.\n *\n * Example:\n * ``` ts\n * [[include:Presentation.Frontend.Initialization]]\n * ```\n *\n * The method should be called after a call to [IModelApp.startup]($core-frontend).\n */\n public static async initialize(props?: PresentationProps): Promise<void> {\n if (!IModelApp.initialized) {\n throw new PresentationError(PresentationStatus.NotInitialized,\n \"IModelApp.startup must be called before calling Presentation.initialize\");\n }\n if (!localization) {\n localization = IModelApp.localization;\n }\n if (!presentationManager) {\n const managerProps = props?.presentation ?? {};\n if (!managerProps.activeLocale) {\n const languages = Presentation.localization.languageList();\n managerProps.activeLocale = (languages.length ? languages[0] : undefined);\n }\n presentationManager = PresentationManager.create(managerProps);\n }\n if (!selectionManager) {\n selectionManager = new SelectionManager(props?.selection ?? {\n scopes: new SelectionScopesManager({\n rpcRequestsHandler: presentationManager.rpcRequestsHandler,\n localeProvider: () => this.presentation.activeLocale,\n }),\n });\n }\n if (!favoritePropertiesManager) {\n favoritePropertiesManager = new FavoritePropertiesManager({\n storage: props?.favorites ? props.favorites.storage : createFavoritePropertiesStorage(DefaultFavoritePropertiesStorageTypes.Noop),\n });\n }\n // eslint-disable-next-line @typescript-eslint/unbound-method\n presentationManager.onNewiModelConnection = favoritePropertiesManager.initializeConnection.bind(favoritePropertiesManager);\n await LocalizationHelper.registerNamespaces();\n for (const handler of initializationHandlers) {\n const cleanup = await handler();\n if (cleanup)\n terminationHandlers.push(cleanup);\n }\n }\n\n /**\n * Terminates Presentation library frontend. This method should be called\n * before a call to [IModelApp.shutdown]($core-frontend)\n */\n public static terminate(): void {\n terminationHandlers.forEach((handler) => handler());\n terminationHandlers.length = 0;\n\n if (localization)\n LocalizationHelper.unregisterNamespaces();\n\n if (presentationManager)\n presentationManager.dispose();\n presentationManager = undefined;\n\n if (favoritePropertiesManager)\n favoritePropertiesManager.dispose();\n favoritePropertiesManager = undefined;\n\n selectionManager = undefined;\n localization = undefined;\n }\n\n /**\n * Registers an additional handler which will be invoked during Presentation library frontend\n * initialization.\n *\n * @internal\n */\n public static registerInitializationHandler(handler: () => Promise<() => void>): void {\n initializationHandlers.push(handler);\n }\n\n /** The singleton [[PresentationManager]] */\n public static get presentation(): PresentationManager {\n if (!presentationManager)\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n return presentationManager;\n }\n\n /** @internal */\n public static setPresentationManager(value: PresentationManager) {\n if (presentationManager)\n presentationManager.dispose();\n presentationManager = value;\n }\n\n /** The singleton [[SelectionManager]] */\n public static get selection(): SelectionManager {\n if (!selectionManager)\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n return selectionManager;\n }\n\n /** @internal */\n public static setSelectionManager(value: SelectionManager) {\n selectionManager = value;\n }\n\n /**\n * The singleton [[FavoritePropertiesManager]]\n * @public\n */\n public static get favoriteProperties(): FavoritePropertiesManager {\n if (!favoritePropertiesManager)\n throw new Error(\"Favorite Properties must be first initialized by calling Presentation.initialize\");\n return favoritePropertiesManager;\n }\n\n /** @internal */\n public static setFavoritePropertiesManager(value: FavoritePropertiesManager) {\n if (favoritePropertiesManager)\n favoritePropertiesManager.dispose();\n favoritePropertiesManager = value;\n }\n\n /**\n * The localization manager used by Presentation frontend. Returns the result of `IModelApp.i18n`.\n */\n public static get localization(): Localization {\n if (!localization)\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\n return localization;\n }\n\n /** @internal */\n public static setLocalization(value: Localization) {\n localization = value;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Presentation.js","sourceRoot":"","sources":["../../../src/presentation-frontend/Presentation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { Localization } from \"@itwin/core-common\";\r\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\r\nimport { FavoritePropertiesManager, FavoritePropertiesManagerProps } from \"./favorite-properties/FavoritePropertiesManager\";\r\nimport { createFavoritePropertiesStorage, DefaultFavoritePropertiesStorageTypes } from \"./favorite-properties/FavoritePropertiesStorage\";\r\nimport { LocalizationHelper } from \"./LocalizationHelper\";\r\nimport { PresentationManager, PresentationManagerProps } from \"./PresentationManager\";\r\nimport { SelectionManager, SelectionManagerProps } from \"./selection/SelectionManager\";\r\nimport { SelectionScopesManager } from \"./selection/SelectionScopesManager\";\r\n\r\nlet localization: Localization | undefined;\r\nlet presentationManager: PresentationManager | undefined;\r\nlet selectionManager: SelectionManager | undefined;\r\nlet favoritePropertiesManager: FavoritePropertiesManager | undefined;\r\nconst initializationHandlers: Array<() => Promise<(() => void) | void>> = [];\r\nconst terminationHandlers: Array<() => void> = [];\r\n\r\n/**\r\n * Props for initializing [[Presentation]].\r\n * @public\r\n */\r\nexport interface PresentationProps {\r\n /** Props for [[PresentationManager]]. */\r\n presentation?: PresentationManagerProps;\r\n\r\n /** Props for [[SelectionManager]]. */\r\n selection?: SelectionManagerProps;\r\n\r\n /** Props for [[FavoritePropertiesManager]]. */\r\n favorites?: FavoritePropertiesManagerProps;\r\n}\r\n\r\n/**\r\n * Static class used to statically set up Presentation library for the frontend.\r\n * Basically what it does is:\r\n * - Create a singleton [[PresentationManager]] instance\r\n * - Create a singleton [[SelectionManager]] instance\r\n * - Create a singleton [[FavoritePropertiesManager]]] instance\r\n *\r\n * @public\r\n */\r\nexport class Presentation {\r\n\r\n /* istanbul ignore next */\r\n private constructor() { }\r\n\r\n /**\r\n * Initializes Presentation library for the frontend.\r\n *\r\n * Example:\r\n * ``` ts\r\n * [[include:Presentation.Frontend.Initialization]]\r\n * ```\r\n *\r\n * The method should be called after a call to [IModelApp.startup]($core-frontend).\r\n */\r\n public static async initialize(props?: PresentationProps): Promise<void> {\r\n if (!IModelApp.initialized) {\r\n throw new PresentationError(PresentationStatus.NotInitialized,\r\n \"IModelApp.startup must be called before calling Presentation.initialize\");\r\n }\r\n if (!localization) {\r\n localization = IModelApp.localization;\r\n }\r\n if (!presentationManager) {\r\n const managerProps = props?.presentation ?? {};\r\n if (!managerProps.activeLocale) {\r\n const languages = Presentation.localization.getLanguageList();\r\n managerProps.activeLocale = (languages.length ? languages[0] : undefined);\r\n }\r\n presentationManager = PresentationManager.create(managerProps);\r\n }\r\n if (!selectionManager) {\r\n selectionManager = new SelectionManager(props?.selection ?? {\r\n scopes: new SelectionScopesManager({\r\n rpcRequestsHandler: presentationManager.rpcRequestsHandler,\r\n localeProvider: () => this.presentation.activeLocale,\r\n }),\r\n });\r\n }\r\n if (!favoritePropertiesManager) {\r\n favoritePropertiesManager = new FavoritePropertiesManager({\r\n storage: props?.favorites ? props.favorites.storage : createFavoritePropertiesStorage(DefaultFavoritePropertiesStorageTypes.Noop),\r\n });\r\n }\r\n // eslint-disable-next-line @typescript-eslint/unbound-method\r\n presentationManager.onNewiModelConnection = favoritePropertiesManager.initializeConnection.bind(favoritePropertiesManager);\r\n await LocalizationHelper.registerNamespaces();\r\n for (const handler of initializationHandlers) {\r\n const cleanup = await handler();\r\n if (cleanup)\r\n terminationHandlers.push(cleanup);\r\n }\r\n }\r\n\r\n /**\r\n * Terminates Presentation library frontend. This method should be called\r\n * before a call to [IModelApp.shutdown]($core-frontend)\r\n */\r\n public static terminate(): void {\r\n terminationHandlers.forEach((handler) => handler());\r\n terminationHandlers.length = 0;\r\n\r\n if (localization)\r\n LocalizationHelper.unregisterNamespaces();\r\n\r\n if (presentationManager)\r\n presentationManager.dispose();\r\n presentationManager = undefined;\r\n\r\n if (favoritePropertiesManager)\r\n favoritePropertiesManager.dispose();\r\n favoritePropertiesManager = undefined;\r\n\r\n selectionManager = undefined;\r\n localization = undefined;\r\n }\r\n\r\n /**\r\n * Registers an additional handler which will be invoked during Presentation library frontend\r\n * initialization.\r\n *\r\n * @internal\r\n */\r\n public static registerInitializationHandler(handler: () => Promise<() => void>): void {\r\n initializationHandlers.push(handler);\r\n }\r\n\r\n /** The singleton [[PresentationManager]] */\r\n public static get presentation(): PresentationManager {\r\n if (!presentationManager)\r\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\r\n return presentationManager;\r\n }\r\n\r\n /** @internal */\r\n public static setPresentationManager(value: PresentationManager) {\r\n if (presentationManager)\r\n presentationManager.dispose();\r\n presentationManager = value;\r\n }\r\n\r\n /** The singleton [[SelectionManager]] */\r\n public static get selection(): SelectionManager {\r\n if (!selectionManager)\r\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\r\n return selectionManager;\r\n }\r\n\r\n /** @internal */\r\n public static setSelectionManager(value: SelectionManager) {\r\n selectionManager = value;\r\n }\r\n\r\n /**\r\n * The singleton [[FavoritePropertiesManager]]\r\n * @public\r\n */\r\n public static get favoriteProperties(): FavoritePropertiesManager {\r\n if (!favoritePropertiesManager)\r\n throw new Error(\"Favorite Properties must be first initialized by calling Presentation.initialize\");\r\n return favoritePropertiesManager;\r\n }\r\n\r\n /** @internal */\r\n public static setFavoritePropertiesManager(value: FavoritePropertiesManager) {\r\n if (favoritePropertiesManager)\r\n favoritePropertiesManager.dispose();\r\n favoritePropertiesManager = value;\r\n }\r\n\r\n /**\r\n * The localization manager used by Presentation frontend. Returns the result of `IModelApp.i18n`.\r\n */\r\n public static get localization(): Localization {\r\n if (!localization)\r\n throw new Error(\"Presentation must be first initialized by calling Presentation.initialize\");\r\n return localization;\r\n }\r\n\r\n /** @internal */\r\n public static setLocalization(value: Localization) {\r\n localization = value;\r\n }\r\n}\r\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { BeEvent, IDisposable } from "@itwin/core-bentley";
|
|
5
5
|
import { IModelConnection } from "@itwin/core-frontend";
|
|
6
6
|
import { UnitSystemKey } from "@itwin/core-quantity";
|
|
7
|
-
import { Content, ContentDescriptorRequestOptions, ContentRequestOptions, ContentSourcesRequestOptions, ContentUpdateInfo, Descriptor, DescriptorOverrides, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DisplayValueGroup, DistinctValuesRequestOptions, ElementProperties,
|
|
7
|
+
import { Content, ContentDescriptorRequestOptions, ContentRequestOptions, ContentSourcesRequestOptions, ContentUpdateInfo, Descriptor, DescriptorOverrides, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DisplayValueGroup, DistinctValuesRequestOptions, ElementProperties, FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, HierarchyRequestOptions, HierarchyUpdateInfo, InstanceKey, KeySet, LabelDefinition, MultiElementPropertiesRequestOptions, Node, NodeKey, NodePathElement, Paged, PagedResponse, PageOptions, RpcRequestsHandler, RulesetVariable, SelectClassInfo, SingleElementPropertiesRequestOptions } from "@itwin/presentation-common";
|
|
8
8
|
import { IpcRequestsHandler } from "./IpcRequestsHandler";
|
|
9
9
|
import { RulesetManager } from "./RulesetManager";
|
|
10
10
|
import { RulesetVariablesManager } from "./RulesetVariablesManager";
|
|
@@ -161,7 +161,13 @@ export declare class PresentationManager implements IDisposable {
|
|
|
161
161
|
* Retrieves property data in a simplified format for a single element specified by ID.
|
|
162
162
|
* @beta
|
|
163
163
|
*/
|
|
164
|
-
getElementProperties(requestOptions:
|
|
164
|
+
getElementProperties(requestOptions: SingleElementPropertiesRequestOptions<IModelConnection>): Promise<ElementProperties | undefined>;
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves property data in a simplified format for multiple elements specified by class
|
|
167
|
+
* or all elements.
|
|
168
|
+
* @alpha
|
|
169
|
+
*/
|
|
170
|
+
getElementProperties(requestOptions: MultiElementPropertiesRequestOptions<IModelConnection>): Promise<PagedResponse<ElementProperties>>;
|
|
165
171
|
/** Retrieves display label definition of specific item. */
|
|
166
172
|
getDisplayLabelDefinition(requestOptions: DisplayLabelRequestOptions<IModelConnection, InstanceKey>): Promise<LabelDefinition>;
|
|
167
173
|
/** Retrieves display label definition of specific items. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/PresentationManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAA+B,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAU,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EACjJ,0BAA0B,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"PresentationManager.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/PresentationManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { BeEvent, Logger, OrderedId64Iterable } from "@itwin/core-bentley";
|
|
9
9
|
import { IpcApp } from "@itwin/core-frontend";
|
|
10
|
-
import { Content, Descriptor, DisplayValueGroup, InstanceKey, Item, Key, KeySet, LabelDefinition, Node, NodeKey, NodePathElement, PresentationIpcEvents, RpcRequestsHandler, RulesetVariable, SelectClassInfo, UpdateInfo, VariableValueTypes, } from "@itwin/presentation-common";
|
|
10
|
+
import { Content, Descriptor, DisplayValueGroup, InstanceKey, isSingleElementPropertiesRequestOptions, Item, Key, KeySet, LabelDefinition, Node, NodeKey, NodePathElement, PresentationIpcEvents, RpcRequestsHandler, RulesetVariable, SelectClassInfo, UpdateInfo, VariableValueTypes, } from "@itwin/presentation-common";
|
|
11
11
|
import { PresentationFrontendLoggerCategory } from "./FrontendLoggerCategory";
|
|
12
12
|
import { IpcRequestsHandler } from "./IpcRequestsHandler";
|
|
13
13
|
import { LocalizationHelper } from "./LocalizationHelper";
|
|
@@ -289,13 +289,15 @@ export class PresentationManager {
|
|
|
289
289
|
items: result.items.map(DisplayValueGroup.fromJSON),
|
|
290
290
|
};
|
|
291
291
|
}
|
|
292
|
-
/**
|
|
293
|
-
* Retrieves property data in a simplified format for a single element specified by ID.
|
|
294
|
-
* @beta
|
|
295
|
-
*/
|
|
296
292
|
async getElementProperties(requestOptions) {
|
|
297
293
|
await this.onConnection(requestOptions.imodel);
|
|
298
|
-
|
|
294
|
+
if (isSingleElementPropertiesRequestOptions(requestOptions)) {
|
|
295
|
+
return this._requestsHandler.getElementProperties(this.toRpcTokenOptions(requestOptions));
|
|
296
|
+
}
|
|
297
|
+
const rpcOptions = this.toRpcTokenOptions(requestOptions);
|
|
298
|
+
return buildPagedResponse(requestOptions.paging, async (partialPageOptions) => {
|
|
299
|
+
return this._requestsHandler.getElementProperties({ ...rpcOptions, paging: partialPageOptions });
|
|
300
|
+
});
|
|
299
301
|
}
|
|
300
302
|
/** Retrieves display label definition of specific item. */
|
|
301
303
|
async getDisplayLabelDefinition(requestOptions) {
|