-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dropdown: call onAddItem after onChange #2106
Comments
Why don't use controlled components? |
Hey layershifter! Thanks for looking at this. It already is a controlled component. The The modified pen allows selection of the newly added value because there are now two states that hold the value ( If we use the same state to hold value in both the It's possible to work around this by storing the newly added value in a class property (in the 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. |
I will be first who down wote this solution 😄 I'm that there is a simple and elegant solution, it's a call this.handleChange(e, newValue)
// Heads up! This event handler should be called after `onChange`
// Notify the onAddItem prop if this is a new value
if (item['data-additional']) _.invoke(this.props, 'onAddItem', e, { ...this.props, value })) We also should add new test that asserts this: const onChange = spy.sandbox()
const onAddItem = spy.sandbox()
wrapperMount(<Dropdown onAddItem={onAddItem} onChange={onChange) />
// chore work to add item
onChange.should.have.been.calledOnce()
onAddItem.should.have.been.calledOnce()
onAddItem.should.have.been.calledImmediatelyAfter(onChange) I think this will fully solve your problem. |
I want to include this in next release, so picking up |
I don't see how the PR fixes the issue reported where we need to create and select the unique ID of a newly added option. This is extremely important in multiple select dropdown |
Steps
(Using the testcase)
text
andvalue
properties;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
andvalue
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
andvalue
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 bysetValue
,setSelectedIndex
andhandleChange
, 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 thesetValue
,setSelectedIndex
andhandleChange
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
The text was updated successfully, but these errors were encountered: