all repos — caroster @ e05034e4ae972de5a8df40528d270d038c4343e6

[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 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;