elmer-ui-core
Version:
web app framework
176 lines (175 loc) • 7.95 kB
JavaScript
;
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;