1+ "use strict" ;
2+
3+ Object . defineProperty ( exports , "__esModule" , {
4+ value : true
5+ } ) ;
6+ exports . default = void 0 ;
7+ var _react = _interopRequireWildcard ( require ( "react" ) ) ;
8+ var _propTypes = _interopRequireDefault ( require ( "prop-types" ) ) ;
9+ var _Calendar = _interopRequireDefault ( require ( "../Calendar" ) ) ;
10+ var _DayCell = require ( "../DayCell" ) ;
11+ var _utils = require ( "../../utils" ) ;
12+ var _dateFns = require ( "date-fns" ) ;
13+ var _classnames = _interopRequireDefault ( require ( "classnames" ) ) ;
14+ var _styles = _interopRequireDefault ( require ( "../../styles" ) ) ;
15+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
16+ function _getRequireWildcardCache ( e ) { if ( "function" != typeof WeakMap ) return null ; var r = new WeakMap ( ) , t = new WeakMap ( ) ; return ( _getRequireWildcardCache = function ( e ) { return e ? t : r ; } ) ( e ) ; }
17+ function _interopRequireWildcard ( e , r ) { if ( ! r && e && e . __esModule ) return e ; if ( null === e || "object" != typeof e && "function" != typeof e ) return { default : e } ; var t = _getRequireWildcardCache ( r ) ; if ( t && t . has ( e ) ) return t . get ( e ) ; var n = { __proto__ : null } , a = Object . defineProperty && Object . getOwnPropertyDescriptor ; for ( var u in e ) if ( "default" !== u && Object . prototype . hasOwnProperty . call ( e , u ) ) { var i = a ? Object . getOwnPropertyDescriptor ( e , u ) : null ; i && ( i . get || i . set ) ? Object . defineProperty ( n , u , i ) : n [ u ] = e [ u ] ; } return n . default = e , t && t . set ( e , n ) , n ; }
18+ function _extends ( ) { _extends = Object . assign ? Object . assign . bind ( ) : function ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] ; for ( var key in source ) { if ( Object . prototype . hasOwnProperty . call ( source , key ) ) { target [ key ] = source [ key ] ; } } } return target ; } ; return _extends . apply ( this , arguments ) ; }
19+ function _defineProperty ( obj , key , value ) { key = _toPropertyKey ( key ) ; if ( key in obj ) { Object . defineProperty ( obj , key , { value : value , enumerable : true , configurable : true , writable : true } ) ; } else { obj [ key ] = value ; } return obj ; }
20+ function _toPropertyKey ( t ) { var i = _toPrimitive ( t , "string" ) ; return "symbol" == typeof i ? i : String ( i ) ; }
21+ function _toPrimitive ( t , r ) { if ( "object" != typeof t || ! t ) return t ; var e = t [ Symbol . toPrimitive ] ; if ( void 0 !== e ) { var i = e . call ( t , r || "default" ) ; if ( "object" != typeof i ) return i ; throw new TypeError ( "@@toPrimitive must return a primitive value." ) ; } return ( "string" === r ? String : Number ) ( t ) ; }
22+ class DateRange extends _react . Component {
23+ constructor ( props , context ) {
24+ var _this ;
25+ super ( props , context ) ;
26+ _this = this ;
27+ _defineProperty ( this , "calcNewSelection" , function ( value ) {
28+ let isSingleValue = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : true ;
29+ const focusedRange = _this . props . focusedRange || _this . state . focusedRange ;
30+ const {
31+ ranges,
32+ onChange,
33+ maxDate,
34+ moveRangeOnFirstSelection,
35+ retainEndDateOnFirstSelection,
36+ disabledDates
37+ } = _this . props ;
38+ const focusedRangeIndex = focusedRange [ 0 ] ;
39+ const selectedRange = ranges [ focusedRangeIndex ] ;
40+ if ( ! selectedRange || ! onChange ) return { } ;
41+ let {
42+ startDate,
43+ endDate
44+ } = selectedRange ;
45+ const now = new Date ( ) ;
46+ let nextFocusRange ;
47+ if ( ! isSingleValue ) {
48+ startDate = value . startDate ;
49+ endDate = value . endDate ;
50+ } else if ( focusedRange [ 1 ] === 0 ) {
51+ // startDate selection
52+ const dayOffset = ( 0 , _dateFns . differenceInCalendarDays ) ( endDate || now , startDate ) ;
53+ const calculateEndDate = ( ) => {
54+ if ( moveRangeOnFirstSelection ) {
55+ return ( 0 , _dateFns . addDays ) ( value , dayOffset ) ;
56+ }
57+ if ( retainEndDateOnFirstSelection ) {
58+ if ( ! endDate || ( 0 , _dateFns . isBefore ) ( value , endDate ) ) {
59+ return endDate ;
60+ }
61+ return value ;
62+ }
63+ return value || now ;
64+ } ;
65+ startDate = value ;
66+ endDate = calculateEndDate ( ) ;
67+ if ( maxDate ) endDate = ( 0 , _dateFns . min ) ( [ endDate , maxDate ] ) ;
68+ nextFocusRange = [ focusedRange [ 0 ] , 1 ] ;
69+ } else {
70+ endDate = value ;
71+ }
72+
73+ // reverse dates if startDate before endDate
74+ let isStartDateSelected = focusedRange [ 1 ] === 0 ;
75+ if ( ( 0 , _dateFns . isBefore ) ( endDate , startDate ) ) {
76+ isStartDateSelected = ! isStartDateSelected ;
77+ [ startDate , endDate ] = [ endDate , startDate ] ;
78+ }
79+ const inValidDatesWithinRange = disabledDates . filter ( disabledDate => ( 0 , _dateFns . isWithinInterval ) ( disabledDate , {
80+ start : startDate ,
81+ end : endDate
82+ } ) ) ;
83+ if ( inValidDatesWithinRange . length > 0 ) {
84+ if ( isStartDateSelected ) {
85+ startDate = ( 0 , _dateFns . addDays ) ( ( 0 , _dateFns . max ) ( inValidDatesWithinRange ) , 1 ) ;
86+ } else {
87+ endDate = ( 0 , _dateFns . addDays ) ( ( 0 , _dateFns . min ) ( inValidDatesWithinRange ) , - 1 ) ;
88+ }
89+ }
90+ if ( ! nextFocusRange ) {
91+ const nextFocusRangeIndex = ( 0 , _utils . findNextRangeIndex ) ( _this . props . ranges , focusedRange [ 0 ] ) ;
92+ nextFocusRange = [ nextFocusRangeIndex , 0 ] ;
93+ }
94+ return {
95+ wasValid : ! ( inValidDatesWithinRange . length > 0 ) ,
96+ range : {
97+ startDate,
98+ endDate
99+ } ,
100+ nextFocusRange : nextFocusRange
101+ } ;
102+ } ) ;
103+ _defineProperty ( this , "setSelection" , ( value , isSingleValue ) => {
104+ const {
105+ onChange,
106+ ranges,
107+ onRangeFocusChange
108+ } = this . props ;
109+ const focusedRange = this . props . focusedRange || this . state . focusedRange ;
110+ const focusedRangeIndex = focusedRange [ 0 ] ;
111+ const selectedRange = ranges [ focusedRangeIndex ] ;
112+ if ( ! selectedRange ) return ;
113+ const newSelection = this . calcNewSelection ( value , isSingleValue ) ;
114+ onChange ( {
115+ [ selectedRange . key || `range${ focusedRangeIndex + 1 } ` ] : {
116+ ...selectedRange ,
117+ ...newSelection . range
118+ }
119+ } ) ;
120+ this . setState ( {
121+ focusedRange : newSelection . nextFocusRange ,
122+ preview : null
123+ } ) ;
124+ onRangeFocusChange && onRangeFocusChange ( newSelection . nextFocusRange ) ;
125+ } ) ;
126+ _defineProperty ( this , "handleRangeFocusChange" , focusedRange => {
127+ this . setState ( {
128+ focusedRange
129+ } ) ;
130+ this . props . onRangeFocusChange && this . props . onRangeFocusChange ( focusedRange ) ;
131+ } ) ;
132+ _defineProperty ( this , "updatePreview" , val => {
133+ if ( ! val ) {
134+ this . setState ( {
135+ preview : null
136+ } ) ;
137+ return ;
138+ }
139+ const {
140+ rangeColors,
141+ ranges
142+ } = this . props ;
143+ const focusedRange = this . props . focusedRange || this . state . focusedRange ;
144+ const color = ranges [ focusedRange [ 0 ] ] ?. color || rangeColors [ focusedRange [ 0 ] ] || color ;
145+ this . setState ( {
146+ preview : {
147+ ...val . range ,
148+ color
149+ }
150+ } ) ;
151+ } ) ;
152+ this . state = {
153+ focusedRange : props . initialFocusedRange || [ ( 0 , _utils . findNextRangeIndex ) ( props . ranges ) , 0 ] ,
154+ preview : null
155+ } ;
156+ this . styles = ( 0 , _utils . generateStyles ) ( [ _styles . default , props . classNames ] ) ;
157+ }
158+ render ( ) {
159+ return /*#__PURE__*/ _react . default . createElement ( _Calendar . default , _extends ( {
160+ focusedRange : this . state . focusedRange ,
161+ onRangeFocusChange : this . handleRangeFocusChange ,
162+ preview : this . state . preview ,
163+ onPreviewChange : value => {
164+ this . updatePreview ( value ? this . calcNewSelection ( value ) : null ) ;
165+ }
166+ } , this . props , {
167+ displayMode : "dateRange" ,
168+ className : ( 0 , _classnames . default ) ( this . styles . dateRangeWrapper , this . props . className ) ,
169+ onChange : this . setSelection ,
170+ updateRange : val => this . setSelection ( val , false ) ,
171+ ref : target => {
172+ this . calendar = target ;
173+ }
174+ } ) ) ;
175+ }
176+ }
177+ DateRange . defaultProps = {
178+ classNames : { } ,
179+ ranges : [ ] ,
180+ moveRangeOnFirstSelection : false ,
181+ retainEndDateOnFirstSelection : false ,
182+ rangeColors : [ '#3d91ff' , '#3ecf8e' , '#fed14c' ] ,
183+ disabledDates : [ ]
184+ } ;
185+ DateRange . propTypes = {
186+ ..._Calendar . default . propTypes ,
187+ onChange : _propTypes . default . func ,
188+ onRangeFocusChange : _propTypes . default . func ,
189+ className : _propTypes . default . string ,
190+ ranges : _propTypes . default . arrayOf ( _DayCell . rangeShape ) ,
191+ moveRangeOnFirstSelection : _propTypes . default . bool ,
192+ retainEndDateOnFirstSelection : _propTypes . default . bool
193+ } ;
194+ var _default = exports . default = DateRange ;
0 commit comments