Login.js 2.95 KB
Newer Older
우지원's avatar
ee    
우지원 committed
1
import { useEffect, useState } from 'react'
2
import { Link } from 'react-router-dom'
seoyeon's avatar
0726    
seoyeon committed
3
import userApi from '../apis/user.api'
seoyeon's avatar
useRef    
seoyeon committed
4
5
import catchErrors from '../context/catchError'
import { handleLogin } from '../context/auth'
Kim, Chaerin's avatar
Kim, Chaerin committed
6
const INIT_USER = {
우지원's avatar
0802    
우지원 committed
7
  userId: '9999',
seoyeon's avatar
0726    
seoyeon committed
8
9
10
  email: '',
  password: '',
}
Kim, Chaerin's avatar
Kim, Chaerin committed
11

Kim, Chaerin's avatar
Kim, Chaerin committed
12
const Login = () => {
seoyeon's avatar
0726    
seoyeon committed
13
14
15
16
  const [user, setUser] = useState(INIT_USER)
  const [disabled, setDisabled] = useState(true)
  const [error, setError] = useState('')
  const [success, setSuccess] = useState(false)
우지원's avatar
우지원 committed
17
  const [id, setId] = useState('')
Kim, Chaerin's avatar
Kim, Chaerin committed
18
19

  useEffect(() => {
seoyeon's avatar
0726    
seoyeon committed
20
21
22
    const isUser = Object.values(user).every((el) => Boolean(el))
    isUser ? setDisabled(false) : setDisabled(true)
  }, [user])
Kim, Chaerin's avatar
Kim, Chaerin committed
23
24

  function handleChange(event) {
seoyeon's avatar
0726    
seoyeon committed
25
26
    const { name, value } = event.target
    setUser({ ...user, [name]: value })
Kim, Chaerin's avatar
Kim, Chaerin committed
27
28
  }

Kim, Chaerin's avatar
.    
Kim, Chaerin committed
29
  async function handleSubmit(e) {
seoyeon's avatar
0726    
seoyeon committed
30
    e.preventDefault()
Kim, Chaerin's avatar
Kim, Chaerin committed
31
32
33
    try {
      // setLoading(true);
      // setError("");
우지원's avatar
ee    
우지원 committed
34
      console.log('user정보:', user)
seoyeon's avatar
0726    
seoyeon committed
35
36
      const data = await userApi.login(user)
      console.log(data)
우지원's avatar
우지원 committed
37
      setId(data.id)
seoyeon's avatar
seoyeon committed
38
      handleLogin(data.id)
seoyeon's avatar
0726    
seoyeon committed
39
      setSuccess(true)
Kim, Chaerin's avatar
Kim, Chaerin committed
40
    } catch (error) {
seoyeon's avatar
0726    
seoyeon committed
41
42
      console.log('error in login', error)
      catchErrors(error, setError)
Kim, Chaerin's avatar
Kim, Chaerin committed
43
44
45
46
    } finally {
      // setLoading(false);
    }
  }
seoyeon's avatar
0716    
seoyeon committed
47
  if (success) {
이재연's avatar
이재연 committed
48
    alert('로그인 되었습니다');
우지원's avatar
ee    
우지원 committed
49
    window.location.href = `/user/${id}`
seoyeon's avatar
0716    
seoyeon committed
50
51
  }

seoyeon's avatar
0726    
seoyeon committed
52
  const { email, password } = user
Kim, Chaerin's avatar
Kim, Chaerin committed
53
54

  return (
seoyeon's avatar
seoyeon committed
55
    <div className="container">
Kim, Chaerin's avatar
Kim, Chaerin committed
56
      <form onSubmit={handleSubmit}>
seoyeon's avatar
seoyeon committed
57
58
59
60
        <div className="m-3 d-flex justify-content-center">
          <Link to="/">
            <img src="/BORA.png" style={{ width: '160px' }} />
          </Link>
Kim, Chaerin's avatar
Kim, Chaerin committed
61
        </div>
seoyeon's avatar
seoyeon committed
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        <div className="row mt-5 d-flex align-items-center">
          <h2 style={{ textAlign: 'center' }}>로그인</h2>
          {error && <div className="alert alert-danger">{error}</div>}
          <div className="form-group">
            <div className="mt-5">
              <label>아이디</label>
              <input
                className="form-control"
                id="email"
                type="text"
                name="email"
                placeholder="아이디를 입력하세요"
                value={email}
                onChange={handleChange}
              />
            </div>
            <div className="mt-3">
              <label>비밀번호</label>
              <input
                className="form-control"
                id="password"
                type="password"
                name="password"
                placeholder="비밀번호를 입력하세요"
                value={password}
                onChange={handleChange}
              />
            </div>
Kim, Chaerin's avatar
Kim, Chaerin committed
90
          </div>
seoyeon's avatar
seoyeon committed
91
92
93
94
95
96
97
98
          <div className="mt-4 d-flex justify-content-center">
            <button
              type="submit"
              className="btn btn-primary"
              disabled={disabled}
            >
              로그인
            </button>
Kim, Chaerin's avatar
Kim, Chaerin committed
99
100
101
102
          </div>
        </div>
      </form>
    </div>
seoyeon's avatar
0726    
seoyeon committed
103
104
  )
}
Kim, Chaerin's avatar
Kim, Chaerin committed
105

seoyeon's avatar
0726    
seoyeon committed
106
export default Login