@deskpro/react-forms
Version:
Forms library for React
80 lines (63 loc) • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /**
* @copyright 2015, Prometheus Research, LLC
*/
exports.update = update;
var _isNumber = require('lodash/isNumber');
var _isNumber2 = _interopRequireDefault(_isNumber);
var _isArray = require('lodash/isArray');
var _isArray2 = _interopRequireDefault(_isArray);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function update(obj) {
var keyPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var value = arguments[2];
var schema = arguments[3];
return _update(obj, keyPath, 0, value, schema);
}
function _update(obj, keyPath, keyIndex, value, schema) {
if (keyPath.length - keyIndex === 0) {
if (schema && schema.onUpdate) {
return schema.onUpdate(value, { key: keyPath[keyIndex], schema: schema });
} else {
return value;
}
}
var key = keyPath[keyIndex];
var nextObj = void 0;
var isArrayUpdate = false;
if (obj) {
if ((0, _isArray2.default)(obj)) {
isArrayUpdate = true;
nextObj = obj.slice(0);
} else {
nextObj = _extends({}, obj);
}
} else {
if ((0, _isNumber2.default)(key)) {
isArrayUpdate = true;
nextObj = [];
} else {
nextObj = {};
}
}
var nextSchema = void 0;
if (schema) {
if (isArrayUpdate && schema.items) {
if ((0, _isArray2.default)(schema.items)) {
nextSchema = schema.items[key];
} else {
nextSchema = schema.items;
}
} else if (schema.properties) {
nextSchema = schema.properties[key];
}
}
nextObj[key] = _update(nextObj[key], keyPath, keyIndex + 1, value, nextSchema);
if (schema && schema.onUpdate) {
nextObj = schema.onUpdate(nextObj, { key: key, schema: schema });
}
return nextObj;
}