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]" ;
7+
8+ type Event = {
9+ signupOpenDate : string ;
10+ isFull ?: boolean | null ;
11+ allowedGradeYears ?: Array < number > | null ;
12+ isAttendable : boolean ;
13+ } ;
14+
15+ type User = {
16+ gradeYear ?: number | null ;
17+ } ;
418
519type Props = {
620 isSignedUp ?: boolean | null ;
721 disabled ?: boolean ;
822 onSignUp : ( ) => void ;
923 onSignOff : ( ) => void ;
24+ event : Event ;
1025} ;
1126
12- export const SignUpButton : React . FC < Props > = ( { isSignedUp, onSignUp, onSignOff, disabled } ) => {
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+
39+ export const SignUpButton : React . FC < Props > = ( { isSignedUp, onSignUp, onSignOff, disabled, event } ) => {
1340 const [ confirmSignOff , setConfirmSignOff ] = useState ( false ) ;
1441 const [ loading , setLoading ] = useState ( false ) ;
42+ const user = useContext ( UserContext ) ;
1543
1644 function handleSignUp ( ) {
1745 setLoading ( true ) ;
@@ -25,7 +53,6 @@ export const SignUpButton: React.FC<Props> = ({ isSignedUp, onSignUp, onSignOff,
2553 setTimeout ( ( ) => setLoading ( false ) , 1000 ) ;
2654 onSignOff ( ) ;
2755 }
28-
2956 return (
3057 < >
3158 < Dialog open = { confirmSignOff } >
@@ -54,7 +81,7 @@ export const SignUpButton: React.FC<Props> = ({ isSignedUp, onSignUp, onSignOff,
5481 ) }
5582 { ! isSignedUp && (
5683 < LoadingButton fullWidth loading = { loading } variant = "contained" onClick = { handleSignUp } disabled = { disabled } >
57- Meld på
84+ { user != null && isWaitList ( event , user ) ? " Meld på venteliste" : "Meld på" }
5885 </ LoadingButton >
5986 ) }
6087 </ >
0 commit comments