@@ -13,16 +13,25 @@ function EventsList() {
1313export default EventsList ;
1414
1515function ListEvents ( ) {
16- const [ isCollapse , setCollapse ] = useState ( false ) ;
17- const [ index , setIndex ] = useState ( null ) ;
16+ const [ isCollapse , setCollapse ] = useState ( { } ) ;
1817
19- function handleClick ( id ) {
20- setCollapse ( ! isCollapse ) ;
21- setIndex ( id ) ;
18+ /**
19+ * @param {string } id
20+ * Store state as list of pair (id, collapseState)
21+ * The function stores individually collapsed state
22+ * for each event item whenever a click event happens
23+ */
24+ function handleCollapse ( id ) {
25+ setCollapse ( prevCollapsed => ( {
26+ ...prevCollapsed ,
27+ [ id ] : ! prevCollapsed [ id ] ,
28+ } ) ) ;
2229 console . log ( "Clicked" , isCollapse ) ;
2330 console . log ( id ) ;
2431 }
2532
33+ // Handle loading state
34+ // TODO: Modify effect to await fetch API
2635 const [ isLoading , setLoading ] = useState ( false ) ;
2736 useEffect ( ( ) => {
2837 setLoading ( true ) ;
@@ -37,7 +46,7 @@ function ListEvents() {
3746 key = { singleEvent . id }
3847 className = "event"
3948 type = "button"
40- onClick = { ( ) => handleClick ( singleEvent . id ) }
49+ onClick = { ( ) => handleCollapse ( singleEvent . id ) }
4150 >
4251 < div className = "event-date" >
4352 < p id = "month" > { singleEvent . month } </ p >
@@ -46,16 +55,14 @@ function ListEvents() {
4655 < div className = "event-info" >
4756 < h3 id = "title" > { singleEvent . title } </ h3 >
4857
49- { isCollapse &&
50- singleEvent . id === index &&
58+ { isCollapse [ singleEvent . id ] &&
5159 ( isLoading ? (
5260 < PacmanLoader
5361 cssOverride = { {
5462 margin : 10 ,
5563 } }
5664 size = { 30 }
5765 color = "orange"
58- loadding = { isLoading }
5966 />
6067 ) : (
6168 < div className = "event-expand" >
0 commit comments