Files
Reactive-Resume/src/modals/AuthModal.js
Amruth Pillai a7657b4a5c - implement i18n
- translation dynamic for sections
- added articles for SEO
2020-07-16 08:42:19 +05:30

89 lines
2.4 KiB
JavaScript

import { navigate } from 'gatsby';
import React, { memo, useContext, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import Button from '../components/shared/Button';
import ModalContext from '../contexts/ModalContext';
import UserContext from '../contexts/UserContext';
import BaseModal from './BaseModal';
const AuthModal = () => {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const [isLoadingGoogle, setLoadingGoogle] = useState(false);
const [isLoadingAnonymous, setLoadingAnonymous] = useState(false);
const { emitter, events } = useContext(ModalContext);
const { user, loginWithGoogle, loginAnonymously, logout } = useContext(
UserContext,
);
useEffect(() => {
const unbind = emitter.on(events.AUTH_MODAL, () => setOpen(true));
return () => unbind();
}, [emitter, events]);
const handleSignInWithGoogle = async () => {
setLoadingGoogle(true);
await loginWithGoogle();
setLoadingGoogle(false);
};
const handleSignInAnonymously = async () => {
setLoadingAnonymous(true);
await loginAnonymously();
setLoadingAnonymous(false);
};
const handleGotoApp = () => {
navigate('/app/dashboard');
setOpen(false);
};
const getTitle = () =>
user
? t('modals.auth.welcome', { name: user.displayName || 'Agent 47' })
: t('modals.auth.whoAreYou');
const getMessage = () =>
user ? t('modals.auth.loggedInText') : t('modals.auth.loggedOutText');
const loggedInAction = (
<>
<Button outline className="mr-8" onClick={logout}>
{t('shared.buttons.logout')}
</Button>
<Button title="" onClick={handleGotoApp}>
{t('landing.hero.goToApp')}
</Button>
</>
);
const loggedOutAction = (
<div className="flex">
<Button isLoading={isLoadingGoogle} onClick={handleSignInWithGoogle}>
{t('modals.auth.buttons.google')}
</Button>
<Button
className="ml-8"
isLoading={isLoadingAnonymous}
onClick={handleSignInAnonymously}
>
{t('modals.auth.buttons.anonymous')}
</Button>
</div>
);
return (
<BaseModal
title={getTitle()}
state={[open, setOpen]}
action={user ? loggedInAction : loggedOutAction}
>
<p className="leading-loose">{getMessage()}</p>
</BaseModal>
);
};
export default memo(AuthModal);