@sanpjs/runtime
Version:
San Pro Runtime
70 lines • 2.23 kB
JavaScript
;
/**
* @file san store 类的基本封装
* store 没有初始化数据,会导致多写一写代码。。
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.connectComponent = exports.Store = exports.keyZipObject = void 0;
const san_store_1 = require("san-store");
class Store extends san_store_1.Store {
constructor(options) {
super(options);
}
/**
* 初始化数据
* @param {Object} data 初始化数据
*/
initData(data) {
// 这里有风险,如果 store 类的实现变了名称,会影响
// 升级注意!
if (typeof data === 'object') {
const raw = this.raw;
Object.keys(data).forEach(name => {
if (raw[name]) {
throw new Error('Store.initData: ' + name + ' exists!');
}
else {
raw[name] = data[name];
}
});
}
return this;
}
/**
* 批量添加action
*/
addActions(actions) {
const addAction = this.addAction.bind(this);
if (typeof actions === 'object') {
Object.keys(actions).forEach(name => {
addAction(name, actions[name]);
});
}
else {
throw new Error('Store.addActions: actions type should be an object');
}
return this;
}
}
exports.Store = Store;
const keyZipObject = (keyList) => {
const result = {};
keyList.forEach(v => (result[v] = v));
return result;
};
exports.keyZipObject = keyZipObject;
const connectComponent = (store, component) => {
const keyMap = (0, exports.keyZipObject)(Object.keys(store.raw));
const actionMap = (0, exports.keyZipObject)(Object.keys(store.actions));
const connectStore = san_store_1.connect.createConnector(store);
return connectStore(keyMap, actionMap)(component);
};
exports.connectComponent = connectComponent;
/**
* 默认的全局 Store 实例
* 通常我们认为在一个应用应该具有一个全局唯一的 store,管理整个应用状态
*
* @type {Store}
*/
exports.default = new Store({ name: '__default__' });
//# sourceMappingURL=Store.js.map