UNPKG

choerodon-ui

Version:

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

97 lines (82 loc) 2.24 kB
import isObject from 'lodash/isObject'; import { isArrayLike, observable } from 'mobx'; import { mobxGet, mobxRemove, mobxSet } from './MobxUtils'; export 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 = mobxGet(obj, key); if (value === null) { return null; } if (isArrayLike(value)) { return value.map(function (item) { return get(item, restKey); }).filter(function (item) { return !!item; }); } if (isObject(value)) { return get(value, restKey); } } else { return mobxGet(obj, prop); } } } export function set(data, prop, value) { var fields = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 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')) { mobxSet(data, key, []); } else { mobxSet(data, key, {}); } } var obj = mobxGet(data, key); if (isArrayLike(obj)) { if (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 (isObject(obj)) { set(obj, prop.slice(index + 1), value); } } else { mobxSet(data, prop, value); } } export function remove(obj, prop) { var index = prop.indexOf('.'); if (index !== -1) { var value = mobxGet(obj, prop.slice(0, index)); if (value) { var restKey = prop.slice(index + 1); if (isArrayLike(value)) { value.forEach(function (item) { return remove(item, restKey); }); } else if (isObject(value)) { remove(value, restKey); } } } else { mobxRemove(obj, prop); } } //# sourceMappingURL=ObjectChainValue.js.map