all repos — caroster @ 655de2a956a35bddae072540e09c1ec352d2801b

[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 Typography from '@mui/material/Typography';
 4import {getSession} from 'next-auth/react';
 5import {useTranslation} from 'react-i18next';
 6import Layout from '../../layouts/Centered';
 7import Logo from '../../components/Logo';
 8import SignInForm from '../../containers/SignInForm';
 9import LanguagesIcon from '../../containers/Languages/Icon';
10import pageUtils from '../../lib/pageUtils';
11import Container from '@mui/material/Container';
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      <Container maxWidth="xs">
25        <Card sx={{pt: 2, width: '100%'}}>
26          <CardMedia component={Logo} />
27          {emailConfirmation && (
28            <Typography
29              sx={{p: 2}}
30              variant="body2"
31              align="center"
32            >{t`signin.emailConfirmation`}</Typography>
33          )}
34          <SignInForm error={props?.error} />
35        </Card>
36      </Container>
37      <LanguagesIcon />
38    </Layout>
39  );
40};
41
42export const getServerSideProps = async (context: any) => {
43  const session = await getSession(context);
44
45  if (session)
46    return {
47      redirect: {
48        destination: '/',
49        permanent: false,
50      },
51    };
52  else
53    return pageUtils.getServerSideProps(async ctx => {
54      const error = ctx.query?.error || null;
55      const emailConfirmation = ctx.query?.confirmed === 'true';
56      return {props: {error, emailConfirmation}};
57    })(context);
58};
59
60export default Login;