Skip to content

Commit c036d17

Browse files
committed
event redirect page, event details for unauthorized users
1 parent 25c411f commit c036d17

File tree

7 files changed

+45
-14
lines changed

7 files changed

+45
-14
lines changed

packages/client/src/App.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { PLayout } from './components/commons/PLayout'
66
import { AuthorizedPage } from './pages/authorized/Authorized.page'
77
import { ErrorPage } from './pages/error/error.page'
88
import { EventDetailsPage } from './pages/events/EventDetails.page'
9+
import { EventRedirectPage } from './pages/events/EventRedirect.page'
910
import { IndexPage } from './pages/events/Index.page'
1011
import { FAQPage } from './pages/faq/FAQ.page'
1112
import { LoginPage } from './pages/Login.page'
@@ -80,6 +81,11 @@ export const App = () => {
8081
<Route index element={<EventDetailsPage />} />
8182
</Route>
8283
</Route>
84+
<Route path={PATHS.EVENT_REDIRECT}>
85+
<Route path=":eventId">
86+
<Route index element={<EventRedirectPage />} />
87+
</Route>
88+
</Route>
8389
<Route path={PATHS.RATINGS}>
8490
<Route path=":ratingId" element={<RatingPage />} />
8591
</Route>

packages/client/src/components/commons/NavigateWithError.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ export const NavigateWithError = ({ error, to }: Props) => {
1515
toast({ title: error.message, status: 'error' })
1616
}, [toast, error])
1717

18-
return <Navigate to={to} />
18+
return <Navigate replace to={to} />
1919
}

packages/client/src/pages/events/EventDetails.page.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Button, Heading, HStack, Stack, Text, useToast, VStack } from '@chakra-ui/react'
1+
import { Alert, AlertIcon, AlertTitle, Button, Heading, HStack, Stack, Text, useToast, VStack } from '@chakra-ui/react'
22
import { EventState, RatingRole, ratingRoleArray } from '@pontozo/common'
33
import { useEffect, useState } from 'react'
44
import { FaArrowLeft, FaDatabase, FaMedal } from 'react-icons/fa'
@@ -7,7 +7,6 @@ import { useRatingContext } from 'src/api/contexts/useRatingContext'
77
import { useStartRatingMutation } from 'src/api/hooks/ratingHooks'
88
import { EventRatingStateBadge } from 'src/components/commons/EventRatingStateBadge'
99
import { HelmetTitle } from 'src/components/commons/HelmetTitle'
10-
import { LoginNavigate } from 'src/components/commons/LoginNavigate'
1110
import { NavigateWithError } from 'src/components/commons/NavigateWithError'
1211
import { formatDateRange, getRatingEndDate, getRatingResultPublishedDate } from 'src/util/dateHelpers'
1312
import { onError } from 'src/util/onError'
@@ -61,10 +60,6 @@ export const EventDetailsPage = () => {
6160
}
6261
}
6362

64-
if (!isLoggedIn) {
65-
return <LoginNavigate />
66-
}
67-
6863
if (dbQuery.isLoading) {
6964
return <LoadingSpinner />
7065
}
@@ -113,6 +108,12 @@ export const EventDetailsPage = () => {
113108
MTFSZ Adatbank
114109
</Button>
115110
</HStack>
111+
{!isLoggedIn && (
112+
<Alert status="warning">
113+
<AlertIcon />
114+
<AlertTitle>A verseny értékeléséhez először jelentkezz be!</AlertTitle>
115+
</Alert>
116+
)}
116117
<Heading size="md" mt={3}>
117118
Szerepkör
118119
</Heading>
@@ -126,7 +127,7 @@ export const EventDetailsPage = () => {
126127
role={r}
127128
onSelected={() => setRole(r)}
128129
selected={role === r}
129-
disabled={!!userRating || event.state !== EventState.RATEABLE}
130+
disabled={!!userRating || event.state !== EventState.RATEABLE || !isLoggedIn}
130131
/>
131132
))}
132133
<Heading size="md" mt={3}>
@@ -142,7 +143,7 @@ export const EventDetailsPage = () => {
142143
<StageListItem
143144
stage={s}
144145
key={s.id}
145-
disabled={!!userRating || event.state !== EventState.RATEABLE}
146+
disabled={!!userRating || event.state !== EventState.RATEABLE || !isLoggedIn}
146147
onChecked={(c) => onItemChecked(c, s.id)}
147148
checked={stageIds.includes(s.id)}
148149
/>
@@ -155,7 +156,7 @@ export const EventDetailsPage = () => {
155156
isLoading={startRating.isLoading || dbQuery.isLoading}
156157
eventWithRating={dbQuery.data}
157158
onStartClick={onStartClick}
158-
startDisabled={!role || !stageIds.length}
159+
startDisabled={!role || !stageIds.length || !isLoggedIn}
159160
continueDisabled={event.state !== EventState.RATEABLE}
160161
/>
161162
</HStack>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { EventState } from '@pontozo/common'
2+
import { Navigate, useParams } from 'react-router-dom'
3+
import { useFetchEvent } from 'src/api/hooks/eventQueryHooks'
4+
import { LoadingSpinner } from 'src/components/commons/LoadingSpinner'
5+
import { NavigateWithError } from 'src/components/commons/NavigateWithError'
6+
import { PATHS } from 'src/util/paths'
7+
8+
export const EventRedirectPage = () => {
9+
const { eventId } = useParams()
10+
const { data, isLoading, error } = useFetchEvent(+eventId!)
11+
if (error) return <NavigateWithError error={error} to={PATHS.INDEX} />
12+
if (isLoading || !data) return <LoadingSpinner />
13+
if (data.event.state === EventState.RESULTS_READY) return <Navigate replace to={`${PATHS.RESULTS}/${eventId}`} />
14+
return <Navigate replace to={`${PATHS.EVENTS}/${eventId}`} />
15+
}

packages/client/src/util/paths.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export enum PATHS {
77
SEASONS = '/admin/seasons',
88
USERS = '/admin/users',
99
EVENTS = '/events',
10+
EVENT_REDIRECT = '/event-redirect',
1011
RATINGS = '/ratings',
1112
AUTHORIZED = '/authorized',
1213
PROFILE = '/profile',

packages/functions/src/functions/events/getOne.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { app, HttpRequest, InvocationContext } from '@azure/functions'
22
import { EventWithRating, PontozoException } from '@pontozo/common'
3-
import { getUserFromHeader } from '../../service/auth.service'
3+
import { getUserFromHeaderIfPresent } from '../../service/auth.service'
44
import Event from '../../typeorm/entities/Event'
55
import EventRating from '../../typeorm/entities/EventRating'
66
import { getAppDataSource } from '../../typeorm/getConfig'
@@ -15,13 +15,13 @@ export const getOneEvent = async (req: HttpRequest, context: InvocationContext):
1515
try {
1616
const eventId = validateId(req)
1717

18-
const user = getUserFromHeader(req)
18+
const user = getUserFromHeaderIfPresent(req)
1919
const ads = await getAppDataSource(context)
2020
const eventQuery = ads.getRepository(Event).findOne({ where: { id: eventId }, relations: { organisers: true, stages: true } })
2121
const userRatingQuery = ads
2222
.getRepository(EventRating)
23-
.findOne({ where: { eventId: eventId, userId: user.szemely_id }, relations: { stages: true } })
24-
const [event, userRating] = await Promise.all([eventQuery, userRatingQuery])
23+
.findOne({ where: { eventId: eventId, userId: user?.szemely_id }, relations: { stages: true } })
24+
const [event, userRating] = await Promise.all([eventQuery, user ? userRatingQuery : Promise.resolve(undefined)])
2525

2626
if (!event) {
2727
throw new PontozoException('A verseny nem található!', 404)

packages/functions/src/service/auth.service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ export const getUserFromHeader = (req: HttpRequest): DbUser => {
1919
}
2020
}
2121

22+
export const getUserFromHeaderIfPresent = (req: HttpRequest): DbUser | undefined => {
23+
const authHeader = req.headers.get('Authorization')
24+
if (!authHeader) {
25+
return
26+
}
27+
return getUserFromHeader(req)
28+
}
29+
2230
export const getUserFromHeaderAndAssertAdmin = async (req: HttpRequest, context: InvocationContext): Promise<DbUser> => {
2331
const user = getUserFromHeader(req)
2432
context.log(`User #${user.szemely_id} attempting to access entity reserved for admins`)

0 commit comments

Comments
 (0)