File tree Expand file tree Collapse file tree 4 files changed +72
-1
lines changed Expand file tree Collapse file tree 4 files changed +72
-1
lines changed Original file line number Diff line number Diff line change 1+ ## debug
2+
3+ <code src =" ../examples/debug.tsx " >
Original file line number Diff line number Diff line change 1+ /* eslint no-console:0 */
2+ import React , { useEffect } from 'react' ;
3+ import InputNumber from 'rc-input-number' ;
4+ import '../../assets/index.less' ;
5+
6+ export default ( ) => {
7+ const [ value , setValue ] = React . useState < string | number > ( 5 ) ;
8+
9+ useEffect ( ( ) => {
10+ function keyDown ( event : KeyboardEvent ) {
11+ if ( ( event . ctrlKey === true || event . metaKey ) && event . keyCode === 90 ) {
12+ setValue ( 3 ) ;
13+ }
14+ }
15+ document . addEventListener ( 'keydown' , keyDown ) ;
16+
17+ return ( ) => document . removeEventListener ( 'keydown' , keyDown ) ;
18+ } , [ ] ) ;
19+
20+ return (
21+ < >
22+ < InputNumber
23+ style = { { width : 100 } }
24+ onChange = { ( nextValue ) => {
25+ console . log ( 'Change:' , nextValue ) ;
26+ setValue ( nextValue ) ;
27+ } }
28+ value = { value }
29+ />
30+ { value }
31+ < button
32+ onClick = { ( ) => {
33+ setValue ( 99 ) ;
34+ } }
35+ >
36+ Change
37+ </ button >
38+ </ >
39+ ) ;
40+ } ;
Original file line number Diff line number Diff line change @@ -477,9 +477,11 @@ const InputNumber = React.forwardRef(
477477 const newValue = getMiniDecimal ( value ) ;
478478 setDecimalValue ( newValue ) ;
479479
480+ const currentParsedValue = getMiniDecimal ( mergedParser ( inputValue ) ) ;
481+
480482 // When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
481483 // But let it go if user set `formatter`
482- if ( newValue . isNaN ( ) || ! userTypingRef . current || formatter ) {
484+ if ( ! newValue . equals ( currentParsedValue ) || ! userTypingRef . current || formatter ) {
483485 // Update value as effect
484486 setInputValue ( newValue , userTypingRef . current ) ;
485487 }
Original file line number Diff line number Diff line change @@ -475,4 +475,30 @@ describe('InputNumber.Github', () => {
475475
476476 expect ( wrapper . getInputValue ( ) ) . toEqual ( '-0' ) ;
477477 } ) ;
478+
479+ // https://github.com/ant-design/ant-design/issues/32274
480+ it ( 'global modify when typing' , ( ) => {
481+ const Demo = ( { value } : { value ?: number } ) => {
482+ const [ val , setVal ] = React . useState < string | number > ( 7 ) ;
483+
484+ React . useEffect ( ( ) => {
485+ if ( value ) {
486+ setVal ( value ) ;
487+ }
488+ } , [ value ] ) ;
489+
490+ return < InputNumber value = { val } onChange = { setVal } /> ;
491+ } ;
492+ const wrapper = mount ( < Demo /> ) ;
493+
494+ // Click
495+ wrapper . find ( '.rc-input-number-handler-up' ) . simulate ( 'mouseDown' ) ;
496+ expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toEqual ( '8' ) ;
497+
498+ // Keyboard change
499+ wrapper . find ( 'input' ) . simulate ( 'keyDown' ) ;
500+ wrapper . setProps ( { value : 3 } ) ;
501+ wrapper . update ( ) ;
502+ expect ( wrapper . find ( 'input' ) . prop ( 'value' ) ) . toEqual ( '3' ) ;
503+ } ) ;
478504} ) ;
You can’t perform that action at this time.
0 commit comments