UNPKG

@ima/core

Version:

IMA.js framework for isomorphic javascript application

96 lines (95 loc) 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "PageFactory", { enumerable: true, get: function() { return PageFactory; } }); const _GenericError = require("../error/GenericError"); class PageFactory { /** * The current application object container. */ _oc; /** * Factory used by page management classes. */ constructor(oc){ this._oc = oc; } /** * Create new instance of {@link Controller}. */ createController(controller, options) { const { extensions = [] } = options; let mergedExtensions = [ ...extensions ]; if (Array.isArray(controller?.$extensions) && controller.$extensions?.length) { // @ts-expect-error can't check static properties mergedExtensions = mergedExtensions.concat(controller.$extensions); } const controllerInstance = this._oc.create(controller); for (const extension of mergedExtensions){ const loadedExtension = this._oc.get(extension); // Optional extension handling if (!loadedExtension) { continue; } // Spread support handling if (Array.isArray(loadedExtension)) { for (const extensionInstance of loadedExtension){ controllerInstance.addExtension(extensionInstance.constructor, extensionInstance); } } else { controllerInstance.addExtension(extension, loadedExtension); } } return controllerInstance; } /** * Retrieves the specified react component class. * * @param view The namespace * referring to a react component class, or a react component class * constructor. * @return The react component class * constructor. */ createView(view) { if (typeof view === 'function') { return view; } const classConstructor = this._oc.getConstructorOf(view); if (classConstructor) { return classConstructor; } else { throw new _GenericError.GenericError(`ima.core.page.Factory:createView hasn't name of view "${view}".`); } } /** * Returns decorated controller for ease setting seo params in controller. */ decorateController(controller) { const metaManager = this._oc.get('$MetaManager'); const router = this._oc.get('$Router'); const dictionary = this._oc.get('$Dictionary'); const settings = this._oc.get('$Settings'); const decoratedController = this._oc.create('$ControllerDecorator', [ controller, metaManager, router, dictionary, settings ]); return decoratedController; } /** * Returns decorated page state manager for extension. */ decoratePageStateManager(pageStateManager, allowedStateKeys) { const decoratedPageStateManager = this._oc.create('$PageStateManagerDecorator', [ pageStateManager, allowedStateKeys ]); return decoratedPageStateManager; } } //# sourceMappingURL=PageFactory.js.map