1+ import { useMutation } from "@apollo/client" ;
2+ import React , { useEffect , useState } from "react" ;
3+ import { useTranslation } from "react-i18next" ;
4+ import { toast } from "react-toastify"
5+ import moment from "moment" ;
6+ import { RESPOND_TO_EVENT_INVITATION } from "../Mutations/event" ;
7+ import { Link } from "react-router-dom" ;
8+
9+ const CalendarConfirmation = ( ) => {
10+ const { t } = useTranslation ( )
11+ const [ respondToEventInvitation ] = useMutation ( RESPOND_TO_EVENT_INVITATION )
12+ const params = new URLSearchParams ( window . location . search )
13+
14+ if ( ! params . get ( 'eventId' ) || ! params . get ( 'response' ) ) toast . error ( "Missing URL Parameters" )
15+
16+ const [ event , setEvent ] = useState ( {
17+ title : '' ,
18+ hostName : '' ,
19+ start : '' ,
20+ end : '' ,
21+ timeToStart : '' ,
22+ timeToEnd : '' ,
23+ invitees : [ ]
24+ } )
25+ const respond = async ( ) => {
26+ try {
27+ const { data } = await respondToEventInvitation ( {
28+ variables : {
29+ eventId : params . get ( 'eventId' ) ,
30+ inviteeResponse : params . get ( 'response' ) ,
31+ authToken : localStorage . getItem ( 'auth_token' ) ,
32+ } ,
33+ } )
34+ setEvent ( {
35+ title : data . respondToEventInvitation . title ,
36+ hostName : data . respondToEventInvitation . hostName ,
37+ start : data . respondToEventInvitation . start ,
38+ end : data . respondToEventInvitation . end ,
39+ timeToStart : data . respondToEventInvitation . timeToStart ,
40+ timeToEnd : data . respondToEventInvitation . timeToEnd ,
41+ invitees : data . respondToEventInvitation . invitees
42+ } )
43+ toast . success ( "Successfully responded to invitation" )
44+ } catch ( err : any ) {
45+ toast . error ( err . message )
46+ }
47+ }
48+ useEffect ( ( ) => {
49+ respond ( )
50+ } , [ ] )
51+ return (
52+ < div className = "flex items-center justify-center" >
53+ < div className = "bg-indigo-100 dark:bg-dark-bg w-full sm:w-3/4 md:w-1/2 xl:w-4/12 rounded-lg p-4 pb-8 my-2" >
54+ < div className = "card-title w-full flex flex-wrap justify-center items-center " >
55+ < h3 className = "font-bold text-sm dark:text-white text-center w-11/12" >
56+ { t ( 'Event Response' ) }
57+ </ h3 >
58+ < hr className = " bg-primary border-gray-300 my-3 w-full" />
59+ </ div >
60+ < div className = "my-6" >
61+ < ul className = "" >
62+ < li className = "text-sm dark:text-white w-11/12 mb-2" >
63+ < span className = "font-bold" > Title:</ span > { event . title }
64+ </ li >
65+ < li className = "text-sm dark:text-white w-11/12 mb-2" >
66+ < span className = "font-bold" > Hostname:</ span > { event . hostName }
67+ </ li >
68+ < li className = "text-sm dark:text-white w-11/12 mb-2" >
69+ < span className = "font-bold" > When:</ span > { moment ( event . start ) . format ( "YYYY-MM-DD" ) } to { moment ( event . end ) . format ( "YYYY-MM-DD" ) }
70+ </ li >
71+ < li className = "text-sm dark:text-white w-11/12 mb-2" >
72+ < span className = "font-bold" > Time:</ span > { event . timeToStart } to { event . timeToEnd }
73+ </ li >
74+ < li className = "text-sm dark:text-white flex gap-x-2 w-11/12 mb-2" >
75+ < span className = "font-bold" > Guests:</ span >
76+ < ul >
77+ { event . invitees ?. map ( ( invitee : any ) => (
78+ < li key = { invitee . email } > { invitee . email } { invitee . status } </ li >
79+ ) ) }
80+ </ ul >
81+ </ li >
82+ </ ul >
83+ </ div >
84+ < Link to = "/calendar" className = "text-white py-2 px-4 w-1/2 md:w-1/3 bg-primary rounded" > Go to calendar</ Link >
85+ </ div >
86+ </ div >
87+
88+ )
89+ }
90+
91+ export default CalendarConfirmation
0 commit comments