UNPKG

canner

Version:

Build CMS in few lines of code for different data sources

178 lines (146 loc) 5.82 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ActionManager = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _get = _interopRequireDefault(require("lodash/get")); var _set = _interopRequireDefault(require("lodash/set")); var _updateWith = _interopRequireDefault(require("lodash/updateWith")); var _isArray = _interopRequireDefault(require("lodash/isArray")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); var _objectPattern = _interopRequireDefault(require("./pattern/objectPattern")); var _arrayPattern = _interopRequireDefault(require("./pattern/arrayPattern")); var _connectPattern = _interopRequireDefault(require("./pattern/connectPattern")); var ActionManager = function ActionManager() { var _this = this; (0, _classCallCheck2.default)(this, ActionManager); (0, _defineProperty2.default)(this, "store", {}); (0, _defineProperty2.default)(this, "addAction", function (action) { var _action$payload = action.payload, key = _action$payload.key, id = _action$payload.id; if (action.type === 'UPDATE_OBJECT') { var patternItem = (0, _get.default)(_this.store, [key], { connect: new _connectPattern.default(), object: new _objectPattern.default() }); patternItem.object.addAction(action); (0, _set.default)(_this.store, [key], patternItem); } else if (action.type === 'CREATE_ARRAY' || action.type === 'UPDATE_ARRAY' || action.type === 'DELETE_ARRAY') { var _patternItem = (0, _get.default)(_this.store, [key], []).find(function (item) { return item.id === id; }); if (_patternItem) { _patternItem.array.addAction(action); (0, _updateWith.default)(_this.store, key, function (list) { return list.map(function (item) { return item.id === id ? _patternItem : item; }); }); } else { _patternItem = { id: id, array: new _arrayPattern.default(), connect: new _connectPattern.default() }; // $FlowFixMe _patternItem.array.addAction(action); (0, _updateWith.default)(_this.store, key, function (list) { return (list || []).concat(_patternItem); }); } } else if (action.type === 'CONNECT' || action.type === 'DISCONNECT' || action.type === 'CREATE_AND_CONNECT' || action.type === 'DISCONNECT_AND_DELETE') { // relation in object var _patternItem2 = (0, _get.default)(_this.store, [key]); if (id && _patternItem2) { // relation in array _patternItem2 = _patternItem2.find(function (item) { return item.id === id; }); } if (_patternItem2) { _patternItem2.connect.addAction(action); if (id) { (0, _updateWith.default)(_this.store, key, function (list) { return list.map(function (item) { return item.id === id ? _patternItem2 : item; }); }); } else { (0, _updateWith.default)(_this.store, key, _patternItem2); } } else if (id) { _patternItem2 = { id: id, array: new _arrayPattern.default(), connect: new _connectPattern.default() }; // $FlowFixMe _patternItem2.connect.addAction(action); (0, _updateWith.default)(_this.store, key, function (list) { return (list || []).concat(_patternItem2); }); } else { _patternItem2 = { object: new _objectPattern.default(), connect: new _connectPattern.default() }; // $FlowFixMe _patternItem2.connect.addAction(action); (0, _set.default)(_this.store, key, _patternItem2); } } }); (0, _defineProperty2.default)(this, "getActions", function (key, id) { if (!key) { return Object.keys(_this.store).reduce(function (result, key) { return result.concat(_this.getActions(key)); }, []); } var item = (0, _get.default)(_this.store, key); if ((0, _isPlainObject.default)(item)) { return item.object.getActions().concat(item.connect.getActions()); } else if ((0, _isArray.default)(item)) { if (id) { // get action by key, id var patternItem = item.find(function (item) { return item.id === id; }) || { array: new _arrayPattern.default(), connect: new _connectPattern.default() }; // $FlowFixMe return patternItem.array.getActions().concat(patternItem.connect.getActions()); } else { // get all key action return item.reduce(function (result, currItem) { var actions = currItem.array.getActions().concat(currItem.connect.getActions()); return result.concat(actions); }, []); } } else { return []; } }); (0, _defineProperty2.default)(this, "removeActions", function (key, id) { if (!key) { return Object.keys(_this.store).forEach(function (key) { _this.removeActions(key); }); } var item = (0, _get.default)(_this.store, key); if ((0, _isPlainObject.default)(item)) { delete _this.store[key]; } else if ((0, _isArray.default)(item)) { if (id) { (0, _updateWith.default)(_this.store, key, function (list) { return list.filter(function (item) { return item.id !== id; }); }); } else { delete _this.store[key]; } } }); }; exports.ActionManager = ActionManager;