11import { useState } from "react" ;
2+ import { useRouter } from "next/router" ;
3+ import { signUp } from "@/api/users" ;
4+ import { TEAM_ID } from "@/constants/team" ;
25import Input from "@/components/input/Input" ;
36import Link from "next/link" ;
7+ import { Modal } from "@/components/modal/Modal" ;
8+ import { CustomBtn } from "@/components/button/CustomButton" ;
49
510export default function SignUpPage ( ) {
611 const [ email , setEmail ] = useState ( "" ) ;
712 const [ nickName , setNickname ] = useState ( "" ) ;
813 const [ password , setPassword ] = useState ( "" ) ;
914 const [ passwordCheck , setPasswordCheck ] = useState ( "" ) ;
1015 const [ agree , setAgree ] = useState ( false ) ;
16+ const [ isSuccessModalOpen , setIsSuccessModalOpen ] = useState ( false ) ;
17+
18+ const router = useRouter ( ) ;
19+ const teamId = TEAM_ID ;
1120
1221 const isFormValid =
1322 email . trim ( ) !== "" &&
@@ -16,6 +25,32 @@ export default function SignUpPage() {
1625 passwordCheck . trim ( ) !== "" &&
1726 agree ;
1827
28+ /*모달 닫고 로그인 페이지 이동*/
29+ const handleSuccessConfirm = ( ) => {
30+ setIsSuccessModalOpen ( false ) ;
31+ router . push ( "/login" ) ;
32+ } ;
33+
34+ const handleSubmit = async ( e : React . FormEvent < HTMLFormElement > ) => {
35+ e . preventDefault ( ) ;
36+
37+ if ( ! isFormValid ) return ;
38+ try {
39+ await signUp ( {
40+ teamId,
41+ payload : {
42+ email,
43+ nickname : nickName ,
44+ password,
45+ } ,
46+ } ) ;
47+ setIsSuccessModalOpen ( true ) ;
48+ } catch ( error ) {
49+ console . error ( "회원가입 실패" , error ) ;
50+ alert ( "회원가입에 실패했습니다." ) ;
51+ }
52+ } ;
53+
1954 return (
2055 < div className = "flex flex-col items-center justify-center min-h-screen bg-[var(--color-gray5)] py-10" >
2156 < div className = "text-center mb-[40px]" >
@@ -27,7 +62,10 @@ export default function SignUpPage() {
2762 < p className = "font-20m text-black3" > 첫 방문을 환영합니다!</ p >
2863 </ div >
2964
30- < form className = "flex flex-col w-[350px] md:w-[520px] gap-[20px] font-16r text-black3" >
65+ < form
66+ onSubmit = { handleSubmit }
67+ className = "flex flex-col w-[350px] md:w-[520px] gap-[20px] font-16r text-black3"
68+ >
3169 < Input
3270 type = "email"
3371 name = "email"
@@ -53,30 +91,18 @@ export default function SignUpPage() {
5391 placeholder = "비밀번호를 입력해 주세요"
5492 onChange = { setPassword }
5593 pattern = ".{8,}"
56- invalidMessage = "비밀번호는 8자 이상이어야 해요 "
94+ invalidMessage = "영문, 숫자를 포함한 8자 이상 입력해 주세요 "
5795 />
5896
59- < div className = "gap-2" >
60- < Input
61- type = "password"
62- name = "passwordCheck"
63- label = "비밀번호 확인"
64- placeholder = "비밀번호를 한번 더 입력해 주세요"
65- onChange = { setPasswordCheck }
66- pattern = "{password}"
67- invalidMessage = ""
68- className = {
69- passwordCheck && password !== passwordCheck
70- ? "border-[var(--color-red)] focus:border-[var(--color-red)]"
71- : ""
72- }
73- />
74- { passwordCheck && password !== passwordCheck && (
75- < span className = "font-14r text-[var(--color-red)]" >
76- 비밀번호가 일치하지 않습니다.
77- </ span >
78- ) }
79- </ div >
97+ < Input
98+ type = "password"
99+ name = "passwordCheck"
100+ label = "비밀번호 확인"
101+ placeholder = "비밀번호를 한번 더 입력해 주세요"
102+ onChange = { setPasswordCheck }
103+ pattern = "{passwordCheckPattern}"
104+ invalidMessage = "비밀번호가 일치하지 않습니다."
105+ />
80106
81107 < label className = "flex items-center gap-[8px] font-16r text-black3" >
82108 < input
@@ -116,6 +142,27 @@ export default function SignUpPage() {
116142 </ Link >
117143 </ span >
118144 </ form >
145+ { isSuccessModalOpen && (
146+ < Modal
147+ width = "w-[300px]"
148+ height = "h-[180px]"
149+ isOpen = { isSuccessModalOpen }
150+ onClose = { handleSuccessConfirm }
151+ className = "flex flex-col items-center justify-center text-center"
152+ >
153+ < p className = "text-black3 font-16m" >
154+ 회원가입에 성공했습니다.
155+ < br />
156+ 로그인 화면으로 이동합니다.
157+ </ p >
158+ < CustomBtn
159+ onClick = { handleSuccessConfirm }
160+ className = "w-[180px] h-[40px] bg-[var(--primary)] font-16m text-white rounded-[8px] cursor-pointer"
161+ >
162+ 확인
163+ </ CustomBtn >
164+ </ Modal >
165+ ) }
119166 </ div >
120167 ) ;
121168}
0 commit comments