@@ -21,12 +21,26 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
21
21
const [ isUsernameAvailable , setIsUsernameAvailable ] = useState < boolean | null > ( null ) ;
22
22
const [ email , setEmail ] = useState < string > ( '' ) ;
23
23
const [ password , setPassword ] = useState < string > ( '' ) ;
24
+ const [ usernameError , setUsernameError ] = useState < string > ( '' ) ;
24
25
const navigate = useNavigate ( ) ; // Hook for navigation
25
26
26
27
useEffect ( ( ) => {
27
28
const checkUsernameAvailability = async ( ) => {
28
29
if ( username ) {
29
30
try {
31
+ if ( ( username . match ( / ^ [ a - z A - Z 0 - 9 ] + $ / ) ) === null ) {
32
+ setUsernameError ( 'Username must be alphanumeric' ) ;
33
+ return ;
34
+ }
35
+ else if ( ! ( username . length > 7 ) ) {
36
+ setUsernameError ( 'Username must be greater than 7 characters' ) ;
37
+ return ;
38
+ }
39
+ else if ( ! ( username . length < 12 ) ) {
40
+ setUsernameError ( 'Username must be less than 12 characters' ) ;
41
+ return ;
42
+ }
43
+ setUsernameError ( '' )
30
44
const response = await axios . get ( `${ backendUrl } /check_username` , {
31
45
params : { username }
32
46
} ) ;
@@ -36,6 +50,7 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
36
50
}
37
51
} else {
38
52
setIsUsernameAvailable ( null ) ;
53
+ setUsernameError ( '' ) ;
39
54
}
40
55
} ;
41
56
@@ -110,6 +125,9 @@ export function UserAuthForm({ className, ...props }: UserAuthFormProps) {
110
125
{ isUsernameAvailable === true && (
111
126
< p className = "text-green-500" > Username is available</ p >
112
127
) }
128
+ {
129
+ usernameError && < p className = "text-red-500" > { usernameError } </ p >
130
+ }
113
131
</ div >
114
132
< div className = "grid gap-1" >
115
133
< Label className = "sr-only" htmlFor = "email" >
0 commit comments