|
@ -1,62 +1,64 @@ |
|
|
import React from 'react'; |
|
|
import React from 'react'; |
|
|
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native'; |
|
|
import { DatePickerIOS, requireNativeComponent, StyleSheet } from 'react-native'; |
|
|
import moment from 'moment' |
|
|
import moment from 'moment' |
|
|
|
|
|
import { throwIfInvalidProps } from "./propChecker" |
|
|
|
|
|
|
|
|
const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } }); |
|
|
const NativeDatePicker = requireNativeComponent(`DatePickerManager`, DatePickerAndroid, { nativeOnly: { onChange: true } }); |
|
|
|
|
|
|
|
|
class DatePickerAndroid extends React.PureComponent { |
|
|
class DatePickerAndroid extends React.PureComponent { |
|
|
|
|
|
|
|
|
static defaultProps = { |
|
|
|
|
|
mode: 'datetime', |
|
|
|
|
|
minuteInterval: 1, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
static defaultProps = { |
|
|
|
|
|
mode: 'datetime', |
|
|
|
|
|
minuteInterval: 1, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
render(){ |
|
|
|
|
|
return ( |
|
|
|
|
|
<NativeDatePicker |
|
|
|
|
|
{...this.props} |
|
|
|
|
|
date={this._date()} |
|
|
|
|
|
minimumDate={this._minimumDate()} |
|
|
|
|
|
maximumDate={this._maximumDate()} |
|
|
|
|
|
onChange={this._onChange} |
|
|
|
|
|
style={[styles.picker, this.props.style]} |
|
|
|
|
|
utc={this.props.timeZoneOffsetInMinutes !== undefined} |
|
|
|
|
|
/> |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
render() { |
|
|
|
|
|
if (__DEV__) throwIfInvalidProps(this.props) |
|
|
|
|
|
return ( |
|
|
|
|
|
<NativeDatePicker |
|
|
|
|
|
{...this.props} |
|
|
|
|
|
date={this._date()} |
|
|
|
|
|
minimumDate={this._minimumDate()} |
|
|
|
|
|
maximumDate={this._maximumDate()} |
|
|
|
|
|
onChange={this._onChange} |
|
|
|
|
|
style={[styles.picker, this.props.style]} |
|
|
|
|
|
utc={this.props.timeZoneOffsetInMinutes !== undefined} |
|
|
|
|
|
/> |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
_onChange = e => { |
|
|
|
|
|
const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date).toDate() |
|
|
|
|
|
this.props.onDateChange(jsDate) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
_onChange = e => { |
|
|
|
|
|
const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date).toDate() |
|
|
|
|
|
this.props.onDateChange(jsDate) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
_maximumDate = () => this.props.maximumDate && this._toIsoWithTimeZoneOffset(this.props.maximumDate); |
|
|
|
|
|
|
|
|
_maximumDate = () => this.props.maximumDate && this._toIsoWithTimeZoneOffset(this.props.maximumDate); |
|
|
|
|
|
|
|
|
_minimumDate = () => this.props.minimumDate && this._toIsoWithTimeZoneOffset(this.props.minimumDate); |
|
|
|
|
|
|
|
|
_minimumDate = () => this.props.minimumDate && this._toIsoWithTimeZoneOffset(this.props.minimumDate); |
|
|
|
|
|
|
|
|
_date = () => this._toIsoWithTimeZoneOffset(this.props.date); |
|
|
|
|
|
|
|
|
_date = () => this._toIsoWithTimeZoneOffset(this.props.date); |
|
|
|
|
|
|
|
|
_fromIsoWithTimeZoneOffset = date => { |
|
|
|
|
|
if (this.props.timeZoneOffsetInMinutes === undefined) |
|
|
|
|
|
return moment(date) |
|
|
|
|
|
|
|
|
_fromIsoWithTimeZoneOffset = date => { |
|
|
|
|
|
if (this.props.timeZoneOffsetInMinutes === undefined) |
|
|
|
|
|
return moment(date) |
|
|
|
|
|
|
|
|
return moment.utc(date).subtract(this.props.timeZoneOffsetInMinutes, 'minutes') |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return moment.utc(date).subtract(this.props.timeZoneOffsetInMinutes, 'minutes') |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
_toIsoWithTimeZoneOffset = date => { |
|
|
|
|
|
if (this.props.timeZoneOffsetInMinutes === undefined) |
|
|
|
|
|
return moment(date).toISOString() |
|
|
|
|
|
|
|
|
_toIsoWithTimeZoneOffset = date => { |
|
|
|
|
|
if (this.props.timeZoneOffsetInMinutes === undefined) |
|
|
|
|
|
return moment(date).toISOString() |
|
|
|
|
|
|
|
|
return moment.utc(date).add(this.props.timeZoneOffsetInMinutes, 'minutes').toISOString() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return moment.utc(date).add(this.props.timeZoneOffsetInMinutes, 'minutes').toISOString() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const styles = StyleSheet.create({ |
|
|
const styles = StyleSheet.create({ |
|
|
picker: { |
|
|
|
|
|
width: 310, |
|
|
|
|
|
height: 180, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
picker: { |
|
|
|
|
|
width: 310, |
|
|
|
|
|
height: 180, |
|
|
|
|
|
} |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
DatePickerAndroid.propTypes = DatePickerIOS.propTypes; |
|
|
DatePickerAndroid.propTypes = DatePickerIOS.propTypes; |
|
|