UNPKG

@deskpro/react-forms

Version:
80 lines (63 loc) 2.63 kB
'use strict'; 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; }