import React,{PropTypes} from 'react';
import Component from '../utils/Component';
import classnames from 'classnames';
import {setPhoenixPrefix} from '../utils/Tool';
import Icon from '../Icon';
/**
* 菜单导航列表项组件<br/>
* - 可通过phIcon设置菜单项名称前符号的类型,具体可以参考[gfs-icons](https://future-team.github.io/gfs-icons/index.html)。
* - 可通过href设置菜单项的跳转地址,可不设置,自定义回调函数onMenuitemChange。
* - 可通过name设置菜单项的唯一标识,对应MenuList的activeName。
* - 通过onMenuitemChange设置点击菜单项时的回调。
*
* 主要属性和接口:
* - phIcon:菜单项名称前符号的类型,不设置时默认没有符号。
* - href:菜单项的跳转地址,默认null。
* - name:菜单项的唯一标识。
* - onMenuitemChange:点击菜单项时的回调。<br/>
* 如:
* ```code
* <Menu>
* <Menu.Header>
* 标题一
* </Menu.Header>
* <Menu.Body>
* <Menu.Nav>
* <Menu.List activeName={this.state.activeName} onMenulistChange={(name)=>{this.setState({activeName:name})}}>
* <Menu.Item name="home" href="#index" phIcon="home" onMenuitemChange={(name)=>{console.log(name);}}>首页</Menu.Item>
* </Menu.List>
* </Menu.Nav>
* </Menu.Body>
* </Menu>
* ```
*
* @class MenuItem
* @module 菜单组件
* @extends Component
* @constructor
* @since 1.4.0
* @demo menu|menu.js {展示}
* @show true
* */
export default class MenuItem extends Component {
constructor(props, context){
super(props, context);
}
static propTypes = {
/**
* 样式前缀
* @property classPrefix
* @type String
* @default 'menu-item'
* */
classPrefix: PropTypes.string,
/**
* icon符号类型
* @property phIcon
* @type string
* @default ''
**/
phIcon:PropTypes.string,
/**
* 跳转地址
* @property href
* @type string
* @default ''
**/
href:PropTypes.string,
/**
* 当前项目的唯一标志
* @property name
* @type String
* @default null
* */
name: PropTypes.string,
/**
* 点击事件的回调函数
* @method onMenuitemChange
* @type Function
* @default null
* */
onMenuitemChange: PropTypes.func
};
static defaultProps = {
name: null,
href: 'javascript:;',
classPrefix:'menu-item',
classMapping : {}
};
isActive(){
let {name, activeName} = this.props;
return name === activeName ? 'active':'';
}
onMenuitemChange(){
this.props.changeActive(this.props.name);
if(this.props.onMenuitemChange) this.props.onMenuitemChange(this.props.name);
}
renderIcon(){
let {phIcon} = this.props;
if(phIcon){
return <Icon phIcon={phIcon} />;
}else{
return '';
}
}
render(){
let {className, href, children} = this.props;
return (
<li {...this.props} className={classnames(
this.getProperty(true),
this.isActive(),
className
)}
>
<a href={href} onClick={::this.onMenuitemChange}>
{this.renderIcon()}
{children}
</a>
</li>
);
}
};