react-tabs
Version:
An accessible and easy tab component for ReactJS
57 lines (50 loc) • 1.22 kB
JavaScript
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import cx from 'classnames';
const DEFAULT_CLASS = 'react-tabs__tab-panel';
export default class TabPanel extends Component {
static defaultProps = {
className: DEFAULT_CLASS,
forceRender: false,
selectedClassName: `${DEFAULT_CLASS}--selected`,
};
static propTypes = {
children: PropTypes.node,
className: PropTypes.oneOfType([
PropTypes.string,
PropTypes.array,
PropTypes.object,
]),
forceRender: PropTypes.bool,
id: PropTypes.string, // private
selected: PropTypes.bool, // private
selectedClassName: PropTypes.string,
tabId: PropTypes.string, // private
};
render() {
const {
children,
className,
forceRender,
id,
selected,
selectedClassName,
tabId,
...attributes
} = this.props;
return (
<div
{...attributes}
className={cx(className, {
[selectedClassName]: selected,
})}
role="tabpanel"
id={id}
aria-labelledby={tabId}
>
{forceRender || selected ? children : null}
</div>
);
}
}
TabPanel.tabsRole = 'TabPanel';