gatsby
Version:
Blazing fast modern site generator for React
43 lines (36 loc) • 1.06 kB
JavaScript
import React, { createElement } from "react"
import PropTypes from "prop-types"
import { apiRunner } from "./api-runner-browser"
import { grabMatchParams } from "./find-path"
// Renders page
class PageRenderer extends React.Component {
render() {
const props = {
...this.props,
params: {
...grabMatchParams(this.props.location.pathname),
...this.props.pageResources.json.pageContext.__params,
},
}
const pageElement = createElement(this.props.pageResources.component, {
...props,
key: this.props.path || this.props.pageResources.page.path,
})
const wrappedPage = apiRunner(
`wrapPageElement`,
{ element: pageElement, props },
pageElement,
({ result }) => {
return { element: result, props }
}
).pop()
return wrappedPage
}
}
PageRenderer.propTypes = {
location: PropTypes.object.isRequired,
pageResources: PropTypes.object.isRequired,
data: PropTypes.object,
pageContext: PropTypes.object.isRequired,
}
export default PageRenderer