1
+ 'use strict' ;
2
+
3
+ var React = require ( 'react' ) ;
4
+
5
+ var ProgressBar = React . createClass ( {
6
+ displayName : 'ProgressBar' ,
7
+
8
+ propTypes : {
9
+ percent : React . PropTypes . number . isRequired ,
10
+ onTop : React . PropTypes . bool ,
11
+ autoIncrement : React . PropTypes . bool ,
12
+ intervalTime : React . PropTypes . number
13
+ } ,
14
+ getDefaultProps : function getDefaultProps ( ) {
15
+ return {
16
+ percent : - 1 ,
17
+ onTop : false ,
18
+ autoIncrement : false ,
19
+ intervalTime : 200
20
+ } ;
21
+ } ,
22
+ getInitialState : function getInitialState ( ) {
23
+ return {
24
+ percent : this . props . percent
25
+ } ;
26
+ } ,
27
+ increment : function increment ( ) {
28
+ var percent = this . state . percent + ( Math . random ( ) + 1 - Math . random ( ) ) ;
29
+ percent = percent < 99 ? percent : 99 ;
30
+ this . setState ( {
31
+ percent : percent
32
+ } ) ;
33
+ } ,
34
+ componentWillUnmount : function componentWillUnmount ( ) {
35
+ if ( this . interval ) {
36
+ clearInterval ( this . interval ) ;
37
+ }
38
+ } ,
39
+ componentWillReceiveProps : function componentWillReceiveProps ( nextProps ) {
40
+ if ( this . interval ) {
41
+ clearInterval ( this . interval ) ;
42
+ }
43
+
44
+ if ( nextProps . autoIncrement && nextProps . percent >= 0 && nextProps . percent < 99 ) {
45
+ this . interval = setInterval ( this . increment , nextProps . intervalTime ) ;
46
+ }
47
+
48
+ if ( nextProps . percent >= 100 ) {
49
+ this . setState ( {
50
+ percent : 99.9
51
+ } , function ( ) {
52
+ setTimeout ( ( function ( ) {
53
+ this . setState ( {
54
+ percent : 100
55
+ } ) ;
56
+ } ) . bind ( this ) , 400 ) ;
57
+ } ) ;
58
+ } else {
59
+ this . setState ( {
60
+ percent : nextProps . percent
61
+ } ) ;
62
+ }
63
+ } ,
64
+ render : function render ( ) {
65
+ var className = 'react-progress-bar' + ( this . props . onTop ? ' react-progress-bar-on-top' : '' ) ;
66
+ if ( this . state . percent < 0 || this . state . percent >= 100 ) {
67
+ className += ' react-progress-bar-hide' ;
68
+ }
69
+ var style = { width : this . state . percent + '%' } ;
70
+ return React . createElement (
71
+ 'div' ,
72
+ { className : className } ,
73
+ React . createElement ( 'div' , { className : 'react-progress-bar-percent' , style : style } ) ,
74
+ React . createElement (
75
+ 'div' ,
76
+ { className : 'react-progress-bar-spinner' } ,
77
+ React . createElement ( 'div' , { className : 'react-progress-bar-spinner-icon' } )
78
+ )
79
+ ) ;
80
+ }
81
+ } ) ;
82
+
83
+ module . exports = ProgressBar ;
0 commit comments