import {useEffect, useMemo} from 'react';
import moment from 'moment';
import {useRouter} from 'next/router';
import {getSession} from 'next-auth/react';
import {useTranslation} from 'react-i18next';
import LayoutDefault from '../layouts/Default';
import DashboardEvents from '../containers/DashboardEvents';
import DashboardEmpty from '../containers/DashboardEmpty';
import Loading from '../containers/Loading';
import Fab from '../containers/Fab';
import pageUtils from '../lib/pageUtils';
import useProfile from '../hooks/useProfile';
import useRedirectUrlStore from '../stores/useRedirectUrl';
interface PageProps {
announcement?: string;
}
const Dashboard = (props: PageProps) => {
const {t} = useTranslation();
const router = useRouter();
const {profile, isReady} = useProfile();
const events = profile?.events?.data || [];
const getRedirectUrl = useRedirectUrlStore(s => s.getRedirectUrl);
useEffect(() => {
const redirectUrl = getRedirectUrl();
if (redirectUrl) router.push(redirectUrl);
}, []);
const pastEvents = useMemo(
() =>
events
?.filter(
({attributes: {date}}) =>
date && moment(date).isBefore(moment(), 'day')
)
.sort(sortDesc),
[events]
);
const futureEvents = useMemo(
() =>
events
?.filter(
({attributes: {date}}) =>
date && moment(date).isSameOrAfter(moment(), 'day')
)
.sort(sortDesc),
[events]
);
const noDateEvents = useMemo(
() => events?.filter(({attributes: {date}}) => !date),
[events]
);
const menuActions = [
{
label: t('menu.profile'),
onClick: () => router.push('/profile'),
id: 'ProfileTabs',
},
{divider: true},
{
label: t('menu.new_event'),
onClick: () => router.push('/'),
id: 'AddEventTabs',
},
];
if (!events || !isReady)
return (
);
return (
{events.length === 0 ? (
) : (
)}
router.push('/')}
aria-label={t('dashboard.actions.add_event')}
noDrawer
>
{t('dashboard.actions.add_event')}
);
};
const sortDesc = ({attributes: {date: dateA}}, {attributes: {date: dateB}}) =>
dateB.localeCompare(dateA);
export const getServerSideProps = async (context: any) => {
const session = await getSession(context);
if (!session)
return {
redirect: {
destination: '/',
permanent: false,
},
};
const {provider, userCreatedAt} = session?.token || {};
const isFirstLogin = userCreatedAt
? moment().subtract({seconds: 3}).isBefore(userCreatedAt)
: false;
if (provider === 'google' && isFirstLogin)
return {
redirect: {
destination: '/auth/confirm/google',
permanent: false,
},
};
return pageUtils.getServerSideProps()(context);
};
export default Dashboard;