UNPKG

@crpt/react-utils

Version:

A useful kit for daily using

56 lines (39 loc) 1.83 kB
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;