1+ import { useEffect , useState } from "react" ;
2+ import TextField , { TextFieldInput } from "../components/textfield/Textfield" ;
3+
4+ function SignupPanel ( ) {
5+ const [ error , setError ] = useState ( "" ) ;
6+ const [ loading , setLoading ] = useState ( true ) ;
7+
8+ const [ firstName , setFirstName ] = useState ( "" ) ;
9+ const [ lastName , setLastName ] = useState ( "" ) ;
10+ const [ password1 , setPassword1 ] = useState ( "" ) ;
11+ const [ password2 , setPassword2 ] = useState ( "" ) ;
12+
13+ const alterStateFromTextfield = ( alterState : ( newValue : string ) => void ) => {
14+ return ( data : TextFieldInput ) => alterState ( data . value ) ;
15+ }
16+
17+ const urlParams = new URLSearchParams ( window . location . search ) ;
18+
19+ const inviteId = urlParams . get ( 'id' ) ;
20+ const token = urlParams . get ( 'token' ) ;
21+ const verifyInvite = async ( ) => {
22+ var response = await fetch ( `/api/auth/invite/${ inviteId } /valid?token=${ token } ` )
23+ if ( response . ok ) {
24+ var json = await response . json ( ) ;
25+ if ( json [ 'message' ] !== 'true' ) {
26+ setError ( "Invalid invite" ) ;
27+ }
28+ console . log ( "valid invite" ) ;
29+ } else {
30+ setError ( "Invalid invite" ) ;
31+ }
32+ setLoading ( false ) ;
33+ }
34+ const registerUser = async ( ) => {
35+ if ( firstName === "" ) {
36+ alert ( "First Name cannot be empty" )
37+ } else if ( lastName === "" ) {
38+ alert ( "Last Name cannot be empty" )
39+ } else if ( password1 !== password2 ) {
40+ alert ( "Passwords do not match" )
41+ } else {
42+ var response = await fetch ( `/api/auth/register/${ inviteId } ?token=${ token } ` , {
43+ method : "POST" ,
44+ headers : {
45+ 'Content-Type' : 'application/json'
46+ } ,
47+ body : JSON . stringify ( {
48+ first_name : firstName ,
49+ last_name : lastName ,
50+ password : password1
51+ } )
52+ } ) ;
53+ if ( ! response . ok ) {
54+ var json = await response . json ( ) ;
55+ alert ( json . error ) ;
56+ } else {
57+ redirectToDashboard ( ) ;
58+ }
59+ }
60+ }
61+ const redirectToDashboard = ( ) => {
62+ window . location . href = "/dashboard"
63+ }
64+ useEffect ( ( ) => {
65+ if ( loading ) {
66+ verifyInvite ( ) ;
67+ }
68+ } )
69+
70+
71+ return (
72+ < >
73+ { error
74+ ?
75+ < div className = "errorParent" >
76+ < div className = "error" >
77+ { error }
78+ </ div >
79+ </ div >
80+ :
81+ < div className = "signup-page" >
82+ < div className = "signup-card" >
83+ < h1 className = "signup-title" > Sign Up</ h1 >
84+ < div className = "input-container" >
85+ < TextField
86+ initialValue = "First Name"
87+ label = ""
88+ onChange = { alterStateFromTextfield ( setFirstName ) } />
89+ < TextField
90+ initialValue = "Last Name"
91+ label = ""
92+ onChange = { alterStateFromTextfield ( setLastName ) } />
93+ < TextField
94+ initialValue = "Create Password"
95+ label = ""
96+ type = "password"
97+ onChange = { alterStateFromTextfield ( setPassword1 ) } />
98+ < TextField
99+ initialValue = "Re-Type Password"
100+ label = ""
101+ type = "password"
102+ onChange = { alterStateFromTextfield ( setPassword2 ) } />
103+ </ div >
104+ < a href = "/faq" className = "why-am-i-here" > Why am I here?</ a >
105+ < button className = "submit-button" onClick = { registerUser } > Sign Up</ button >
106+ </ div >
107+ </ div >
108+ }
109+ </ >
110+ )
111+ }
112+ export default SignupPanel ;
0 commit comments