design-comuni-plone-theme
Version:
Volto Theme for Italia design guidelines
104 lines (94 loc) • 2.95 kB
JSX
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;