|
@@ -10,17 +10,37 @@ const UserAdoption = adopt({
|
|
|
logout: ({ render }) => <Mutation mutation={USER_LOGOUT} refetchQueries={[{ query: CURRENT_USER }]}>{render}</Mutation>
|
|
|
})
|
|
|
|
|
|
-class UserNav extends React.Component {
|
|
|
- state = {
|
|
|
- menu: false
|
|
|
- }
|
|
|
+const UserNav = props => {
|
|
|
+ const [menu, setMenu] = React.useState(false)
|
|
|
|
|
|
- toggleMenu = ev => {
|
|
|
- ev.preventDefault()
|
|
|
- this.setState({ menu: !this.state.menu })
|
|
|
- }
|
|
|
+ return (
|
|
|
+ <UserAdoption>{({ user, logout }) => {
|
|
|
+ if (user.loading) {
|
|
|
+ return (
|
|
|
+ <p>Loading...</p>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ if (user.error) {
|
|
|
+ return (
|
|
|
+ <LoginForm />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ const { name, email, id } = user.data.me
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ <a href='' onClick={ev => setMenu(!menu)}>{name}</a>
|
|
|
+ {menu || (
|
|
|
+ <UserNavMenu />
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </UserAdoption>
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
- logout = async (ev, logout) => {
|
|
|
+const UserNavMenu = props => {
|
|
|
+ const logout = async (ev, logout) => {
|
|
|
ev.preventDefault()
|
|
|
try {
|
|
|
const id = await logout()
|
|
@@ -29,59 +49,31 @@ class UserNav extends React.Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- render() {
|
|
|
- return (
|
|
|
- <UserAdoption>{({ user, logout }) => {
|
|
|
- if (user.loading) return (
|
|
|
- <p>Loading...</p>
|
|
|
- )
|
|
|
- if (user.error) return (
|
|
|
- <LoginForm>
|
|
|
- <style jsx>
|
|
|
- {`
|
|
|
- label {
|
|
|
- display: inline;
|
|
|
- }
|
|
|
- `}
|
|
|
- </style>
|
|
|
- </LoginForm>
|
|
|
- )
|
|
|
- const { name, email, id } = user.data.me
|
|
|
- return (
|
|
|
- <>
|
|
|
- <a href='' onClick={this.toggleMenu}>{name}</a>
|
|
|
- {this.state.menu || (
|
|
|
- <UserNavMenu />
|
|
|
- )}
|
|
|
- </>
|
|
|
- )
|
|
|
- }}
|
|
|
- </UserAdoption>
|
|
|
- )
|
|
|
- }
|
|
|
-}
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ <section className='usermenu'>
|
|
|
+ <h2>Welcome, {name}</h2>
|
|
|
+ <Link href={{ path: 'user' }}><a>Edit user data</a></Link>
|
|
|
+ <a
|
|
|
+ href='' onClick={ev => {
|
|
|
+ ev.preventDefault()
|
|
|
+ this.logout(ev, logout)
|
|
|
+ }}
|
|
|
+ >Logout
|
|
|
+ </a>
|
|
|
+ </section>
|
|
|
|
|
|
-const UserNavMenu = props => (
|
|
|
- <>
|
|
|
- <section className='usermenu'>
|
|
|
- <h2>Welcome, {name}</h2>
|
|
|
- <Link href={{ path: 'user' }}><a>Edit user data</a></Link>
|
|
|
- <a href='' onClick={ev => {
|
|
|
- ev.preventDefault()
|
|
|
- this.logout(ev, logout)
|
|
|
- }}>Logout</a>
|
|
|
- </section>
|
|
|
-
|
|
|
- <style jsx>
|
|
|
- {`
|
|
|
+ <style jsx>
|
|
|
+ {`
|
|
|
section.usermenu {
|
|
|
position: absolute;
|
|
|
background: rgba(127,0,0,0.5);
|
|
|
}
|
|
|
`}
|
|
|
- </style>
|
|
|
- </>
|
|
|
-)
|
|
|
+ </style>
|
|
|
+ </>
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
const User = props => <a />
|
|
|
|