question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Dropdown: call onAddItem after onChange

See original GitHub issue

Steps

(Using the testcase)

  1. Use options with distinct text and value properties;
  2. In a Dropdown with allowAdditions set, type a new entry and confirm addition;

Expected Result

A way to set a custom value to the newly added item is provided before it is auto-selected.

Actual Result

The newly added item has both its text and value properties set to the input text and is then selected based on that string.

This is caused by the item insertion logic in getMenuOptions that sets both the text and value properties of new items to the user-inserted text when the user confirms the entry. onAddItem is then called with the new value (which is fine), immediately followed by setValue, setSelectedIndex and handleChange, which attempt to select the item using the same value.

This behavior gives no opportunity to set an appropriate value property (a unique ID, for instance) to the newly inserted item before it is auto-selected. In the testcase, this is attempted in the onAddItem handler, but setting the value property there means the setValue, setSelectedIndex and handleChange calls fail as they use the old value (the user-inserted text). There is then no elegant way to select the newly added item.

Version

0.73.1

Testcase

https://codepen.io/anon/pen/xXEVqK

Issue Analytics

  • State:closed
  • Created 6 years ago
  • Reactions:1
  • Comments:5 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
layershiftercommented, Sep 24, 2017

I want to include this in next release, so picking up

1reaction
idmadjcommented, Sep 23, 2017

Hey layershifter! Thanks for looking at this.

It already is a controlled component. The currentValue state is used to store the value.

The modified pen allows selection of the newly added value because there are now two states that hold the value (state.currentValue and state.value), but then other items can no longer be selected as state.value has priority (the newly added item remains selected until another item is added).

If we use the same state to hold value in both the onAddItem and onChange handlers, the state change in onAddItem is ignored as the code in getMenuOptions immediately calls handleChange (which calls onChange), changing the state to the initial value (the user-inserted text). (codepen)

It’s possible to work around this by storing the newly added value in a class property (in the onAddItem handler), then using that when changing the value state in the onChange handler, although that’s not the cleanest of ways. (codepen)

My guess is that a new function prop that allows customizing the value for new items would resolve this, but I’d like to hear your thoughts first.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Semantic UI react dropdown search allowAddition, how to ...
The onChange event doesn't currently indicate if the value is new, but you can easily determine that by looping through the options.
Read more >
Trigger Action after DropDown Value Select - OutSystems
I set it but I cannot seem to call the value in another screen in a Reactive web app. The onchange Listener can...
Read more >
Select - Ant Design
Select component to select value from options. When To Use. A dropdown menu for displaying choices - an elegant alternative to the native...
Read more >
Tutorial: The ComboBox class - JUCE
A ComboBox component contains the items Plain, Bold, and Italic. The user can select one of these items to change the style of...
Read more >
Controlled dropdown selection with React, Redux ... - Medium
Controlled dropdown selection with React, Redux, and Semantic-UI-React ... The onAddItem call back must create an option object with a value ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found