File tree 4 files changed +72
-1
lines changed
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(
477
477
const newValue = getMiniDecimal ( value ) ;
478
478
setDecimalValue ( newValue ) ;
479
479
480
+ const currentParsedValue = getMiniDecimal ( mergedParser ( inputValue ) ) ;
481
+
480
482
// When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
481
483
// But let it go if user set `formatter`
482
- if ( newValue . isNaN ( ) || ! userTypingRef . current || formatter ) {
484
+ if ( ! newValue . equals ( currentParsedValue ) || ! userTypingRef . current || formatter ) {
483
485
// Update value as effect
484
486
setInputValue ( newValue , userTypingRef . current ) ;
485
487
}
Original file line number Diff line number Diff line change @@ -475,4 +475,30 @@ describe('InputNumber.Github', () => {
475
475
476
476
expect ( wrapper . getInputValue ( ) ) . toEqual ( '-0' ) ;
477
477
} ) ;
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
+ } ) ;
478
504
} ) ;
You can’t perform that action at this time.
0 commit comments