frontend/pages/index.tsx (view raw)
1import {useRouter} from 'next/router';
2import {useTranslation} from 'react-i18next';
3import moment from 'moment';
4import Layout from '../layouts/Centered';
5import CreateEvent from '../containers/CreateEvent';
6import LanguagesIcon from '../containers/Languages/Icon';
7import Logo from '../components/Logo';
8import {getSession, useSession} from 'next-auth/react';
9import pageUtils from '../lib/pageUtils';
10import {useEffect} from 'react';
11import useRedirectUrlStore from '../stores/useRedirectUrl';
12import theme from '../theme';
13import Paper from '@mui/material/Paper';
14
15interface PageProps {
16 announcement?: string;
17}
18
19const Home = (props: PageProps) => {
20 const {t} = useTranslation();
21 const router = useRouter();
22 const session = useSession();
23 const isAuthenticated = session.status === 'authenticated';
24 const isReady = session.status !== 'loading';
25 const getRedirectUrl = useRedirectUrlStore(s => s.getRedirectUrl);
26
27 useEffect(() => {
28 const redirectUrl = getRedirectUrl();
29 if (redirectUrl) router.push(redirectUrl);
30 }, []);
31
32 const noUserMenuActions = [
33 {
34 label: t('menu.login'),
35 onClick: () => router.push('/auth/login'),
36 id: 'LoginTabs',
37 },
38 {
39 label: t('menu.register'),
40 onClick: () => router.push('/auth/register'),
41 id: 'RegisterTabs',
42 },
43 ];
44
45 const loggedMenuActions = [
46 {
47 label: t('menu.profile'),
48 onClick: () => router.push('/profile'),
49 id: 'ProfileTabs',
50 },
51 {divider: true},
52 {
53 label: t('menu.dashboard'),
54 onClick: () => router.push('/dashboard'),
55 id: 'SeeDashboardTabs',
56 },
57 ];
58
59 const menuActions = isAuthenticated ? loggedMenuActions : noUserMenuActions;
60
61 if (!isReady) return null;
62
63 return (
64 <Layout
65 menuTitle={t('event.creation.title')}
66 menuActions={menuActions}
67 displayMenu={isAuthenticated}
68 {...props}
69 >
70 <Paper sx={{padding: theme.spacing(2)}}>
71 <Logo />
72 <CreateEvent />
73 </Paper>
74 {!isAuthenticated && <LanguagesIcon displayMenu={false} />}
75 </Layout>
76 );
77};
78
79export const getServerSideProps = async (context: any) => {
80 const session = await getSession(context);
81 const {provider, userCreatedAt} = session?.token || {};
82 const isFirstLogin = userCreatedAt
83 ? moment().subtract({seconds: 3}).isBefore(userCreatedAt)
84 : false;
85 if (provider === 'google' && isFirstLogin)
86 return {
87 redirect: {
88 destination: '/auth/confirm/google',
89 permanent: false,
90 },
91 };
92
93 return pageUtils.getServerSideProps()(context);
94};
95
96export default Home;