index.js 13.7 KB
Newer Older
xwenliang's avatar
xwenliang committed
1 2 3
'use strict';

import React, {
4 5 6
	StyleSheet,
	PropTypes,
	View,
xwenliang's avatar
xwenliang committed
7 8 9
	Text,
	Animated,
	Platform,
xwenliang's avatar
bugs  
xwenliang committed
10 11
	Dimensions,
	PickerIOS
xwenliang's avatar
xwenliang committed
12 13 14 15 16
} from 'react-native';

import PickerAndroid from 'react-native-picker-android';

let Picker = Platform.OS === 'ios' ? PickerIOS : PickerAndroid;
xwenliang's avatar
xwenliang committed
17
let PickerItem = Picker.Item;
xwenliang's avatar
xwenliang committed
18 19 20
let width = Dimensions.get('window').width;
let height = Dimensions.get('window').height;

21 22 23
const longSide = width > height ? width : height;
const shortSide = width > height ? height : width;

xwenliang's avatar
xwenliang committed
24 25
export default class PickerAny extends React.Component {

xwenliang's avatar
bugs  
xwenliang committed
26
	static propTypes = {
xwenliang's avatar
xwenliang committed
27
		pickerBtnText: PropTypes.string,
28
		pickerCancelBtnText: PropTypes.string,
xwenliang's avatar
xwenliang committed
29
		pickerBtnStyle: PropTypes.any,
30 31
		pickerTitle: PropTypes.string,
		pickerTitleStyle: PropTypes.any,
xwenliang's avatar
xwenliang committed
32 33
		pickerToolBarStyle: PropTypes.any,
		pickerItemStyle: PropTypes.any,
Jim Cummins's avatar
Jim Cummins committed
34
		pickerWidth: PropTypes.number,
xwenliang's avatar
bugs  
xwenliang committed
35 36
		pickerHeight: PropTypes.number,
		showDuration: PropTypes.number,
xwenliang's avatar
xwenliang committed
37 38
		pickerData: PropTypes.any.isRequired,
		selectedValue: PropTypes.any.isRequired,
39
		onPickerDone: PropTypes.func,
xwenliang's avatar
xwenliang committed
40 41
		onPickerCancel: PropTypes.func,
		onValueChange: PropTypes.func
xwenliang's avatar
xwenliang committed
42
	};
xwenliang's avatar
bugs  
xwenliang committed
43 44

	static defaultProps = {
xwenliang's avatar
xwenliang committed
45
		pickerBtnText: '完成',
46
		pickerCancelBtnText: '取消',
xwenliang's avatar
xwenliang committed
47
		pickerHeight: 250,
xwenliang's avatar
bugs  
xwenliang committed
48
		showDuration: 300,
49
		onPickerDone: ()=>{},
xwenliang's avatar
xwenliang committed
50
		onPickerCancel: ()=>{},
Jim Cummins's avatar
Jim Cummins committed
51 52
		onValueChange: ()=>{},
		pickerWidth: width > height ? height:width
xwenliang's avatar
xwenliang committed
53
	};
xwenliang's avatar
bugs  
xwenliang committed
54

xwenliang's avatar
xwenliang committed
55 56
	constructor(props, context){
		super(props, context);
xwenliang's avatar
xwenliang committed
57 58 59 60 61 62 63 64 65 66 67
	}

	componentWillMount(){
		this.state = this._getStateFromProps(this.props);
	}

	componentWillReceiveProps(newProps){
		let newState = this._getStateFromProps(newProps);
		this.setState(newState);
	}

xwenliang's avatar
xwenliang committed
68
	shouldComponentUpdate(nextProps, nextState, context){
Jim Cummins's avatar
Jim Cummins committed
69 70 71
		if(nextState.pickerWidth !== this.state.pickerWidth) {
			return true;
		}
xwenliang's avatar
xwenliang committed
72 73
		if(JSON.stringify(nextState.selectedValue) === JSON.stringify(this.state.selectedValue)){
			return false;
xwenliang's avatar
xwenliang committed
74
		}
xwenliang's avatar
xwenliang committed
75 76
		return true;
	}
xwenliang's avatar
xwenliang committed
77

xwenliang's avatar
xwenliang committed
78
	_getStateFromProps(props){
xwenliang's avatar
xwenliang committed
79
		//the pickedValue must looks like [wheelone's, wheeltwo's, ...]
xwenliang's avatar
xwenliang committed
80
		//this.state.selectedValue may be the result of the first pickerWheel
xwenliang's avatar
xwenliang committed
81
		let style = props.style;
xwenliang's avatar
xwenliang committed
82
		let pickerBtnText = props.pickerBtnText;
83
		let pickerCancelBtnText = props.pickerCancelBtnText;
xwenliang's avatar
xwenliang committed
84
		let pickerBtnStyle = props.pickerBtnStyle;
85 86
		let pickerTitle = props.pickerTitle;
		let pickerTitleStyle = props.pickerTitleStyle;
xwenliang's avatar
xwenliang committed
87 88
		let pickerToolBarStyle = props.pickerToolBarStyle;
		let pickerItemStyle = props.pickerItemStyle;
Jim Cummins's avatar
Jim Cummins committed
89
		let pickerWidth = props.pickerWidth;
xwenliang's avatar
xwenliang committed
90 91 92 93 94
		let pickerHeight = props.pickerHeight;
		let showDuration = props.showDuration;
		let pickerData = props.pickerData;
		let selectedValue = props.selectedValue;
		let onPickerDone = props.onPickerDone;
95
		let onPickerCancel = props.onPickerCancel;
xwenliang's avatar
xwenliang committed
96
		let onValueChange = props.onValueChange;
xwenliang's avatar
xwenliang committed
97

xwenliang's avatar
xwenliang committed
98 99 100
		let pickerStyle = pickerData.constructor === Array ? 'parallel' : 'cascade';
		let firstWheelData;
		let firstPickedData;
Zuxuan Liang's avatar
Debug  
Zuxuan Liang committed
101
		let secondPickedData;
xwenliang's avatar
xwenliang committed
102 103 104 105 106
		let secondWheelData;
		let secondPickedDataIndex;
		let thirdWheelData;
		let thirdPickedDataIndex;
		let cascadeData = {};
Jon's avatar
Jon committed
107
		let slideAnim = (this.state && this.state.slideAnim ? this.state.slideAnim : new Animated.Value(-props.pickerHeight));
108

xwenliang's avatar
xwenliang committed
109 110
		if(pickerStyle === 'parallel'){
			//compatible single wheel sence
xwenliang's avatar
xwenliang committed
111 112
			if(selectedValue.constructor !== Array){
				selectedValue = [selectedValue];
xwenliang's avatar
xwenliang committed
113 114 115 116 117 118 119 120
			}
			if(pickerData[0].constructor !== Array){
				pickerData = [pickerData];
			}
		}
		else if(pickerStyle === 'cascade'){
			//only support three stage
			firstWheelData = Object.keys(pickerData);
xwenliang's avatar
xwenliang committed
121 122 123
			firstPickedData = props.selectedValue[0];
			secondPickedData = props.selectedValue[1];
			cascadeData = this._getCascadeData(pickerData, selectedValue, firstPickedData, secondPickedData, true);
xwenliang's avatar
xwenliang committed
124
		}
xwenliang's avatar
xwenliang committed
125
		//save picked data
xwenliang's avatar
xwenliang committed
126
		this.pickedValue = JSON.parse(JSON.stringify(selectedValue));
xwenliang's avatar
xwenliang committed
127 128
		this.pickerStyle = pickerStyle;
		return {
xwenliang's avatar
xwenliang committed
129
			style,
xwenliang's avatar
xwenliang committed
130
			pickerBtnText,
131
			pickerCancelBtnText,
xwenliang's avatar
xwenliang committed
132
			pickerBtnStyle,
133 134
			pickerTitle,
			pickerTitleStyle,
xwenliang's avatar
xwenliang committed
135 136
			pickerToolBarStyle,
			pickerItemStyle,
Jim Cummins's avatar
Jim Cummins committed
137
			pickerWidth,
xwenliang's avatar
xwenliang committed
138 139
			pickerHeight,
			showDuration,
xwenliang's avatar
xwenliang committed
140
			pickerData,
xwenliang's avatar
xwenliang committed
141 142
			selectedValue,
			onPickerDone,
143
			onPickerCancel,
xwenliang's avatar
xwenliang committed
144
			onValueChange,
xwenliang's avatar
xwenliang committed
145 146 147 148
			//list of first wheel data
			firstWheelData,
			//first wheel selected value
			firstPickedData,
Jon's avatar
Jon committed
149
			slideAnim,
xwenliang's avatar
xwenliang committed
150 151 152 153 154 155
			//list of second wheel data and pickedDataIndex
			secondWheelData: cascadeData.secondWheelData,
			secondPickedDataIndex: cascadeData.secondPickedDataIndex,
			//third wheel selected value and pickedDataIndex
			thirdWheelData: cascadeData.thirdWheelData,
			thirdPickedDataIndex: cascadeData.thirdPickedDataIndex
xwenliang's avatar
xwenliang committed
156
		};
xwenliang's avatar
bugs  
xwenliang committed
157 158 159
	}

	_slideUp(){
xwenliang's avatar
xwenliang committed
160
		this._isMoving = true;
xwenliang's avatar
bugs  
xwenliang committed
161 162 163 164
		Animated.timing(
			this.state.slideAnim,
			{
				toValue: 0,
xwenliang's avatar
xwenliang committed
165
				duration: this.state.showDuration,
xwenliang's avatar
bugs  
xwenliang committed
166 167 168
			}
		).start((evt) => {
			if(evt.finished) {
xwenliang's avatar
xwenliang committed
169 170
				this._isMoving = false;
				this._isPickerShow = true;
xwenliang's avatar
bugs  
xwenliang committed
171 172 173 174 175
			}
		});
	}

	_slideDown(){
xwenliang's avatar
xwenliang committed
176
		this._isMoving = true;
xwenliang's avatar
bugs  
xwenliang committed
177 178 179
		Animated.timing(
			this.state.slideAnim,
			{
xwenliang's avatar
xwenliang committed
180 181
				toValue: -this.state.pickerHeight,
				duration: this.state.showDuration,
xwenliang's avatar
bugs  
xwenliang committed
182 183 184
			}
		).start((evt) => {
			if(evt.finished) {
xwenliang's avatar
xwenliang committed
185 186
				this._isMoving = false;
				this._isPickerShow = false;
xwenliang's avatar
bugs  
xwenliang committed
187 188 189 190 191
			}
		});
	}

	_toggle(){
xwenliang's avatar
xwenliang committed
192
		if(this._isMoving) {
xwenliang's avatar
bugs  
xwenliang committed
193 194
			return;
		}
xwenliang's avatar
xwenliang committed
195
		if(this._isPickerShow) {
xwenliang's avatar
bugs  
xwenliang committed
196 197 198 199 200 201 202 203 204 205
			this._slideDown();
		}
		else{
			this._slideUp();
		}
	}
	//向父组件提供方法
	toggle(){
		this._toggle();
	}
xwenliang's avatar
xwenliang committed
206 207 208 209 210 211 212 213 214 215 216 217 218
	show(){
		if(!this._isPickerShow){
			this._slideUp();
		}
	}
	hide(){
		if(this._isPickerShow){
			this._slideDown();
		}
	}
	isPickerShow(){
		return this._isPickerShow;
	}
xwenliang's avatar
xwenliang committed
219 220

	_prePressHandle(callback){
xwenliang's avatar
bugs  
xwenliang committed
221 222 223
		//通知子组件往上滚
		this.pickerWheel.moveUp();
	}
xwenliang's avatar
xwenliang committed
224 225

	_nextPressHandle(callback){
xwenliang's avatar
bugs  
xwenliang committed
226 227 228 229
		//通知子组件往下滚
		this.pickerWheel.moveDown();
	}

230 231 232 233 234
	_pickerCancel() {
		this._toggle();
		this.state.onPickerCancel();
	}

xwenliang's avatar
bugs  
xwenliang committed
235 236
	_pickerFinish(){
		this._toggle();
xwenliang's avatar
xwenliang committed
237
		this.state.onPickerDone(this.pickedValue);
xwenliang's avatar
xwenliang committed
238 239 240 241 242
	}

	_renderParallelWheel(pickerData){
		return pickerData.map((item, index) => {
			return (
xwenliang's avatar
xwenliang committed
243
				<View style={styles.pickerWheel} key={index}>
xwenliang's avatar
xwenliang committed
244
					<Picker
xwenliang's avatar
xwenliang committed
245
						selectedValue={this.state.selectedValue[index]}
xwenliang's avatar
xwenliang committed
246
						onValueChange={value => {
xwenliang's avatar
xwenliang committed
247
							this.pickedValue.splice(index, 1, value);
xwenliang's avatar
xwenliang committed
248
							//do not set state to another object!! why?
xwenliang's avatar
xwenliang committed
249 250
							// this.setState({
							// 	selectedValue: this.pickedValue
xwenliang's avatar
xwenliang committed
251
							// });
xwenliang's avatar
xwenliang committed
252 253
							this.setState({
								selectedValue: JSON.parse(JSON.stringify(this.pickedValue))
xwenliang's avatar
xwenliang committed
254
							});
xwenliang's avatar
xwenliang committed
255
							this.state.onValueChange(JSON.parse(JSON.stringify(this.pickedValue)), index);
xwenliang's avatar
xwenliang committed
256 257 258 259 260
						}} >
						{item.map((value, index) => (
							<PickerItem
								key={index}
								value={value}
xwenliang's avatar
xwenliang committed
261
								label={value.toString()}
xwenliang's avatar
xwenliang committed
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
							/>)
						)}
					</Picker>
				</View>
			);
		});
	}

	_getCascadeData(pickerData, pickedValue, firstPickedData, secondPickedData, onInit){
		let secondWheelData;
		let secondPickedDataIndex;
		let thirdWheelData;
		let thirdPickedDataIndex;
		//only support two and three stage
		for(let key in pickerData){
			//two stage
			if(pickerData[key].constructor === Array){
				secondWheelData = pickerData[firstPickedData];
				if(onInit){
					secondWheelData.forEach(function(v, k){
						if(v === pickedValue[1]){
							secondPickedDataIndex = k;
						}
					}.bind(this));
				}
				else{
					secondPickedDataIndex = 0;
				}
				break;
			}
			//three stage
			else{
				secondWheelData = Object.keys(pickerData[firstPickedData]);
				if(onInit){
					secondWheelData.forEach(function(v, k){
						if(v === pickedValue[1]){
							secondPickedDataIndex = k;
						}
					}.bind(this));
				}
				else{
					secondPickedDataIndex = 0;
				}
				thirdWheelData = pickerData[firstPickedData][secondPickedData];
				if(onInit){
					thirdWheelData.forEach(function(v, k){
						if(v === pickedValue[2]){
							thirdPickedDataIndex = k;
						}
					})
				}
				else{
					thirdPickedDataIndex = 0;
				}
				break;
			}
		}

		return {
			secondWheelData,
			secondPickedDataIndex,
			thirdWheelData,
			thirdPickedDataIndex
		}
	}

	_renderCascadeWheel(pickerData){
xwenliang's avatar
xwenliang committed
329
		let thirdWheel = this.state.thirdWheelData && (
xwenliang's avatar
xwenliang committed
330 331 332
			<View style={styles.pickerWheel}>
				<Picker
					ref={'thirdWheel'}
xwenliang's avatar
xwenliang committed
333
					selectedValue={this.state.thirdPickedDataIndex}
xwenliang's avatar
xwenliang committed
334
					onValueChange={(index) => {
xwenliang's avatar
xwenliang committed
335 336
						this.pickedValue.splice(2, 1, this.state.thirdWheelData[index]);
						this.setState({
xwenliang's avatar
xwenliang committed
337 338
							thirdPickedDataIndex: index,
							selectedValue: 'wheel3'+index
xwenliang's avatar
xwenliang committed
339
						});
xwenliang's avatar
xwenliang committed
340
						this.state.onValueChange(JSON.parse(JSON.stringify(this.pickedValue)), 2);
xwenliang's avatar
xwenliang committed
341
					}} >
xwenliang's avatar
xwenliang committed
342
					{this.state.thirdWheelData.map((value, index) => (
xwenliang's avatar
xwenliang committed
343 344 345
						<PickerItem
							key={index}
							value={index}
xwenliang's avatar
xwenliang committed
346
							label={value.toString()}
xwenliang's avatar
xwenliang committed
347 348 349 350 351 352 353
						/>)
					)}
				</Picker>
			</View>
		);

		return (
Jim Cummins's avatar
Jim Cummins committed
354
			<View style={[styles.pickerWrap, { width: this.state.pickerWidth }]}>
xwenliang's avatar
xwenliang committed
355 356 357
				<View style={styles.pickerWheel}>
					<Picker
						ref={'firstWheel'}
xwenliang's avatar
xwenliang committed
358
						selectedValue={this.state.firstPickedData}
xwenliang's avatar
xwenliang committed
359 360
						onValueChange={value => {
							let secondWheelData = Object.keys(pickerData[value]);
xwenliang's avatar
xwenliang committed
361
							let cascadeData = this._getCascadeData(pickerData, this.pickedValue, value, secondWheelData[0]);
xwenliang's avatar
xwenliang committed
362 363 364
							//when onPicked, this.pickedValue will pass to the parent
							//when firstWheel changed, second and third will also change
							if(cascadeData.thirdWheelData){
xwenliang's avatar
xwenliang committed
365
								this.pickedValue.splice(0, 3, value, cascadeData.secondWheelData[0], cascadeData.thirdWheelData[0]);
xwenliang's avatar
xwenliang committed
366 367
							}
							else{
xwenliang's avatar
xwenliang committed
368
								this.pickedValue.splice(0, 2, value, cascadeData.secondWheelData[0]);
xwenliang's avatar
xwenliang committed
369
							}
370

xwenliang's avatar
xwenliang committed
371
							this.setState({
xwenliang's avatar
xwenliang committed
372
								selectedValue: 'wheel1'+value,
xwenliang's avatar
xwenliang committed
373 374 375 376 377 378
								firstPickedData: value,
								secondWheelData: cascadeData.secondWheelData,
								secondPickedDataIndex: 0,
								thirdWheelData: cascadeData.thirdWheelData,
								thirdPickedDataIndex: 0
							});
xwenliang's avatar
xwenliang committed
379 380 381
							this.state.onValueChange(JSON.parse(JSON.stringify(this.pickedValue)), 0);
							this.refs.secondWheel && this.refs.secondWheel.moveTo && this.refs.secondWheel.moveTo(0);
							this.refs.thirdWheel && this.refs.thirdWheel.moveTo && this.refs.thirdWheel.moveTo(0);
xwenliang's avatar
xwenliang committed
382
						}} >
xwenliang's avatar
xwenliang committed
383
						{this.state.firstWheelData.map((value, index) => (
xwenliang's avatar
xwenliang committed
384 385 386
							<PickerItem
								key={index}
								value={value}
xwenliang's avatar
xwenliang committed
387
								label={value.toString()}
xwenliang's avatar
xwenliang committed
388 389 390 391 392 393 394
							/>)
						)}
					</Picker>
				</View>
				<View style={styles.pickerWheel}>
					<Picker
						ref={'secondWheel'}
xwenliang's avatar
xwenliang committed
395
						selectedValue={this.state.secondPickedDataIndex}
xwenliang's avatar
xwenliang committed
396
						onValueChange={(index) => {
xwenliang's avatar
xwenliang committed
397
							let thirdWheelData = pickerData[this.state.firstPickedData][this.state.secondWheelData[index]];
xwenliang's avatar
xwenliang committed
398
							if(thirdWheelData){
399
								this.pickedValue.splice(1, 2, this.state.secondWheelData[index], thirdWheelData[0]);
xwenliang's avatar
xwenliang committed
400 401
							}
							else{
xwenliang's avatar
xwenliang committed
402
								this.pickedValue.splice(1, 1, this.state.secondWheelData[index]);
xwenliang's avatar
xwenliang committed
403
							}
404

xwenliang's avatar
xwenliang committed
405
							this.setState({
xwenliang's avatar
xwenliang committed
406 407
								secondPickedDataIndex: index,
								thirdWheelData,
xwenliang's avatar
xwenliang committed
408 409
								thirdPickedDataIndex: 0,
								selectedValue: 'wheel2'+index
xwenliang's avatar
xwenliang committed
410
							});
xwenliang's avatar
xwenliang committed
411 412
							this.state.onValueChange(JSON.parse(JSON.stringify(this.pickedValue)), 1);
							this.refs.thirdWheel && this.refs.thirdWheel.moveTo && this.refs.thirdWheel.moveTo(0);
xwenliang's avatar
xwenliang committed
413
						}} >
xwenliang's avatar
xwenliang committed
414
						{this.state.secondWheelData.map((value, index) => (
xwenliang's avatar
xwenliang committed
415 416 417
							<PickerItem
								key={index}
								value={index}
xwenliang's avatar
xwenliang committed
418
								label={value.toString()}
xwenliang's avatar
xwenliang committed
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
							/>)
						)}
					</Picker>
				</View>
				{thirdWheel}
			</View>
		);
	}

	_renderWheel(pickerData){
		/*
			some sences:
			1.	single wheel:
				[1,2,3,4]
			2.	two or more:
				[
					[1,2,3,4],
					[5,6,7,8],
					...
				]
			3.	two stage cascade:
				{
					a: [1,2,3,4],
					b: [5,6,7,8],
					...
				}
			4.	three stage cascade:
				{
					a: {
						a1: [1,2,3,4],
						a2: [5,6,7,8],
						a3: [9,10,11,12]
					},
					b: {
						b1: [1,2,3,4],
						b2: [5,6,7,8],
						b3: [9,10,12,12]
					}
					...
				}
			we call 1、2 parallel and 3、4 cascade
		*/
		let wheel = null;
		if(this.pickerStyle === 'parallel'){
			wheel = this._renderParallelWheel(pickerData);
		}
		else if(this.pickerStyle === 'cascade'){
			wheel = this._renderCascadeWheel(pickerData);
		}
		return wheel;
xwenliang's avatar
bugs  
xwenliang committed
469
	}
470

xwenliang's avatar
xwenliang committed
471
	render(){
xwenliang's avatar
bugs  
xwenliang committed
472 473
		return (
			<Animated.View style={[styles.picker, {
474
				width: longSide,
xwenliang's avatar
xwenliang committed
475
				height: this.state.pickerHeight,
xwenliang's avatar
bugs  
xwenliang committed
476
				bottom: this.state.slideAnim
xwenliang's avatar
xwenliang committed
477
			}, this.state.style]}>
Jim Cummins's avatar
Jim Cummins committed
478
				<View style={[styles.pickerToolbar, this.state.pickerToolBarStyle, { width: this.state.pickerWidth }]}>
479 480
					<View style={styles.pickerCancelBtn}>
						<Text style={[styles.pickerFinishBtnText, this.state.pickerBtnStyle]}
481
							onPress={this._pickerCancel.bind(this)}>{this.state.pickerCancelBtnText}</Text>
482 483 484 485
					</View>
					<Text style={[styles.pickerTitle, this.state.pickerTitleStyle]} numberOfLines={1}>
						{this.state.pickerTitle}
					</Text>
xwenliang's avatar
bugs  
xwenliang committed
486
					<View style={styles.pickerFinishBtn}>
xwenliang's avatar
xwenliang committed
487 488
						<Text style={[styles.pickerFinishBtnText, this.state.pickerBtnStyle]}
							onPress={this._pickerFinish.bind(this)}>{this.state.pickerBtnText}</Text>
xwenliang's avatar
bugs  
xwenliang committed
489 490
					</View>
				</View>
491
				<View style={[styles.pickerWrap, { width: this.state.pickerWidth }]}>
xwenliang's avatar
xwenliang committed
492 493
					{this._renderWheel(this.state.pickerData)}
				</View>
xwenliang's avatar
bugs  
xwenliang committed
494 495 496
			</Animated.View>
		);
	}
xwenliang's avatar
xwenliang committed
497 498 499
};

let styles = StyleSheet.create({
xwenliang's avatar
bugs  
xwenliang committed
500
	picker: {
xwenliang's avatar
xwenliang committed
501 502 503
		position: 'absolute',
		bottom: 0,
		left: 0,
xwenliang's avatar
bugs  
xwenliang committed
504
		backgroundColor: '#bdc0c7',
xwenliang's avatar
xwenliang committed
505 506 507 508 509 510 511
		overflow: 'hidden'
	},
	pickerWrap: {
		flexDirection: 'row'
	},
	pickerWheel: {
		flex: 1
xwenliang's avatar
xwenliang committed
512 513 514 515 516 517 518
	},
	pickerToolbar: {
		height: 30,
		backgroundColor: '#e6e6e6',
		flexDirection: 'row',
		borderTopWidth: 1,
		borderBottomWidth: 1,
xwenliang's avatar
xwenliang committed
519 520
		borderColor: '#c3c3c3',
		alignItems: 'center'
xwenliang's avatar
xwenliang committed
521 522 523 524 525
	},
	pickerBtnView: {
		flex: 1,
		flexDirection: 'row',
		justifyContent: 'flex-start',
xwenliang's avatar
bugs  
xwenliang committed
526
		alignItems: 'center'
xwenliang's avatar
xwenliang committed
527 528 529 530
	},
	pickerMoveBtn: {
		color: '#149be0',
		fontSize: 16,
xwenliang's avatar
bugs  
xwenliang committed
531
		marginLeft: 20
xwenliang's avatar
xwenliang committed
532
	},
533 534 535 536 537 538 539 540
	pickerCancelBtn: {
		flex: 1,
		flexDirection: 'row',
		justifyContent: 'flex-start',
		alignItems: 'center',
		marginLeft: 20
	},
	pickerTitle: {
xwenliang's avatar
xwenliang committed
541
		flex: 4,
542 543 544
		color: 'black',
		textAlign: 'center'
	},
xwenliang's avatar
xwenliang committed
545 546 547 548 549
	pickerFinishBtn: {
		flex: 1,
		flexDirection: 'row',
		justifyContent: 'flex-end',
		alignItems: 'center',
xwenliang's avatar
bugs  
xwenliang committed
550
		marginRight: 20
xwenliang's avatar
xwenliang committed
551 552 553 554 555 556
	},
	pickerFinishBtnText: {
		fontSize: 16,
		color: '#149be0'
	}
});