all repos — caroster @ be8f93ea0966f0bc0587c2c127ee1ba15594a049

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