UNPKG

@itwin/presentation-frontend

Version:

Frontend of iModel.js Presentation library

175 lines • 7.12 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_1 = require("./favorite-properties/FavoritePropertiesManager"); const FavoritePropertiesStorage_1 = require("./favorite-properties/FavoritePropertiesStorage"); const LocalizationHelper_1 = require("./LocalizationHelper"); const PresentationManager_1 = require("./PresentationManager"); const SelectionManager_1 = require("./selection/SelectionManager"); const SelectionScopesManager_1 = require("./selection/SelectionScopesManager"); let localization; let presentationManager; let selectionManager; 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 { /* istanbul 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_1.PresentationManager.create(managerProps); } if (!selectionManager) { selectionManager = new SelectionManager_1.SelectionManager({ ...props?.selection, scopes: props?.selection?.scopes ?? new SelectionScopesManager_1.SelectionScopesManager({ rpcRequestsHandler: presentationManager.rpcRequestsHandler, localeProvider: () => this.presentation.activeLocale, }), }); } if (!favoritePropertiesManager) { favoritePropertiesManager = new FavoritePropertiesManager_1.FavoritePropertiesManager({ storage: props?.favorites ? props.favorites.storage : (0, FavoritePropertiesStorage_1.createFavoritePropertiesStorage)(FavoritePropertiesStorage_1.DefaultFavoritePropertiesStorageTypes.Noop), }); } presentationManager.startIModelInitialization = (imodel) => favoritePropertiesManager?.startConnectionInitialization(imodel); presentationManager.ensureIModelInitialized = async (imodel) => favoritePropertiesManager?.ensureInitialized(imodel); await LocalizationHelper_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; if (localization) { LocalizationHelper_1.FrontendLocalizationHelper.unregisterNamespaces(); } if (presentationManager) { presentationManager.dispose(); } presentationManager = undefined; if (favoritePropertiesManager) { favoritePropertiesManager.dispose(); } favoritePropertiesManager = undefined; if (selectionManager) { selectionManager.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; } /** @internal */ static setPresentationManager(value) { if (presentationManager) { presentationManager.dispose(); } presentationManager = value; } /** The singleton [[SelectionManager]] */ static get selection() { if (!selectionManager) { throw new Error("Presentation must be first initialized by calling Presentation.initialize"); } return selectionManager; } /** @internal */ static setSelectionManager(value) { selectionManager = value; } /** * The singleton [[FavoritePropertiesManager]] * @public */ static get favoriteProperties() { if (!favoritePropertiesManager) { throw new Error("Favorite Properties must be first initialized by calling Presentation.initialize"); } return favoritePropertiesManager; } /** @internal */ static setFavoritePropertiesManager(value) { if (favoritePropertiesManager) { favoritePropertiesManager.dispose(); } favoritePropertiesManager = value; } /** * 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; } /** @internal */ static setLocalization(value) { localization = value; } } exports.Presentation = Presentation; //# sourceMappingURL=Presentation.js.map