UNPKG

hcmobile-sdk

Version:

mobile-sdk

248 lines (234 loc) 7.92 kB
//import liraries import React, { Component } from 'react'; import { View, Text, StyleSheet, TouchableOpacity, Dimensions } from 'react-native'; import Picker from './index'; import RowLayout from '../rowLayout/index'; import TextInput from '../textInput/index'; // create a component class PickerViewDemo extends Component { constructor(props) { super(props); this._showDatePicker = this._showDatePicker.bind(this); this._showTimePicker = this._showTimePicker.bind(this); this._toggle = this._toggle.bind(this); this._isPickerShow = this._isPickerShow.bind(this); this.state = { date:'', time:'', }; } componentWillUnmount() { Picker.hide(); } _createDateData() { let date = []; for(let i=1970;i<2020;i++){ let month = []; for(let j = 1;j<13;j++){ let day = []; if(j === 2){ for(let k=1;k<29;k++){ day.push(k+'日'); } //Leap day for years that are divisible by 4, such as 2000, 2004 if(i%4 === 0){ day.push(29+'日'); } } else if(j in {1:1, 3:1, 5:1, 7:1, 8:1, 10:1, 12:1}){ for(let k=1;k<32;k++){ day.push(k+'日'); } } else{ for(let k=1;k<31;k++){ day.push(k+'日'); } } let _month = {}; _month[j+'月'] = day; month.push(_month); } let _date = {}; _date[i+'年'] = month; date.push(_date); } return date; } _showDatePicker() { Picker.init({ isLoop:false, pickerTitleText:'请选择日期', pickerTitleColor:[0,0,0,1], pickerCancelBtnColor: [51, 51, 51, 1], pickerConfirmBtnColor: [51, 51, 51, 1], pickerConfirmBtnText: '确定', pickerCancelBtnText: '取消', pickerFontColor:[102,102,102,1], pickerToolBarBg:[246,246,246,1], pickerBg:[255,255,255,1], wheelFlex: [2, 1, 2, 1, 2], pickerData: this._createDateData(), pickerFontColor: [255, 0 ,0, 1], onPickerConfirm: (pickedValue, pickedIndex) => { this.setState({ date:pickedValue }); console.log('date', pickedValue, pickedIndex); }, onPickerCancel: (pickedValue, pickedIndex) => { console.log('date', pickedValue, pickedIndex); }, onPickerSelect: (pickedValue, pickedIndex) => { console.log('date', pickedValue, pickedIndex); } }); 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:'请选择时间', pickerTitleColor: [51, 51, 51, 1], pickerCancelBtnColor: [51, 51, 51, 1], pickerConfirmBtnColor: [51, 51, 51, 1], pickerConfirmBtnText: '确定', pickerCancelBtnText: '取消', wheelFlex: [2, 1, 1, 2, 1, 1], onPickerConfirm: pickedValue => { let sel = `${pickedValue[0]}-${pickedValue[1]}-${pickedValue[2]} ${pickedValue[4]}:${pickedValue[5]}`; this.setState({ time:sel }); 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(); } _isPickerShow(){ Picker.isPickerShow(status => { alert(status); }); } render() { return ( <View style={{height:'100%'}}> <RowLayout tag = '日期选择' lineColor = '#999' content = {this.state.date} showArrow onClick = {() => { this._showDatePicker(); }} /> <RowLayout tag = '时间选择' lineColor = '#999' content = {this.state.time} showArrow onClick = {() => { this._showTimePicker(); }} /> <RowLayout tag = 'toggle()' lineColor = '#999' content = '' showArrow onClick = {() => { this._toggle(); }} /> <RowLayout tag = 'isPickerShow()' lineColor = '#999' content = '' showArrow onClick = {() => { this._isPickerShow(); }} /> <TextInput placeholder="测试Picker与Input共存" style={{ height: 40, marginLeft: 20, marginRight: 20, marginTop: 10, padding: 5 }} /> </View> ); } } //make this component available to the app export default PickerViewDemo;