UNPKG

neweb

Version:

[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url] [![experimental](http://badges.github.io/stability-badges/dist/ex

35 lines (33 loc) 1.26 kB
import React = require("react"); // tslint:disable-next-line:no-submodule-imports import ReactDOMServer = require("react-dom/server"); import SeansStatusContext from "./../client/SeansStatusContext"; import { IApplication, IPage, IPageFrame } from "./../typings"; export interface IServerRendererConfig { app: IApplication; } class PageRenderer { constructor(protected config: IServerRendererConfig) { } public async render(page: IPage) { let el: any; const data = []; const frames = [...page.frames]; for (const pageFrame of frames.reverse()) { el = await this.renderFrame(pageFrame, el); data.push(pageFrame.data); } return { html: ReactDOMServer.renderToString(el), data: data.reverse(), }; } protected async renderFrame(frame: IPageFrame, children: any) { const ViewClass = await this.config.app.getFrameViewClass(frame.frameName); return React.createElement(SeansStatusContext.Provider, { value: "initializing", children: React.createElement(ViewClass, { params: frame.params, data: frame.data, children }), }); } } export default PageRenderer;