@@ -58,7 +58,8 @@ export default function PopularEvents() {
5858 const [ timeFilter , setTimeFilter ] = useState ( 'All day' ) ;
5959 const [ typeFilter , setTypeFilter ] = useState ( 'All' ) ;
6060
61- const calculatePercentage = ( attended , enrolled ) => Math . round ( ( attended / enrolled ) * 100 ) ;
61+ const calculatePercentage = ( attended , enrolled ) =>
62+ enrolled === 0 ? 0 : Math . round ( ( attended / enrolled ) * 100 ) ;
6263
6364 const getBarColor = percentage => {
6465 if ( percentage > 60 ) return 'green' ;
@@ -72,39 +73,37 @@ export default function PopularEvents() {
7273 return timeMatch && typeMatch ;
7374 } ) ;
7475
75- const mostPopularEvent = filteredData . reduce (
76- ( max , event ) =>
77- calculatePercentage ( event . attended , event . enrolled ) >
78- calculatePercentage ( max . attended , max . enrolled )
79- ? event
80- : max ,
81- filteredData [ 0 ] || { } ,
82- ) ;
76+ const mostPopularEvent =
77+ filteredData . length > 0
78+ ? filteredData . reduce (
79+ ( max , event ) =>
80+ calculatePercentage ( event . attended , event . enrolled ) >
81+ calculatePercentage ( max . attended , max . enrolled )
82+ ? event
83+ : max ,
84+ filteredData [ 0 ] ,
85+ )
86+ : null ;
8387
84- const leastPopularEvent = filteredData . reduce (
85- ( min , event ) =>
86- calculatePercentage ( event . attended , event . enrolled ) <
87- calculatePercentage ( min . attended , min . enrolled )
88- ? event
89- : min ,
90- filteredData [ 0 ] || { } ,
91- ) ;
88+ const leastPopularEvent =
89+ filteredData . length > 0
90+ ? filteredData . reduce (
91+ ( min , event ) =>
92+ calculatePercentage ( event . attended , event . enrolled ) <
93+ calculatePercentage ( min . attended , min . enrolled )
94+ ? event
95+ : min ,
96+ filteredData [ 0 ] ,
97+ )
98+ : null ;
9299 const darkMode = useSelector ( state => state . theme . darkMode ) ;
93100 return (
94- < div
95- className = { `${ styles . popularEventsContainer } ${
96- darkMode ? styles . popularEventsContainerDark : ''
97- } `}
98- >
99- < div className = { `${ styles . headerContainer } ${ darkMode ? styles . headerContainerDark : '' } ` } >
100- < h2
101- className = { `${ styles . popularEventsHeader } ${
102- darkMode ? styles . popularEventsHeaderDark : ''
103- } `}
104- >
101+ < div className = { darkMode ? styles . popularEventsContainerDark : styles . popularEventsContainer } >
102+ < div className = { darkMode ? styles . headerContainerDark : styles . headerContainer } >
103+ < h2 className = { darkMode ? styles . popularEventsHeaderDark : styles . popularEventsHeader } >
105104 Most Popular Event
106105 </ h2 >
107- < div className = { ` ${ styles . filters } ${ darkMode ? styles . filtersDark : '' } ` } >
106+ < div className = { darkMode ? styles . filtersDark : styles . filters } >
108107 < select value = { timeFilter } onChange = { e => setTimeFilter ( e . target . value ) } >
109108 < option value = "All day" > All day</ option >
110109 < option value = "Morning" > Morning</ option >
@@ -118,60 +117,58 @@ export default function PopularEvents() {
118117 </ select >
119118 </ div >
120119 </ div >
121- < div className = { `${ styles . stats } ${ darkMode ? styles . statsDark : '' } ` } >
122- { filteredData . map ( event => (
123- < div key = { event . id } className = { styles . statItem } >
124- < div className = { `${ styles . statLabel } ${ darkMode ? styles . statLabelDark : '' } ` } >
125- { event . type }
126- </ div >
127- < div className = { styles . statBar } >
128- < div
129- className = { `${ styles . bar } ${
130- styles [ getBarColor ( calculatePercentage ( event . attended , event . enrolled ) ) ]
131- } `}
132- style = { { width : `${ calculatePercentage ( event . attended , event . enrolled ) } %` } }
133- />
134- </ div >
135- < div className = { `${ styles . statValue } ${ darkMode ? styles . statValueDark : '' } ` } >
136- { `${ calculatePercentage ( event . attended , event . enrolled ) } % (${ event . attended } /${
137- event . enrolled
138- } )`}
120+
121+ < div className = { darkMode ? styles . statsDark : styles . stats } >
122+ { filteredData . map ( event => {
123+ const percentage = calculatePercentage ( event . attended , event . enrolled ) ;
124+ return (
125+ < div key = { event . id } className = { styles . statItem } >
126+ < div className = { darkMode ? styles . statLabelDark : styles . statLabel } > { event . type } </ div >
127+ < div className = { styles . statBar } >
128+ < div
129+ className = { `${ styles . bar } ${ styles [ getBarColor ( percentage ) ] } ` }
130+ style = { { width : `${ percentage } %` } }
131+ />
132+ </ div >
133+ < div className = { darkMode ? styles . statValueDark : styles . statValue } >
134+ { `${ percentage } % (${ event . attended } /${ event . enrolled } )` }
135+ </ div >
139136 </ div >
140- </ div >
141- ) ) }
137+ ) ;
138+ } ) }
142139 </ div >
143140 < div className = { styles . eventSummary } >
144- < div className = { ` ${ styles . summaryItem } ${ darkMode ? styles . summaryItemDark : '' } ` } >
145- < div className = { ` ${ styles . summaryTitle } ${ darkMode ? styles . summaryTitleDark : '' } ` } >
141+ < div className = { darkMode ? styles . summaryItemDark : styles . summaryItem } >
142+ < div className = { darkMode ? styles . summaryTitleDark : styles . summaryTitle } >
146143 Total Number of Events
147144 </ div >
148- < div className = { ` ${ styles . summaryValue } ${ darkMode ? styles . summaryValueDark : '' } ` } >
145+ < div className = { darkMode ? styles . summaryValueDark : styles . summaryValue } >
149146 { filteredData . length }
150147 </ div >
151148 </ div >
152- < div className = { ` ${ styles . summaryItem } ${ darkMode ? styles . summaryItemDark : '' } ` } >
153- < div className = { ` ${ styles . summaryTitle } ${ darkMode ? styles . summaryTitleDark : '' } ` } >
149+ < div className = { darkMode ? styles . summaryItemDark : styles . summaryItem } >
150+ < div className = { darkMode ? styles . summaryTitleDark : styles . summaryTitle } >
154151 Total Number of Event Enrollments
155152 </ div >
156- < div className = { ` ${ styles . summaryValue } ${ darkMode ? styles . summaryValueDark : '' } ` } >
153+ < div className = { darkMode ? styles . summaryValueDark : styles . summaryValue } >
157154 { filteredData . reduce ( ( acc , event ) => acc + event . enrolled , 0 ) }
158155 </ div >
159156 </ div >
160157 { filteredData . length > 0 && (
161158 < >
162- < div className = { ` ${ styles . summaryItem } ${ darkMode ? styles . summaryItemDark : '' } ` } >
163- < div className = { ` ${ styles . summaryTitle } ${ darkMode ? styles . summaryTitleDark : '' } ` } >
159+ < div className = { darkMode ? styles . summaryItemDark : styles . summaryItem } >
160+ < div className = { darkMode ? styles . summaryTitleDark : styles . summaryTitle } >
164161 Most Popular Event
165162 </ div >
166- < div className = { ` ${ styles . summaryValue } ${ darkMode ? styles . summaryValueDark : '' } ` } >
163+ < div className = { darkMode ? styles . summaryValueDark : styles . summaryValue } >
167164 { mostPopularEvent . type || 'N/A' }
168165 </ div >
169166 </ div >
170- < div className = { ` ${ styles . summaryItem } ${ darkMode ? styles . summaryItemDark : '' } ` } >
171- < div className = { ` ${ styles . summaryTitle } ${ darkMode ? styles . summaryTitleDark : '' } ` } >
167+ < div className = { darkMode ? styles . summaryItemDark : styles . summaryItem } >
168+ < div className = { darkMode ? styles . summaryTitleDark : styles . summaryTitle } >
172169 Least Popular Event
173170 </ div >
174- < div className = { ` ${ styles . summaryValue } ${ darkMode ? styles . summaryValueDark : '' } ` } >
171+ < div className = { darkMode ? styles . summaryValueDark : styles . summaryValue } >
175172 { leastPopularEvent . type || 'N/A' }
176173 </ div >
177174 </ div >
0 commit comments