import React from 'react';
import ReactDOM from 'react-dom';
import $ from 'jquery';
import ControlsMenuTab from './controls-menu-tab.jsx';
import PropTypes from 'prop-types';
class ControlsMenu extends React.Component {
constructor(props) {
super(props);
this.navHandler = this.navHandler.bind(this);
}
navHandler(e) {
const thisTab = e.currentTarget;
const allTabs = ReactDOM.findDOMNode(this).children[0].children;
if (thisTab.className.indexOf('active') === -1) {
thisTab.className = 'active';
for (let i = 0; i < allTabs.length; i++) {
if (allTabs[i] !== thisTab) {
allTabs[i].className = '';
}
}
this.props.children.forEach((child, i) => {
if (child.props.id === thisTab.firstElementChild.getAttribute('href').replace('#','')) {
document.getElementById(child.props.id).classList.add('active');
} else {
document.getElementById(child.props.id).classList.remove('active');
}
});
}
}
componentDidMount() {
for (let i = 0; i < this.props.children.length; i++) {
if (this.props.children[i].props.id === this.props.tabs[0].name) {
document.getElementById(this.props.children[i].props.id).classList.add('active');
}
}
}
render() {
const tabNames = this.props.tabs.map((tab, i) => {
const tabClass = i === 0 ? 'active' : '';
return (
<li key={tab.name} onClick={this.navHandler} className={tabClass}><a href={`#${tab.name}`} data-toggle="tab"><i className={`fa ${tab.icon}`} /></a></li>
);
});
return (
<aside className={`control-sidebar ${this.props.theme}`}>
<ul className="nav nav-tabs nav-justified control-sidebar-tabs">
{tabNames}
</ul>
<div className="tab-content">
{this.props.children}
</div>
</aside>
);
}
}
ControlsMenu.propTypes = {
theme: PropTypes.string,
tabs: PropTypes.array
};
ControlsMenu.defaultProps = {
theme: 'control-sidebar-dark',
tabs: []
};
export default ControlsMenu;
|