UNPKG

@digifi-los/reactapp

Version:
141 lines (122 loc) 3.86 kB
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;