Skip to content
This repository was archived by the owner on Dec 10, 2019. It is now read-only.

Commit e17c591

Browse files
committed
Holy cow. It's ugly, but we've got server-side rendering and client-side
rendering on top of it. I'm probably doing it all wrong, but this is progress.
1 parent 43560b4 commit e17c591

File tree

2 files changed

+41
-12
lines changed

2 files changed

+41
-12
lines changed

lib/engine_react.js

+40-12
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,48 @@ var engine_react = {
4444
try {
4545
/* eslint-disable no-eval */
4646
const componentString = pattern.template || pattern.extendedTemplate;
47-
const transformedComponent = Babel.transform(componentString, {
48-
presets: [
49-
require('babel-preset-react')
50-
],
51-
plugins: [
52-
require('babel-plugin-transform-es2015-modules-commonjs')
53-
]
47+
const nodeComponent = Babel.transform(componentString, {
48+
presets: [ require('babel-preset-react') ],
49+
plugins: [ require('babel-plugin-transform-es2015-modules-commonjs') ]
5450
});
55-
const Component = React.createFactory(
56-
eval(transformedComponent.code)
57-
);
51+
const runtimeComponent = Babel.transform(componentString, {
52+
presets: [ require('babel-preset-react') ],
53+
plugins: [ require('babel-plugin-transform-es2015-modules-umd') ]
54+
});
55+
const Component = React.createFactory(eval(nodeComponent.code));
56+
const output = ReactDOMServer.renderToStaticMarkup(Component(data));
57+
58+
return `<div id="reactContainer">
59+
60+
<!-- pattern HTML -->
61+
${output}
62+
63+
</div>
64+
65+
5866
59-
return ReactDOMServer.renderToStaticMarkup(Component(data));
60-
} catch (e) {
67+
68+
<!-- pattern JSON (React props) -->
69+
<script id="patternJSON" type="application/json">
70+
${JSON.stringify(data)}
71+
</script>
72+
73+
<!-- dependencies -->
74+
<script>
75+
var react = React;
76+
</script>
77+
78+
<!-- runtime React output -->
79+
<script>
80+
${runtimeComponent.code};
81+
82+
<!-- runtime rendering -->
83+
var component = unknown.default;
84+
var patternJSON = document.getElementById('patternJSON').textContent;
85+
ReactDOM.render(React.createElement(component, JSON.parse(patternJSON)), document.getElementById('reactContainer'));
86+
</script>`;
87+
}
88+
catch (e) {
6189
console.log("Error rendering React pattern.", e);
6290
return "";
6391
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"dependencies": {
77
"babel-core": "^6.17.0",
88
"babel-plugin-transform-es2015-modules-commonjs": "^6.16.0",
9+
"babel-plugin-transform-es2015-modules-umd": "^6.12.0",
910
"babel-preset-react": "^6.16.0",
1011
"react": "^15.3.2",
1112
"react-dom": "^15.3.2"

0 commit comments

Comments
 (0)