mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
9c4eefcdbf
* Add prettier for examples directory * Fix files * Fix linting * Add prettier script in case it has to be ran again
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
import React from 'react'
|
|
import initEnvironment from './createRelayEnvironment'
|
|
import { fetchQuery } from 'react-relay'
|
|
import RelayProvider from './RelayProvider'
|
|
|
|
export default (ComposedComponent, options = {}) => {
|
|
return class WithData extends React.Component {
|
|
static displayName = `WithData(${ComposedComponent.displayName})`
|
|
|
|
static async getInitialProps (ctx) {
|
|
// Evaluate the composed component's getInitialProps()
|
|
let composedInitialProps = {}
|
|
if (ComposedComponent.getInitialProps) {
|
|
composedInitialProps = await ComposedComponent.getInitialProps(ctx)
|
|
}
|
|
|
|
let queryProps = {}
|
|
let queryRecords = {}
|
|
const environment = initEnvironment()
|
|
|
|
if (options.query) {
|
|
const variables = composedInitialProps.relayVariables || {}
|
|
// TODO: Consider RelayQueryResponseCache
|
|
// https://github.com/facebook/relay/issues/1687#issuecomment-302931855
|
|
queryProps = await fetchQuery(environment, options.query, variables)
|
|
queryRecords = environment
|
|
.getStore()
|
|
.getSource()
|
|
.toJSON()
|
|
}
|
|
|
|
return {
|
|
...composedInitialProps,
|
|
...queryProps,
|
|
queryRecords
|
|
}
|
|
}
|
|
|
|
constructor (props) {
|
|
super(props)
|
|
this.environment = initEnvironment({
|
|
records: props.queryRecords
|
|
})
|
|
}
|
|
|
|
render () {
|
|
return (
|
|
<RelayProvider environment={this.environment} variables={{}}>
|
|
<ComposedComponent {...this.props} />
|
|
</RelayProvider>
|
|
)
|
|
}
|
|
}
|
|
}
|