@@ -15,39 +15,55 @@ class DefinedRanges extends Component {
1515 this . handleRangeChange = this . handleRangeChange . bind ( this ) ;
1616 }
1717 handleRangeChange ( range ) {
18- const { onChange } = this . props ;
19- onChange && onChange ( range ) ;
18+ const { onChange, ranges, focusedRangeIndex } = this . props ;
19+ const selectedRange = ranges [ focusedRangeIndex ] ;
20+ if ( ! onChange || ! selectedRange ) return ;
21+ onChange ( {
22+ [ selectedRange . key || `range${ focusedRangeIndex + 1 } ` ] : { ...selectedRange , ...range } ,
23+ } ) ;
2024 }
21- checkIsSelected ( definedRange , ranges ) {
22- return ranges . some ( range => definedRange . isSelected && definedRange . isSelected ( range ) ) ;
25+ getSelectedRange ( ranges , staticRange ) {
26+ const focusedRangeIndex = ranges . findIndex ( range => {
27+ if ( ! range . startDate || ! range . endDate || range . disabled ) return false ;
28+ return staticRange . isSelected ( range ) ;
29+ } ) ;
30+ const selectedRange = ranges [ focusedRangeIndex ] ;
31+ return { selectedRange, focusedRangeIndex } ;
2332 }
2433 render ( ) {
25- const { onPreviewChange } = this . props ;
26- const validRanges = this . props . ranges . filter (
27- item => item . startDate && item . endDate && ! item . disabled
28- ) ;
34+ const { onPreviewChange, ranges, rangeColors, className } = this . props ;
2935 return (
3036 < div
31- className = { styles . definedRangesWrapper }
37+ className = { cx ( styles . definedRangesWrapper , className ) }
3238 onMouseLeave = { ( ) => {
3339 this . props . onPreviewChange && this . props . onPreviewChange ( ) ;
3440 } } >
3541 { this . props . headerContent }
3642 < div className = { styles . staticRanges } >
37- { this . props . staticRanges . map ( ( rangeOption , i ) => (
38- < button
39- className = { cx ( styles . staticRange , {
40- [ styles . staticRangeSelected ] : this . checkIsSelected ( rangeOption , validRanges ) ,
41- } ) }
42- key = { i }
43- onClick = { ( ) => this . handleRangeChange ( rangeOption . range ( this . props ) ) }
44- onFocus = { ( ) => onPreviewChange && onPreviewChange ( rangeOption . range ( this . props ) ) }
45- onMouseOver = { ( ) => onPreviewChange && onPreviewChange ( rangeOption . range ( this . props ) ) } >
46- < span tabIndex = { - 1 } className = { styles . staticRangeLabel } >
47- { rangeOption . label }
48- </ span >
49- </ button >
50- ) ) }
43+ { this . props . staticRanges . map ( ( staticRange , i ) => {
44+ const { selectedRange, focusedRangeIndex } = this . getSelectedRange ( ranges , staticRange ) ;
45+ return (
46+ < button
47+ className = { cx ( styles . staticRange , {
48+ [ styles . staticRangeSelected ] : Boolean ( selectedRange ) ,
49+ } ) }
50+ style = { {
51+ color : selectedRange
52+ ? selectedRange . color || rangeColors [ focusedRangeIndex ]
53+ : null ,
54+ } }
55+ key = { i }
56+ onClick = { ( ) => this . handleRangeChange ( staticRange . range ( this . props ) ) }
57+ onFocus = { ( ) => onPreviewChange && onPreviewChange ( staticRange . range ( this . props ) ) }
58+ onMouseOver = { ( ) =>
59+ onPreviewChange && onPreviewChange ( staticRange . range ( this . props ) )
60+ } >
61+ < span tabIndex = { - 1 } className = { styles . staticRangeLabel } >
62+ { staticRange . label }
63+ </ span >
64+ </ button >
65+ ) ;
66+ } ) }
5167 </ div >
5268 < div className = { styles . inputRanges } >
5369 { this . props . inputRanges . map ( ( rangeOption , i ) => (
@@ -65,9 +81,7 @@ class DefinedRanges extends Component {
6581 max = { 99999 }
6682 value = {
6783 rangeOption . getCurrentValue
68- ? rangeOption . getCurrentValue (
69- this . props . ranges [ this . props . focusedRangeIndex ] || { }
70- )
84+ ? rangeOption . getCurrentValue ( ranges [ this . props . focusedRangeIndex ] || { } )
7185 : '-'
7286 }
7387 />
@@ -90,11 +104,16 @@ DefinedRanges.propTypes = {
90104 onChange : PropTypes . func ,
91105 footerContent : PropTypes . any ,
92106 headerContent : PropTypes . any ,
107+ rangeColors : PropTypes . arrayOf ( PropTypes . string ) ,
108+ className : PropTypes . string ,
93109} ;
94110
95111DefinedRanges . defaultProps = {
96112 inputRanges : defaultInputRanges ,
97113 staticRanges : defaultStaticRanges ,
114+ ranges : [ ] ,
115+ rangeColors : [ '#3d91ff' , '#3ecf8e' , '#fed14c' ] ,
116+ focusedRangeIndex : 0 ,
98117} ;
99118
100119export default DefinedRanges ;
0 commit comments