25 lines
632 B
JavaScript
25 lines
632 B
JavaScript
import { Observable } from 'rx';
|
|
import ReactDOM from 'react-dom/server';
|
|
import debug from 'debug';
|
|
|
|
const log = debug('fcc:professor');
|
|
|
|
export default function renderToString(Component, sagaMiddleware) {
|
|
try {
|
|
log('initial render');
|
|
ReactDOM.renderToStaticMarkup(Component);
|
|
log('initial render completed');
|
|
} catch (e) {
|
|
return Observable.throw(e);
|
|
}
|
|
sagaMiddleware.end();
|
|
return Observable.merge(sagaMiddleware)
|
|
.last({ defaultValue: null })
|
|
.delay(0)
|
|
.map(() => {
|
|
sagaMiddleware.restart();
|
|
const markup = ReactDOM.renderToString(Component);
|
|
return { markup };
|
|
});
|
|
}
|