11import { Requestable , RequestStatus } from "@/types"
22import { useState , useEffect , useCallback } from "react"
33
4- import { useSelector } from "react-redux"
4+ import { useSelector , useDispatch } from "react-redux"
55
66export enum UserStatus {
77 SignedIn ,
@@ -11,7 +11,7 @@ export enum UserStatus {
1111
1212interface Successful {
1313 userStatus : UserStatus
14- user : gapi . auth2 . GoogleUser | undefined
14+ user : any
1515 logout : ( ) => void
1616 login : ( ) => void
1717}
@@ -21,24 +21,35 @@ interface Failed {
2121}
2222const useLogin = ( ) : Requestable < Successful , { } , InProgress , Failed > => {
2323 const [ requestStatus , setRequestStatus ] = useState ( RequestStatus . NotStarted )
24- const user = useSelector ( ( state : AppState ) => state . user )
24+ const token = useSelector ( ( state : AppState ) => state . token )
2525 const gapi = useSelector ( ( state : AppState ) => state . gapi )
2626 const gapiStatus = useSelector ( ( state : AppState ) => state . gapiStatus )
27- const [ userStatus , setUserStatus ] = useState < UserStatus > ( UserStatus . Pending )
27+ const tokenClient = useSelector ( ( state : AppState ) => state . tokenClient )
28+ const google = useSelector ( ( state : AppState ) => state . google )
29+ const dispatch = useDispatch ( )
30+
31+ console . log ( "useLogin: token" , token ) ;
32+ console . log ( "useLogin: gapiStatus" , gapiStatus ) ;
33+ const userStatus = token ? UserStatus . SignedIn : UserStatus . SignedOut
2834
2935 const login = useCallback ( ( ) => {
30- if ( gapi === undefined ) {
31- return
36+ console . log ( "login called. tokenClient:" , tokenClient )
37+ if ( tokenClient ) {
38+ console . log ( "requesting access token" )
39+ tokenClient . requestAccessToken ( )
3240 }
33- gapi . auth2 . getAuthInstance ( ) . signIn ( )
34- } , [ gapi ] )
41+ } , [ tokenClient ] )
3542
3643 const logout = useCallback ( ( ) => {
37- if ( gapi === undefined ) {
38- return
44+ const token = gapi ?. client . getToken ( )
45+ if ( token && google ) {
46+ google . accounts . oauth2 . revoke ( token . access_token , ( ) => {
47+ gapi ?. client . setToken ( null )
48+ dispatch ( { type : "setUser" , user : undefined } )
49+ localStorage . removeItem ( "google_token" )
50+ } )
3951 }
40- gapi . auth2 . getAuthInstance ( ) . signOut ( )
41- } , [ gapi ] )
52+ } , [ gapi , google , dispatch ] )
4253
4354 useEffect ( ( ) => {
4455 if ( gapiStatus === "cannot initialize" ) {
@@ -61,19 +72,11 @@ const useLogin = (): Requestable<Successful, {}, InProgress, Failed> => {
6172 setRequestStatus ( RequestStatus . InProgress )
6273 }
6374
64- gapi . auth2 . getAuthInstance ( ) . isSignedIn . listen ( signedIn => {
65- setUserStatus ( signedIn ? UserStatus . SignedIn : UserStatus . SignedOut )
66- } )
67-
68- gapi . auth2 . getAuthInstance ( ) . isSignedIn . get ( )
69- ? setUserStatus ( UserStatus . SignedIn )
70- : setUserStatus ( UserStatus . SignedOut )
71-
7275 setRequestStatus ( RequestStatus . Successful )
7376 } , [ gapi , requestStatus , gapiStatus ] )
7477
7578 if ( requestStatus === RequestStatus . Successful ) {
76- return { status : requestStatus , userStatus, user, login, logout }
79+ return { status : requestStatus , userStatus, user : token , login, logout }
7780 }
7881 if ( requestStatus === RequestStatus . Failed ) {
7982 return { status : requestStatus , message : gapiStatus || "unknown" }
@@ -82,4 +85,4 @@ const useLogin = (): Requestable<Successful, {}, InProgress, Failed> => {
8285 return { status : requestStatus }
8386}
8487
85- export default useLogin
88+ export default useLogin
0 commit comments