ilp-core
Version:
ILP core module managing ledger abstraction
56 lines (50 loc) • 2.18 kB
JavaScript
import React, {Component, PropTypes} from 'react'
import ReactDOM from 'react-dom/server'
import serialize from 'serialize-javascript'
import Helmet from 'react-helmet'
/**
* Wrapper component containing HTML metadata and boilerplate tags.
* Used in server-side code only to wrap the string output of the
* rendered route component.
*
* The only thing this component doesn't (and can't) include is the
* HTML doctype declaration, which is added to the rendered output
* by the server.js file.
*/
export default class Html extends Component {
static propTypes = {
assets: PropTypes.object,
component: PropTypes.node,
store: PropTypes.object
}
render() {
const {assets, component, store} = this.props
const content = component ? ReactDOM.renderToString(component) : ''
const head = Helmet.rewind()
return (
<html lang="en-us">
<head>
{head.base.toComponent()}
{head.title.toComponent()}
{head.meta.toComponent()}
{head.link.toComponent()}
{head.script.toComponent()}
<link rel="shortcut icon" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{/* styles (will be present only in production with webpack extract text plugin) */}
<link href={assets.styles.main} media="screen, projection" rel="stylesheet" type="text/css" charSet="UTF-8"/>
</head>
<body>
<div id="content" dangerouslySetInnerHTML={{__html: content}}/>
<script dangerouslySetInnerHTML={{__html: `window.__data=${serialize(store.getState())}`}} charSet="UTF-8"/>
{__DEVELOPMENT__ && <script src={assets.javascript.vendor} charSet="UTF-8"/>}
{/* TODO remove hardcode */}
{__DEVELOPMENT__ && <script src="http://localhost:3011/dist/app.js" charSet="UTF-8"/>}
{!__DEVELOPMENT__ && <script src={assets.javascript.meta} charSet="UTF-8"/>}
{!__DEVELOPMENT__ && <script src={assets.javascript.vendor} charSet="UTF-8"/>}
{!__DEVELOPMENT__ && <script src={assets.javascript.main} charSet="UTF-8"/>}
</body>
</html>
)
}
}