@@ -3,11 +3,18 @@ import { Statistic, Row, Col, Table, message } from 'antd';
33import { ExportToCsv } from "export-to-csv" ;
44import { IUser , IEvent , IYearEvent } from "./interfaces" ;
55import { 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" ;
811
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 ;
1118
1219 const [ event , setEvent ] = useState < IEvent > ( ) ;
1320 const [ attendees , setAttendees ] = useState < IUser [ ] > ( ) ;
@@ -18,9 +25,6 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
1825
1926 const [ QRVisible , setQRVisible ] = useState ( false ) ;
2027
21- const [ attendeeEmails , setAttendeeEmails ] = useState < string [ ] > ( ) ;
22- const [ interestEmails , setInterestEmails ] = useState < string [ ] > ( ) ;
23-
2428 const [ qrKey , setQrKey ] = useState < string > ( ) ;
2529
2630 const csvOptions = {
@@ -33,88 +37,72 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
3337 title : 'Emails' ,
3438 useTextFile : false ,
3539 useBom : true ,
36- // useKeysAsHeaders: true,
40+ useKeysAsHeaders : true ,
3741 headers : [ 'Emails' ]
38- // headers: ['Column 1', 'Column 2', etc...] <-- Won't work with useKeysAsHeaders present!
3942 } ;
4043
4144 const {
4245 loading : eventLoading ,
4346 error : eventError ,
4447 data : eventData ,
45- } : any = useEventsWithKeyQuery ( { pollInterval : 500 , variables : { urlKey : eventUrlKey } } ) ;
48+ } : EventsWithKeyQueryHookResult = useEventsWithKeyQuery ( { pollInterval : 500 , variables : { urlKey : eventUrlKey } } ) ;
4649
4750 const {
4851 loading : yearEventsLoading ,
4952 error : yearEventsError ,
5053 data : yearEventsData ,
51- } : any = useYearEventsQuery ( { pollInterval : 500 } ) ;
54+ } : YearEventsQueryHookResult = useYearEventsQuery ( { pollInterval : 500 } ) ;
5255
5356 useEffect ( ( ) => {
5457 if ( eventLoading )
5558 message . info ( "Event data loading..." ) ;
5659 else if ( eventError )
5760 message . info ( "An error occured loading event data." ) ;
5861 else if ( eventData ) {
59- setEvent ( ( eventData . eventsWithKey ) [ 0 ] ) ;
60- //message.success("Event data loading complete!");
62+ setEvent ( ( eventData . eventsWithKey ) [ 0 ] as IEvent ) ;
6163 }
6264 } , [ eventData , eventError , eventLoading ] ) ;
6365
6466 useEffect ( ( ) => {
65- if ( yearEventsLoading ) {
66- //message.info("Year event data loading...");
67- }
68- else if ( yearEventsError ) {
67+ if ( yearEventsError ) {
6968 message . info ( "An error occured loading year event data." ) ;
7069 }
7170 else if ( yearEventsData ) {
72- setYearEvents ( yearEventsData . yearEvents ) ;
73- //message.success("Event data loading complete!");
71+ setYearEvents ( yearEventsData . yearEvents as IYearEvent [ ] ) ;
7472 }
7573 } , [ yearEventsData , yearEventsError , yearEventsLoading ] ) ;
7674
7775 useEffect ( ( ) => {
78- if ( event != undefined ) {
76+ if ( event !== undefined ) {
7977 setAttendees ( event . attendees ) ;
8078 setUsersInterested ( event . usersInterested ) ;
8179 }
8280 } , [ event ] ) ;
8381
8482 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 ) {
9684 setYearEvents ( yearEvents . sort ( ( a , b ) => ( a . numAttendees > b . numAttendees ) ? - 1 : ( ( b . numAttendees > a . numAttendees ) ? 1 : 0 ) ) ) ;
9785 setAttendancePlace ( yearEvents . map ( function ( e ) { return e . urlKey } ) . indexOf ( eventUrlKey ) + 1 ) ;
9886 }
9987 } , [ yearEvents ] ) ;
10088
101- if ( eventUrlKey == null )
89+ if ( eventUrlKey === null || ! event )
10290 return < p > This event does not exist.</ p >
10391
10492 const get_ratio : Function = ( ) => {
105- if ( usersInterested != undefined && attendees != undefined && attendees . length != 0 )
93+ if ( usersInterested !== undefined && attendees !== undefined && attendees . length != = 0 )
10694 return ( usersInterested . length / attendees . length ) * 100
107- return null
95+ return "N/A"
10896 } ;
10997
11098 const ordinal_suffix : Function = ( num : number ) => {
11199 let j = num % 10 ,
112100 k = num % 100 ;
113- if ( j == 1 && k != 11 )
101+ if ( j === 1 && k != = 11 )
114102 return "st" ;
115- if ( j == 2 && k != 12 )
103+ if ( j === 2 && k != = 12 )
116104 return "nd" ;
117- if ( j == 3 && k != 13 )
105+ if ( j === 3 && k != = 13 )
118106 return "rd" ;
119107
120108 return "th" ;
@@ -136,9 +124,9 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
136124 ] ;
137125
138126 const handleQR : Function = ( choice : number ) => {
139- if ( choice == 0 )
127+ if ( choice === 0 )
140128 setQrKey ( "e/" + eventUrlKey ) ;
141- else if ( choice == 1 )
129+ else if ( choice === 1 )
142130 setQrKey ( "i/" + eventUrlKey ) ;
143131
144132 setQRVisible ( true ) ;
@@ -148,14 +136,16 @@ const EventData: React.FC<{match: any}> = ({match}: any) => {
148136 csvOptions . filename = "interest_emails" ;
149137 csvOptions . title = "Interested Users" ;
150138 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 ) ;
152141 } ;
153142
154143 const downloadAttendeeCSV : ( ) => void = ( ) : void => {
155144 csvOptions . filename = "attendee_emails" ;
156145 csvOptions . title = "Attendees" ;
157146 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 ) ;
159149 } ;
160150
161151 return (
0 commit comments