UNPKG

react-router

Version:

A complete routing library for React.js

140 lines (103 loc) 4.85 kB
'use strict'; exports.__esModule = 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; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _RouteUtils = require('./RouteUtils'); var _getRouteParams = require('./getRouteParams'); var _getRouteParams2 = _interopRequireDefault(_getRouteParams); var _React$PropTypes = _react2['default'].PropTypes; var array = _React$PropTypes.array; var func = _React$PropTypes.func; var object = _React$PropTypes.object; /** * A <RoutingContext> renders the component tree for a given router state * and sets the history object and the current location in context. */ var RoutingContext = (function (_Component) { _inherits(RoutingContext, _Component); function RoutingContext() { _classCallCheck(this, RoutingContext); _Component.apply(this, arguments); } RoutingContext.prototype.getChildContext = function getChildContext() { var _props = this.props; var history = _props.history; var location = _props.location; return { history: history, location: location }; }; RoutingContext.prototype.createElement = function createElement(component, props) { return component == null ? null : this.props.createElement(component, props); }; RoutingContext.prototype.render = function render() { var _this = this; var _props2 = this.props; var history = _props2.history; var location = _props2.location; var routes = _props2.routes; var params = _props2.params; var components = _props2.components; var element = null; if (components) { element = components.reduceRight(function (element, components, index) { if (components == null) return element; // Don't create new children; use the grandchildren. var route = routes[index]; var routeParams = _getRouteParams2['default'](route, params); var props = { history: history, location: location, params: params, route: route, routeParams: routeParams, routes: routes }; if (_RouteUtils.isReactChildren(element)) { props.children = element; } else if (element) { for (var prop in element) { if (element.hasOwnProperty(prop)) props[prop] = element[prop]; } } if (typeof components === 'object') { var elements = {}; for (var key in components) { if (components.hasOwnProperty(key)) { // Pass through the key as a prop to createElement to allow // custom createElement functions to know which named component // they're rendering, for e.g. matching up to fetched data. elements[key] = _this.createElement(components[key], _extends({ key: key }, props)); } } return elements; } return _this.createElement(components, props); }, element); } !(element === null || element === false || _react2['default'].isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'The root route must render a single element') : _invariant2['default'](false) : undefined; return element; }; return RoutingContext; })(_react.Component); RoutingContext.propTypes = { history: object.isRequired, createElement: func.isRequired, location: object.isRequired, routes: array.isRequired, params: object.isRequired, components: array.isRequired }; RoutingContext.defaultProps = { createElement: _react2['default'].createElement }; RoutingContext.childContextTypes = { history: object.isRequired, location: object.isRequired }; exports['default'] = RoutingContext; module.exports = exports['default'];