wix-style-react
Version:
102 lines (87 loc) • 2.69 kB
JavaScript
import React from 'react';
import { SidePanelContext } from '../SidePanelAPI';
import PropTypes from 'prop-types';
import { st, classes } from './Header.st.css';
import { dataHooks } from '../constants';
import Heading from '../../Heading';
import Divider from '../../Divider';
import CloseButton from '../../CloseButton';
import Box from '../../Box';
import InfoIcon from '../../InfoIcon';
import { TooltipCommonProps } from '../../common/PropTypes/TooltipCommon';
class Header extends React.PureComponent {
static displayName = 'SidePanel.Header';
static propTypes = {
/** Define styles through a classname */
className: PropTypes.string,
/** Title */
title: PropTypes.node,
/** Tooltip content */
infoTooltipContent: PropTypes.node,
/** Tooltip props */
infoTooltipProps: PropTypes.shape(TooltipCommonProps),
/** Show divider */
showDivider: PropTypes.bool,
/** Any element to be rendered inside under title */
children: PropTypes.node,
};
static defaultProps = {
showDivider: true,
};
renderStringTitle() {
const { title, infoTooltipContent, infoTooltipProps } = this.props;
return (
<Box>
<Heading appearance="H4" dataHook={dataHooks.sidePanelHeaderTitle}>
{title}
</Heading>
{infoTooltipContent && (
<Box marginLeft="tiny">
<InfoIcon
dataHook={dataHooks.sidePanelHeaderTitleInfoIcon}
content={infoTooltipContent}
tooltipProps={infoTooltipProps}
/>
</Box>
)}
</Box>
);
}
renderTitle(onCloseButtonClick) {
const { title } = this.props;
const isStringTitle = typeof title === 'string';
return (
<div className={classes.titleContainer}>
<div className={classes.title}>
{isStringTitle ? this.renderStringTitle() : title}
</div>
<CloseButton
dataHook={dataHooks.sidePanelHeaderCloseButton}
className={classes.closeButton}
size="large"
onClick={onCloseButtonClick}
/>
</div>
);
}
render() {
const { children, showDivider, className } = this.props;
return (
<SidePanelContext.Consumer>
{context => (
<div
className={st(classes.root, className)}
data-hook={dataHooks.sidePanelHeader}
>
{this.renderTitle(context.onCloseButtonClick)}
{children}
{showDivider && (
<Divider dataHook={dataHooks.sidePanelHeaderDivider} />
)}
</div>
)}
</SidePanelContext.Consumer>
);
}
}
export default Header;