UNPKG

aya-store

Version:
237 lines (191 loc) 8.64 kB
"use strict"; 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;