Repository URL to install this package:
|
Version:
2.0.0-beta.20 ▾
|
@skava/react-server
/
dist
/
serverSideRender
/
renderWithServerSide
/
classes
/
ServerSideRenderMaster.js
|
|---|
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_helmet_1 = __importDefault(require("react-helmet"));
var react_1 = __importDefault(require("react"));
var server_1 = require("react-dom/server");
// import { ServerStyleSheet } from 'view-container/styles/styled-components'
var styleh_components_1 = require("styleh-components");
// import { ServerStyleSheet } from 'view-container'
var react_router_dom_1 = require("react-router-dom");
var react_apollo_1 = require("react-apollo");
var mobx_react_1 = require("xmobx/mobx-react");
var cacheMiddleware_1 = require("../../../middleware/cacheMiddleware");
var responders_1 = require("../../responders");
var HTML_1 = require("../../HTML");
var renderFinalString_1 = require("./renderFinalString");
var ServerSideRenderMaster = /** @class */ (function () {
function ServerSideRenderMaster(context) {
var _this = this;
this.onSuccess = function () {
var _a = _this.context, req = _a.req, res = _a.res, reactRouterContext = _a.reactRouterContext, htmlView = _a.htmlView;
cacheMiddleware_1.cacheIfNeeded(req, res, htmlView);
/**
* Check if the router context contains a redirect, if so we need to set
* the specific status and redirect header and end the res.
*/
var url = reactRouterContext.url, status = reactRouterContext.status;
if (url) {
responders_1.respondRedirect(res, url);
}
else {
responders_1.respondHyperText(res, status, htmlView);
}
};
this.onError = function (apolloRenderingError) {
console.error('[EXCEPTION_ALERT] [ssr] APOLLO ERROR', apolloRenderingError);
responders_1.respondError(_this.context.res, apolloRenderingError);
};
this.context = context;
}
ServerSideRenderMaster.prototype.walk = function () {
return react_apollo_1.getDataFromTree(this.context.appView);
};
ServerSideRenderMaster.prototype.setup = function () {
/**
* Create the job context for our provider,
* this grants us the ability to track the resolved jobs
* so we can send it back to the client.
*/
this.context.store = this.context.OmniStore.create();
};
ServerSideRenderMaster.prototype.renderApp = function () {
var _a = this.context, req = _a.req, reactRouterContext = _a.reactRouterContext, store = _a.store, client = _a.client, App = _a.App;
/**
* @description Declare our React application.
* @see https://www.apollographql.com/docs/react/recipes/server-side-rendering.html
*/
this.context.appView = (react_1.default.createElement(react_router_dom_1.StaticRouter, { location: req.url, context: reactRouterContext },
react_1.default.createElement(react_apollo_1.ApolloProvider, { client: client },
react_1.default.createElement(mobx_react_1.Provider, { store: store },
react_1.default.createElement(App, null)))));
};
/**
* @see https://github.com/styled-components/styled-components/issues/378
* @todo https://github.com/nfl/react-helmet/issues/216
* @see https://www.apollographql.com/docs/react/features/server-side-rendering.html#server-initialization
*/
ServerSideRenderMaster.prototype.renderToString = function () {
var _a = this.context, req = _a.req, appView = _a.appView, nonce = _a.nonce, store = _a.store, reactRouterContext = _a.reactRouterContext, client = _a.client;
var serializableExtractedApolloState = client.extract();
var sheet = new styleh_components_1.ServerStyleSheet();
var styledView = sheet.collectStyles(appView);
var appString = server_1.renderToString(styledView);
var styledTags = sheet.getStyleElement();
var htmlView = (react_1.default.createElement(HTML_1.ServerHTML, { isCached: req.SHOULD_CACHE_SSR, reactAppString: appString, nonce: nonce, helmet: react_helmet_1.default.rewind(), styledTags: styledTags, apolloState: serializableExtractedApolloState, storeState: store, routerState: reactRouterContext }));
return renderFinalString_1.renderFinalString(htmlView);
};
return ServerSideRenderMaster;
}());
exports.ServerSideRenderMaster = ServerSideRenderMaster;
//# sourceMappingURL=ServerSideRenderMaster.js.map