all repos — caroster @ d18409a4531f3a6db3a3abf654f25e0bcd42acd8

[Octree] Group carpool to your event https://caroster.io

frontend/pages/auth/login.tsx (view raw)

 1import CardMedia from '@material-ui/core/CardMedia';
 2import Card from '@material-ui/core/Card';
 3import {useTranslation} from 'react-i18next';
 4import Layout from '../../layouts/Centered';
 5import Logo from '../../components/Logo';
 6import SignInForm from '../../containers/SignInForm';
 7import LanguagesIcon from '../../containers/Languages/Icon';
 8import {getSession} from 'next-auth/react';
 9import pageUtils from '../../lib/pageUtils';
10import Typography from '@material-ui/core/Typography';
11
12interface PageProps {
13  error?: string;
14  emailConfirmation?: boolean;
15}
16
17const Login = (props: PageProps) => {
18  const {emailConfirmation} = props;
19  const {t} = useTranslation();
20
21  return (
22    <Layout menuTitle={t('signin.title')} displayMenu={false}>
23      <Card>
24        <CardMedia component={Logo} />
25        {emailConfirmation && (
26          <Typography
27            style={{marginBottom: '3rem'}}
28            variant="body2"
29            align="center"
30            color="textSecondary"
31          >{t`signin.emailConfirmation`}</Typography>
32        )}
33        <SignInForm error={props?.error} />
34      </Card>
35      <LanguagesIcon />
36    </Layout>
37  );
38};
39
40export const getServerSideProps = async (context: any) => {
41  const session = await getSession(context);
42
43  if (session)
44    return {
45      redirect: {
46        destination: '/',
47        permanent: false,
48      },
49    };
50  else
51    return pageUtils.getServerSideProps(async ctx => {
52      const error = ctx.query?.error || null;
53      const emailConfirmation = ctx.query?.confirmed === 'true';
54      return {props: {error, emailConfirmation}};
55    })(context);
56};
57
58export default Login;