all repos — caroster @ 64425eee42c3bbb4a10591bf227f141cc690b8c0

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