@@ -3,11 +3,18 @@ import { Statistic, Row, Col, Table, message } from 'antd';
3
3
import { ExportToCsv } from "export-to-csv" ;
4
4
import { IUser , IEvent , IYearEvent } from "./interfaces" ;
5
5
import { QRModal } from "./QRModal"
6
- import { useEventsWithKeyQuery ,
7
- useYearEventsQuery } from "../../generated/graphql" ;
6
+ import { EventsWithKeyQueryHookResult ,
7
+ useEventsWithKeyQuery ,
8
+ useYearEventsQuery ,
9
+ YearEventsQueryHookResult } from "../../generated/graphql" ;
10
+ import { RouteComponentProps } from "react-router-dom" ;
8
11
9
- const EventData : React . FC < { match : any } > = ( { match} : any ) => {
10
- const eventUrlKey : string = match . params . eventId ;
12
+ interface IMatchParams {
13
+ eventId : string ;
14
+ }
15
+
16
+ const EventData : React . FC < RouteComponentProps < IMatchParams > > = ( props ) => {
17
+ const eventUrlKey : string = props . match . params . eventId ;
11
18
12
19
const [ event , setEvent ] = useState < IEvent > ( ) ;
13
20
const [ attendees , setAttendees ] = useState < IUser [ ] > ( ) ;
@@ -18,9 +25,6 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
18
25
19
26
const [ QRVisible , setQRVisible ] = useState ( false ) ;
20
27
21
- const [ attendeeEmails , setAttendeeEmails ] = useState < string [ ] > ( ) ;
22
- const [ interestEmails , setInterestEmails ] = useState < string [ ] > ( ) ;
23
-
24
28
const [ qrKey , setQrKey ] = useState < string > ( ) ;
25
29
26
30
const csvOptions = {
@@ -33,88 +37,72 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
33
37
title : 'Emails' ,
34
38
useTextFile : false ,
35
39
useBom : true ,
36
- // useKeysAsHeaders: true,
40
+ useKeysAsHeaders : true ,
37
41
headers : [ 'Emails' ]
38
- // headers: ['Column 1', 'Column 2', etc...] <-- Won't work with useKeysAsHeaders present!
39
42
} ;
40
43
41
44
const {
42
45
loading : eventLoading ,
43
46
error : eventError ,
44
47
data : eventData ,
45
- } : any = useEventsWithKeyQuery ( { pollInterval : 500 , variables : { urlKey : eventUrlKey } } ) ;
48
+ } : EventsWithKeyQueryHookResult = useEventsWithKeyQuery ( { pollInterval : 500 , variables : { urlKey : eventUrlKey } } ) ;
46
49
47
50
const {
48
51
loading : yearEventsLoading ,
49
52
error : yearEventsError ,
50
53
data : yearEventsData ,
51
- } : any = useYearEventsQuery ( { pollInterval : 500 } ) ;
54
+ } : YearEventsQueryHookResult = useYearEventsQuery ( { pollInterval : 500 } ) ;
52
55
53
56
useEffect ( ( ) => {
54
57
if ( eventLoading )
55
58
message . info ( "Event data loading..." ) ;
56
59
else if ( eventError )
57
60
message . info ( "An error occured loading event data." ) ;
58
61
else if ( eventData ) {
59
- setEvent ( ( eventData . eventsWithKey ) [ 0 ] ) ;
60
- //message.success("Event data loading complete!");
62
+ setEvent ( ( eventData . eventsWithKey ) [ 0 ] as IEvent ) ;
61
63
}
62
64
} , [ eventData , eventError , eventLoading ] ) ;
63
65
64
66
useEffect ( ( ) => {
65
- if ( yearEventsLoading ) {
66
- //message.info("Year event data loading...");
67
- }
68
- else if ( yearEventsError ) {
67
+ if ( yearEventsError ) {
69
68
message . info ( "An error occured loading year event data." ) ;
70
69
}
71
70
else if ( yearEventsData ) {
72
- setYearEvents ( yearEventsData . yearEvents ) ;
73
- //message.success("Event data loading complete!");
71
+ setYearEvents ( yearEventsData . yearEvents as IYearEvent [ ] ) ;
74
72
}
75
73
} , [ yearEventsData , yearEventsError , yearEventsLoading ] ) ;
76
74
77
75
useEffect ( ( ) => {
78
- if ( event != undefined ) {
76
+ if ( event !== undefined ) {
79
77
setAttendees ( event . attendees ) ;
80
78
setUsersInterested ( event . usersInterested ) ;
81
79
}
82
80
} , [ event ] ) ;
83
81
84
82
useEffect ( ( ) => {
85
- if ( usersInterested != undefined )
86
- setInterestEmails ( usersInterested ?. map ( usersInterested => usersInterested . email ) ) ;
87
- } , [ usersInterested ] ) ;
88
-
89
- useEffect ( ( ) => {
90
- if ( attendees != undefined )
91
- setAttendeeEmails ( attendees ?. map ( attendees => attendees . email ) ) ;
92
- } , [ attendees ] ) ;
93
-
94
- useEffect ( ( ) => {
95
- if ( yearEvents != undefined ) {
83
+ if ( yearEvents !== undefined ) {
96
84
setYearEvents ( yearEvents . sort ( ( a , b ) => ( a . numAttendees > b . numAttendees ) ? - 1 : ( ( b . numAttendees > a . numAttendees ) ? 1 : 0 ) ) ) ;
97
85
setAttendancePlace ( yearEvents . map ( function ( e ) { return e . urlKey } ) . indexOf ( eventUrlKey ) + 1 ) ;
98
86
}
99
87
} , [ yearEvents ] ) ;
100
88
101
- if ( eventUrlKey == null )
89
+ if ( eventUrlKey === null || ! event )
102
90
return < p > This event does not exist.</ p >
103
91
104
92
const get_ratio : Function = ( ) => {
105
- if ( usersInterested != undefined && attendees != undefined && attendees . length != 0 )
93
+ if ( usersInterested !== undefined && attendees !== undefined && attendees . length != = 0 )
106
94
return ( usersInterested . length / attendees . length ) * 100
107
- return null
95
+ return "N/A"
108
96
} ;
109
97
110
98
const ordinal_suffix : Function = ( num : number ) => {
111
99
let j = num % 10 ,
112
100
k = num % 100 ;
113
- if ( j == 1 && k != 11 )
101
+ if ( j === 1 && k != = 11 )
114
102
return "st" ;
115
- if ( j == 2 && k != 12 )
103
+ if ( j === 2 && k != = 12 )
116
104
return "nd" ;
117
- if ( j == 3 && k != 13 )
105
+ if ( j === 3 && k != = 13 )
118
106
return "rd" ;
119
107
120
108
return "th" ;
@@ -136,9 +124,9 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
136
124
] ;
137
125
138
126
const handleQR : Function = ( choice : number ) => {
139
- if ( choice == 0 )
127
+ if ( choice === 0 )
140
128
setQrKey ( "e/" + eventUrlKey ) ;
141
- else if ( choice == 1 )
129
+ else if ( choice === 1 )
142
130
setQrKey ( "i/" + eventUrlKey ) ;
143
131
144
132
setQRVisible ( true ) ;
@@ -148,14 +136,16 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
148
136
csvOptions . filename = "interest_emails" ;
149
137
csvOptions . title = "Interested Users" ;
150
138
const csvExporter = new ExportToCsv ( csvOptions ) ;
151
- csvExporter . generateCsv ( interestEmails ?. map ( interestEmails => ( { interestEmails } ) ) ) ;
139
+ const columns : any = usersInterested ?. map ( obj => ( { Email : obj . email , Name : obj . firstName + " " + obj . lastName } ) )
140
+ csvExporter . generateCsv ( columns ) ;
152
141
} ;
153
142
154
143
const downloadAttendeeCSV : ( ) => void = ( ) : void => {
155
144
csvOptions . filename = "attendee_emails" ;
156
145
csvOptions . title = "Attendees" ;
157
146
const csvExporter = new ExportToCsv ( csvOptions ) ;
158
- csvExporter . generateCsv ( attendeeEmails ?. map ( attendeeEmails => ( { attendeeEmails } ) ) ) ;
147
+ const columns : any = attendees ?. map ( obj => ( { Email : obj . email , Name : obj . firstName + " " + obj . lastName } ) )
148
+ csvExporter . generateCsv ( columns ) ;
159
149
} ;
160
150
161
151
return (
0 commit comments