rechannel
Version:
Opinionated glue for building web apps with `React` and `Redux`.
64 lines (53 loc) • 2.06 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (options) {
var title = options && options.title || 'rechannel example';
var scripts = options && options.script && [].concat(options.script) || ['index.js'];
var styles = options && options.style && [].concat(options.style) || ['index.css'];
return function Html(props) {
var state = props.state;
var children = props.children;
return _react2.default.createElement(
'html',
null,
_react2.default.createElement(
'head',
null,
_react2.default.createElement('meta', { charSet: 'UTF-8' }),
_react2.default.createElement(
'title',
null,
title
),
_react2.default.createElement('meta', { name: 'viewport', content: 'width=device-width, initial-scale=1' }),
styles.map(function (style) {
return _react2.default.createElement('link', { key: style, rel: 'stylesheet', href: style });
})
),
_react2.default.createElement(
'body',
null,
_react2.default.createElement('div', { id: 'app', dangerouslySetInnerHTML: { __html: (0, _server.renderToString)(children) } }),
_react2.default.createElement('script', { dangerouslySetInnerHTML: { __html: 'window.__INITIAL_STATE__=' + JSON.stringify(state) } }),
scripts.map(function (script) {
return _react2.default.createElement('script', { key: script, src: script });
})
)
);
};
};
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _server = require('react-dom/server');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
;
/**
* Create a react component for rendering the <html>
* @param {object} [options]
* @param {string} [options.title]
* @param {string|Array<script>} [options.script]
* @param {string|Array<script>} [options.style]
* @returns {Html}
*/