all repos — caroster @ e2d2a77f78f52331a111b5e38389de808e95c571

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

🐛 Fixes after PO review #466 #508 #462
Tim Izzo tim@5ika.ch
Fri, 08 Mar 2024 11:01:15 +0100
commit

e2d2a77f78f52331a111b5e38389de808e95c571

parent

47cfddf44c0e3ba91db7ce94b80ec360dcf3348d

M frontend/layouts/Event.tsxfrontend/layouts/Event.tsx

@@ -1,4 +1,4 @@

-import {PropsWithChildren, useEffect, useState} from 'react'; +import {PropsWithChildren, useEffect, useMemo, useState} from 'react'; import useMediaQuery from '@mui/material/useMediaQuery'; import Box from '@mui/material/Box'; import {useTheme} from '@mui/material/styles';

@@ -54,11 +54,11 @@ useEventByUuidQuery({

pollInterval: POLL_INTERVAL, variables: {uuid: eventUUID}, }); - const event = {id, ...attributes}; + const event = useMemo(() => ({id, ...attributes}), [id, attributes]); useEffect(() => { if (event) setEvent(event); - }, [event]); + }, [event, setEvent]); if (!event) return <ErrorPage statusCode={404} title={t`event.not_found`} />;
M frontend/pages/auth/login.tsxfrontend/pages/auth/login.tsx

@@ -1,7 +1,6 @@

import CardMedia from '@mui/material/CardMedia'; import Card from '@mui/material/Card'; import Typography from '@mui/material/Typography'; -import {useTheme} from '@mui/material/styles'; import {getSession} from 'next-auth/react'; import {useTranslation} from 'react-i18next'; import Layout from '../../layouts/Centered';

@@ -18,7 +17,6 @@ }

const Login = (props: PageProps) => { const {emailConfirmation} = props; - const theme = useTheme(); const {t} = useTranslation(); return (

@@ -28,7 +26,7 @@ <Card sx={{pt: 2, width: '100%'}}>

<CardMedia component={Logo} /> {emailConfirmation && ( <Typography - sx={{marginBottom: theme.spacing(2)}} + sx={{p: 2}} variant="body2" align="center" >{t`signin.emailConfirmation`}</Typography>
M frontend/pages/dashboard.tsxfrontend/pages/dashboard.tsx

@@ -58,7 +58,7 @@ },

{divider: true}, { label: t('menu.new_event'), - onClick: () => router.push('/'), + onClick: () => router.push('/new'), id: 'AddEventTabs', }, ];

@@ -86,7 +86,7 @@ noDateEvents={noDateEvents}

/> )} <Fab - onClick={() => router.push('/')} + onClick={() => router.push('/new')} aria-label={t('dashboard.actions.add_event')} noDrawer >
M frontend/pages/index.tsxfrontend/pages/index.tsx

@@ -1,72 +1,24 @@

-import {useRouter} from 'next/router'; -import {useTranslation} from 'react-i18next'; -import Layout from '../layouts/Centered'; -import CreateEvent from '../containers/CreateEvent'; -import LanguagesIcon from '../containers/Languages/Icon'; -import Logo from '../components/Logo'; -import {useSession} from 'next-auth/react'; -import pageUtils from '../lib/pageUtils'; -import theme from '../theme'; -import Paper from '@mui/material/Paper'; - -interface PageProps { - announcement?: string; -} - -const Home = (props: PageProps) => { - const {t} = useTranslation(); - const router = useRouter(); - const session = useSession(); - const isAuthenticated = session.status === 'authenticated'; - const isReady = session.status !== 'loading'; - - const noUserMenuActions = [ - { - label: t('menu.login'), - onClick: () => router.push('/auth/login'), - id: 'LoginTabs', - }, - { - label: t('menu.register'), - onClick: () => router.push('/auth/register'), - id: 'RegisterTabs', - }, - ]; - - const loggedMenuActions = [ - { - label: t('menu.profile'), - onClick: () => router.push('/profile'), - id: 'ProfileTabs', - }, - {divider: true}, - { - label: t('menu.dashboard'), - onClick: () => router.push('/dashboard'), - id: 'SeeDashboardTabs', - }, - ]; +import {getSession} from 'next-auth/react'; - const menuActions = isAuthenticated ? loggedMenuActions : noUserMenuActions; +const IndexPage = () => null; - if (!isReady) return null; +export const getServerSideProps = async context => { + const session = await getSession(context); - return ( - <Layout - menuTitle={t('event.creation.title')} - menuActions={menuActions} - displayMenu={isAuthenticated} - {...props} - > - <Paper sx={{padding: theme.spacing(2), width: '480px', maxWidth: '100%', display: 'block', margin: '0 auto'}}> - <Logo /> - <CreateEvent /> - </Paper> - {!isAuthenticated && <LanguagesIcon displayMenu={false} />} - </Layout> - ); + if (session) + return { + redirect: { + destination: '/dashboard', + permanent: false, + }, + }; + else + return { + redirect: { + destination: '/new', + permanent: false, + }, + }; }; -export const getServerSideProps = pageUtils.getServerSideProps(); - -export default Home; +export default IndexPage;
A frontend/pages/new.tsx

@@ -0,0 +1,80 @@

+import {useRouter} from 'next/router'; +import {useTranslation} from 'react-i18next'; +import Layout from '../layouts/Centered'; +import CreateEvent from '../containers/CreateEvent'; +import LanguagesIcon from '../containers/Languages/Icon'; +import Logo from '../components/Logo'; +import {useSession} from 'next-auth/react'; +import pageUtils from '../lib/pageUtils'; +import theme from '../theme'; +import Paper from '@mui/material/Paper'; + +interface PageProps { + announcement?: string; +} + +const Home = (props: PageProps) => { + const {t} = useTranslation(); + const router = useRouter(); + const session = useSession(); + const isAuthenticated = session.status === 'authenticated'; + const isReady = session.status !== 'loading'; + + const noUserMenuActions = [ + { + label: t('menu.login'), + onClick: () => router.push('/auth/login'), + id: 'LoginTabs', + }, + { + label: t('menu.register'), + onClick: () => router.push('/auth/register'), + id: 'RegisterTabs', + }, + ]; + + const loggedMenuActions = [ + { + label: t('menu.profile'), + onClick: () => router.push('/profile'), + id: 'ProfileTabs', + }, + {divider: true}, + { + label: t('menu.dashboard'), + onClick: () => router.push('/dashboard'), + id: 'SeeDashboardTabs', + }, + ]; + + const menuActions = isAuthenticated ? loggedMenuActions : noUserMenuActions; + + if (!isReady) return null; + + return ( + <Layout + menuTitle={t('event.creation.title')} + menuActions={menuActions} + displayMenu={isAuthenticated} + {...props} + > + <Paper + sx={{ + padding: theme.spacing(2), + width: '480px', + maxWidth: '100%', + display: 'block', + margin: '0 auto', + }} + > + <Logo /> + <CreateEvent /> + </Paper> + {!isAuthenticated && <LanguagesIcon displayMenu={false} />} + </Layout> + ); +}; + +export const getServerSideProps = pageUtils.getServerSideProps(); + +export default Home;