From 7c61f18dda8c10060085e58b50261e24ba43f4cb Mon Sep 17 00:00:00 2001 From: Nicolae Pascu Date: Tue, 13 Feb 2018 09:05:30 +1100 Subject: [PATCH 1/2] JENKINS-47022 - Fix for dropdown losing focus on selection (#1652) * on IE, restore focus on dropdown button after selection * force the dropdown to regain focus after selection on all browsers * add test to verify that the dropdown component retains focus after option selection --- .../src/js/components/forms/Dropdown.jsx | 5 +++++ .../test/js/components/Dropdown-spec.jsx | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/jenkins-design-language/src/js/components/forms/Dropdown.jsx b/jenkins-design-language/src/js/components/forms/Dropdown.jsx index f4b2712d59f..a083e044655 100644 --- a/jenkins-design-language/src/js/components/forms/Dropdown.jsx +++ b/jenkins-design-language/src/js/components/forms/Dropdown.jsx @@ -265,6 +265,11 @@ export class Dropdown extends React.Component { if (this.props.onChange) { this.props.onChange(option, index); } + + //restore the focus on the button element + if (this.buttonRef && this.buttonRef.focus) { + this.buttonRef.focus(); + } } _optionToLabel(option) { diff --git a/jenkins-design-language/test/js/components/Dropdown-spec.jsx b/jenkins-design-language/test/js/components/Dropdown-spec.jsx index aef52cedb8f..13ffe7a1143 100644 --- a/jenkins-design-language/test/js/components/Dropdown-spec.jsx +++ b/jenkins-design-language/test/js/components/Dropdown-spec.jsx @@ -56,4 +56,20 @@ describe("Dropdown", () => { assert.equal(drop.find('ul.Dropdown-menu li').length, options.length); // dropdown options same length then our array? assert.equal(drop.find('#unit').length, 1); // only on footer? }); + it('dropDown should still have focus after option selection', () => { + const wrapper = mount(); + assert.ok(wrapper); + const drop = wrapper.find('Dropdown'); + // click the dropDown button + drop.find('button').simulate('click'); + // click on the 1st option + drop.find("li a").first().simulate('click'); + //get focused element + const focusedElement = document.activeElement; + //verify that the focused element is the dropdown button + assert.equal(focusedElement, drop.find('button').get(0)); + }); }); From 06789a63777c2748d88e2e40a734efca46200535 Mon Sep 17 00:00:00 2001 From: Nicolae Pascu Date: Tue, 13 Feb 2018 18:11:34 +1100 Subject: [PATCH 2/2] publish new version of the JDL for JENKINS-47022 (#1654) --- jenkins-design-language/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkins-design-language/package.json b/jenkins-design-language/package.json index bc8069bec6c..cc73a63ccb3 100644 --- a/jenkins-design-language/package.json +++ b/jenkins-design-language/package.json @@ -1,7 +1,7 @@ { "name": "@jenkins-cd/design-language", "jdlName": "jenkins-design-language", - "version": "0.0.158", + "version": "0.0.160", "description": "Styles, assets, and React classes for Jenkins Design Language", "main": "dist/js/components/index.js", "scripts": {