@crpt/react-utils
Version:
A useful kit for daily using
56 lines (39 loc) • 1.83 kB
JavaScript
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
import { createElement } from 'react';
import { assign, isEmpty, isPlainObject, reduceRight } from 'lodash';
import { collectProps, getElementType, getPropWith, pickElementProps } from '../lib';
import { processAccessor, processBlacklist, processSelector } from '../lib/propsUtils/processors';
var createFactory = function createFactory(component) {
return function (props, child) {
if (typeof component === 'function') {
return createElement(component, props, child);
}
if (isPlainObject(component) && !isEmpty(component)) {
var defaults = {
collection: [processAccessor, processSelector, processBlacklist],
initial: component
};
var customOptions = getPropWith(component, 'options', props);
var collectOptions = assign({}, defaults, customOptions);
var collectedProps = collectProps(component, collectOptions, props);
var ElementType = getElementType(collectedProps);
var elementProps = pickElementProps(ElementType, collectedProps);
return createElement(ElementType, elementProps, child);
}
return child;
};
};
var nest = function nest() {
for (var _len = arguments.length, components = Array(_len), _key = 0; _key < _len; _key++) {
components[_key] = arguments[_key];
}
var factories = components.map(createFactory);
return function (_ref) {
var children = _ref.children,
props = _objectWithoutProperties(_ref, ['children']);
return reduceRight(factories, function (child, factory) {
return factory(props, child);
}, children);
};
};
export default nest;