Skip to content

Commit c2ec2fd

Browse files
ellingemrchief
authored andcommitted
fix: Remove resetting of dropdown on init props (#265) 🐛
Keeps dropdown open if updating with new props. Only updates/sets state open if new props cause the dropdown to show (a.k.a `initial`/`always`) #253 introduced resetting of state for shopDropdown on new props:
1 parent 4263a5e commit c2ec2fd

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ class DropdownTreeSelect extends Component {
7878
if (currentFocusNode) {
7979
currentFocusNode._focused = true
8080
}
81-
this.setState({
82-
showDropdown: /initial|always/.test(showDropdown) || false,
81+
this.setState(prevState => ({
82+
showDropdown: /initial|always/.test(showDropdown) || prevState.showDropdown === true,
8383
...this.treeManager.getTreeAndTags(),
84-
})
84+
}))
8585
}
8686

8787
resetSearchState = () => {

src/index.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,28 @@ test('toggles dropdown', t => {
168168
t.false(wrapper.state().showDropdown)
169169
})
170170

171+
test('keeps dropdown open on props update', t => {
172+
const { tree } = t.context
173+
const wrapper = mount(<DropdownTreeSelect data={tree} />)
174+
wrapper.instance().handleClick()
175+
t.true(wrapper.state().showDropdown)
176+
wrapper.setProps({ data: tree })
177+
t.true(wrapper.state().showDropdown)
178+
})
179+
180+
test('opens dropdown on props update with show intention', t => {
181+
const { tree } = t.context
182+
const wrapper = mount(<DropdownTreeSelect data={tree} />)
183+
t.false(wrapper.state().showDropdown)
184+
wrapper.setProps({ data: tree, showDropdown: 'initial' })
185+
t.true(wrapper.state().showDropdown)
186+
wrapper.instance().handleClick()
187+
t.false(wrapper.state().showDropdown)
188+
wrapper.setProps({ data: tree, showDropdown: 'always' })
189+
wrapper.instance().handleClick()
190+
t.true(wrapper.state().showDropdown)
191+
})
192+
171193
test('sets unique ids on dropdowns', t => {
172194
const { tree } = t.context
173195
clientIdGenerator.reset()

0 commit comments

Comments
 (0)