From e2b200055ee43379ebd6c08e56b023d00d842958 Mon Sep 17 00:00:00 2001 From: xwenliang Date: Sun, 21 Feb 2016 16:39:00 +0800 Subject: [PATCH] v2.0.0 --- index.js | 152 +++++++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 70 insertions(+), 84 deletions(-) diff --git a/index.js b/index.js index c7b2c45..1976042 100644 --- a/index.js +++ b/index.js @@ -24,6 +24,7 @@ const shortSide = width > height ? height : width; export default class PickerAny extends React.Component { static propTypes = { + style: PropTypes.any, pickerBtnText: PropTypes.string, pickerCancelBtnText: PropTypes.string, pickerBtnStyle: PropTypes.any, @@ -31,8 +32,7 @@ export default class PickerAny extends React.Component { pickerTitleStyle: PropTypes.any, pickerToolBarStyle: PropTypes.any, pickerItemStyle: PropTypes.any, - pickerWidth: PropTypes.number, - pickerHeight: PropTypes.number, + showMask: PropTypes.bool, showDuration: PropTypes.number, pickerData: PropTypes.any.isRequired, selectedValue: PropTypes.any.isRequired, @@ -42,14 +42,16 @@ export default class PickerAny extends React.Component { }; static defaultProps = { - pickerBtnText: '完成', - pickerCancelBtnText: '取消', - pickerHeight: 250, + style: { + width: width + }, + pickerBtnText: 'Done', + pickerCancelBtnText: 'Cancel', + showMask: false, showDuration: 300, onPickerDone: ()=>{}, onPickerCancel: ()=>{}, - onValueChange: ()=>{}, - pickerWidth: width > height ? height:width + onValueChange: ()=>{} }; constructor(props, context){ @@ -66,34 +68,29 @@ export default class PickerAny extends React.Component { } shouldComponentUpdate(nextProps, nextState, context){ - if(nextState.pickerWidth !== this.state.pickerWidth) { - return true; - } - if(JSON.stringify(nextState.selectedValue) === JSON.stringify(this.state.selectedValue)){ - return false; - } return true; } _getStateFromProps(props){ //the pickedValue must looks like [wheelone's, wheeltwo's, ...] //this.state.selectedValue may be the result of the first pickerWheel - let style = props.style; - let pickerBtnText = props.pickerBtnText; - let pickerCancelBtnText = props.pickerCancelBtnText; - let pickerBtnStyle = props.pickerBtnStyle; - let pickerTitle = props.pickerTitle; - let pickerTitleStyle = props.pickerTitleStyle; - let pickerToolBarStyle = props.pickerToolBarStyle; - let pickerItemStyle = props.pickerItemStyle; - let pickerWidth = props.pickerWidth; - let pickerHeight = props.pickerHeight; - let showDuration = props.showDuration; - let pickerData = props.pickerData; - let selectedValue = props.selectedValue; - let onPickerDone = props.onPickerDone; - let onPickerCancel = props.onPickerCancel; - let onValueChange = props.onValueChange; + let { + style, + pickerBtnText, + pickerCancelBtnText, + pickerBtnStyle, + pickerTitle, + pickerTitleStyle, + pickerToolBarStyle, + pickerItemStyle, + showDuration, + showMask, + pickerData, + selectedValue, + onPickerDone, + onPickerCancel, + onValueChange + } = props; let pickerStyle = pickerData.constructor === Array ? 'parallel' : 'cascade'; let firstWheelData; @@ -104,7 +101,7 @@ export default class PickerAny extends React.Component { let thirdWheelData; let thirdPickedDataIndex; let cascadeData = {}; - let slideAnim = (this.state && this.state.slideAnim ? this.state.slideAnim : new Animated.Value(-props.pickerHeight)); + let slideAnim = (this.state && this.state.slideAnim ? this.state.slideAnim : new Animated.Value(-height)); if(pickerStyle === 'parallel'){ //compatible single wheel sence @@ -134,9 +131,8 @@ export default class PickerAny extends React.Component { pickerTitleStyle, pickerToolBarStyle, pickerItemStyle, - pickerWidth, - pickerHeight, showDuration, + showMask, pickerData, selectedValue, onPickerDone, @@ -177,7 +173,7 @@ export default class PickerAny extends React.Component { Animated.timing( this.state.slideAnim, { - toValue: -this.state.pickerHeight, + toValue: -height, duration: this.state.showDuration, } ).start((evt) => { @@ -227,7 +223,7 @@ export default class PickerAny extends React.Component { this.pickerWheel.moveDown(); } - _pickerCancel() { + _pickerCancel(){ this._toggle(); this.state.onPickerCancel(); } @@ -351,7 +347,7 @@ export default class PickerAny extends React.Component { ); return ( - + + + + ) : null; + return ( - - - {this.state.pickerCancelBtnText} + }]}> + {mask} + + + + {this.state.pickerCancelBtnText} + + + {this.state.pickerTitle} + + + {this.state.pickerBtnText} + - - {this.state.pickerTitle} - - - {this.state.pickerBtnText} + + {this._renderWheel(this.state.pickerData)} - - {this._renderWheel(this.state.pickerData)} - ); } @@ -501,9 +475,21 @@ let styles = StyleSheet.create({ position: 'absolute', bottom: 0, left: 0, - backgroundColor: '#bdc0c7', + backgroundColor: 'transparent', overflow: 'hidden' }, + pickerBox: { + position: 'absolute', + bottom: 0, + left: 0 + }, + mask: { + position: 'absolute', + top: 0, + backgroundColor: 'transparent', + height: height, + width: width + }, pickerWrap: { flexDirection: 'row' }, diff --git a/package.json b/package.json index 1914c0e..4c5ef9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-picker", - "version": "1.1.1", + "version": "2.0.0", "description": "react-native-picker", "main": "index.js", "scripts": { -- 2.26.2