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;