choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
97 lines (74 loc) • 2.13 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
import classNames from 'classnames';
import isPromise from 'is-promise';
import isNil from 'lodash/isNil';
import isFunction from 'lodash/isFunction';
import assignWith from 'lodash/assignWith';
import { global } from 'choerodon-ui/shared';
if (!global.FUNCTION_CHAINS_MAP) {
global.FUNCTION_CHAINS_MAP = new WeakMap();
}
var chainsMap = global.FUNCTION_CHAINS_MAP;
function merge(prop, other) {
if (isNil(prop)) {
return other;
}
if (isNil(other)) {
return prop;
}
return _objectSpread(_objectSpread({}, prop), other);
}
function customizer(value, srcValue, key) {
if (key === 'style' || key.endsWith('Style')) {
return merge(value, srcValue);
}
if (key === 'className' || key.endsWith('ClassName')) {
return classNames(value, srcValue);
}
if (key.endsWith('Props')) {
return mergeProps(value, srcValue);
}
if (isFunction(value) && isFunction(srcValue)) {
var chains = chainsMap.get(value);
if (chains) {
chains.fn = srcValue;
return chains;
}
var newChains = function newChains() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var $chains = chainsMap.get(value);
var _ref = $chains || {},
fn = _ref.fn;
if (fn) {
var ret = fn.apply(void 0, args);
if (isPromise(ret)) {
return ret.then(function (result) {
if (result !== false) {
return value.apply(void 0, args);
}
return result;
});
}
if (ret === false) {
return false;
}
}
return value.apply(void 0, args);
};
newChains.fn = srcValue;
chainsMap.set(value, newChains);
return newChains;
}
}
export default function mergeProps(props, otherProps) {
if (isNil(props)) {
return otherProps;
}
if (isNil(otherProps)) {
return props;
}
return assignWith(props, otherProps, customizer);
}
//# sourceMappingURL=mergeProps.js.map