sabrebooking / sabrefrontend / src / components / Header.jsx
Header.jsx
Raw
import SabreLogo from "./icons/SabreLogo";
import "./Header.css";
import { useEffect, useState } from "react";
import { gapi } from 'gapi-script';
import {useDispatch, useSelector} from 'react-redux'
import LoginStatus, { updateLoginStatus } from "../redux-elements/loginStatus";
import ProfileData from "./ProfileData";
import GoogleLogin from "react-google-login";
import LogoutModal from "./LogoutModal";


  

export default function Header() {
    const clientId = "28960402387-lioh5qksd4js14rkahl6gkqt3v0o7t9n.apps.googleusercontent.com";
    const loginStatus = useSelector(state => state.loginStatus);
    const dispatch = useDispatch();
    const [open, setOpen] = useState(false);
    const handleOpen = () => setOpen(true);
    const handleClose = () => setOpen(false);
   
    useEffect(() => {
        function start() {
            gapi.client.init({
                clientId: clientId,
                scope: "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"
            })
        }
        if (!loginStatus.isLoggedIn) {
            gapi.load('client:auth2', start)
        }
    }, [loginStatus.isLoggedIn]);

    
    const onLoginSuccess = async (res) => {
        console.log(res);
        var id_token = res.getAuthResponse().id_token;
        console.log(res.profileObj)
        async function sendAuthentication() {
            const response = await fetch("http://127.0.0.1:8000/sabreapi/v1/auth/login/", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({
                    token_id: id_token
                })
            })
            const data = await response.json();
            if (!data.error) {
                dispatch(updateLoginStatus({ prop: "loginToken", value: id_token }))
                dispatch(updateLoginStatus({ prop: "isLoggedIn", value: true }));
                dispatch(updateLoginStatus({ prop: "givenName", value: res.profileObj.givenName }))
                dispatch(updateLoginStatus({ prop: "imageURL", value: res.profileObj.imageUrl }))
            } else {
                alert(`Sorry, login failed. Please try again. \n\n${data.error}`)
            }
        }

        if (!loginStatus.isLoggedIn) {
            sendAuthentication();
        }
        

    }
    const onLoginFailure = (res) => {
        console.log("LOGIN FAILED! res: ", res)
    }

        console.log(loginStatus.givenName)
        return (<div>
            <div className="Header">
                <SabreLogo />
                <div className="LoginLogout">
                    {loginStatus.isLoggedIn ? <ProfileData handleClicked={setOpen}  givenName={loginStatus.givenName} imageUrl={loginStatus.imageURL} /> :
                        <GoogleLogin
                            clientId={clientId}
                            buttonText="Login"
                            onSuccess={onLoginSuccess}
                            onFailure={onLoginFailure}
                            cookiePolicy={'single_host_origin'}
                            isSignedIn={true}
                        />
                    }
                </div>
                <LogoutModal open={open} handleClose={handleClose} />
            </div>
        
        </div>
        )
    }