Skip to content

Commit 6d99461

Browse files
fix(ui5-calendar): opening month/year pickers with space now works correct (#3561)
Fixes: #3555
1 parent 9da6031 commit 6d99461

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

packages/main/src/CalendarHeader.hbs

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
tabindex="0"
2020
@click={{onMonthButtonClick}}
2121
@keydown={{onMonthButtonKeyDown}}
22+
@keyup={{onMonthButtonKeyUp}}
2223
>
2324
{{_monthButtonText}}
2425
</div>
@@ -29,6 +30,7 @@
2930
tabindex="0"
3031
@click={{onYearButtonClick}}
3132
@keydown={{onYearButtonKeyDown}}
33+
@keyup={{onYearButtonKeyUp}}
3234
>
3335
{{_yearButtonText}}
3436
</div>

packages/main/src/CalendarHeader.js

+22-2
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,17 @@ class CalendarHeader extends UI5Element {
117117
}
118118

119119
onMonthButtonKeyDown(event) {
120-
if (isSpace(event) || isEnter(event)) {
120+
if (isSpace(event)) {
121+
event.preventDefault();
122+
}
123+
124+
if (isEnter(event)) {
125+
this.fireEvent("show-month-press", event);
126+
}
127+
}
128+
129+
onMonthButtonKeyUp(event) {
130+
if (isSpace(event)) {
121131
event.preventDefault();
122132
this.fireEvent("show-month-press", event);
123133
}
@@ -128,7 +138,17 @@ class CalendarHeader extends UI5Element {
128138
}
129139

130140
onYearButtonKeyDown(event) {
131-
if (isSpace(event) || isEnter(event)) {
141+
if (isSpace(event)) {
142+
event.preventDefault();
143+
}
144+
145+
if (isEnter(event)) {
146+
this.fireEvent("show-year-press", event);
147+
}
148+
}
149+
150+
onYearButtonKeyUp(event) {
151+
if (isSpace(event)) {
132152
event.preventDefault();
133153
this.fireEvent("show-year-press", event);
134154
}

packages/main/test/specs/Calendar.spec.js

+37
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,43 @@ describe("Calendar general interaction", () => {
7575
assert.ok(new Date(parseInt(focusedItemTimestamp) * 1000).getUTCFullYear() === 1997, "The focused year is 1997");
7676
});
7777

78+
it("Calendar focuses the selected month when monthpicker is opened with space", () => {
79+
browser.url(`http://localhost:${PORT}/test-resources/pages/Calendar.html`);
80+
const calendar = browser.$("#calendar1");
81+
const dayPicker = calendar.shadow$("ui5-daypicker");
82+
const monthPicker = calendar.shadow$("ui5-monthpicker");
83+
const currentDayItem = dayPicker.shadow$(`div[data-sap-timestamp="974851200"]`);
84+
calendar.setAttribute("timestamp", new Date(Date.UTC(2000, 10, 22, 0, 0, 0)).valueOf() / 1000);
85+
86+
currentDayItem.click();
87+
browser.keys("Tab");
88+
browser.keys("Space");
89+
90+
const focusedItemTimestamp = monthPicker.shadow$(`[tabindex="0"]`).getAttribute("data-sap-timestamp");
91+
const isHidden = monthPicker.getAttribute("hidden");
92+
assert.ok(!isHidden, "The monthpicker is present");
93+
assert.ok(new Date(parseInt(focusedItemTimestamp) * 1000).getUTCMonth() === 10, "The focused month is November");
94+
});
95+
96+
it("Calendar focuses the selected year when yearpicker is opened with space", () => {
97+
browser.url(`http://localhost:${PORT}/test-resources/pages/Calendar.html`);
98+
const calendar = browser.$("#calendar1");
99+
const dayPicker = calendar.shadow$("ui5-daypicker");
100+
const yearPicker = calendar.shadow$("ui5-yearpicker");
101+
const currentDayItem = dayPicker.shadow$(`div[data-sap-timestamp="974851200"]`);
102+
calendar.setAttribute("timestamp", new Date(Date.UTC(2000, 10, 22, 0, 0, 0)).valueOf() / 1000);
103+
104+
currentDayItem.click();
105+
browser.keys("Tab");
106+
browser.keys("Tab");
107+
browser.keys("Space");
108+
109+
const isHidden = yearPicker.getAttribute("hidden");
110+
assert.ok(!isHidden, "The yearpicker is present");
111+
const focusedItemTimestamp = yearPicker.shadow$(`[tabindex="0"]`).getAttribute("data-sap-timestamp");
112+
assert.ok(new Date(parseInt(focusedItemTimestamp) * 1000).getUTCFullYear() === 2000, "The focused year is 2000");
113+
});
114+
78115
it("Calendar doesn't mark year as selected when there are no selected dates", () => {
79116
browser.url(`http://localhost:${PORT}/test-resources/pages/Calendar.html`);
80117
const calendar = browser.$("#calendar1");

0 commit comments

Comments
 (0)