redux-and-the-rest
Version:
Declarative, flexible Redux integration with your RESTful API
107 lines (90 loc) • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toSingular = _interopRequireDefault(require("../../utils/string/toSingular"));
var _createItem = _interopRequireDefault(require("../../actions/RESTful/createItem"));
var _updateItem = _interopRequireDefault(require("../../actions/RESTful/updateItem"));
var _destroyItem = _interopRequireDefault(require("../../actions/RESTful/destroyItem"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function getForeignKeyName(_ref) {
var foreignKey = _ref.foreignKey,
as = _ref.as,
name = _ref.name;
if (foreignKey) {
return foreignKey;
} else {
if (as) {
return "".concat((0, _toSingular["default"])(as), "Id");
} else {
return "".concat((0, _toSingular["default"])(name), "Id");
}
}
}
function getKeyName(_ref2) {
var key = _ref2.key,
relationType = _ref2.relationType,
associationName = _ref2.associationName;
if (key) {
return key;
} else {
if (relationType === 'belongsTo') {
return "".concat((0, _toSingular["default"])(associationName), "Id");
} else {
return "".concat((0, _toSingular["default"])(associationName), "Ids");
}
}
}
function addAssociationReducer(reducersDict, name, relationType, associationName) {
var actions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
var _ref3 = arguments.length > 5 ? arguments[5] : undefined,
foreignKey = _ref3.foreignKey,
as = _ref3.as,
dependent = _ref3.dependent,
key = _ref3.key,
listParameter = _ref3.listParameter;
var foreignKeyName = getForeignKeyName({
foreignKey: foreignKey,
as: as,
name: name
});
var keyName = getKeyName({
key: key,
relationType: relationType,
associationName: associationName
});
var reducerOptions = {
name: name,
relationType: relationType,
foreignKeyName: foreignKeyName,
keyName: keyName,
dependent: dependent,
listParameter: listParameter
};
addAssociationReducersTo(reducersDict, {
actions: actions,
reducerOptions: reducerOptions
});
}
var associationReducersDict = {
createItem: _createItem["default"].hasManyAssociationsReducer,
updateItem: _updateItem["default"].hasManyAssociationsReducer,
destroyItem: _destroyItem["default"].hasManyAssociationsReducer
};
function addAssociationReducersTo(reducersDict, _ref4) {
var actions = _ref4.actions,
reducerOptions = _ref4.reducerOptions;
Object.keys(associationReducersDict).forEach(function (actionKey) {
var actionName = actions[actionKey];
if (actionName) {
reducersDict[actionName] = {
reducer: function reducer(resources, action) {
return associationReducersDict[actionKey](resources, action, reducerOptions);
}
};
}
});
}
var _default = addAssociationReducer;
exports["default"] = _default;