| 1 |
import { useContext } from 'react'; |
| 2 |
import { arrayToClassName, pxToRem } from 'elementor-app/utils/utils.js'; |
| 3 |
|
| 4 |
import { CollapseContext } from './collapse-context'; |
| 5 |
|
| 6 |
export default function CollapseToggle( props ) { |
| 7 |
const context = useContext( CollapseContext ), |
| 8 |
style = { '--e-app-collapse-toggle-icon-spacing': pxToRem( props.iconSpacing ) }, |
| 9 |
classNameBase = 'e-app-collapse-toggle', |
| 10 |
classes = [ classNameBase, { [ classNameBase + '--active' ]: props.active } ], |
| 11 |
attrs = { |
| 12 |
style, |
| 13 |
className: arrayToClassName( classes ), |
| 14 |
}; |
| 15 |
|
| 16 |
if ( props.active ) { |
| 17 |
attrs.onClick = () => context.toggle(); |
| 18 |
} |
| 19 |
|
| 20 |
return ( |
| 21 |
<div { ...attrs }> |
| 22 |
{ props.children } |
| 23 |
|
| 24 |
{ props.active && props.showIcon && <i className="eicon-caret-down e-app-collapse-toggle__icon" /> } |
| 25 |
</div> |
| 26 |
); |
| 27 |
} |
| 28 |
|
| 29 |
CollapseToggle.propTypes = { |
| 30 |
className: PropTypes.string, |
| 31 |
iconSpacing: PropTypes.number, |
| 32 |
showIcon: PropTypes.bool, |
| 33 |
active: PropTypes.bool, |
| 34 |
children: PropTypes.any, |
| 35 |
}; |
| 36 |
|
| 37 |
CollapseToggle.defaultProps = { |
| 38 |
className: '', |
| 39 |
iconSpacing: 20, |
| 40 |
showIcon: true, |
| 41 |
active: true, |
| 42 |
}; |
| 43 |
|