@@ -3,7 +3,15 @@ import PropTypes from 'prop-types';
33import Calendar from './Calendar.js' ;
44import { rangeShape } from './DayCell' ;
55import { findNextRangeIndex , generateStyles } from '../utils.js' ;
6- import { isBefore , differenceInCalendarDays , addDays , min , isWithinInterval } from 'date-fns' ;
6+ import {
7+ isBefore ,
8+ differenceInCalendarDays ,
9+ addDays ,
10+ min ,
11+ isWithinInterval ,
12+ isAfter ,
13+ max ,
14+ } from 'date-fns' ;
715import classnames from 'classnames' ;
816import coreStyles from '../styles' ;
917
@@ -45,9 +53,9 @@ class DateRange extends Component {
4553 }
4654
4755 // reverse dates if startDate before endDate
48- let hasBeenReversed = false ;
56+ let isStartDateSelected = focusedRange [ 1 ] === 0 ;
4957 if ( isBefore ( endDate , startDate ) ) {
50- hasBeenReversed = true ;
58+ isStartDateSelected = ! isStartDateSelected ;
5159 [ startDate , endDate ] = [ endDate , startDate ] ;
5260 }
5361
@@ -59,12 +67,10 @@ class DateRange extends Component {
5967 ) ;
6068
6169 if ( inValidDatesWithinRange . length > 0 ) {
62- if ( hasBeenReversed ) {
63- const minDate = new Date ( Math . min . apply ( null , inValidDatesWithinRange ) ) ;
64- startDate = new Date ( minDate . getTime ( ) + 24 * 60 * 60 * 1000 ) ;
70+ if ( isStartDateSelected ) {
71+ startDate = addDays ( max ( disabledDates . filter ( date => isBefore ( date , endDate ) ) ) , 1 ) ;
6572 } else {
66- const maxDate = new Date ( Math . max . apply ( null , inValidDatesWithinRange ) ) ;
67- endDate = new Date ( maxDate . getTime ( ) - 24 * 60 * 60 * 1000 ) ;
73+ endDate = addDays ( min ( disabledDates . filter ( date => isAfter ( date , startDate ) ) ) , - 1 ) ;
6874 }
6975 }
7076
@@ -102,7 +108,7 @@ class DateRange extends Component {
102108 this . props . onRangeFocusChange && this . props . onRangeFocusChange ( focusedRange ) ;
103109 }
104110 updatePreview ( val ) {
105- if ( ! val || ! val . wasValid ) {
111+ if ( ! val ) {
106112 this . setState ( { preview : null } ) ;
107113 return ;
108114 }
0 commit comments