11import { LoadingButton } from "@mui/lab" ;
22import { Button , Dialog , DialogActions , DialogContent , Typography } from "@mui/material" ;
3- import { useState } from "react" ;
3+ import { useContext , useState } from "react" ;
4+
5+ import dayjs from "@/lib/date" ;
6+ import { UserContext } from "@/pages/events/[id]" ;
47
58type Event = {
69 signupOpenDate : string ;
@@ -9,6 +12,10 @@ type Event = {
912 isAttendable : boolean ;
1013} ;
1114
15+ type User = {
16+ gradeYear ?: number | null ;
17+ } ;
18+
1219type Props = {
1320 isSignedUp ?: boolean | null ;
1421 disabled ?: boolean ;
@@ -17,9 +24,22 @@ type Props = {
1724 event : Event ;
1825} ;
1926
27+ function isWaitList ( event : Event , user : User ) {
28+ const signUpOpenDate = event . signupOpenDate ? dayjs ( event . signupOpenDate ) : undefined ;
29+ const isSignUpOpen = signUpOpenDate && dayjs ( ) . isSameOrAfter ( signUpOpenDate ) ;
30+
31+ let canAttend = event . isAttendable && isSignUpOpen ;
32+ if ( user . gradeYear && event . allowedGradeYears ) {
33+ canAttend = canAttend && event . allowedGradeYears . includes ( user . gradeYear ) ;
34+ }
35+
36+ return event . isFull && canAttend ;
37+ }
38+
2039export const SignUpButton : React . FC < Props > = ( { isSignedUp, onSignUp, onSignOff, disabled, event } ) => {
2140 const [ confirmSignOff , setConfirmSignOff ] = useState ( false ) ;
2241 const [ loading , setLoading ] = useState ( false ) ;
42+ const user = useContext ( UserContext ) ;
2343
2444 function handleSignUp ( ) {
2545 setLoading ( true ) ;
@@ -61,7 +81,7 @@ export const SignUpButton: React.FC<Props> = ({ isSignedUp, onSignUp, onSignOff,
6181 ) }
6282 { ! isSignedUp && (
6383 < LoadingButton fullWidth loading = { loading } variant = "contained" onClick = { handleSignUp } disabled = { disabled } >
64- Meld på
84+ { user != null && isWaitList ( event , user ) ? " Meld på venteliste" : "Meld på" }
6585 </ LoadingButton >
6686 ) }
6787 </ >
0 commit comments