UNPKG

@bpanel/bpanel-ui

Version:

reusable React component library used in the bpanel GUI

230 lines (194 loc) 8.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _Text = require('../Text'); var _Text2 = _interopRequireDefault(_Text); var _utils = require('../../utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var defaultTabs = [{ header: 'Tab 1', body: _react2.default.createElement( 'div', null, 'Welcome to bPanel!' ) }, { header: 'Tab 2', body: _react2.default.createElement( 'div', null, 'Tab 2 content' ) }, { header: 'Tab 3', body: _react2.default.createElement( 'div', null, 'Tab 3 content' ) }]; var TabMenu = function (_PureComponent) { (0, _inherits3.default)(TabMenu, _PureComponent); function TabMenu(props) { (0, _classCallCheck3.default)(this, TabMenu); var _this = (0, _possibleConstructorReturn3.default)(this, (TabMenu.__proto__ || (0, _getPrototypeOf2.default)(TabMenu)).call(this, props)); _this.state = { selectedIndex: 0 }; return _this; } (0, _createClass3.default)(TabMenu, [{ key: 'onTabClick', value: function onTabClick(value) { this.setState({ selectedIndex: value }); this.props.onTabClick(value); } }, { key: 'renderHeader', value: function renderHeader(header, index) { var _this2 = this; return _react2.default.createElement( 'div', { onClick: function onClick() { return _this2.onTabClick(index); } }, _react2.default.createElement( _Text2.default, null, header ) ); } }, { key: 'render', value: function render() { var _this3 = this; var _props = this.props, orientation = _props.orientation, _props$className = _props.className, className = _props$className === undefined ? '' : _props$className, navColCount = _props.navColCount, tabColCount = _props.tabColCount, tabs = _props.tabs, _props$theme$tabMenu = _props.theme.tabMenu, headerContainer = _props$theme$tabMenu.headerContainer, headerText = _props$theme$tabMenu.headerText, headerTextActive = _props$theme$tabMenu.headerTextActive, headerTextInactive = _props$theme$tabMenu.headerTextInactive, bodyContainer = _props$theme$tabMenu.bodyContainer, bodyActive = _props$theme$tabMenu.bodyActive, bodyInactive = _props$theme$tabMenu.bodyInactive, verticalHeaderLink = _props$theme$tabMenu.verticalHeaderLink, _props$style$tabMenu = _props.style.tabMenu, _props$style$tabMenu$ = _props$style$tabMenu.customHeaderContainer, customHeaderContainer = _props$style$tabMenu$ === undefined ? {} : _props$style$tabMenu$, _props$style$tabMenu$2 = _props$style$tabMenu.customHeaderText, customHeaderText = _props$style$tabMenu$2 === undefined ? {} : _props$style$tabMenu$2, _props$style$tabMenu$3 = _props$style$tabMenu.customHeaderTextActive, customHeaderTextActive = _props$style$tabMenu$3 === undefined ? {} : _props$style$tabMenu$3, _props$style$tabMenu$4 = _props$style$tabMenu.customHeaderTextInactive, customHeaderTextInactive = _props$style$tabMenu$4 === undefined ? {} : _props$style$tabMenu$4, _props$style$tabMenu$5 = _props$style$tabMenu.customBodyContainer, customBodyContainer = _props$style$tabMenu$5 === undefined ? {} : _props$style$tabMenu$5, _props$style$tabMenu$6 = _props$style$tabMenu.customBodyActive, customBodyActive = _props$style$tabMenu$6 === undefined ? {} : _props$style$tabMenu$6, _props$style$tabMenu$7 = _props$style$tabMenu.customBodyInactive, customBodyInactive = _props$style$tabMenu$7 === undefined ? {} : _props$style$tabMenu$7, otherProps = (0, _objectWithoutProperties3.default)(_props, ['orientation', 'className', 'navColCount', 'tabColCount', 'tabs', 'theme', 'style']); var selectedIndex = this.state.selectedIndex; var containerClassNames = (orientation === 'vertical' ? 'd-flex flex-row mt-2' : '') + ' ' + className; var headerContainerClassNames = headerContainer + ' ' + (navColCount ? 'col-'.concat(navColCount) : '') + ' nav ' + (orientation === 'vertical' ? 'flex-column' : ''); return _react2.default.createElement( 'div', { className: containerClassNames }, _react2.default.createElement( 'div', { className: headerContainerClassNames, style: customHeaderContainer }, tabs.map(function (_ref, index) { var header = _ref.header; var selected = selectedIndex === index; var stateStyles = selected ? { className: headerTextActive, customStyles: customHeaderTextActive } : { className: headerTextInactive, customStyles: customHeaderTextInactive }; var headerClassNames = headerText + ' ' + stateStyles.className + ' nav-link ' + (orientation === 'vertical' ? verticalHeaderLink + ' nav flex-column' : ''); return _react2.default.createElement( 'div', { className: headerClassNames, key: header + '-header-' + index, style: stateStyles.customStyles }, _this3.renderHeader(header, index) ); }) ), _react2.default.createElement( 'div', { className: 'col' + (tabColCount ? '-' + tabColCount : '') + ' p-0' }, tabs.map(function (_ref2, index) { var body = _ref2.body, header = _ref2.header; var selected = selectedIndex === index; var stateStyles = selected ? { className: bodyActive, customStyles: customBodyActive } : { className: bodyInactive, customStyles: customBodyInactive }; return _react2.default.createElement( 'div', { className: bodyContainer + ' ' + stateStyles.className, key: header + '-body-' + index, style: stateStyles.customStyles }, body ); }) ) ); } }], [{ key: 'getDerivedStateFromProps', // allow for selectedIndex to be managed in parent component value: function getDerivedStateFromProps(props, state) { if (props.selectedIndex && props.selectedIndex !== state.selectedIndex) return { selectedIndex: props.selectedIndex }; return null; } }, { key: 'propTypes', get: function get() { return { tabs: _propTypes2.default.arrayOf(_propTypes2.default.object), selectedIndex: _propTypes2.default.number, orientation: _propTypes2.default.string, navColCount: _propTypes2.default.number, tabColCount: _propTypes2.default.number }; } }, { key: 'defaultProps', get: function get() { return { style: { tabMenu: {} }, tabs: defaultTabs, theme: { tabMenu: {} }, selectedIndex: null, onTabClick: function onTabClick() {}, orientation: 'horizontal' }; } }]); return TabMenu; }(_react.PureComponent); exports.default = (0, _utils.connectTheme)(TabMenu);