UNPKG

reduxm

Version:

为了更好的使用Redux,进行二次封装

325 lines (271 loc) 11.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _class, _temp; var _reducerfactory = require('./reducerfactory'); var _reducerfactory2 = _interopRequireDefault(_reducerfactory); var _actiontypefactory = require('../actiontype/actiontypefactory'); var _actiontypefactory2 = _interopRequireDefault(_actiontypefactory); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reduxThunk = require('redux-thunk'); var _reduxThunk2 = _interopRequireDefault(_reduxThunk); var _redux = require('redux'); var _reactRedux = require('react-redux'); var _reduxDevtools = require('redux-devtools'); var _reduxDevtoolsLogMonitor = require('redux-devtools-log-monitor'); var _reduxDevtoolsLogMonitor2 = _interopRequireDefault(_reduxDevtoolsLogMonitor); var _reduxDevtoolsDockMonitor = require('redux-devtools-dock-monitor'); var _reduxDevtoolsDockMonitor2 = _interopRequireDefault(_reduxDevtoolsDockMonitor); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } //redux的DevTools视图 var DevTools = (0, _reduxDevtools.createDevTools)(_react2.default.createElement( _reduxDevtoolsDockMonitor2.default, { toggleVisibilityKey: 'ctrl-h', changePositionKey: 'ctrl-q' }, _react2.default.createElement(_reduxDevtoolsLogMonitor2.default, { theme: 'tomorrow' }) )); //按名称存储actionType var storeActionTypeSign = {}; //按名称存储是否不需要销毁 var storeUnDestroySign = {}; //按名称存储计算属性 var storeComputedSign = {}; //按名称存储是否需要日志的级别 var storeLogsSign = {}; /** * 数据注入层 */ var Store = (_temp = _class = function Store() { _classCallCheck(this, Store); }, _class.store = function () { var storeName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var allActionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var allStoreLogs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; return function (target) { if (!storeName) { return; } if (!target || typeof target != 'function') { throw new Error('target Invalid value of type ' + (typeof target === 'undefined' ? 'undefined' : _typeof(target)) + ' for store.'); } /** * initialData storeName下,离开页面需要销毁的数据 * excludeData storeName下,离开页面需要保留的数据 * actionTypes storeName下,所有actionType * actions storeName下,所有数据改变函数 */ var initialData = {}; var excludeData = {}; var actionTypes = {}; var actions = {}; //循环整个store原目标对象,按要求提取以上数据 var _loop = function _loop(key) { //提取initialData、excludeData if (storeUnDestroySign[key]) { excludeData[key] = target[key]; } else if (storeComputedSign[key]) { initialData[key] = target[key].apply(target); } else { initialData[key] = target[key]; } if (storeActionTypeSign[key]) { //提取actionTypes actionTypes[storeActionTypeSign[key]] = storeName + '_' + storeActionTypeSign[key]; //提取actions var storeLogsSignKey = storeLogsSign[key]; var storePropsSignKey = storeActionTypeSign[key]; var _storeComputedSignTemp = storeComputedSign; var _storeLogsSignTemp = storeLogsSign; actions[storeName + '_' + storeActionTypeSign[key]] = function (state, action) { //埋入日志输出点,便于使用人员定位数据流向 if (storeLogsSignKey) { switch (storeLogsSignKey) { case 'warn': console.warn('---actionType:' + storePropsSignKey + '--- \n ---storeName:' + key + '--- \n ---storeSource:'); console.warn(action[key]); break; case 'log': console.log('---actionType:' + storePropsSignKey + '--- \n ---storeName:' + key + '--- \n ---storeSource:'); console.log(action[key]); break; case 'error': console.error('---actionType:' + storePropsSignKey + '--- \n ---storeName:' + key + '--- \n ---storeSource:'); console.error(action[key]); break; default: break; } } //改变redux的state并返回(真正改变值的方法) var arg = {}; //重新得到计算者 for (var computedKey in target) { if (_storeComputedSignTemp[computedKey] && key == _storeComputedSignTemp[computedKey]) { arg[computedKey] = target[computedKey].apply(action); //埋入日志输出点,便于使用人员定位数据流向 if (_storeLogsSignTemp[computedKey]) { switch (_storeLogsSignTemp[computedKey]) { case 'warn': console.warn('---storeComputed:' + computedKey + '--- \n ---dependency:' + _storeComputedSignTemp[computedKey] + '---'); console.warn(action[key]); break; case 'log': console.log('---storeComputed:' + computedKey + '--- \n ---dependency:' + _storeComputedSignTemp[computedKey] + '---'); console.log(action[key]); break; case 'error': console.error('---storeComputed:' + computedKey + '--- \n ---dependency:' + _storeComputedSignTemp[computedKey] + '---'); console.error(action[key]); break; default: break; } } } } arg[key] = action[key]; return Object.assign({}, state, arg); }; } }; for (var key in target) { _loop(key); } //存在整个数据层改变的actionType if (allActionType) { actionTypes[allActionType] = storeName + '_' + allActionType; var storeComputedSignTemp = storeComputedSign; var storeLogsSignTemp = storeLogsSign; actions[storeName + '_' + allActionType] = function (state, action) { //埋入日志输出点,便于使用人员定位数据流向 if (allStoreLogs) { switch (allStoreLogs) { case 'warn': console.warn('---actionType:' + allActionType + '--- \n ---storeName:' + storeName + '--- \n ---storeSource:'); console.warn(action[storeName]); break; case 'log': console.log('---actionType:' + allActionType + '--- \n ---storeName:' + storeName + '--- \n ---storeSource:'); console.log(action[storeName]); break; case 'error': console.error('---actionType:' + allActionType + '--- \n ---storeName:' + storeName + '--- \n ---storeSource:'); console.error(action[storeName]); break; default: break; } } //重新得到计算者 for (var computedKey in target) { if (storeComputedSignTemp[computedKey] && action[storeName][storeComputedSignTemp[computedKey]] != undefined) { action[storeName][computedKey] = target[computedKey].apply(action[storeName]); //埋入日志输出点,便于使用人员定位数据流向 if (storeLogsSignTemp[computedKey]) { switch (storeLogsSignTemp[computedKey]) { case 'warn': console.warn('---storeComputed:' + computedKey + '--- \n ---dependency:' + storeComputedSignTemp[computedKey] + '---'); break; case 'log': console.log('---storeComputed:' + computedKey + '--- \n ---dependency:' + storeComputedSignTemp[computedKey] + '---'); break; case 'error': console.error('---storeComputed:' + computedKey + '--- \n ---dependency:' + storeComputedSignTemp[computedKey] + '---'); break; default: break; } } } } //改变redux的state并返回(真正改变值的方法) return Object.assign({}, state, action[storeName]); }; } //按名称将actionTypes存入ActionTypeFactory _actiontypefactory2.default.initActionType(storeName, actionTypes); //按名称将数据、数据改变函数存入ReducerFactory _reducerfactory2.default.initReducer(storeName, initialData, excludeData, actions); //清空记录标识等待下次数据存入 storeActionTypeSign = {}; storeUnDestroySign = {}; storeComputedSign = {}; storeLogsSign = {}; return true; }; }, _class.storeActionType = function () { var actionType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; return function (target, key) { if (!target || typeof target != 'function') { throw new Error('target Invalid value of type ' + (typeof target === 'undefined' ? 'undefined' : _typeof(target)) + ' for storeActionType.'); } if (!key || typeof key != 'string') { throw new Error('key Invalid value of type ' + (typeof key === 'undefined' ? 'undefined' : _typeof(key)) + ' for storeActionType.'); } //按名称存储actionType storeActionTypeSign[key] = actionType; //按名称存储是否需要日志的级别 if (level) { storeLogsSign[key] = level; } return target; }; }, _class.storeUnDestroy = function (target, key) { if (!target || typeof target != 'function') { throw new Error('target Invalid value of type ' + (typeof target === 'undefined' ? 'undefined' : _typeof(target)) + ' for storeUnDestroy.'); } if (!key || typeof key != 'string') { throw new Error('key Invalid value of type ' + (typeof key === 'undefined' ? 'undefined' : _typeof(key)) + ' for storeUnDestroy.'); } //按名称存储是否需要销毁 storeUnDestroySign[key] = true; return target; }, _class.storeComputed = function () { var dependency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; return function (target, key) { if (!target || typeof target != 'function') { throw new Error('target Invalid value of type ' + (typeof target === 'undefined' ? 'undefined' : _typeof(target)) + ' for storeComputed.'); } if (!key || typeof key != 'string') { throw new Error('key Invalid value of type ' + (typeof key === 'undefined' ? 'undefined' : _typeof(key)) + ' for storeComputed.'); } //按名称存储计算属性 storeComputedSign[key] = dependency; //按名称存储是否需要日志的级别 if (level) { storeLogsSign[key] = level; } return target; }; }, _class.createStore = function (router, debug) { if (!router || (typeof router === 'undefined' ? 'undefined' : _typeof(router)) != 'object') { throw new Error('target Invalid value of type ' + (typeof router === 'undefined' ? 'undefined' : _typeof(router)) + ' for createStore.'); } var store = null; if (debug) { var enhancer = (0, _redux.compose)((0, _redux.applyMiddleware)(_reduxThunk2.default), DevTools.instrument()); store = (0, _redux.createStore)(_reducerfactory2.default.getReducer(), enhancer); } else { store = (0, _redux.createStore)(_reducerfactory2.default.getReducer(), (0, _redux.applyMiddleware)(_reduxThunk2.default)); } return _react2.default.createElement( _reactRedux.Provider, { store: store }, router ); }, _class.getDevTools = function () { return _react2.default.createElement(DevTools, null); }, _class.getActionType = function () { var storeName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return _actiontypefactory2.default.getActionType(storeName); }, _class.getAllInitData = function () { var storeName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return _reducerfactory2.default.getAllInitData(storeName); }, _temp); exports.default = Store;