signup.tsx 1.34 KB
Newer Older
1
2
3
4
'use client'

import { useState } from 'react'

Jeffrey Morgan's avatar
Jeffrey Morgan committed
5
export default function Signup() {
6
  const [email, setEmail] = useState('')
7
  const [submitting, setSubmitting] = useState(false)
8
9
10
11
12
13
14
  const [success, setSuccess] = useState(false)

  return (
    <form
      onSubmit={async e => {
        e.preventDefault()

15
16
        setSubmitting(true)

17
18
19
20
21
22
23
24
        await fetch('/api/signup', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({ email }),
        })

25
        setSubmitting(false)
26
27
28
29
30
        setSuccess(true)
        setEmail('')

        return false
      }}
Eva Ho's avatar
fix css  
Eva Ho committed
31
      className='flex self-stretch flex-col gap-3 h-32 md:mx-40 lg:mx-72'
32
33
34
35
36
37
38
39
    >
      <input
        required
        autoFocus
        value={email}
        onChange={e => setEmail(e.target.value)}
        type='email'
        placeholder='your@email.com'
Eva Ho's avatar
Eva Ho committed
40
        className='border border-neutral-200 rounded-lg px-4 py-2 focus:outline-none placeholder-neutral-300'
41
42
43
44
      />
      <input
        type='submit'
        value='Get updates'
45
        disabled={submitting}
Eva Ho's avatar
Eva Ho committed
46
        className='bg-black text-white disabled:text-neutral-200 disabled:bg-neutral-700 rounded-full px-4 py-2 focus:outline-none cursor-pointer'
47
48
49
50
51
      />
      {success && <p className='text-center text-sm'>You&apos;re signed up for updates</p>}
    </form>
  )
}