Repository URL to install this package:
|
Version:
1.1.21 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _renderProps = _interopRequireDefault(require("./renderProps"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
const isElement = element => typeof element.type === 'function';
const compose = (...elements) => {
return composedProps => {
// Stack children arguments recursively and pass
// it down until the last component that render children
// with these stacked arguments
function stackProps(i, elements, propsList = []) {
const element = elements[i];
const isTheLast = i === 0; // Check if is latest component.
// If is latest then render children,
// Otherwise continue stacking arguments
const renderFn = props => isTheLast ? (0, _renderProps.default)(composedProps, ...propsList.concat(props)) : stackProps(i - 1, elements, propsList.concat(props)); // Clone a element if it's passed created as <Element initial={} />
// Or create it if passed as just Element
const elementFn = isElement(element) ? React.cloneElement : React.createElement;
return elementFn(element, {}, renderFn);
}
return stackProps(elements.length - 1, elements.reverse());
};
};
var _default = compose;
exports.default = _default;