@@ -92,21 +92,36 @@ class DateRangePicker extends DatePicker {
92
92
constructor ( ) {
93
93
super ( ) ;
94
94
this . isFirstDatePick = true ;
95
+ this . _initialRendering = true ;
96
+ this . _oneTimeStampSelected = false ; // Used to determine whether the first & last date is the same
97
+ this . _dayPickerMouseoverHandler = this . _itemMouseoverHandler . bind ( this ) ;
95
98
}
96
99
97
100
async onAfterRendering ( ) {
98
- this . responsivePopover = await this . _respPopover ( ) ;
99
- const calendar = this . responsivePopover . querySelector ( `#${ this . _id } -calendar` ) ;
100
- const dayPicker = calendar . shadowRoot . querySelector ( `#${ calendar . _id } -daypicker` ) ;
101
- dayPicker . addEventListener ( "item-mouseover" , this . _itemMouseoverHandler ) ;
102
- dayPicker . addEventListener ( "daypickerrendered" , this . _keyboardNavigationHandler ) ;
101
+ const daypicker = this . getDayPicker ( ) ;
102
+ this . _cleanHoveredAttributeFromVisibleItems ( daypicker ) ;
103
+ this . _initialRendering = false ;
104
+ }
105
+
106
+ async onEnterDOM ( ) {
107
+ const daypicker = await this . getDayPicker ( ) ;
108
+ daypicker . addEventListener ( "item-mouseover" , this . _dayPickerMouseoverHandler ) ;
109
+ daypicker . addEventListener ( "daypickerrendered" , this . _keyboardNavigationHandler ) ;
110
+ }
103
111
104
- this . _cleanHoveredAttributeFromVisibleItems ( dayPicker ) ;
112
+ async onExitDOM ( ) {
113
+ const daypicker = await this . getDayPicker ( ) ;
114
+ daypicker . removeEventListener ( "item-mouseover" , this . _dayPickerMouseoverHandler ) ;
115
+ daypicker . removeEventListener ( "daypickerrendered" , this . _keyboardNavigationHandler ) ;
105
116
}
106
117
107
118
_itemMouseoverHandler ( event ) {
119
+ if ( this . _oneTimeStampSelected ) {
120
+ return ;
121
+ }
122
+
108
123
const dayItems = event . target . shadowRoot . querySelectorAll ( ".ui5-dp-item" ) ;
109
- const firstDateTimestamp = this . _selectedDates [ 0 ] ;
124
+ const firstDateTimestamp = event . target . _selectedDates [ 0 ] ;
110
125
const lastDateTimestamp = event . detail . target . parentElement . dataset . sapTimestamp ;
111
126
112
127
for ( let i = 0 ; i < dayItems . length ; i ++ ) {
@@ -198,6 +213,11 @@ class DateRangePicker extends DatePicker {
198
213
timestamp = focusTimestamp || oCalDate . valueOf ( ) / 1000 ,
199
214
dates = this . _splitValueByDelimiter ( this . value ) ;
200
215
216
+ if ( this . _initialRendering ) {
217
+ this . _oneTimeStampSelected = dates [ 0 ] . trim ( ) === dates [ 1 ] . trim ( ) ;
218
+ this . _setValue ( this . value ) ;
219
+ }
220
+
201
221
this . _calendar = Object . assign ( { } , this . _calendar ) ;
202
222
this . _calendar . timestamp = timestamp ;
203
223
if ( this . value && this . _checkValueValidity ( this . value ) ) {
@@ -245,10 +265,21 @@ class DateRangePicker extends DatePicker {
245
265
return this . placeholder !== undefined ? this . placeholder : this . _displayFormat . concat ( " " , this . delimiter , " " , this . _displayFormat ) ;
246
266
}
247
267
268
+ async getDayPicker ( ) {
269
+ this . responsivePopover = await this . _respPopover ( ) ;
270
+ const calendar = this . responsivePopover . querySelector ( `#${ this . _id } -calendar` ) ;
271
+ return calendar . shadowRoot . querySelector ( `#${ calendar . _id } -daypicker` ) ;
272
+ }
273
+
248
274
async _handleInputChange ( ) {
249
275
const nextValue = await this . _getInput ( ) . getInputValue ( ) ;
250
276
const emptyValue = nextValue === "" ;
251
277
const isValid = emptyValue || this . _checkValueValidity ( nextValue ) ;
278
+ const dates = this . _splitValueByDelimiter ( nextValue ) ;
279
+
280
+ if ( dates . length === 2 ) {
281
+ this . _oneTimeStampSelected = dates [ 0 ] . trim ( ) === dates [ 1 ] . trim ( ) ;
282
+ }
252
283
253
284
if ( isValid ) {
254
285
this . _setValue ( nextValue ) ;
@@ -307,13 +338,8 @@ class DateRangePicker extends DatePicker {
307
338
308
339
_handleCalendarChange ( event ) {
309
340
const newValue = event . detail . dates && event . detail . dates [ 0 ] ;
310
- const calendarSelectedDates = this . _calendar . selectedDates ;
311
-
312
- if ( calendarSelectedDates [ 0 ] === newValue || calendarSelectedDates [ calendarSelectedDates . length - 1 ] === newValue ) {
313
- this . closePicker ( ) ;
314
- return false ;
315
- }
316
341
342
+ this . _oneTimeStampSelected = false ;
317
343
if ( this . isFirstDatePick ) {
318
344
this . isFirstDatePick = false ;
319
345
this . _firstDateTimestamp = newValue ;
@@ -327,6 +353,7 @@ class DateRangePicker extends DatePicker {
327
353
this . _lastDateTimestamp = this . _firstDateTimestamp ;
328
354
this . _firstDateTimestamp = newValue ;
329
355
} else {
356
+ this . _oneTimeStampSelected = newValue === this . _firstDateTimestamp ;
330
357
this . _lastDateTimestamp = newValue ;
331
358
}
332
359
const fireChange = this . _handleCalendarSelectedDatesChange ( ) ;
@@ -356,12 +383,13 @@ class DateRangePicker extends DatePicker {
356
383
return true ;
357
384
}
358
385
359
- _cleanHoveredAttributeFromVisibleItems ( dayPicker ) {
386
+ async _cleanHoveredAttributeFromVisibleItems ( dayPicker ) {
360
387
if ( ! dayPicker ) {
361
388
return ;
362
389
}
363
390
364
- const dayItems = dayPicker . shadowRoot . querySelectorAll ( ".ui5-dp-item" ) ;
391
+ const daypicker = await this . getDayPicker ( ) ;
392
+ const dayItems = daypicker . shadowRoot . querySelectorAll ( ".ui5-dp-item" ) ;
365
393
366
394
for ( let i = 0 ; i < dayItems . length ; i ++ ) {
367
395
dayItems [ i ] . removeAttribute ( "hovered" ) ;
@@ -382,7 +410,7 @@ class DateRangePicker extends DatePicker {
382
410
lastDateString = format . format ( new Date ( lastDateValue * 1000 ) ) ;
383
411
384
412
if ( firstDateValue ) {
385
- if ( delimiter && delimiter !== "" && lastDateString && lastDateString !== firstDateString ) {
413
+ if ( delimiter && delimiter !== "" && lastDateString ) {
386
414
value = firstDateString . concat ( " " , delimiter , " " , lastDateString ) ;
387
415
} else {
388
416
value = firstDateString ;
0 commit comments