Skip to content

Commit 4b58e5d

Browse files
Tabs: focusedElement should remain on the same selected tab after pressing Enter when multiple selection mode is used (T1285635) (DevExpress#29603)
1 parent ae24065 commit 4b58e5d

File tree

2 files changed

+56
-15
lines changed

2 files changed

+56
-15
lines changed

packages/devextreme/js/__internal/ui/tabs/m_tabs.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,16 @@ class Tabs extends CollectionWidget<TabsProperties> {
648648
this._renderScrolling();
649649
}
650650

651+
_enterKeyHandler(
652+
e: KeyboardEvent,
653+
): void {
654+
const { focusedElement } = this.option();
655+
656+
super._enterKeyHandler(e);
657+
658+
this.option('focusedElement', focusedElement);
659+
}
660+
651661
_itemSelectHandler(e: DxEvent): void {
652662
const { selectionMode } = this.option();
653663
if (selectionMode === 'single' && this.isItemSelected(e.currentTarget)) {

packages/devextreme/testing/tests/DevExpress.ui.widgets/tabs.tests.js

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -742,20 +742,20 @@ QUnit.module('Tab select action', () => {
742742
});
743743
const tabs = $tabs.dxTabs('instance');
744744

745-
const tabsItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
745+
const $tabsItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
746746

747-
tabsItemFirst.trigger('dxclick');
747+
$tabsItemFirst.trigger('dxclick');
748748

749749
const $focusedElementFirst = tabs.option('focusedElement');
750750

751-
assert.strictEqual($focusedElementFirst, tabsItemFirst[0]);
751+
assert.strictEqual($focusedElementFirst, $tabsItemFirst[0]);
752752

753753
tabs.option({ selectedIndex: 1 });
754754

755-
const tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
755+
const $tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
756756
const $focusedElementSecond = tabs.option('focusedElement');
757757

758-
assert.strictEqual($focusedElementSecond, tabItemSecond[0]);
758+
assert.strictEqual($focusedElementSecond, $tabItemSecond[0]);
759759
});
760760

761761
QUnit.test('focusedElement must be changed after changing the selectedItem', function(assert) {
@@ -771,20 +771,20 @@ QUnit.module('Tab select action', () => {
771771
});
772772
const tabs = $tabs.dxTabs('instance');
773773

774-
const tabsItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
774+
const $tabsItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
775775

776-
tabsItemFirst.trigger('dxclick');
776+
$tabsItemFirst.trigger('dxclick');
777777

778778
const $focusedElementFirst = tabs.option('focusedElement');
779779

780-
assert.strictEqual($focusedElementFirst, tabsItemFirst[0]);
780+
assert.strictEqual($focusedElementFirst, $tabsItemFirst[0]);
781781

782782
tabs.option({ selectedItem: tabs.option('items[1]') });
783783

784-
const tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
784+
const $tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
785785
const $focusedElementSecond = tabs.option('focusedElement');
786786

787-
assert.strictEqual($focusedElementSecond, tabItemSecond[0]);
787+
assert.strictEqual($focusedElementSecond, $tabItemSecond[0]);
788788
});
789789

790790
QUnit.test('focusedElement must be changed after changing the selectedItems', function(assert) {
@@ -798,20 +798,51 @@ QUnit.module('Tab select action', () => {
798798
const $tabs = $('#tabs').dxTabs({ items, focusStateEnabled: true });
799799
const tabs = $tabs.dxTabs('instance');
800800

801-
const tabItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
801+
const $tabItemFirst = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(0);
802802

803-
tabItemFirst.trigger('dxclick');
803+
$tabItemFirst.trigger('dxclick');
804804

805805
const $focusedElementFirst = tabs.option('focusedElement');
806806

807-
assert.strictEqual($focusedElementFirst, tabItemFirst[0]);
807+
assert.strictEqual($focusedElementFirst, $tabItemFirst[0]);
808808

809809
tabs.option({ selectedItems: [items[1], items[2]] });
810810

811-
const tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
811+
const $tabItemSecond = $tabs.find(`.${TABS_ITEM_CLASS}`).eq(1);
812812
const $focusedElementSecond = tabs.option('focusedElement');
813813

814-
assert.strictEqual($focusedElementSecond, tabItemSecond[0]);
814+
assert.strictEqual($focusedElementSecond, $tabItemSecond[0]);
815+
});
816+
817+
QUnit.test('focusedElement should remain on the same selected tab after pressing Enter when multiple selection mode is used (T1285635)', function(assert) {
818+
const items = [
819+
{ text: '0' },
820+
{ text: '1' },
821+
{ text: '2' },
822+
{ text: '3' },
823+
];
824+
825+
const $tabs = $('#tabs').dxTabs({
826+
items,
827+
focusStateEnabled: true
828+
});
829+
const tabs = $tabs.dxTabs('instance');
830+
831+
const $tabItems = $tabs.find(`.${TABS_ITEM_CLASS}`);
832+
const $secondTab = $tabItems.eq(1);
833+
834+
$secondTab.trigger('dxclick');
835+
836+
const keyboard = keyboardMock($tabs);
837+
keyboard
838+
.press('right')
839+
.press('right')
840+
.press('enter');
841+
842+
const $fourthTab = $tabItems.eq(3);
843+
const focusedElement = tabs.option('focusedElement');
844+
845+
assert.strictEqual(focusedElement, $fourthTab.get(0), 'focusedElement should match the selected tab');
815846
});
816847
});
817848

0 commit comments

Comments
 (0)