UNPKG

elmer-ui-core

Version:

web app framework

176 lines (175 loc) 7.95 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReduxProvider = void 0; var elmer_redux_1 = require("elmer-redux"); var Component_1 = require("../../core/Component"); var globalUtil_1 = require("../../init/globalUtil"); var inject_1 = require("../../inject"); var propsValidation_1 = require("../../propsValidation"); elmer_redux_1.defineStateOperateAction(inject_1.autoInit(elmer_redux_1.ReduxController), globalUtil_1.getGlobalState, globalUtil_1.defineGlobalState); var ReduxProvider = (function (_super) { __extends(ReduxProvider, _super); function ReduxProvider(props) { var _this = _super.call(this, props) || this; _this.reduxController.reducers = props.reducers; _this.reduxController.autoSave = props.autoSave; switch (props.saveStore) { case "SessionStorage": _this.reduxController.saveStore = sessionStorage; break; case "LocalStorage": _this.reduxController.saveStore = localStorage; break; case "StoragePlugin": if (typeof props.defineStorage === "function") { _this.reduxController.saveStore = (new props.defineStorage()); } else { throw new Error("The defineStroage attribute can not be null or undefined."); } break; default: _this.reduxController.saveStore = sessionStorage; } console.log("Init Redux Provider"); return _this; } ReduxProvider.prototype.$init = function () { elmer_redux_1.defineReduxProvider(globalUtil_1.getGlobalState, globalUtil_1.defineGlobalState); elmer_redux_1.attachReducerToController(this.reduxController); this.initDefaultState(); }; ReduxProvider.prototype.initDefaultState = function () { var myReducer = this.props.reducers || {}; if (this.reduxController.autoSave) { var stateDataStr = this.reduxController.saveStore.getItem(this.reduxController.saveDataKey); if (!this.isEmpty(stateDataStr)) { this.reduxController.stateData = JSON.parse(stateDataStr); stateDataStr = null; } } this.initState(myReducer, this.reduxController.stateData, null); myReducer = null; this.reduxController.reducers = null; delete this.reduxController.reducers; }; ReduxProvider.prototype.render = function () { return "<div class='eui-redux-provider'><context /></div>"; }; ReduxProvider.prototype.initState = function (reducer, stateData, nodeKey) { var _this = this; if (this.isFunction(reducer)) { var initState = reducer(undefined, { type: "INIT_REDUCER_STATE" }); var nodeKeyValue_1 = nodeKey.replace(/^\./, ""); delete this.reduxController.reducersData[nodeKeyValue_1]; Object.defineProperty(this.reduxController.reducersData, nodeKeyValue_1, { configurable: true, enumerable: true, get: function () { return reducer; }, set: function () { console.error("\u4E0D\u5141\u8BB8\u76F4\u63A5\u4FEE\u6539Redux\u6570\u636E\u3002[" + nodeKeyValue_1 + "]", nodeKey); } }); if (undefined === initState || null === initState) { console.error("No init state return from reducer: " + nodeKeyValue_1); } else { this.defineStateValue(initState); return initState; } } else { Object.keys(reducer).map(function (tmpKey) { if (!stateData[tmpKey]) { stateData[tmpKey] = {}; } var myData = _this.initState(reducer[tmpKey], stateData[tmpKey], (!_this.isEmpty(nodeKey) ? [nodeKey, tmpKey].join(".") : tmpKey)); if (myData) { _this.defineReadOnlyProperty(stateData, tmpKey, myData); } }); } }; ReduxProvider.prototype.defineStateValue = function (stateValue) { var _this = this; if (this.isObject(stateValue)) { Object.keys(stateValue).map(function (stateKey) { (function (propsKey, propsValue) { if (_this.isObject(propsValue)) { _this.defineStateValue(propsValue); } Object.defineProperty(stateValue, propsKey, { configurable: true, enumerable: true, get: function () { return propsValue; }, set: function () { console.error("\u4E0D\u5141\u8BB8\u76F4\u63A5\u4FEE\u6539Redux\u6570\u636E\u3002" + stateKey, stateValue); } }); })(stateKey, stateValue[stateKey]); }); } }; ReduxProvider.propType = { autoSave: { description: "自动保存到sessionStorage", rule: propsValidation_1.PropTypes.bool }, defineStorage: { description: "define storage factory", rule: propsValidation_1.PropTypes.func }, reducers: { defaultValue: {}, description: "Redux监听方法集合", rule: propsValidation_1.PropTypes.object.isRequired }, saveStore: { defaultValue: "SessionStorage", description: "Redux保存方式", rule: propsValidation_1.PropTypes.oneValueOf(["SessionStorage", "LocalStorage", "StoragePlugin"]).isRequired } }; __decorate([ inject_1.autowired(elmer_redux_1.ReduxController), __metadata("design:type", elmer_redux_1.ReduxController) ], ReduxProvider.prototype, "reduxController", void 0); ReduxProvider = __decorate([ inject_1.declareComponent({ selector: "ReduxProvider" }), __metadata("design:paramtypes", [Object]) ], ReduxProvider); return ReduxProvider; }(Component_1.Component)); exports.ReduxProvider = ReduxProvider;