user.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { useState, useEffect } from 'react'
  2. import Link from 'next/link'
  3. import { useQuery } from '@apollo/client'
  4. import { CURRENT_USER } from './graphql'
  5. import LogoutButton from './components/LogoutButton'
  6. import LoginForm from './components/LoginForm'
  7. const UserNav = props => {
  8. const [menu, setMenu] = useState(false)
  9. return (
  10. <>
  11. <a
  12. href='' onClick={ev => {
  13. ev.preventDefault()
  14. setMenu(!menu)
  15. }}
  16. >sali
  17. </a>
  18. {menu ? (
  19. <UserNavMenu />
  20. ) : null}
  21. </>
  22. )
  23. }
  24. const UserNavMenu = props => {
  25. const { data, loading, error } = useQuery(CURRENT_USER, { fetchPolicy: 'cache-and-network' })
  26. console.log('UserNav', data, loading, error && error.message)
  27. const user = data && data.me
  28. if (loading) return <p>Loading user data...</p>
  29. if (error) return <p>Error loading user data.</p>
  30. return (
  31. <section className='usermenu'>
  32. {user ? (
  33. <>
  34. <h2>Welcome, {user.name}</h2>
  35. <Link href={{ pathname: 'user' }}><a>Edit user data</a></Link>
  36. <LogoutButton />
  37. </>
  38. ) : (
  39. <LoginForm />
  40. )}
  41. <style jsx>
  42. {`
  43. section.usermenu {
  44. position: absolute;
  45. background: rgba(127,0,0,0.5);
  46. }
  47. `}
  48. </style>
  49. </section>
  50. )
  51. }
  52. const User = props => <a />
  53. export { UserNav }
  54. export default User