breact
Version:
Browser react utility
64 lines (47 loc) • 5.75 kB
JavaScript
/**
* Wrap a element with higher order component
* @function wrap
* @param {Object} Base - Base react class
* @param {Object} spec - Additional spec to wrap
* @returns {Object} - Wrapped component
*/
;
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var React = require('react');
var _require = require('asobj');
var clone = _require.clone;
var reservedNames = ['displayName', 'mixins', 'childContextTypes', 'contextTypes', 'getDefaultProps', 'propTypes', 'statics', 'autobind'];
/** @lends wrap */
function wrap(Component, spec) {
var propTypes = (0, _assign2.default)({}, spec.propTypes);
var statics = (0, _assign2.default)({}, (0, _keys2.default)(Component).filter(function (key) {
return !~reservedNames.indexOf(key);
}).reduce(function (statics, key) {
return (0, _assign2.default)(statics, (0, _defineProperty3.default)({}, key, Component[key]));
}, {}), spec.statics);
return React.createClass((0, _assign2.default)({
// Default renderer
render: function render() {
var s = this;
var props = s.props;
var wrappedProps = clone(props, {
without: (0, _keys2.default)(spec.propTypes || {})
});
var children = React.Children.toArray(props.children);
return React.createElement.apply(React, [Component, wrappedProps].concat((0, _toConsumableArray3.default)(children)));
}
}, spec, {
propTypes: propTypes,
statics: statics
}));
}
module.exports = wrap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndyYXAuanMiXSwibmFtZXMiOlsiUmVhY3QiLCJyZXF1aXJlIiwiY2xvbmUiLCJyZXNlcnZlZE5hbWVzIiwid3JhcCIsIkNvbXBvbmVudCIsInNwZWMiLCJwcm9wVHlwZXMiLCJzdGF0aWNzIiwiZmlsdGVyIiwia2V5IiwiaW5kZXhPZiIsInJlZHVjZSIsImNyZWF0ZUNsYXNzIiwicmVuZGVyIiwicyIsInByb3BzIiwid3JhcHBlZFByb3BzIiwid2l0aG91dCIsImNoaWxkcmVuIiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwiY3JlYXRlRWxlbWVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0FBT0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsUUFBUUMsUUFBUSxPQUFSLENBQWQ7O2VBQ2tCQSxRQUFRLE9BQVIsQzs7SUFBVkMsSyxZQUFBQSxLOzs7QUFFUixJQUFNQyxnQkFBZ0IsQ0FDcEIsYUFEb0IsRUFFcEIsUUFGb0IsRUFHcEIsbUJBSG9CLEVBSXBCLGNBSm9CLEVBS3BCLGlCQUxvQixFQU1wQixXQU5vQixFQU9wQixTQVBvQixFQVFwQixVQVJvQixDQUF0Qjs7QUFXQTtBQUNBLFNBQVNDLElBQVQsQ0FBZUMsU0FBZixFQUEwQkMsSUFBMUIsRUFBZ0M7QUFDOUIsTUFBSUMsWUFBWSxzQkFBYyxFQUFkLEVBQ2RELEtBQUtDLFNBRFMsQ0FBaEI7QUFHQSxNQUFJQyxVQUFVLHNCQUFjLEVBQWQsRUFDWixvQkFBWUgsU0FBWixFQUNHSSxNQURILENBQ1UsVUFBQ0MsR0FBRDtBQUFBLFdBQVMsQ0FBQyxDQUFDUCxjQUFjUSxPQUFkLENBQXNCRCxHQUF0QixDQUFYO0FBQUEsR0FEVixFQUVHRSxNQUZILENBRVUsVUFBQ0osT0FBRCxFQUFVRSxHQUFWO0FBQUEsV0FBa0Isc0JBQWNGLE9BQWQsb0NBQ3ZCRSxHQUR1QixFQUNqQkwsVUFBV0ssR0FBWCxDQURpQixFQUFsQjtBQUFBLEdBRlYsRUFJTSxFQUpOLENBRFksRUFNWkosS0FBS0UsT0FOTyxDQUFkO0FBUUEsU0FBT1IsTUFBTWEsV0FBTixDQUNMLHNCQUFjO0FBQ1o7QUFDQUMsVUFGWSxvQkFFRjtBQUNSLFVBQU1DLElBQUksSUFBVjtBQURRLFVBRUZDLEtBRkUsR0FFUUQsQ0FGUixDQUVGQyxLQUZFOztBQUdSLFVBQUlDLGVBQWVmLE1BQU1jLEtBQU4sRUFBYTtBQUM5QkUsaUJBQVMsb0JBQVlaLEtBQUtDLFNBQUwsSUFBa0IsRUFBOUI7QUFEcUIsT0FBYixDQUFuQjtBQUdBLFVBQUlZLFdBQVduQixNQUFNb0IsUUFBTixDQUFlQyxPQUFmLENBQXVCTCxNQUFNRyxRQUE3QixDQUFmO0FBQ0EsYUFBT25CLE1BQU1zQixhQUFOLGVBQW9CakIsU0FBcEIsRUFBK0JZLFlBQS9CLDBDQUFnREUsUUFBaEQsR0FBUDtBQUNEO0FBVlcsR0FBZCxFQVdHYixJQVhILEVBV1M7QUFDUEMsd0JBRE87QUFFUEM7QUFGTyxHQVhULENBREssQ0FBUDtBQWlCRDs7QUFFRGUsT0FBT0MsT0FBUCxHQUFpQnBCLElBQWpCIiwiZmlsZSI6IndyYXAuanMiLCJzb3VyY2VSb290IjoibGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXcmFwIGEgZWxlbWVudCB3aXRoIGhpZ2hlciBvcmRlciBjb21wb25lbnRcbiAqIEBmdW5jdGlvbiB3cmFwXG4gKiBAcGFyYW0ge09iamVjdH0gQmFzZSAtIEJhc2UgcmVhY3QgY2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcGVjIC0gQWRkaXRpb25hbCBzcGVjIHRvIHdyYXBcbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gV3JhcHBlZCBjb21wb25lbnRcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKVxuY29uc3QgeyBjbG9uZSB9ID0gcmVxdWlyZSgnYXNvYmonKVxuXG5jb25zdCByZXNlcnZlZE5hbWVzID0gW1xuICAnZGlzcGxheU5hbWUnLFxuICAnbWl4aW5zJyxcbiAgJ2NoaWxkQ29udGV4dFR5cGVzJyxcbiAgJ2NvbnRleHRUeXBlcycsXG4gICdnZXREZWZhdWx0UHJvcHMnLFxuICAncHJvcFR5cGVzJyxcbiAgJ3N0YXRpY3MnLFxuICAnYXV0b2JpbmQnXG5dXG5cbi8qKiBAbGVuZHMgd3JhcCAqL1xuZnVuY3Rpb24gd3JhcCAoQ29tcG9uZW50LCBzcGVjKSB7XG4gIGxldCBwcm9wVHlwZXMgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgIHNwZWMucHJvcFR5cGVzXG4gIClcbiAgbGV0IHN0YXRpY3MgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgIE9iamVjdC5rZXlzKENvbXBvbmVudClcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gIX5yZXNlcnZlZE5hbWVzLmluZGV4T2Yoa2V5KSlcbiAgICAgIC5yZWR1Y2UoKHN0YXRpY3MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihzdGF0aWNzLCB7XG4gICAgICAgIFtrZXldOiBDb21wb25lbnRbIGtleSBdXG4gICAgICB9KSwge30pLFxuICAgIHNwZWMuc3RhdGljc1xuICApXG4gIHJldHVybiBSZWFjdC5jcmVhdGVDbGFzcyhcbiAgICBPYmplY3QuYXNzaWduKHtcbiAgICAgIC8vIERlZmF1bHQgcmVuZGVyZXJcbiAgICAgIHJlbmRlciAoKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgICAgIGxldCB3cmFwcGVkUHJvcHMgPSBjbG9uZShwcm9wcywge1xuICAgICAgICAgIHdpdGhvdXQ6IE9iamVjdC5rZXlzKHNwZWMucHJvcFR5cGVzIHx8IHt9KVxuICAgICAgICB9KVxuICAgICAgICBsZXQgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KHByb3BzLmNoaWxkcmVuKVxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHdyYXBwZWRQcm9wcywgLi4uY2hpbGRyZW4pXG4gICAgICB9XG4gICAgfSwgc3BlYywge1xuICAgICAgcHJvcFR5cGVzLFxuICAgICAgc3RhdGljc1xuICAgIH0pXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwXG4iXX0=