UNPKG

core-native

Version:

A lightweight framework based on React Native + Redux + Redux Saga, in strict TypeScript.

34 lines 1.47 kB
import { app } from "./app"; import { ModuleProxy } from "./platform/ModuleProxy"; import { setStateAction } from "./reducer"; export function register(module) { const moduleName = module.name; if (!app.store.getState().app[moduleName]) { // To get private property const initialState = module.initialState; app.store.dispatch(setStateAction(moduleName, initialState, `@@${moduleName}/@@init`)); console.info(`Module [${moduleName}] registered`); } // Transform every method into ActionCreator const actions = {}; getKeys(module).forEach(actionType => { const method = module[actionType]; // Attach action name, for @Log reflection const qualifiedActionType = `${moduleName}/${actionType}`; method.actionName = qualifiedActionType; actions[actionType] = (...payload) => ({ type: qualifiedActionType, payload }); app.actionHandlers[qualifiedActionType] = method.bind(module); }); return new ModuleProxy(module, actions); } function getKeys(module) { // Do not use Object.keys(Object.getPrototypeOf(module)), because class methods are not enumerable const keys = []; for (const propertyName of Object.getOwnPropertyNames(Object.getPrototypeOf(module))) { if (module[propertyName] instanceof Function && propertyName !== "constructor") { keys.push(propertyName); } } return keys; } //# sourceMappingURL=module.js.map