yarfl
Version:
Yet Another Redux Forms Library
73 lines • 3.06 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var types_1 = require("../actions/types");
var checkers_1 = require("../helpers/checkers");
var utils_1 = require("../helpers/utils");
exports.createArrayReducer = function () {
return function (state, action) {
var type = action.type;
switch (type) {
case types_1.default.ARRAY_FIELD_ADD:
case types_1.default.ARRAY_FIELD_DELETE:
break;
default:
return state;
}
var checkedAction = checkers_1.checkActionForKey(action);
switch (type) {
case types_1.default.ARRAY_FIELD_ADD:
return createAddArrayFieldReducer()(state, checkedAction);
case types_1.default.ARRAY_FIELD_DELETE:
return createDeleteArrayFieldReducer()(state, checkedAction);
default:
return state;
}
};
};
var createAddArrayFieldReducer = function () { return function (state, action) {
var key = checkers_1.checkActionForKey(action).key;
var fieldPath = utils_1.parseKey(key);
var _a = utils_1.getIn(state, ['fields'].concat(fieldPath)), fields = _a.fields, template = _a.default;
var fieldKey = fieldPath.reverse()[0];
var index = fields.length;
var newField = exports.createNewField(fieldKey, template, index);
var targetPath = ['fields'].concat(fieldPath, ['fields']);
var target = utils_1.getIn(state, targetPath);
if (!target) {
return state;
}
var updatedTarget = utils_1.append(target, newField);
return utils_1.setInWithPath(state, targetPath, updatedTarget);
}; };
exports.createNewField = function (parentKey, template, index) {
// check if it is proper type of field
if (typeof template === 'undefined') {
throw new Error();
}
return Object.entries(template).reduce(function (acc, _a) {
var k = _a[0], entry = _a[1];
var _b;
var _c = entry, childKey = _c.key, id = _c.id;
return __assign({}, acc, (_b = {}, _b[k] = __assign({}, entry, { key: childKey + "[" + index + "]", id: id + "-" + index, name: parentKey + "[][" + childKey + "]" }), _b));
}, {});
};
var createDeleteArrayFieldReducer = function () { return function (state, action) {
var _a = checkers_1.checkActionForKeyAndIndex(action), key = _a.key, index = _a.index;
var fieldPath = utils_1.parseKey(key);
var targetPath = ['fields'].concat(fieldPath, ['fields']);
var target = utils_1.getIn(state, targetPath);
if (!target) {
return state;
}
var updatedTarget = utils_1.removeAt(target, index);
return utils_1.setInWithPath(state, targetPath, updatedTarget);
}; };
//# sourceMappingURL=arrayReducer.js.map