ant-design/components/progress/index.jsx

136 lines
3.5 KiB
React
Raw Normal View History

2015-06-14 12:55:44 +08:00
'use strict';
var Progressline = require('rc-progress').Line;
var Progresscircle = require('rc-progress').Circle;
var React = require('react');
var Line = React.createClass({
2015-06-14 19:50:23 +08:00
getDefaultProps: function () {
2015-06-14 12:55:44 +08:00
return {
2015-06-15 16:16:51 +08:00
width: 300,
2015-06-14 12:55:44 +08:00
percent: 0,
2015-06-15 16:16:51 +08:00
strokeWidth: 3,
2015-06-15 11:00:27 +08:00
status: 'normal' // exception
2015-06-15 11:48:30 +08:00
};
2015-06-14 12:55:44 +08:00
},
render() {
2015-06-14 19:50:23 +08:00
var statusColorMap = {
2015-06-15 11:00:27 +08:00
'normal': '#3FC7FA',
'exception': '#FE8C6A',
'success': '#85D262'
2015-06-14 19:50:23 +08:00
};
if (parseInt(this.props.percent) === 100) {
2015-06-15 11:48:30 +08:00
this.props.status = 'success';
2015-06-14 19:50:23 +08:00
}
2015-06-14 12:55:44 +08:00
var style = {
2015-06-15 11:00:27 +08:00
'width': this.props.width
2015-06-15 11:48:30 +08:00
};
2015-06-15 16:16:51 +08:00
var fontSize = (this.props.width / 100 * this.props.strokeWidth);
var iconStyle = {
'font-size': (fontSize < 14) ? 14 : fontSize
2015-06-15 11:48:30 +08:00
};
2015-06-14 19:50:23 +08:00
var textStyle = {
2015-06-15 11:00:27 +08:00
'color': statusColorMap[this.props.status]
2015-06-15 11:48:30 +08:00
};
var progressInfo;
2015-06-14 19:50:23 +08:00
if (this.props.status === 'exception') {
2015-06-14 12:55:44 +08:00
progressInfo = (
2015-06-15 11:00:27 +08:00
<span style={textStyle} className='ant-progress-line-text'>
2015-06-15 16:16:51 +08:00
<i style={iconStyle} className='anticon anticon-exclamation-round'></i>
2015-06-14 19:50:23 +08:00
</span>
2015-06-15 11:48:30 +08:00
);
2015-06-15 16:16:51 +08:00
2015-06-14 19:50:23 +08:00
} else if(this.props.status === 'success'){
progressInfo = (
2015-06-15 11:00:27 +08:00
<span style={textStyle} className='ant-progress-line-text'>
2015-06-15 16:16:51 +08:00
<i style={iconStyle} className='anticon anticon-check-round'></i>
2015-06-14 19:50:23 +08:00
</span>
2015-06-15 11:48:30 +08:00
);
2015-06-14 12:55:44 +08:00
}else {
progressInfo = (
2015-06-15 11:00:27 +08:00
<span className='ant-progress-line-text'>{this.props.percent}%</span>
2015-06-15 11:48:30 +08:00
);
2015-06-14 12:55:44 +08:00
}
return (
2015-06-15 16:16:51 +08:00
<div className='ant-progress-line-wrap' >
2015-06-15 11:00:27 +08:00
<div className='ant-progress-line-inner' style={style}>
2015-06-14 19:50:23 +08:00
<Progressline percent={this.props.percent} strokeWidth={this.props.strokeWidth}
2015-06-15 11:55:54 +08:00
strokeColor={statusColorMap[this.props.status]} trailColor="#e9e9e9" />
2015-06-14 19:50:23 +08:00
</div>
2015-06-14 12:55:44 +08:00
{progressInfo}
</div>
);
}
});
var Circle = React.createClass({
2015-06-14 19:50:23 +08:00
getDefaultProps: function () {
2015-06-14 12:55:44 +08:00
return {
2015-06-15 17:30:24 +08:00
width: 132,
2015-06-14 12:55:44 +08:00
percent: 0,
2015-06-15 17:30:24 +08:00
strokeWidth: 6,
2015-06-15 11:00:27 +08:00
status: 'normal' // exception
2015-06-15 11:48:30 +08:00
};
2015-06-14 12:55:44 +08:00
},
render() {
2015-06-14 20:07:21 +08:00
var statusColorMap = {
2015-06-15 11:00:27 +08:00
'normal': '#3FC7FA',
'exception': '#FE8C6A',
'success': '#85D262'
2015-06-14 20:07:21 +08:00
};
if (parseInt(this.props.percent) === 100) {
2015-06-15 11:48:30 +08:00
this.props.status = 'success';
2015-06-14 20:07:21 +08:00
}
2015-06-14 12:55:44 +08:00
var style = {
2015-06-15 11:00:27 +08:00
'width': this.props.width,
'height': this.props.width
2015-06-15 11:48:30 +08:00
};
2015-06-14 20:07:21 +08:00
var wrapStyle = {
2015-06-15 17:30:24 +08:00
'font-size': this.props.width * 0.16 + 6
2015-06-15 11:48:30 +08:00
};
2015-06-14 20:07:21 +08:00
var textStyle = {
2015-06-15 11:00:27 +08:00
'color': statusColorMap[this.props.status]
2015-06-15 11:48:30 +08:00
};
var progressInfo;
2015-06-14 20:07:21 +08:00
if (this.props.status === 'exception') {
2015-06-14 12:55:44 +08:00
progressInfo = (
2015-06-15 11:00:27 +08:00
<span style={textStyle} className='ant-progress-circle-text'>
<i className='anticon anticon-exclamation'></i>
2015-06-14 20:07:21 +08:00
</span>
2015-06-15 11:48:30 +08:00
);
2015-06-15 16:31:51 +08:00
}else if(this.props.status === 'success'){
2015-06-15 16:16:51 +08:00
progressInfo = (
<span style={textStyle} className='ant-progress-circle-text'>
<i className="anticon anticon-check"></i>
</span>
);
2015-06-14 20:07:21 +08:00
}else {
2015-06-14 12:55:44 +08:00
progressInfo = (
2015-06-14 20:07:21 +08:00
<span className="ant-progress-circle-text">{this.props.percent}%</span>
2015-06-15 11:48:30 +08:00
);
2015-06-14 12:55:44 +08:00
}
return (
2015-06-14 20:07:21 +08:00
<div className="ant-progress-circle-wrap" style={wrapStyle}>
<div className="ant-progress-circle-inner" style={style}>
<Progresscircle percent={this.props.percent} strokeWidth={this.props.strokeWidth}
2015-06-15 11:55:54 +08:00
strokeColor={statusColorMap[this.props.status]} trailColor="#e9e9e9" />
2015-06-14 20:07:21 +08:00
{progressInfo}
</div>
2015-06-14 12:55:44 +08:00
</div>
);
}
});
module.exports = {
Line: Line,
Circle: Circle
};