UNPKG

1.13 kBJavaScriptView Raw
1import React, { createElement } from "react"
2import PropTypes from "prop-types"
3import { publicLoader } from "./loader"
4import { apiRunner } from "./api-runner-browser"
5
6// Renders page
7class PageRenderer extends React.Component {
8 render() {
9 const props = {
10 ...this.props,
11 pathContext: this.props.pageContext,
12 }
13
14 const [replacementElement] = apiRunner(`replaceComponentRenderer`, {
15 props: this.props,
16 loader: publicLoader,
17 })
18
19 const pageElement =
20 replacementElement ||
21 createElement(this.props.pageResources.component, {
22 ...props,
23 key: this.props.path || this.props.pageResources.page.path,
24 })
25
26 const wrappedPage = apiRunner(
27 `wrapPageElement`,
28 { element: pageElement, props },
29 pageElement,
30 ({ result }) => {
31 return { element: result, props }
32 }
33 ).pop()
34
35 return wrappedPage
36 }
37}
38
39PageRenderer.propTypes = {
40 location: PropTypes.object.isRequired,
41 pageResources: PropTypes.object.isRequired,
42 data: PropTypes.object,
43 pageContext: PropTypes.object.isRequired,
44}
45
46export default PageRenderer