@ima/core
Version:
IMA.js framework for isomorphic javascript application
96 lines (95 loc) • 3.27 kB
JavaScript
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
;