@@ -2,158 +2,150 @@ import React, { useState } from "react";
22import { TextField , Button , Grid , Typography , Link } from "@mui/material" ;
33
44const LoginPage = ( ) => {
5- const [ username , setUsername ] = useState ( "" ) ;
6- const [ password , setPassword ] = useState ( "" ) ;
7- //const [usernameError, setUsernameError] = useState('');
8- //const [passwordError, setPasswordError] = useState('');
9- const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
5+ const [ username , setUsername ] = useState ( "" ) ;
6+ const [ password , setPassword ] = useState ( "" ) ;
7+ //const [usernameError, setUsernameError] = useState('');
8+ //const [passwordError, setPasswordError] = useState('');
9+ const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
1010
11- const handleUsernameChange = ( event ) => {
12- setUsername ( event . target . value ) ;
13- //setUsernameError('');
14- setErrorMessage ( "" ) ;
15- } ;
11+ const handleUsernameChange = ( event ) => {
12+ setUsername ( event . target . value ) ;
13+ //setUsernameError('');
14+ setErrorMessage ( "" ) ;
15+ } ;
1616
17- const handlePasswordChange = ( event ) => {
18- setPassword ( event . target . value ) ;
19- //setPasswordError('');
20- setErrorMessage ( "" ) ;
21- } ;
17+ const handlePasswordChange = ( event ) => {
18+ setPassword ( event . target . value ) ;
19+ //setPasswordError('');
20+ setErrorMessage ( "" ) ;
21+ } ;
2222
23- const handleSubmit = async ( event ) => {
24- event . preventDefault ( ) ;
25- if ( ! username ) {
26- setErrorMessage ( "Username is required" ) ;
27- return ;
28- }
29- if ( ! password ) {
30- setErrorMessage ( "Password is required" ) ;
31- return ;
32- }
23+ const handleSubmit = async ( event ) => {
24+ event . preventDefault ( ) ;
25+ if ( ! username ) {
26+ setErrorMessage ( "Username is required" ) ;
27+ return ;
28+ }
29+ if ( ! password ) {
30+ setErrorMessage ( "Password is required" ) ;
31+ return ;
32+ }
3333
34- const response = await fetch (
35- "https://chapi.techstartucalgary.com/token" ,
36- {
37- method : "POST" ,
38- headers : {
39- "Content-Type" : "application/x-www-form-urlencoded" ,
40- } ,
41- body : new URLSearchParams ( {
42- grant_type : "password" ,
43- username,
44- password,
45- } ) ,
46- }
47- )
48- . then ( ( response ) => {
49- if ( ! response . ok ) {
50- if ( response . status === 401 ) {
51- setErrorMessage ( "Invalid username or password" ) ;
52- } else {
53- throw new Error ( "Login failed" ) ;
54- }
55- }
56- setUsername ( "" ) ;
57- setPassword ( "" ) ;
58- return response . json ( ) ;
59- } )
60- . then ( ( data ) => {
61- localStorage . setItem ( "access_token" , data . access_token ) ;
62- fetch ( "https://chapi.techstartucalgary.com/users/me/" , {
63- method : "GET" ,
64- headers : {
65- "Content-Type" : "application/json" ,
66- Authorization : `Bearer ${ localStorage . getItem (
67- "access_token"
68- ) } `,
69- } ,
70- } ) . then ( ( response ) => {
71- if ( ! response . ok ) {
72- throw new Error ( "API Error: " , response . status ) ;
73- }
74- return response . json ( ) ;
75- } ) . then ( ( data ) => {
76- if ( data . is_recruiter ) {
77- window . location . href = "#/app" ;
78- } else {
79- window . location . href = "#/recruiter" ;
80- }
81- } ) ;
82- } )
83- . catch ( ( error ) => console . error ( error ) ) ;
34+ const response = await fetch ( "https://chapi.techstartucalgary.com/token" , {
35+ method : "POST" ,
36+ headers : {
37+ "Content-Type" : "application/x-www-form-urlencoded" ,
38+ } ,
39+ body : new URLSearchParams ( {
40+ grant_type : "password" ,
41+ username,
42+ password,
43+ } ) ,
44+ } )
45+ . then ( ( response ) => {
46+ if ( ! response . ok ) {
47+ if ( response . status === 401 ) {
48+ setErrorMessage ( "Invalid username or password" ) ;
49+ } else {
50+ throw new Error ( "Login failed" ) ;
51+ }
52+ }
53+ setUsername ( "" ) ;
54+ setPassword ( "" ) ;
55+ return response . json ( ) ;
56+ } )
57+ . then ( ( data ) => {
58+ localStorage . setItem ( "access_token" , data . access_token ) ;
59+ fetch ( "https://chapi.techstartucalgary.com/users/me/" , {
60+ method : "GET" ,
61+ headers : {
62+ "Content-Type" : "application/json" ,
63+ Authorization : `Bearer ${ localStorage . getItem ( "access_token" ) } ` ,
64+ } ,
65+ } )
66+ . then ( ( response ) => {
67+ if ( ! response . ok ) {
68+ throw new Error ( "API Error: " , response . status ) ;
69+ }
70+ return response . json ( ) ;
71+ } )
72+ . then ( ( data ) => {
73+ if ( data . is_recruiter ) {
74+ window . location . href = "#/app" ;
75+ } else {
76+ window . location . href = "#/recruiter" ;
77+ }
78+ } ) ;
79+ } )
80+ . catch ( ( error ) => console . error ( error ) ) ;
8481
85- //setUsername('');
86- //setPassword('');
87- } ;
82+ //setUsername('');
83+ //setPassword('');
84+ } ;
8885
89- return (
90- < >
91- < Grid
92- container
93- justifyContent = "center"
94- alignItems = "center"
95- style = { { height : "100vh" } }
96- >
97- < Grid item xs = { 10 } sm = { 8 } md = { 6 } lg = { 4 } >
98- < Typography
99- variant = "h4"
100- align = "center"
101- sx = { {
102- mb : { xs : 2 , sm : 4 } ,
103- fontSize : { xs : "2rem" , sm : "3rem" , md : "4rem" } ,
104- } }
105- >
106- CyberHire SignIn Page
107- </ Typography >
86+ return (
87+ < >
88+ < Grid
89+ container
90+ justifyContent = "center"
91+ alignItems = "center"
92+ style = { { height : "100vh" } }
93+ >
94+ < Grid item xs = { 10 } sm = { 8 } md = { 6 } lg = { 4 } >
95+ < Typography
96+ variant = "h4"
97+ align = "center"
98+ sx = { {
99+ mb : { xs : 2 , sm : 4 } ,
100+ fontSize : { xs : "2rem" , sm : "3rem" , md : "4rem" } ,
101+ } }
102+ >
103+ CyberHire SignIn Page
104+ </ Typography >
108105
109- < form onSubmit = { handleSubmit } >
110- < TextField
111- label = "Username"
112- variant = "outlined"
113- type = "text"
114- fullWidth
115- margin = "normal"
116- value = { username }
117- onChange = { handleUsernameChange }
118- error = { ! ! errorMessage }
119- helperText = { errorMessage }
120- required
121- />
122- < TextField
123- label = "Password"
124- variant = "outlined"
125- fullWidth
126- margin = "normal"
127- type = "password"
128- value = { password }
129- onChange = { handlePasswordChange }
130- error = { ! ! errorMessage }
131- helperText = { errorMessage }
132- required
133- />
134- < Button
135- type = "submit"
136- variant = "contained"
137- color = "primary"
138- fullWidth
139- >
140- Log In
141- </ Button >
142- < Grid container justifyContent = "flex-end" >
143- < Grid item >
144- < Typography >
145- Don't have an account?
146- < Link href = "#/signup" variant = "body2" >
147- Sign up
148- </ Link >
149- </ Typography >
150- </ Grid >
151- </ Grid >
152- </ form >
153- </ Grid >
154- </ Grid >
155- </ >
156- ) ;
106+ < form onSubmit = { handleSubmit } >
107+ < TextField
108+ label = "Username"
109+ variant = "outlined"
110+ type = "text"
111+ fullWidth
112+ margin = "normal"
113+ value = { username }
114+ onChange = { handleUsernameChange }
115+ error = { ! ! errorMessage }
116+ helperText = { errorMessage }
117+ required
118+ />
119+ < TextField
120+ label = "Password"
121+ variant = "outlined"
122+ fullWidth
123+ margin = "normal"
124+ type = "password"
125+ value = { password }
126+ onChange = { handlePasswordChange }
127+ error = { ! ! errorMessage }
128+ helperText = { errorMessage }
129+ required
130+ />
131+ < Button type = "submit" variant = "contained" color = "primary" fullWidth >
132+ Log In
133+ </ Button >
134+ < Grid container justifyContent = "flex-end" >
135+ < Grid item >
136+ < Typography >
137+ Don't have an account?
138+ < Link href = "#/signup" variant = "body2" >
139+ Sign up
140+ </ Link >
141+ </ Typography >
142+ </ Grid >
143+ </ Grid >
144+ </ form >
145+ </ Grid >
146+ </ Grid >
147+ </ >
148+ ) ;
157149} ;
158150
159151export default LoginPage ;
0 commit comments