react-transclusion
Version:
Render arbitrary components into outlets for use in dynamic layouts.
35 lines (28 loc) • 1.16 kB
JavaScript
;
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 PropTypes = React.PropTypes;
var OutletRenderer = function OutletRenderer(Component) {
return React.createClass({
contextTypes: {
outletManager: PropTypes.object.isRequired
},
render: function render() {
return React.createElement(Component, _extends({}, this.props, {
isOutletDefined: this.isDefined,
isOutletOccupied: this.hasMatchingElements
}));
},
isDefined: function isDefined(name) {
return this.context.outletManager.isDefined(name);
},
hasMatchingElements: function hasMatchingElements(_ref) {
var name = _ref.name,
elementProps = _ref.elementProps;
return this.context.outletManager.getElements(name).filter(function (x) {
return !x.match || x.match(elementProps);
}).length > 0;
}
});
};
module.exports = OutletRenderer;