// @flow import * as React from "react"; import ReactDOMServer from "react-dom/server"; import { Helmet } from "react-helmet"; import { ServerStyleSheet, StyleSheetManager, ThemeProvider, } from "styled-components"; import Layout from "../pages/components/Layout"; import { light } from "../../shared/styles/theme"; export default function renderpage(ctx: Object, children: React.Node) { let sessions = {}; try { sessions = JSON.parse( decodeURIComponent(ctx.cookies.get("sessions") || "") || "{}" ); } catch (err) { console.error(`Sessions cookie could not be parsed: ${err}`); } const sheet = new ServerStyleSheet(); const loggedIn = !!( ctx.cookies.get("accessToken") || Object.keys(sessions).length ); const html = ReactDOMServer.renderToString( {children} ); // helmet returns an object of meta tags with toString methods, urgh. const helmet = Helmet.renderStatic(); let head = ""; // $FlowFixMe Object.keys(helmet).forEach(key => (head += helmet[key].toString())); ctx.body = `\n${html}` .replace("{{CSS}}", sheet.getStyleTags()) .replace("{{HEAD}}", head); }