UNPKG

@itwin/presentation-frontend

Version:

Frontend of iModel.js Presentation library

161 lines 7.16 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Core */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Presentation = void 0; const core_frontend_1 = require("@itwin/core-frontend"); const presentation_common_1 = require("@itwin/presentation-common"); const FavoritePropertiesManager_js_1 = require("./favorite-properties/FavoritePropertiesManager.js"); const FavoritePropertiesStorage_js_1 = require("./favorite-properties/FavoritePropertiesStorage.js"); const LocalizationHelper_js_1 = require("./LocalizationHelper.js"); const PresentationManager_js_1 = require("./PresentationManager.js"); const SelectionManager_js_1 = require("./selection/SelectionManager.js"); const SelectionScopesManager_js_1 = require("./selection/SelectionScopesManager.js"); const IModelConnectionInitialization_js_1 = require("./IModelConnectionInitialization.js"); const InternalSymbols_js_1 = require("./InternalSymbols.js"); let localization; let presentationManager; let selectionManager; // eslint-disable-line @typescript-eslint/no-deprecated let favoritePropertiesManager; const initializationHandlers = []; const terminationHandlers = []; /** * Static class used to statically set up Presentation library for the frontend. * Basically what it does is: * - Create a singleton [[PresentationManager]] instance * - Create a singleton [[SelectionManager]] instance * - Create a singleton [[FavoritePropertiesManager]]] instance * * @public */ class Presentation { /* c8 ignore next */ constructor() { } /** * Initializes Presentation library for the frontend. * * Example: * ``` ts * [[include:Presentation.Frontend.Initialization]] * ``` * * The method should be called after a call to [IModelApp.startup]($core-frontend). */ static async initialize(props) { if (!core_frontend_1.IModelApp.initialized) { throw new presentation_common_1.PresentationError(presentation_common_1.PresentationStatus.NotInitialized, "IModelApp.startup must be called before calling Presentation.initialize"); } if (!localization) { localization = core_frontend_1.IModelApp.localization; } if (!presentationManager) { const managerProps = props?.presentation ?? {}; if (!managerProps.activeLocale) { const languages = Presentation.localization.getLanguageList(); managerProps.activeLocale = languages.length ? languages[0] : undefined; } presentationManager = PresentationManager_js_1.PresentationManager.create(managerProps); } if (!selectionManager) { /* eslint-disable @typescript-eslint/no-deprecated */ selectionManager = new SelectionManager_js_1.SelectionManager({ ...props?.selection, scopes: props?.selection?.scopes ?? new SelectionScopesManager_js_1.SelectionScopesManager({ rpcRequestsHandler: presentationManager[InternalSymbols_js_1._presentation_manager_rpcRequestsHandler], localeProvider: () => this.presentation.activeLocale, }), }); /* eslint-enable @typescript-eslint/no-deprecated */ } if (!favoritePropertiesManager) { favoritePropertiesManager = new FavoritePropertiesManager_js_1.FavoritePropertiesManager({ storage: props?.favorites ? props.favorites.storage : (0, FavoritePropertiesStorage_js_1.createFavoritePropertiesStorage)(FavoritePropertiesStorage_js_1.DefaultFavoritePropertiesStorageTypes.Noop), }); } await LocalizationHelper_js_1.FrontendLocalizationHelper.registerNamespaces(); for (const handler of initializationHandlers) { const cleanup = await handler(); if (cleanup) { terminationHandlers.push(cleanup); } } } /** * Terminates Presentation library frontend. This method should be called * before a call to [IModelApp.shutdown]($core-frontend) */ static terminate() { terminationHandlers.forEach((handler) => handler()); terminationHandlers.length = 0; IModelConnectionInitialization_js_1.imodelInitializationHandlers.clear(); if (localization) { LocalizationHelper_js_1.FrontendLocalizationHelper.unregisterNamespaces(); } if (presentationManager) { presentationManager[Symbol.dispose](); } presentationManager = undefined; if (favoritePropertiesManager) { favoritePropertiesManager[Symbol.dispose](); } favoritePropertiesManager = undefined; if (selectionManager) { selectionManager[Symbol.dispose](); } selectionManager = undefined; localization = undefined; } /** * Registers an additional handler which will be invoked during Presentation library frontend * initialization. */ static registerInitializationHandler(handler) { initializationHandlers.push(handler); } /** The singleton [[PresentationManager]] */ static get presentation() { if (!presentationManager) { throw new Error("Presentation must be first initialized by calling Presentation.initialize"); } return presentationManager; } /** * The singleton [[SelectionManager]]. * * @deprecated in 5.0 - will not be removed until after 2026-06-13. The whole unified selection system in this package is deprecated in favor of the new * [@itwin/unified-selection](https://github.com/iTwin/presentation/blob/master/packages/unified-selection/README.md) package. */ // eslint-disable-next-line @typescript-eslint/no-deprecated static get selection() { if (!selectionManager) { throw new Error("Presentation must be first initialized by calling Presentation.initialize"); } return selectionManager; } /** * The singleton [[FavoritePropertiesManager]] */ static get favoriteProperties() { if (!favoritePropertiesManager) { throw new Error("Favorite Properties must be first initialized by calling Presentation.initialize"); } return favoritePropertiesManager; } /** * The localization manager used by Presentation frontend. Returns the result of `IModelApp.i18n`. */ static get localization() { if (!localization) { throw new Error("Presentation must be first initialized by calling Presentation.initialize"); } return localization; } } exports.Presentation = Presentation; //# sourceMappingURL=Presentation.js.map