blob: 05b1adb5df4d7aa4733eaa6a9e1f86d9cd0739c0 [file] [log] [blame]
import React from 'react';
import { autobind } from 'core-decorators';
import classnames from 'classnames';
import { getLink } from '../../../utils';
export default class Item extends React.Component {
constructor(props) {
super(props);
const { item } = props;
const hasChildren = item.children && item.children.length;
let opened = props.item.opened;
if (hasChildren) {
if (opened === undefined) {
// 未配置展开,则是否展开由是否选中决定
opened = item.children.find(child => `${window.rootPath}${child.link}` === window.location.pathname);
}
} else {
opened = false;
}
this.state = {
opened,
};
}
@autobind
onItemClick(e) {
this.props.toggleMenuBody();
e.stopPropagation();
}
@autobind
toggle() {
this.setState({
opened: !this.state.opened,
});
}
@autobind
renderSubMenu(data) {
return (
<ul>
{
data.map((item, index) => (
<li
className={classnames({
'menu-item': true,
'menu-item-level-3': true,
'menu-item-selected': getLink(item.link) === window.location.pathname,
})}
key={index}
onClick={this.onItemClick}
>
<a href={getLink(item.link)} target={item.target || '_self'}>{item.title}</a>
</li>
))
}
</ul>
);
}
render() {
const { item } = this.props;
const hasChildren = item.children && item.children.length;
const { opened } = this.state;
const cls = classnames({
'menu-item': true,
'menu-item-level-2': true,
'menu-item-selected': `${window.rootPath}${item.link}` === window.location.pathname,
});
const style = {
height: opened ? 36 * (item.children.length + 1) : 36,
overflow: 'hidden',
};
if (hasChildren) {
return (
<li style={style} className={cls} onClick={this.toggle}>
{
<span>
{item.title}
<img style={{ transform: `rotate(${opened ? 0 : -90}deg)` }} className="menu-toggle" src={`${window.rootPath}/img/arrow_down.png`} />
</span>
}
{this.renderSubMenu(item.children)}
</li>
);
}
return (
<li style={style} className={cls} onClick={this.onItemClick}>
<a href={getLink(item.link)} target={item.target || '_self'}>{item.title}</a>
</li>
);
}
}