@@ -12,7 +12,6 @@ function EditProfile() {
12
12
const [ errorMessage , setErrorMessage ] = useState ( '' ) ;
13
13
const [ successMessage , setSuccessMessage ] = useState ( '' ) ;
14
14
const [ usernameError , setUsernameError ] = useState ( false ) ;
15
- const [ emailError , setEmailError ] = useState ( false ) ;
16
15
const [ passwordError , setPasswordError ] = useState ( false ) ;
17
16
18
17
useEffect ( ( ) => {
@@ -21,6 +20,7 @@ function EditProfile() {
21
20
const response = await userService . getUser ( id ,
22
21
{ headers : { Authorization : `Bearer ${ sessionStorage . getItem ( 'jwt_token' ) } ` } } ) ;
23
22
setUserData ( response . data ) ;
23
+ setEmail ( response . data . data . email )
24
24
}
25
25
fetchUserData ( ) ;
26
26
} , [ id ] ) ;
@@ -34,22 +34,30 @@ function EditProfile() {
34
34
// Handle the user profile edit
35
35
const newUser = { } ;
36
36
if ( username ) newUser . username = username ;
37
- if ( email ) newUser . email = email ;
38
37
if ( password ) newUser . password = password ;
39
38
40
39
// Reset error messages
41
40
setErrorMessage ( '' ) ;
42
41
setSuccessMessage ( '' ) ;
43
42
setUsernameError ( false ) ;
44
- setEmailError ( false ) ;
45
43
setPasswordError ( false ) ;
46
44
47
45
// Validate inputs
48
- if ( ! username && ! email && ! password ) {
46
+ if ( ! username && ! password ) {
49
47
setErrorMessage ( "Please fill in at least one field" )
50
48
return ;
51
49
}
52
50
51
+ const usernameRegex = / ^ [ a - z A - Z 0 - 9 . _ ] { 3 , 20 } $ / ;
52
+ const isValidUsername = usernameRegex . test ( username )
53
+
54
+ if ( ! isValidUsername ) {
55
+ console . log ( "username is not valid:" , username )
56
+ setUsernameError ( true )
57
+ setErrorMessage ( "Username can only contain letters, numbers, dots (.), and underscores (_), and must be between 3 and 20 characters long." )
58
+ return ;
59
+ }
60
+
53
61
if ( password !== confirmPassword ) {
54
62
setPasswordError ( true ) ;
55
63
setErrorMessage ( 'Passwords do not match' ) ;
@@ -72,7 +80,7 @@ function EditProfile() {
72
80
case 409 :
73
81
setErrorMessage ( 'Username or email already exists.' ) ;
74
82
setUsernameError ( true ) ;
75
- setEmailError ( true ) ;
83
+ // setEmailError(true);
76
84
break ;
77
85
case 500 :
78
86
setErrorMessage ( 'Server error. Please try again later.' ) ;
@@ -89,9 +97,24 @@ function EditProfile() {
89
97
const goHome = ( ) => navigate ( '/home' )
90
98
// Render user edit form based on userData
91
99
return userData ? (
92
- < div >
93
- < h2 > Edit Profile</ h2 >
94
- < div className = "right-side" >
100
+
101
+ < div style = { {
102
+ display : 'flex' ,
103
+ justifyContent : 'center' ,
104
+ alignItems : 'left' ,
105
+ height : '100vh' ,
106
+ textAlign : 'center' , // Centers text within child elements
107
+ margin : 30 // Ensures no default margin
108
+ } } >
109
+ < div style = { {
110
+ width : '100%' , // Full width
111
+ maxWidth : '600px' , // Optional: limit width for better layout
112
+ padding : '20px' ,
113
+ backgroundColor : '#fff' ,
114
+ borderRadius : '8px' // Optional: rounded corners
115
+ } } >
116
+ < h2 style = { { textAlign : 'left' } } > Edit Profile</ h2 >
117
+ < p style = { { textAlign : 'left' } } > Hi < strong > { email } </ strong > , feel free to update any information below.</ p >
95
118
< div className = "input-container" >
96
119
< form onSubmit = { handleEditProfile } >
97
120
< InputField
@@ -100,29 +123,18 @@ function EditProfile() {
100
123
placeholder = "Enter your username"
101
124
value = { username }
102
125
onChange = { ( e ) => {
103
- setUsername ( e . target . value )
126
+ setUsername ( e . target . value ) ;
104
127
setUsernameError ( false ) ;
105
128
} }
106
129
error = { usernameError }
107
130
/>
108
- < InputField
109
- label = "Email"
110
- type = "email"
111
- placeholder = "Enter your email"
112
- value = { email }
113
- onChange = { ( e ) => {
114
- setEmail ( e . target . value )
115
- setEmailError ( false ) ;
116
- } }
117
- error = { emailError }
118
- />
119
131
< InputField
120
132
label = "Password"
121
133
type = "password"
122
134
placeholder = "Enter your password"
123
135
value = { password }
124
136
onChange = { ( e ) => {
125
- setPassword ( e . target . value )
137
+ setPassword ( e . target . value ) ;
126
138
setPasswordError ( false ) ;
127
139
} }
128
140
error = { passwordError }
@@ -133,27 +145,23 @@ function EditProfile() {
133
145
placeholder = "Confirm your password"
134
146
value = { confirmPassword }
135
147
onChange = { ( e ) => {
136
- setConfirmPassword ( e . target . value )
148
+ setConfirmPassword ( e . target . value ) ;
137
149
setPasswordError ( false ) ;
138
150
} }
139
151
error = { passwordError }
140
152
/>
141
- < div className = 'button-container' >
153
+ < div className = 'button-container' style = { { display : 'flex' , justifyContent : 'flex-end' , marginTop : '20px' } } >
154
+ < button type = 'button' onClick = { goHome } className = "create-account-link" >
155
+ Cancel
156
+ </ button >
142
157
< button type = "submit" className = "signup-button" >
143
158
Change Profile Details
144
159
</ button >
145
160
</ div >
146
- < div className = 'button-container' >
147
- < button type = { 'button' } onClick = { goHome } className = "signup-button" >
148
- Cancel
149
- </ button >
150
- </ div >
161
+
151
162
</ form >
152
- < div className = 'notification' >
153
- { /* Success Message */ }
163
+ < div className = 'notification' style = { { marginTop : '5px' , textAlign : 'center' } } >
154
164
{ successMessage && < p className = "text-success mt-3" > { successMessage } </ p > }
155
-
156
- { /* Error Message */ }
157
165
{ errorMessage && < p className = "text-danger mt-3" > { errorMessage } </ p > }
158
166
</ div >
159
167
</ div >
0 commit comments