canner
Version:
Build CMS in few lines of code for different data sources
178 lines (146 loc) • 5.82 kB
JavaScript
;
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;