• Jump To … +
    ClientController.js ClientRequest.js ExpressServerRequest.js ReactServerAgent.js Cache.js Plugins.js Request.js handlePage.js loggingClient.js ClientRequestSpec.js NormalValuesPage.js NullValuePromisesPage.js NullValuesPage.js reactMiddlewareSpec.js client.js common.js History.js RootContainer.js RootElement.js TheFold.js config.js constants.js Navigator.js RequestContext.js logging.js client.js common.js response.js server.js stats.js renderMiddleware.js server.js ClientCssHelper.js DebugUtil.js PageUtil.js RequestLocalStorage.js StringEscapeUtil.js bundleNameUtil.js navigateTo.js
  • RootContainer.js

  • ¶
    var PropTypes = require('prop-types');
    var React = require('react');
    var {
    	ensureRootElementWithContainer,
    	getRootElementAttributes,
    } = require('./RootElement');
    
    class RootContainer extends React.Component { // eslint-disable-line react/require-render-return
    	render() {
    		throw new Error("RootContainers can't go in non-RootContainers!");
    	}
    }
    
    module.exports = RootContainer;
    
    RootContainer.propTypes = {
    	listen: PropTypes.func,
    	when: PropTypes.object, // A promise.
    	_isRootContainer: PropTypes.bool,
    }
    
    RootContainer.defaultProps = {
    	_isRootContainer: true,
    }
    
    RootContainer.flattenForRender = function(element) {
    	return [{containerOpen: getRootElementAttributes(element)}]
    		.concat(prepChildren(element))
    		.concat([{containerClose: true}])
    		.reduce((m,v) => m.concat(Array.isArray(v)?v:[v]), [])
    }
    
    RootContainer.isRootContainer = function(element) {
    	return element && element.props && element.props._isRootContainer;
    }
    
    function prepChildren (element) {
    	return React.Children.toArray(element.props.children).map(
    		child => RootContainer.isRootContainer(child)
    			?RootContainer.flattenForRender(child)
    			:ensureRootElementWithContainer(child, element)
    	)
    }