create-element-functional
Version:
JSX `createElement` replacer to use functional React components as functions
39 lines (27 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var isPureSFComponent = function isPureSFComponent(component) {
return typeof component === 'function' && component.prototype instanceof _react2.default.Component === false && !component.contextTypes;
};
var formatChildren = function formatChildren(children) {
return children.length > 1 ? children : children[0];
};
exports.default = function (component, props) {
for (var _len = arguments.length, children = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
children[_key - 2] = arguments[_key];
}
if (isPureSFComponent(component)) {
var combinedProps = _extends({}, component.defaultProps, props);
if (children.length > 0) {
combinedProps.children = formatChildren(children);
}
return component(combinedProps, {});
}
return _react2.default.createElement.apply(_react2.default, [component, props].concat(children));
};