all repos — caroster @ 832452704d5eae9e2164e58c086cdf365e51e5e7

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

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

 1import CardMedia from '@mui/material/CardMedia';
 2import Card from '@mui/material/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 '@mui/material/Typography';
11import theme from '../../theme';
12
13interface PageProps {
14  error?: string;
15  emailConfirmation?: boolean;
16}
17
18const Login = (props: PageProps) => {
19  const {emailConfirmation} = props;
20  const {t} = useTranslation();
21
22  return (
23    <Layout menuTitle={t('signin.title')} displayMenu={false}>
24      <Card>
25        <CardMedia component={Logo} />
26        {emailConfirmation && (
27          <Typography
28            sx={{marginBottom: theme.spacing(2)}}
29            variant="body2"
30            align="center"
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;