UNPKG

mutants-appfx

Version:

appfx module

60 lines (53 loc) 2.14 kB
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) || {}; } }