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