Files
freeCodeCamp/common/app/utils/render-to-string.js

25 lines
632 B
JavaScript
Raw Normal View History

2016-04-24 21:54:48 -07:00
import { Observable } from 'rx';
2016-01-27 11:34:44 -08:00
import ReactDOM from 'react-dom/server';
import debug from 'debug';
const log = debug('fcc:professor');
2016-04-24 21:54:48 -07:00
export default function renderToString(Component, sagaMiddleware) {
2016-01-27 11:34:44 -08:00
try {
2016-04-24 21:54:48 -07:00
log('initial render');
ReactDOM.renderToStaticMarkup(Component);
log('initial render completed');
2016-01-27 11:34:44 -08:00
} catch (e) {
return Observable.throw(e);
}
2016-04-24 21:54:48 -07:00
sagaMiddleware.end();
return Observable.merge(sagaMiddleware)
.last({ defaultValue: null })
2016-01-27 11:34:44 -08:00
.delay(0)
.map(() => {
2016-04-24 21:54:48 -07:00
sagaMiddleware.restart();
2016-01-27 11:34:44 -08:00
const markup = ReactDOM.renderToString(Component);
2016-04-24 21:54:48 -07:00
return { markup };
2016-01-27 11:34:44 -08:00
});
}