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 'next-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;