UNPKG

1.47 kBJavaScriptView Raw
1import React from 'react';
2import PropTypes from 'prop-types';
3import classNames from 'classnames';
4import { mapToCssModules, tagPropType } from './utils';
5
6const propTypes = {
7 children: PropTypes.node,
8 /** Add custom class */
9 className: PropTypes.string,
10 /** Custom close button */
11 close: PropTypes.object,
12 closeAriaLabel: PropTypes.string,
13 /** Change underlying component's CSS base class name */
14 cssModule: PropTypes.object,
15 /** Set a custom element for this component */
16 tag: tagPropType,
17 /** Function to be triggered when close button is clicked */
18 toggle: PropTypes.func,
19 wrapTag: tagPropType,
20};
21
22function ModalHeader(props) {
23 let closeButton;
24 const {
25 className,
26 cssModule,
27 children,
28 toggle,
29 tag: Tag = 'h5',
30 wrapTag: WrapTag = 'div',
31 closeAriaLabel = 'Close',
32 close,
33 ...attributes
34 } = props;
35
36 const classes = mapToCssModules(
37 classNames(className, 'modal-header'),
38 cssModule,
39 );
40
41 if (!close && toggle) {
42 closeButton = (
43 <button
44 type="button"
45 onClick={toggle}
46 className={mapToCssModules('btn-close', cssModule)}
47 aria-label={closeAriaLabel}
48 />
49 );
50 }
51
52 return (
53 <WrapTag {...attributes} className={classes}>
54 <Tag className={mapToCssModules('modal-title', cssModule)}>
55 {children}
56 </Tag>
57 {close || closeButton}
58 </WrapTag>
59 );
60}
61
62ModalHeader.propTypes = propTypes;
63
64export default ModalHeader;