signup.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use client'
  2. import { useState } from 'react'
  3. export default function Signup() {
  4. const [email, setEmail] = useState('')
  5. const [submitting, setSubmitting] = useState(false)
  6. const [success, setSuccess] = useState(false)
  7. return (
  8. <form
  9. onSubmit={async e => {
  10. e.preventDefault()
  11. setSubmitting(true)
  12. await fetch('/api/signup', {
  13. method: 'POST',
  14. headers: {
  15. 'Content-Type': 'application/json',
  16. },
  17. body: JSON.stringify({ email }),
  18. })
  19. setSubmitting(false)
  20. setSuccess(true)
  21. setEmail('')
  22. return false
  23. }}
  24. className='flex self-stretch flex-col gap-3 h-32'
  25. >
  26. <input
  27. required
  28. autoFocus
  29. value={email}
  30. onChange={e => setEmail(e.target.value)}
  31. type='email'
  32. placeholder='your@email.com'
  33. className='bg-neutral-100 rounded-lg px-4 py-2 focus:outline-none placeholder-neutral-500'
  34. />
  35. <input
  36. type='submit'
  37. value='Get updates'
  38. disabled={submitting}
  39. className='bg-black text-white disabled:text-neutral-200 disabled:bg-neutral-700 rounded-lg px-4 py-2 focus:outline-none cursor-pointer'
  40. />
  41. {success && <p className='text-center text-sm'>You&apos;re signed up for updates</p>}
  42. </form>
  43. )
  44. }