UNPKG

design-comuni-plone-theme

Version:
104 lines (94 loc) 2.95 kB
import React from 'react'; import { defineMessages, useIntl } from 'react-intl'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { Collapse as CollapseBase } from 'reactstrap'; import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme'; const messages = defineMessages({ CloseMenu: { id: 'close-menu', defaultMessage: 'Chiudi menu', }, }); /** * Clone di https://github.com/italia/design-react-kit/blob/master/src/components/Collapse/Collapse.js * Ultimo commit sul file 74975bf (design-react-kit) * * Modifiche: * - close-div rivisitato */ const propTypes = { ...CollapseBase.propTypes, // eslint-disable-line react/forbid-foreign-prop-types /** Indica se il componente Collapse è usato all'interno di un componente Header */ header: PropTypes.bool, /** Indica se il menu HeaderNav sia aperto o meno. Usato unicamente nel caso della HeaderNav, ovvero con navbar e header entrambi true */ inOpen: PropTypes.bool, /** Funzione chiamata su click di overlay dell'HeaderNav aperto. Usato unicamente nel caso della HeaderNav, ovvero con navbar e header entrambi true */ onOverlayClick: PropTypes.func, }; const Collapse = ({ header, className, navbar, children, isOpen, onOverlayClick, showCloseButton = true, // deprecato da v12.0.0 ...attributes }) => { const intl = useIntl(); if (navbar && header) { const classes = classNames(className, 'navbar-collapse', { expanded: isOpen, }); return ( <CollapseBase className={classes} cssModule={{ 'navbar-collapse': 'navbar-collapsable' }} navbar={navbar} style={{ display: isOpen ? 'block' : 'none' }} {...attributes} > <div className="overlay" style={{ display: isOpen ? 'block' : 'none' }} onClick={onOverlayClick} onKeyDown={() => {}} ></div> {/* Deprecato - non viene più utilizzato da v12.0.0 per ragioni di accessibilità Close button ora presente in Navigation.jsx */} {showCloseButton && ( <div className="close-div"> <button className="btn close-menu" type="button" title={intl.formatMessage(messages.CloseMenu)} onClick={onOverlayClick} > <Icon color="white" icon="it-close-big" padding={false} /> </button> </div> )} {children} </CollapseBase> ); } const classes = classNames(className, { 'link-list-wrapper': header, }); return ( <CollapseBase className={classes} cssModule={{ 'navbar-collapse': 'navbar-collapsable' }} {...attributes} navbar={navbar} isOpen={isOpen} > {children} </CollapseBase> ); }; Collapse.propTypes = propTypes; Collapse.defaultProps = CollapseBase.defaultProps; export default Collapse;