blob: feb0f813ea283ac00e21c7795b238a64b2a49599 [file] [log] [blame]
import React from 'react';
import classnames from 'classnames';
import Collapse from 'react-bootstrap/lib/Collapse.js';
class NavigationSideBar extends React.Component {
static PropTypes = {
activeItemId: React.PropTypes.string.isRequired,
onSelect: React.PropTypes.func,
onToggle: React.PropTypes.func,
groups: React.PropTypes.array
};
render() {
let {groups, activeItemId} = this.props;
return (
<div className='navigation-side-content'>
{groups.map(group => (
<div className='navigation-group' key={group.id}>
<div className='group-name'>{group.name}</div>
<div className='navigation-group-items'>
{
group.items && group.items.map(item => this.renderGroupItem(item, activeItemId))
}
</div>
</div>
))}
</div>
);
}
renderGroupItem(item, activeItemId) {
let isGroup = item.items && item.items.length > 0;
return (
<div className={classnames('navigation-group-item', {'selected-item': item.id === activeItemId})}>
<div
key={item.id}
className={classnames('navigation-group-item-name', {
'selected': item.id === activeItemId,
'disabled': item.disabled,
'bold-name': item.expanded,
'hidden': item.hidden
})}
onClick={(event) => this.handleItemClicked(event, item)}>
{item.name}
</div>
{isGroup &&
<Collapse in={item.expanded}>
<div>
{item.items.map(item => this.renderGroupItem(item, activeItemId))}
</div>
</Collapse>
}
</div>
);
}
handleItemClicked(event, item) {
event.stopPropagation();
if(this.props.onToggle) {
this.props.onToggle(this.props.groups, item.id);
}
if(item.onSelect) {
item.onSelect();
}
if(this.props.onSelect) {
this.props.onSelect(item);
}
}
}
export default NavigationSideBar;