1- import styles from './accordion .module.scss'
1+ import styles from './Accordion .module.scss'
22import Icon from '../Icon'
33import React , { useEffect } from 'react'
44import classNames from 'classnames'
@@ -7,27 +7,24 @@ const Accordion = props => {
77 const [ activeItems , setActiveItem ] = React . useState ( { } )
88 const [ firstRender , setFirstRender ] = React . useState ( true )
99
10- useEffect (
11- ( ) => {
12- if ( props . children . length && firstRender ) {
13- let items = { }
14- props . children . forEach ( child => {
15- items [ child . props . listName ] = child . props . active
16- } )
17- setActiveItem ( items )
18- setFirstRender ( false )
19- }
20- } ,
21- [ firstRender , props . children ]
22- )
10+ useEffect ( ( ) => {
11+ if ( props . children . length && firstRender ) {
12+ let items = { }
13+ props . children . forEach ( child => {
14+ items [ child . props . listName ] = child . props . active
15+ } )
16+ setActiveItem ( items )
17+ setFirstRender ( false )
18+ }
19+ } , [ firstRender , props . children ] )
2320
2421 const onClick = ( event , listName ) => {
2522 setActiveItem ( { ...activeItems , [ listName ] : ! activeItems [ listName ] } )
2623 event . preventDefault ( )
2724 }
2825
2926 return (
30- < div className = { classNames ( 'accordion' , styles . accordion ) } >
27+ < div className = { styles . accordion } >
3128 { props . children . map ( ( child , index ) => (
3229 < AccordionItem
3330 title = { child . props . title }
@@ -46,35 +43,23 @@ const Accordion = props => {
4643const AccordionItem = props => {
4744 const { title, active, onClick, listName } = props
4845
49- let classes = classNames (
50- styles . accordion_item ,
51- 'accordion_item' ,
52- active ? 'active' : ''
53- )
54-
5546 const arrowIcon = active ? 'caret-down' : 'back-left'
5647 return (
57- < div className = { classes } >
48+ < div
49+ className = { classNames ( styles . accordion_item , {
50+ [ styles . active ] : active
51+ } ) }
52+ >
5853 < div
5954 onClick = { event => {
6055 onClick ( event , listName )
6156 } }
62- className = { classNames (
63- 'accordion_item_header' ,
64- styles . accordion_item_header
65- ) }
66- >
67- < span className = "accordion_item_title" > { title } </ span >
68- < Icon variant = { arrowIcon } className = "accordion_item_status" />
69- </ div >
70- < div
71- className = { classNames (
72- 'accordion_item_body' ,
73- styles . accordion_item_body
74- ) }
57+ className = { styles . accordion_item_header }
7558 >
76- { props . children }
59+ < span className = { styles . accordion_item_title } > { title } </ span >
60+ < Icon variant = { arrowIcon } className = { styles . accordion_item_status } />
7761 </ div >
62+ < div className = { styles . accordion_item_body } > { props . children } </ div >
7863 </ div >
7964 )
8065}
0 commit comments