Skip to content

Commit bb46034

Browse files
authored
feat(ui5-select): selection can be changed with arrows while closed (#254)
1 parent 25ab0f9 commit bb46034

File tree

3 files changed

+32
-20
lines changed

3 files changed

+32
-20
lines changed

packages/main/src/Select.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import {
44
isSpace,
55
isUp,
66
isDown,
7-
isRight,
8-
isLeft,
97
isEnter,
108
} from "@ui5/webcomponents-base/src/events/PseudoEvents";
119
import ShadowDOM from "@ui5/webcomponents-base/src/compatibility/ShadowDOM";
@@ -183,12 +181,14 @@ class Select extends WebComponent {
183181
return;
184182
}
185183

186-
if (isUp(event) || isLeft(event)) {
187-
return this.Suggestions.onUp(event);
184+
if (isUp(event)) {
185+
this.Suggestions.onUp(event);
186+
this._changeSelectionWhileClosed();
188187
}
189188

190-
if (isDown(event) || isRight(event)) {
191-
return this.Suggestions.onDown(event);
189+
if (isDown(event)) {
190+
this.Suggestions.onDown(event);
191+
this._changeSelectionWhileClosed();
192192
}
193193

194194
if (isSpace(event)) {
@@ -303,6 +303,13 @@ class Select extends WebComponent {
303303
}
304304
}
305305

306+
_changeSelectionWhileClosed() {
307+
if (this.items.length > 1 && !this._opened) {
308+
this._select(this._getPreviewedItem());
309+
this._fireChange(this._getSelectedItem());
310+
}
311+
}
312+
306313
_setSelectedItem(item) {
307314
if (item) {
308315
item.selected = true;

packages/main/src/Suggestions.js

+4-14
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,14 @@ class Suggestions {
3737

3838
/* Public methods */
3939
onUp(event) {
40-
if (this.isOpened()) {
41-
event.preventDefault();
42-
this._handleItemNavigation(false /* forward */);
43-
return true;
44-
}
40+
event.preventDefault();
41+
this._handleItemNavigation(false /* forward */);
4542
return true;
4643
}
4744

4845
onDown(event) {
49-
if (this.isOpened()) {
50-
event.preventDefault();
51-
this._handleItemNavigation(true /* forward */);
52-
return true;
53-
}
46+
event.preventDefault();
47+
this._handleItemNavigation(true /* forward */);
5448
return true;
5549
}
5650

@@ -171,10 +165,6 @@ class Suggestions {
171165
}
172166

173167
_handleItemNavigation(forward) {
174-
if (!this.isOpened()) {
175-
return;
176-
}
177-
178168
if (!this._getItems().length) {
179169
return;
180170
}

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

+15
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ describe("Select general interaction", () => {
5252
assert.ok(selectText.getHTML(false).indexOf(EXPECTED_SELECTION_TEXT2) !== -1, "Select label is correct.");
5353
});
5454

55+
it("changes selection while closed with Arrow Up/Down", () => {
56+
const btn = $("#myBtn2");
57+
const select = $("#mySelect");
58+
const selectText = browser.findElementDeep("#mySelect2 >>> ui5-label");
59+
const EXPECTED_SELECTION_TEXT1 = "Compact";
60+
const EXPECTED_SELECTION_TEXT2 = "Condensed";
61+
62+
select.keys("ArrowUp");
63+
assert.ok(selectText.getHTML(false).indexOf(EXPECTED_SELECTION_TEXT1) > -1, "Arrow Up should change selected item");
64+
65+
select.keys("ArrowDown");
66+
assert.ok(selectText.getHTML(false).indexOf(EXPECTED_SELECTION_TEXT2) > -1, "Arrow Down should change selected item");
67+
});
68+
69+
5570
it("opens upon space", () => {
5671
const btn = $("#myBtn2");
5772
const select = $("#mySelect");

0 commit comments

Comments
 (0)