11/*CREATE IMPORTS */
2- import React , { useState } from ' react' ;
3- import { useNavigate } from ' react-router-dom' ;
2+ import React , { useState } from " react" ;
3+ import { useNavigate } from " react-router-dom" ;
44import "../../styles/codezilla.css" ;
5+ import { useMutation } from "@apollo/client" ;
6+ import { ADD_USER } from "../../graphql/mutations" ;
57
68const avatarList = [
7- ' /avatars/carmen.png' ,
8- ' /avatars/jacquilyn.png' ,
9- ' /avatars/trevor.png' ,
10- ' /avatars/michael.png' ,
11- ' /avatars/shawna.png' ,
9+ " /avatars/carmen.png" ,
10+ " /avatars/jacquilyn.png" ,
11+ " /avatars/trevor.png" ,
12+ " /avatars/michael.png" ,
13+ " /avatars/shawna.png" ,
1214] ;
1315
1416const SignUp : React . FC = ( ) => {
1517 const navigate = useNavigate ( ) ;
16- const [ selectedAvatar , setSelectedAvatar ] = useState ( '' ) ;
17- const [ username , setUsername ] = useState ( '' ) ;
18- const [ password , setPassword ] = useState ( '' ) ;
18+ const [ selectedAvatar , setSelectedAvatar ] = useState ( "" ) ;
19+ const [ username , setUsername ] = useState ( "" ) ;
20+ const [ password , setPassword ] = useState ( "" ) ;
1921
20- const handleSubmit = ( e : React . FormEvent ) => {
22+ // create a function to handle the mutation
23+ const [ addUser ] = useMutation ( ADD_USER ) ;
24+
25+ const handleSubmit = async ( e : React . FormEvent ) => {
2126 e . preventDefault ( ) ;
22-
27+
2328 if ( ! username . trim ( ) || ! selectedAvatar ) {
24- alert ( ' Please enter a username and select an avatar before proceeding.' ) ;
29+ alert ( " Please enter a username and select an avatar before proceeding." ) ;
2530 return ;
2631 }
27-
28- localStorage . setItem ( 'selectedAvatar' , selectedAvatar ) ;
29- localStorage . setItem ( 'username' , username ) ;
30-
32+
33+ // localStorage.setItem('selectedAvatar', selectedAvatar);
34+ // localStorage.setItem('username', username);
35+
3136 console . log ( { username, password, selectedAvatar } ) ;
32- navigate ( '/map' ) ;
37+
38+ try {
39+ const response = await addUser ( {
40+ variables : {
41+ input : {
42+ password : password ,
43+ selectedAvatar : selectedAvatar ,
44+ username : username ,
45+ } ,
46+ } ,
47+ } ) ;
48+
49+ const token = response . data . addUser . token ;
50+
51+ localStorage . setItem ( "token" , token ) ;
52+
53+ console . log ( response ) ;
54+ navigate ( '/map' ) ;
55+ } catch ( err ) {
56+ console . error ( "Signup failed" , err ) ;
57+ alert ( "Signup failed" ) ;
58+ }
3359 } ;
34-
35-
3660
3761 return (
3862 < div className = "login-wrapper" >
@@ -53,34 +77,39 @@ const SignUp: React.FC = () => {
5377 onChange = { ( e ) => setPassword ( e . target . value ) }
5478 />
5579
56- < p > Select Your Avatar</ p >
57- < div className = "avatar-grid" >
58- < div className = "avatar-row" >
59- { avatarList . slice ( 0 , 3 ) . map ( ( avatar , index ) => (
60- < img
61- key = { index }
62- src = { avatar }
63- alt = { `Avatar ${ index } ` }
64- className = { `avatar-option ${ selectedAvatar === avatar ? 'selected' : '' } ` }
65- onClick = { ( ) => setSelectedAvatar ( avatar ) }
66- />
67- ) ) }
68- </ div >
69- < div className = "avatar-row" >
70- { avatarList . slice ( 3 ) . map ( ( avatar , index ) => (
71- < img
72- key = { index + 3 }
73- src = { avatar }
74- alt = { `Avatar ${ index + 3 } ` }
75- className = { `avatar-option ${ selectedAvatar === avatar ? 'selected' : '' } ` }
76- onClick = { ( ) => setSelectedAvatar ( avatar ) }
77- />
78- ) ) }
79- </ div >
80- </ div >
81-
80+ < p > Select Your Avatar</ p >
81+ < div className = "avatar-grid" >
82+ < div className = "avatar-row" >
83+ { avatarList . slice ( 0 , 3 ) . map ( ( avatar , index ) => (
84+ < img
85+ key = { index }
86+ src = { avatar }
87+ alt = { `Avatar ${ index } ` }
88+ className = { `avatar-option ${
89+ selectedAvatar === avatar ? "selected" : ""
90+ } `}
91+ onClick = { ( ) => setSelectedAvatar ( avatar ) }
92+ />
93+ ) ) }
94+ </ div >
95+ < div className = "avatar-row" >
96+ { avatarList . slice ( 3 ) . map ( ( avatar , index ) => (
97+ < img
98+ key = { index + 3 }
99+ src = { avatar }
100+ alt = { `Avatar ${ index + 3 } ` }
101+ className = { `avatar-option ${
102+ selectedAvatar === avatar ? "selected" : ""
103+ } `}
104+ onClick = { ( ) => setSelectedAvatar ( avatar ) }
105+ />
106+ ) ) }
107+ </ div >
108+ </ div >
82109
83- < button className = "signup-button" type = "submit" > Enter the Game</ button >
110+ < button className = "signup-button" type = "submit" >
111+ Enter the Game
112+ </ button >
84113 </ form >
85114 </ div >
86115 ) ;
0 commit comments