all repos — caroster @ f653544e725a8d67c364b7ce06589f2dba5f0197

[Octree] Group carpool to your event https://caroster.io

frontend/pages/index.tsx (view raw)

 1import {useRouter} from 'next/router';
 2import {useTranslation} from 'react-i18next';
 3import Layout from '../layouts/Centered';
 4import CreateEvent from '../containers/CreateEvent';
 5import LanguagesIcon from '../containers/Languages/Icon';
 6import Paper from '../components/Paper';
 7import Logo from '../components/Logo';
 8import {useSession} from 'next-auth/react';
 9import pageUtils from '../lib/pageUtils';
10import {useEffect} from 'react';
11import useRedirectUrlStore from '../stores/useRedirectUrl';
12
13interface PageProps {
14  announcement?: string;
15}
16
17const Home = (props: PageProps) => {
18  const {t} = useTranslation();
19  const router = useRouter();
20  const session = useSession();
21  const isAuthenticated = session.status === 'authenticated';
22  const isReady = session.status !== 'loading';
23  const getRedirectUrl = useRedirectUrlStore(s => s.getRedirectUrl);
24
25  useEffect(() => {
26    const redirectUrl = getRedirectUrl();
27    if (redirectUrl) router.push(redirectUrl);
28  }, []);
29
30  const noUserMenuActions = [
31    {
32      label: t('menu.login'),
33      onClick: () => router.push('/auth/login'),
34      id: 'LoginTabs',
35    },
36    {
37      label: t('menu.register'),
38      onClick: () => router.push('/auth/register'),
39      id: 'RegisterTabs',
40    },
41  ];
42
43  const loggedMenuActions = [
44    {
45      label: t('menu.profile'),
46      onClick: () => router.push('/profile'),
47      id: 'ProfileTabs',
48    },
49    {divider: true},
50    {
51      label: t('menu.dashboard'),
52      onClick: () => router.push('/dashboard'),
53      id: 'SeeDashboardTabs',
54    },
55  ];
56
57  const menuActions = isAuthenticated ? loggedMenuActions : noUserMenuActions;
58
59  if (!isReady) return null;
60
61  return (
62    <Layout
63      menuTitle={t('event.creation.title')}
64      menuActions={menuActions}
65      displayMenu={isAuthenticated}
66      {...props}
67    >
68      <Paper>
69        <Logo />
70        <CreateEvent />
71      </Paper>
72      {!isAuthenticated && <LanguagesIcon displayMenu={false} />}
73    </Layout>
74  );
75};
76
77export const getServerSideProps = pageUtils.getServerSideProps();
78
79export default Home;