aya-store
Version:
237 lines (191 loc) • 8.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var StoreProto =
/*#__PURE__*/
function () {
function StoreProto() {
_classCallCheck(this, StoreProto);
_defineProperty(this, "observables", []);
}
_createClass(StoreProto, [{
key: "link",
// 连接一个store
value: function link(storeLinked, comp) {
var _this = this;
if (storeLinked && comp) {
/**
* 操作观察队列
*/
var lifeTimes = {
ent: ['onLoad', 'attached'],
ext: ['onUnload', 'detached']
};
for (var i in lifeTimes) {
// 拦截生命周期,并且订阅对应组件
if (i === 'ent') {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = lifeTimes[i][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var lifeTimeName = _step.value;
comp[lifeTimeName] = function () {
pushThatIntoObserverables(this);
};
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
} else if (i === 'ext') {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = lifeTimes[i][Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _lifeTimeName = _step2.value;
comp[_lifeTimeName] = function () {
removeThatFromObserverables(this);
};
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
}
/**
* 实例所连接的store,并且挂载到全局store上
*/
var newClass = new storeLinked();
var name = newClass.constructor.name.toString();
this.store[name] = newClass;
/**
* 将store注入到data中,以触发view刷新
*/
var newData = JSON.parse(JSON.stringify(comp.data));
Object.defineProperties(comp, {
'data': {
value: _objectSpread({}, newData, {
store: this.store[name].values
}),
configurable: false,
writable: true,
enumerable: true
}
});
/**
* 赋予setStore方法
*/
// 1,给page添加该方法
comp.setStore = function (newStore) {
var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
if (newStore && _typeof(newStore) === 'object') {
storeChanger(name, newStore, cb() || function () {});
} else {
console.log('setStore的参数不正确');
}
}; // 2,给component添加该方法
if (comp.methods) {
comp.methods = Object.assign(comp.methods, {
setStore: function setStore(newStore) {
var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
if (newStore && _typeof(newStore) === 'object') {
storeChanger(name, newStore, cb() || function () {});
} else {
console.log('setStore的参数不正确');
}
}
});
} // 每次onShow或attached时获取最新的store
['onShow', 'attached'].forEach(function (lifeTimeName) {
var originalLifeTimeName = comp[lifeTimeName];
comp[lifeTimeName] = function () {
this.setStore(getStore(name).values);
originalLifeTimeName.call(this);
};
});
var getStore = function getStore(name) {
return _this.getStore(name);
}; // 更改对应data
var storeChanger = function storeChanger(storeOwnerName, newData) {
var cb = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
var promises = _this.observables.map(function (item) {
// 更改store
globalStoreHandler(storeOwnerName, newData); // 更改对应data
return new Promise(function (resolve) {
item.setData({
store: Object.assign(item.data.store, newData)
}, resolve);
});
});
if (cb && typeof cb === 'function') {
Promise.all(promises).then(cb);
} else {
Promise.all(promises);
}
}; // 更改global store
var globalStoreHandler = function globalStoreHandler(storeOwnerName, newStore) {
_this.updateStore(storeOwnerName, newStore);
}; // 把元素加入观察列表
var pushThatIntoObserverables = function pushThatIntoObserverables(that) {
_this.observables.push(that);
}; // 把元素移出观察列表
var removeThatFromObserverables = function removeThatFromObserverables(that) {
var index = _this.observables.findIndex(function (item) {
return item === that;
});
if (index > -1) {
_this.observables.splice(index, 1);
}
};
}
return comp;
} // 获取store
}, {
key: "getStore",
value: function getStore(storeOwnerName) {
return this.store[storeOwnerName] || undefined;
} // 更新store
}, {
key: "updateStore",
value: function updateStore(storeKey, object) {
var newStore = JSON.parse(JSON.stringify(this.store[storeKey]));
if (storeKey && typeof storeKey === 'string' && object && _typeof(object) === 'object') {
this.store[storeKey].values = Object.assign(newStore.values, object);
}
}
}]);
return StoreProto;
}();
var _default = StoreProto;
exports.default = _default;