import React,{PropTypes} from 'react';
import ReactDOM,{findDOMNode} from 'react/lib/ReactDOM';
import Component from './utils/Component';
import classnames from 'classnames';
import {setPhoenixPrefix} from './utils/Tool';
/**
* 步骤组件<br/>
* - 通过list设置步骤过程名称数组,如["合作信息","公司信息","资质信息"],必需。
* - 可通过currentStep设置当前步骤,从0开始计算。
* - 可通过clickCallback设置点击步骤的回调,函数返回步骤名称和索引。
* - 可通过readOnly设置步骤是否只读不可点击,默认可点击。
*
* 主要属性和接口:
* - list:初始进度百分比, 默认0。 <br/>
* 如: `<Steps list={["合作信息","公司信息","资质信息"]} />`
* - currentStep:当前步骤,从0开始计算,默认0。 <br/>
* 如: `<Steps currentStep={1} list={["合作信息","公司信息","资质信息"]} />`
* - clickCallback:点击步骤的回调,函数返回步骤名称和索引。 <br/>
* 如: `<Steps clickCallback={(str,index)=>{console.log(index);}} list={["合作信息","公司信息","资质信息"]}/>`
* - readOnly:只读不可点击,默认false。<br/>
* 如: `<Steps readOnly list={["合作信息","公司信息","资质信息"]} />`
*
* @class Steps
* @module 操作类组件
* @extends Component
* @constructor
* @since 1.7.0
* @demo steps|steps.js {展示}
* @show true
* */
export default class Steps extends Component{
static propTypes = {
/**
* 样式前缀
* @property classPrefix
* @type String
* @default 'badge'
* */
classPrefix: PropTypes.string,
/**
* 是否为只读模式(只读模式不会触发点击回调),默认为false
* @property readOnly
* @type Boolean
* @default false
**/
readOnly: PropTypes.bool,
/**
* steps内容数组,把每一步的文案放入数组中作为list的值
* @property list
* @type Array
* @default []
**/
list: PropTypes.arrayOf(PropTypes.string),
/**
* 当前处于第几步,默认为0,也就是说所有的步骤都没有开始,如果到第一步的话将currentStep设置为1即可,注意currentStep不可以超过list数组长度
* @property currentStep
* @type Number
* @default 0
**/
currentStep: PropTypes.number,
/**
* 点击每一步的回调,function(str,index){} str为步骤名称,index为第几步(从1开始计数)
* @method clickCallback
* @type Function
* @default null
**/
clickCallback: PropTypes.func
};
static defaultProps = {
readOnly: false,
list: [],
currentStep: 0,
classPrefix:'steps',
classMapping : {}
};
constructor(props,context){
super(props,context);
this.state = {
currentStep: props.currentStep
}
}
componentWillReceiveProps(nextProps){
if(this.state.currentStep != nextProps.currentStep) this.setState({currentStep: nextProps.currentStep});
}
clickCallback(str, index, e){
let {readOnly, clickCallback} = this.props, thisElemnt = e.currentTarget;
if(readOnly) return;
this.setState({
currentStep: index
});
if(clickCallback) clickCallback(str,index);
}
renderSteps(){
let {list} = this.props;
let _this = this, listLen = list.length;
return (
<ul>
{
list.map((item, index)=>{
return (
<li key={index} className={classnames(setPhoenixPrefix('steps-list'), index==this.state.currentStep? 'active':index<this.state.currentStep? 'done':'')}
style={{left: index/(listLen-1)*100+'%' }}
onClick={_this.clickCallback.bind(_this,item,index)}
>
<span className={setPhoenixPrefix('steps-dot')}></span>
<p>{item}</p>
</li>
)
})
}
</ul>
);
}
render(){
return(
<div className={classnames(this.getProperty(true),this.props.className)}>
{this.renderSteps()}
</div>
)
}
}