-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
NumberControl
: commit (and constrain) value on blur
event
#39186
Merged
Merged
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
e3bc714
`InputControl`: always commit value to internal state on `blur`
ciampo b2f2138
`NumberControl`: constain value also on the `UPDATE` action
ciampo bb15bd2
CHANGELOG
ciampo 823cf7b
Add unit test
ciampo a1c6fc7
Remove `UPDATE` action from `InputControl` s state reducer
ciampo 1e5123c
Add unit test to check that `onChange` gets called when the value is …
ciampo 6f5696e
Fix input control blur logic, so that `onChange` is called after clam…
ciampo 5db0df6
Comments
ciampo f6d2654
Use `event.target.validity.valid` in docs, storybook and unit tests
ciampo 1154566
README
ciampo 046ca57
Add docs and update example about input validity
ciampo 5a6154f
Update `onChange` event type
ciampo 43ff576
Override `event.target`, update types
ciampo dad09a5
Revert docs and Storybook changes about `target.visibility` potential…
ciampo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,6 +23,7 @@ export default { | |
|
||
function Example() { | ||
const [ value, setValue ] = useState( '0' ); | ||
const [ isValidValue, setIsValidValue ] = useState( true ); | ||
|
||
const props = { | ||
disabled: boolean( 'disabled', false ), | ||
|
@@ -32,18 +33,24 @@ function Example() { | |
label: text( 'label', 'Number' ), | ||
min: number( 'min', 0 ), | ||
max: number( 'max', 100 ), | ||
placeholder: text( 'placeholder', 0 ), | ||
placeholder: text( 'placeholder', '0' ), | ||
required: boolean( 'required', false ), | ||
shiftStep: number( 'shiftStep', 10 ), | ||
step: text( 'step', 1 ), | ||
step: text( 'step', '1' ), | ||
}; | ||
|
||
return ( | ||
<NumberControl | ||
{ ...props } | ||
value={ value } | ||
onChange={ ( v ) => setValue( v ) } | ||
/> | ||
<> | ||
<NumberControl | ||
{ ...props } | ||
value={ value } | ||
onChange={ ( v, extra ) => { | ||
setValue( v ); | ||
setIsValidValue( extra.event.target.validity.valid ); | ||
} } | ||
/> | ||
<p>Is valid? { isValidValue ? 'Yes' : 'No' }</p> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice way of visualising this in Storybook 👍 |
||
</> | ||
); | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I have a slight (though not at all strong) preference for having the second param be the plain event object rather than nesting it within an
extra
object. There's a familiarity with having the second param of callbacks be the event object itself, so it might make this component slightly easier for someone new to looking at it if we don't add in this abstraction.But I'm aware you probably added it in mostly thinking of the
isValid
flag? I think given the documentation now coversevent.target.validity.valid
, we'd probably be fine not adding in any additional metadata.What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Chiming in to say the shape of that goes back well before this PR. I've suggested the same #33696 (comment). My feeling is the components are experimental so we have license to make the change as long as we fix up any internal stuff that might break. Good for a separate PR though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As @stokesman mentioned, the
extra
object existed before this PR and is defined inInputControl
.For example,
UnitControl
extends thatextra
object by adding a customdata
property too (which seems to include extra info about which unit is being selected).Given the above, I'm not sure what would be the best way to simplify the signature of the
onChange
callback — but it's definitely something that can be done in a follow-upThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, excellent, thanks for linking the prior discussion, glad I'm not alone there! 😄
Yes, I think that's perfectly fine for a follow-up, not a blocker for me!