UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

113 lines (90 loc) 2.68 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.get = get; exports.set = set; exports.remove = remove; var _isObject = _interopRequireDefault(require("lodash/isObject")); var _mobx = require("mobx"); var _MobxUtils = require("./MobxUtils"); function get(obj, prop) { if (obj === null) { return null; } if (obj !== undefined) { var index = prop.indexOf('.'); if (index !== -1) { var key = prop.slice(0, index); var restKey = prop.slice(index + 1); var value = (0, _MobxUtils.mobxGet)(obj, key); if (value === null) { return null; } if ((0, _mobx.isArrayLike)(value)) { return value.map(function (item) { return get(item, restKey); }).filter(function (item) { return !!item; }); } if ((0, _isObject["default"])(value)) { return get(value, restKey); } } else { return (0, _MobxUtils.mobxGet)(obj, prop); } } } function set(data, prop, value) { var fields = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _mobx.observable.map(); var index = prop.indexOf('.'); if (index !== -1) { var key = prop.slice(0, index); if (!data[key] && value !== undefined) { var field = fields.get(key); if (field && field.get('multiple')) { (0, _MobxUtils.mobxSet)(data, key, []); } else { (0, _MobxUtils.mobxSet)(data, key, {}); } } var obj = (0, _MobxUtils.mobxGet)(data, key); if ((0, _mobx.isArrayLike)(obj)) { if ((0, _mobx.isArrayLike)(value)) { value.forEach(function (item, i) { if (obj.length === i) { obj.push({}); } else if (!obj[i]) { obj[i] = {}; } set(obj[i], prop.slice(index + 1), item); }); } } else if ((0, _isObject["default"])(obj)) { set(obj, prop.slice(index + 1), value); } } else { (0, _MobxUtils.mobxSet)(data, prop, value); } } function remove(obj, prop) { var index = prop.indexOf('.'); if (index !== -1) { var value = (0, _MobxUtils.mobxGet)(obj, prop.slice(0, index)); if (value) { var restKey = prop.slice(index + 1); if ((0, _mobx.isArrayLike)(value)) { value.forEach(function (item) { return remove(item, restKey); }); } else if ((0, _isObject["default"])(value)) { remove(value, restKey); } } } else { (0, _MobxUtils.mobxRemove)(obj, prop); } } //# sourceMappingURL=ObjectChainValue.js.map