import React from 'react'; import { renderToString } from 'react-dom/server'; import { createStore, applyMiddleware } from 'redux'; import { Provider } from 'react-redux'; import { StaticRouter } from 'react-router-dom'; import renderFullPage from './renderFullPage'; import createSagaMiddleware from 'redux-saga'; import { call } from 'redux-saga/effects'; import { Reducers, GAListener, App, Sagas, Actions } from 'spee.ch-components'; import Helmet from 'react-helmet'; // configure the reducers by passing initial state configs const siteConfig = require('siteConfig.js'); const customizedReducers = Reducers(siteConfig); const returnSagaWithParams = (saga, params) => { return function * () { yield call(saga, params); }; }; module.exports = (req, res) => { let context = {}; // create and apply middleware const sagaMiddleware = createSagaMiddleware(); const middleware = applyMiddleware(sagaMiddleware); // create a new Redux store instance const store = createStore(customizedReducers, middleware); // create saga const action = Actions.onHandleShowPageUri(req.params); const saga = returnSagaWithParams(Sagas.handleShowPageUri, action); // run the saga middleware sagaMiddleware .run(saga) .done .then(() => { // render component to a string const html = renderToString( ); // get head tags from helmet const helmet = Helmet.renderStatic(); // check for a redirect if (context.url) { return res.redirect(301, context.url); } // get the initial state from our Redux store const preloadedState = store.getState(); // send the rendered page back to the client res.send(renderFullPage(helmet, html, preloadedState)); }); console.log('hello from spee.ch handleShowRender.jsx'); };