mutants-appfx
Version:
appfx module
60 lines (53 loc) • 2.14 kB
JavaScript
import BaseController from './BaseController';
import ViewController from './ViewController';
export default class Controller {
static registry = new Map();
static viewControllerTypes = new Map();
static blockTypes = new Map();
static vblockTypes = new Map();
static registerController(className, ControllerClass, ViewControllerClass, Blocks, ViewBlocks) {
// ControllerClasss.forEach(CLASS => {
// Controller.registry.set(CLASS.name, CLASS);
// });
Controller.registry.set(className, ControllerClass);
Controller.viewControllerTypes.set(className, ViewControllerClass);
Controller.blockTypes.set(className, {...Controller.blockTypes.get(className),...Blocks});
Controller.vblockTypes.set(className, {...Controller.vblockTypes.get(className),...ViewBlocks});
}
static async createBizController({
view,
controller,
...other
}, dataModel, ui, viewModel) {
const controllerClassName = controller;
const ControllerClass = Controller.registry.get(controllerClassName) || BaseController;
const blocks = Controller.createControllerBlocks({
controller
});
return new ControllerClass(other, dataModel, ui, view, viewModel, blocks);
}
static createViewController({
controller,
...other
}, bizcontroller, uicontroller) {
const ControllerClass = Controller.viewControllerTypes.get(controller) || ViewController;
const blocks = Controller.createControllerViewBlocks({
controller
});
return new ControllerClass(other, null, null, uicontroller, bizcontroller, blocks);
}
static registerBlocks(className, Blocks, VBlocks) {
Controller.blockTypes.set(className.replace('Blocks', 'Controller'), {...Controller.blockTypes.get(className),...Blocks});
Controller.vblockTypes.set(className.replace('Blocks', 'Controller'), {...Controller.vblockTypes.get(className),...VBlocks});
}
static createControllerBlocks({
controller
}) {
return Controller.blockTypes.get(controller) || {};
}
static createControllerViewBlocks({
controller
}) {
return Controller.vblockTypes.get(controller) || {};
}
}