@@ -3,6 +3,10 @@ import getLocale from "@ui5/webcomponents-base/dist/locale/getLocale.js";
3
3
import LocaleData from "@ui5/webcomponents-localization/dist/LocaleData.js" ;
4
4
import CalendarDate from "@ui5/webcomponents-localization/dist/dates/CalendarDate.js" ;
5
5
import "@ui5/webcomponents-icons/dist/icons/date-time.js" ;
6
+ import {
7
+ isLeft ,
8
+ isRight ,
9
+ } from "@ui5/webcomponents-base/dist/Keys.js" ;
6
10
import Button from "./Button.js" ;
7
11
import ToggleButton from "./ToggleButton.js" ;
8
12
import SegmentedButton from "./SegmentedButton.js" ;
@@ -245,6 +249,7 @@ class DateTimePicker extends DatePicker {
245
249
await this . setSlidersValue ( ) ;
246
250
this . expandHoursSlider ( ) ;
247
251
this . storePreviousValue ( ) ;
252
+ this . _slidersDomRefs = await this . slidersDomRefs ( ) ;
248
253
}
249
254
250
255
/**
@@ -265,6 +270,11 @@ class DateTimePicker extends DatePicker {
265
270
return super . isValid ( value ) ; // in order to be displayed in the DateTimePicker API reference
266
271
}
267
272
273
+ async slidersDomRefs ( ) {
274
+ await this . getPicker ( ) ;
275
+ return this . responsivePopover . getElementsByClassName ( "ui5-dt-wheel" ) ;
276
+ }
277
+
268
278
/**
269
279
* Read-only getters
270
280
*/
@@ -680,6 +690,35 @@ class DateTimePicker extends DatePicker {
680
690
}
681
691
}
682
692
693
+ async _ontimekeydown ( event ) {
694
+ if ( isLeft ( event ) ) {
695
+ let expandedSliderIndex = 0 ;
696
+ for ( let i = 0 ; i < this . _slidersDomRefs . length ; i ++ ) {
697
+ if ( this . _slidersDomRefs [ i ] . _expanded ) {
698
+ expandedSliderIndex = i ;
699
+ }
700
+ }
701
+ if ( this . _slidersDomRefs [ expandedSliderIndex - 1 ] ) {
702
+ this . _slidersDomRefs [ expandedSliderIndex - 1 ] . focus ( ) ;
703
+ } else {
704
+ this . _slidersDomRefs [ this . _slidersDomRefs . length - 1 ] . focus ( ) ;
705
+ }
706
+ } else if ( isRight ( event ) ) {
707
+ let expandedSliderIndex = 0 ;
708
+
709
+ for ( let i = 0 ; i < this . _slidersDomRefs . length ; i ++ ) {
710
+ if ( this . _slidersDomRefs [ i ] . _expanded ) {
711
+ expandedSliderIndex = i ;
712
+ }
713
+ }
714
+ if ( this . _slidersDomRefs [ expandedSliderIndex + 1 ] ) {
715
+ this . _slidersDomRefs [ expandedSliderIndex + 1 ] . focus ( ) ;
716
+ } else {
717
+ this . _slidersDomRefs [ 0 ] . focus ( ) ;
718
+ }
719
+ }
720
+ }
721
+
683
722
normalizeDigit ( value ) {
684
723
const valueAsString = value . toString ( ) ;
685
724
return valueAsString . length === 1 ? `0${ value } ` : valueAsString ;
0 commit comments