import { ApolloProvider, getDataFromTree } from 'react-apollo' import React from 'react' import 'isomorphic-fetch' import { initClient } from './initClient' import { initStore } from './initStore' export default (Component) => ( class extends React.Component { static async getInitialProps (ctx) { const headers = ctx.req ? ctx.req.headers : {} const client = initClient(headers) const store = initStore(client, client.initialState) const props = { url: { query: ctx.query, pathname: ctx.pathname }, ...await (Component.getInitialProps ? Component.getInitialProps(ctx) : {}) } if (!process.browser) { const app = ( ) await getDataFromTree(app) } const state = store.getState() return { initialState: { ...state, apollo: { data: state.apollo.data } }, headers, ...props } } constructor (props) { super(props) this.client = initClient(this.props.headers) this.store = initStore(this.client, this.props.initialState) } render () { return ( ) } } )