From 85c1c118b095b2f24536c9c45b3120476dbfe821 Mon Sep 17 00:00:00 2001 From: xwenliang Date: Tue, 17 Jan 2017 16:16:17 +0800 Subject: [PATCH] add TimePicker example for use of Picker.select --- example/PickerTest/index.js | 76 ++++++++++++++++++++++++++++++++++++- index.js | 11 ++++-- package.json | 2 +- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/example/PickerTest/index.js b/example/PickerTest/index.js index dc0210a..4183c5a 100644 --- a/example/PickerTest/index.js +++ b/example/PickerTest/index.js @@ -19,7 +19,6 @@ class PickerTest extends Component { constructor(props, context) { super(props, context); - this._showDatePicker(); } _createDateData() { @@ -113,6 +112,78 @@ class PickerTest extends Component { Picker.show(); } + _showTimePicker() { + let years = [], + months = [], + days = [], + hours = [], + minutes = []; + + for(let i=1;i<51;i++){ + years.push(i+1980); + } + for(let i=1;i<13;i++){ + months.push(i); + hours.push(i); + } + for(let i=1;i<32;i++){ + days.push(i); + } + for(let i=1;i<61;i++){ + minutes.push(i); + } + let pickerData = [years, months, days, ['am', 'pm'], hours, minutes]; + let date = new Date(); + let selectedValue = [ + [date.getFullYear()], + [date.getMonth()+1], + [date.getDate()], + [date.getHours() > 11 ? 'pm' : 'am'], + [date.getHours() === 12 ? 12 : date.getHours()%12], + [date.getMinutes()] + ]; + Picker.init({ + pickerData, + selectedValue, + pickerTitleText: 'Select Date and Time', + wheelFlex: [2, 1, 1, 2, 1, 1], + onPickerConfirm: pickedValue => { + console.log('area', pickedValue); + }, + onPickerCancel: pickedValue => { + console.log('area', pickedValue); + }, + onPickerSelect: pickedValue => { + let targetValue = [...pickedValue]; + if(parseInt(targetValue[1]) === 2){ + if(targetValue[0]%4 === 0 && targetValue[2] > 29){ + targetValue[2] = 29; + } + else if(targetValue[0]%4 !== 0 && targetValue[2] > 28){ + targetValue[2] = 28; + } + } + else if(targetValue[1] in {4:1, 6:1, 9:1, 11:1} && targetValue[2] > 30){ + targetValue[2] = 30; + + } + // forbidden some value such as some 2.29, 4.31, 6.31... + if(JSON.stringify(targetValue) !== JSON.stringify(pickedValue)){ + // android will return String all the timeļ¼Œbut we put Number into picker at first + // so we need to convert them to Number again + targetValue.map((v, k) => { + if(k !== 3){ + targetValue[k] = parseInt(v); + } + }); + Picker.select(targetValue); + pickedValue = targetValue; + } + } + }); + Picker.show(); + } + _toggle() { Picker.toggle(); } @@ -129,6 +200,9 @@ class PickerTest extends Component { DatePicker + + TimePicker + AreaPicker diff --git a/index.js b/index.js index f951ed3..a4706b7 100644 --- a/index.js +++ b/index.js @@ -56,9 +56,14 @@ export default { }, select(arr, fn) { - Picker.select(arr, err => { - typeof fn === 'function' && fn(err); - }); + if(ios){ + Picker.select(arr); + } + else if(android){ + Picker.select(arr, err => { + typeof fn === 'function' && fn(err); + }); + } }, toggle(){ diff --git a/package.json b/package.json index 8483380..6cecb85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-picker", - "version": "4.0.17", + "version": "4.0.18", "description": "", "main": "index.js", "scripts": { -- 2.26.2