@digifi-los/reactapp
Version:
141 lines (122 loc) • 3.86 kB
JavaScript
import React, { Component, PropTypes, } from 'react';
import momentPropTypes from 'react-moment-proptypes';
import moment from 'moment';
import omit from 'lodash/omit';
import 'react-dates/initialize';
import { getRenderedComponent, } from '../AppLayoutMap';
import { DateRangePicker, DateRangePickerShape, DateRangePickerPhrases, isInclusivelyAfterDay } from 'react-dates';
const propTypes = {
// example props for the demo
autoFocus: PropTypes.bool,
autoFocusEndDate: PropTypes.bool,
initialStartDate: momentPropTypes.momentObj,
initialEndDate: momentPropTypes.momentObj,
};
const defaultProps = {
// example props for the demo
autoFocus: false,
autoFocusEndDate: false,
initialStartDate: null,
initialEndDate: null,
// input related props
startDateId: 'start_date',
startDatePlaceholderText: 'Start Date',
endDateId: 'end_date',
endDatePlaceholderText: 'End Date',
disabled: false,
required: false,
screenReaderInputMessage: '',
showClearDates: false,
showDefaultInputIcon: false,
customInputIcon: null,
customArrowIcon: null,
customCloseIcon: null,
block: false,
small: false,
regular: false,
// calendar presentation and interaction related props
renderMonth: null,
orientation: 'horizontal',
anchorDirection: 'left',
horizontalMargin: 0,
withPortal: false,
withFullScreenPortal: false,
initialVisibleMonth: null,
numberOfMonths: 2,
keepOpenOnDateSelect: false,
reopenPickerOnClearDates: false,
isRTL: false,
// navigation related props
navPrev: null,
navNext: null,
onPrevMonthClick() {},
onNextMonthClick() {},
onClose() {},
// day presentation and interaction related props
renderCalendarDay: undefined,
renderDayContents: null,
minimumNights: 1,
enableOutsideDays: false,
isDayBlocked: () => false,
isOutsideRange: day => !isInclusivelyAfterDay(day, moment()),
isDayHighlighted: () => false,
// internationalization
displayFormat: () => moment.localeData().longDateFormat('L'),
monthFormat: 'MMMM YYYY',
phrases: DateRangePickerPhrases,
};
class DateRangePickerWrapper extends Component {
constructor(props) {
super(props);
let focusedInput = null;
if (props.autoFocus) {
focusedInput = 'start_date';
} else if (props.autoFocusEndDate) {
focusedInput = 'end_date';
}
this.state = {
focusedInput,
startDate: props.initialStartDate,
endDate: props.initialEndDate,
};
this.onDatesChange = this.onDatesChange.bind(this);
this.onFocusChange = this.onFocusChange.bind(this);
}
onDatesChange({ startDate, endDate }) {
this.setState({ startDate, endDate }, () => {
if (this.props.customOnChange) {
this.props.customOnChange({ startDate, endDate });
}
});
}
onFocusChange(focusedInput) {
this.setState({ focusedInput });
}
render() {
const { focusedInput, startDate, endDate } = this.state;
// autoFocus, autoFocusEndDate, initialStartDate and initialEndDate are helper props for the
// example wrapper but are not props on the SingleDatePicker itself and
// thus, have to be omitted.
const props = omit(this.props, [
'autoFocus',
'autoFocusEndDate',
'initialStartDate',
'initialEndDate',
]);
return (
<div>
<DateRangePicker
{...props}
onDatesChange={this.onDatesChange}
onFocusChange={this.onFocusChange}
focusedInput={focusedInput}
startDate={startDate}
endDate={endDate}
/>
</div>
);
}
}
DateRangePickerWrapper.propTypes = propTypes;
DateRangePickerWrapper.defaultProps = defaultProps;
export default DateRangePickerWrapper;