Skip to content

Commit 0ada41a

Browse files
feat(ui5-datetime-picker): improve keyboard handling support (#2137)
Now you can navigate with arrows between the sliders. Related to #1534
1 parent ad1fbd7 commit 0ada41a

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

packages/main/src/DateTimePicker.js

+39
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import getLocale from "@ui5/webcomponents-base/dist/locale/getLocale.js";
33
import LocaleData from "@ui5/webcomponents-localization/dist/LocaleData.js";
44
import CalendarDate from "@ui5/webcomponents-localization/dist/dates/CalendarDate.js";
55
import "@ui5/webcomponents-icons/dist/icons/date-time.js";
6+
import {
7+
isLeft,
8+
isRight,
9+
} from "@ui5/webcomponents-base/dist/Keys.js";
610
import Button from "./Button.js";
711
import ToggleButton from "./ToggleButton.js";
812
import SegmentedButton from "./SegmentedButton.js";
@@ -245,6 +249,7 @@ class DateTimePicker extends DatePicker {
245249
await this.setSlidersValue();
246250
this.expandHoursSlider();
247251
this.storePreviousValue();
252+
this._slidersDomRefs = await this.slidersDomRefs();
248253
}
249254

250255
/**
@@ -265,6 +270,11 @@ class DateTimePicker extends DatePicker {
265270
return super.isValid(value); // in order to be displayed in the DateTimePicker API reference
266271
}
267272

273+
async slidersDomRefs() {
274+
await this.getPicker();
275+
return this.responsivePopover.getElementsByClassName("ui5-dt-wheel");
276+
}
277+
268278
/**
269279
* Read-only getters
270280
*/
@@ -680,6 +690,35 @@ class DateTimePicker extends DatePicker {
680690
}
681691
}
682692

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+
683722
normalizeDigit(value) {
684723
const valueAsString = value.toString();
685724
return valueAsString.length === 1 ? `0${value}` : valueAsString;

packages/main/src/DateTimePickerPopover.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<span class="ui5-dt-picker-separator"></span>
3232
{{/unless}}
3333

34-
<div class="ui5-dt-time {{classes.dateTimeView}}">
34+
<div class="ui5-dt-time {{classes.dateTimeView}}" @keydown="{{_ontimekeydown}}">
3535
{{#if shouldBuildHoursSlider}}
3636
<ui5-wheelslider
3737
label = "{{hoursLabel}}"

0 commit comments

Comments
 (0)