import React from 'react' import cookie from 'cookie' import { withApollo, compose } from 'react-apollo' import withData from '../lib/withData' import redirect from '../lib/redirect' import checkLoggedIn from '../lib/checkLoggedIn' class Index extends React.Component { static async getInitialProps (context, apolloClient) { const { loggedInUser } = await checkLoggedIn(context, apolloClient) if (!loggedInUser.user) { // If not signed in, send them somewhere more useful redirect(context, '/signin') } return { loggedInUser } } signout = () => { document.cookie = cookie.serialize('token', '', { maxAge: -1 // Expire the cookie immediately }) // Force a reload of all the current queries now that the user is // logged in, so we don't accidentally leave any state around. this.props.client.cache.reset().then(() => { // Redirect to a more useful page when signed out redirect({}, '/signin') }) } render () { return (
Hello {this.props.loggedInUser.user.name}!
) } }; export default compose( // withData gives us server-side graphql queries before rendering withData, // withApollo exposes `this.props.client` used when logging out withApollo )(Index)