@@ -22,21 +22,27 @@ export default class PickerAny extends React.Component {
2222
2323 static propTypes = {
2424 pickerBtnText : PropTypes . string ,
25+ pickerCancelBtnText : PropTypes . string ,
2526 pickerBtnStyle : PropTypes . any ,
27+ pickerTitle : PropTypes . string ,
28+ pickerTitleStyle : PropTypes . any ,
2629 pickerToolBarStyle : PropTypes . any ,
2730 pickerItemStyle : PropTypes . any ,
2831 pickerHeight : PropTypes . number ,
2932 showDuration : PropTypes . number ,
3033 pickerData : PropTypes . any . isRequired ,
3134 selectedValue : PropTypes . any . isRequired ,
32- onPickerDone : PropTypes . func
35+ onPickerDone : PropTypes . func ,
36+ onPickerCancel : PropTypes . func
3337 }
3438
3539 static defaultProps = {
3640 pickerBtnText : '完成' ,
41+ pickerCancelBtnText : '取消' ,
3742 pickerHeight : 250 ,
3843 showDuration : 300 ,
39- onPickerDone : ( ) => { }
44+ onPickerDone : ( ) => { } ,
45+ onPickerCancel : ( ) => { }
4046 }
4147
4248 constructor ( props , context ) {
@@ -56,18 +62,23 @@ export default class PickerAny extends React.Component {
5662 //the pickedValue must looks like [wheelone's, wheeltwo's, ...]
5763 //this.state.selectedValue may be the result of the first pickerWheel
5864 let pickerBtnText = props . pickerBtnText ;
65+ let pickerCancelBtnText = props . pickerCancelBtnText ;
5966 let pickerBtnStyle = props . pickerBtnStyle ;
67+ let pickerTitle = props . pickerTitle ;
68+ let pickerTitleStyle = props . pickerTitleStyle ;
6069 let pickerToolBarStyle = props . pickerToolBarStyle ;
6170 let pickerItemStyle = props . pickerItemStyle ;
6271 let pickerHeight = props . pickerHeight ;
6372 let showDuration = props . showDuration ;
6473 let pickerData = props . pickerData ;
6574 let selectedValue = props . selectedValue ;
6675 let onPickerDone = props . onPickerDone ;
76+ let onPickerCancel = props . onPickerCancel ;
6777
6878 let pickerStyle = pickerData . constructor === Array ? 'parallel' : 'cascade' ;
6979 let firstWheelData ;
7080 let firstPickedData ;
81+ let secondPickedData ;
7182 let secondWheelData ;
7283 let secondPickedDataIndex ;
7384 let thirdWheelData ;
@@ -96,14 +107,18 @@ export default class PickerAny extends React.Component {
96107 this . pickerStyle = pickerStyle ;
97108 return {
98109 pickerBtnText,
110+ pickerCancelBtnText,
99111 pickerBtnStyle,
112+ pickerTitle,
113+ pickerTitleStyle,
100114 pickerToolBarStyle,
101115 pickerItemStyle,
102116 pickerHeight,
103117 showDuration,
104118 pickerData,
105119 selectedValue,
106120 onPickerDone,
121+ onPickerCancel,
107122 //list of first wheel data
108123 firstWheelData,
109124 //first wheel selected value
@@ -176,6 +191,11 @@ export default class PickerAny extends React.Component {
176191 this . pickerWheel . moveDown ( ) ;
177192 }
178193
194+ _pickerCancel ( ) {
195+ this . _toggle ( ) ;
196+ this . state . onPickerCancel ( ) ;
197+ }
198+
179199 _pickerFinish ( ) {
180200 this . _toggle ( ) ;
181201 this . state . onPickerDone ( this . pickedValue ) ;
@@ -298,7 +318,7 @@ export default class PickerAny extends React.Component {
298318 selectedValue = { me . state . firstPickedData }
299319 onValueChange = { value => {
300320 let secondWheelData = Object . keys ( pickerData [ value ] ) ;
301- cascadeData = me . _getCascadeData ( pickerData , me . pickedValue , value , secondWheelData [ 0 ] ) ;
321+ let cascadeData = me . _getCascadeData ( pickerData , me . pickedValue , value , secondWheelData [ 0 ] ) ;
302322 //when onPicked, this.pickedValue will pass to the parent
303323 //when firstWheel changed, second and third will also change
304324 if ( cascadeData . thirdWheelData ) {
@@ -412,14 +432,20 @@ export default class PickerAny extends React.Component {
412432 <Text style={styles.pickerMoveBtn} onPress={this._nextPressHandle.bind(this)}>下一个</Text>
413433 </View>
414434 );*/
415- let pickerBtn = null ;
435+ // let pickerBtn = null;
416436 return (
417437 < Animated . View style = { [ styles . picker , {
418438 height : this . state . pickerHeight ,
419439 bottom : this . state . slideAnim
420440 } ] } >
421441 < View style = { [ styles . pickerToolbar , this . state . pickerToolBarStyle ] } >
422- { pickerBtn }
442+ < View style = { styles . pickerCancelBtn } >
443+ < Text style = { [ styles . pickerFinishBtnText , this . state . pickerBtnStyle ] }
444+ onPress = { this . _pickerCancel . bind ( this ) } > { this . state . pickerCancelBtnText } </ Text >
445+ </ View >
446+ < Text style = { [ styles . pickerTitle , this . state . pickerTitleStyle ] } numberOfLines = { 1 } >
447+ { this . state . pickerTitle }
448+ </ Text >
423449 < View style = { styles . pickerFinishBtn } >
424450 < Text style = { [ styles . pickerFinishBtnText , this . state . pickerBtnStyle ] }
425451 onPress = { this . _pickerFinish . bind ( this ) } > { this . state . pickerBtnText } </ Text >
@@ -469,6 +495,18 @@ let styles = StyleSheet.create({
469495 fontSize : 16 ,
470496 marginLeft : 20
471497 } ,
498+ pickerCancelBtn : {
499+ flex : 1 ,
500+ flexDirection : 'row' ,
501+ justifyContent : 'flex-start' ,
502+ alignItems : 'center' ,
503+ marginLeft : 20
504+ } ,
505+ pickerTitle : {
506+ flex : 5 ,
507+ color : 'black' ,
508+ textAlign : 'center'
509+ } ,
472510 pickerFinishBtn : {
473511 flex : 1 ,
474512 flexDirection : 'row' ,
0 commit comments