@@ -51,7 +51,7 @@ export interface InputNumberProps<T extends ValueType = ValueType>
5151 /** Parse display value to validate number */
5252 parser ?: ( displayValue : string | undefined ) => T ;
5353 /** Transform `value` to display value show in input */
54- formatter ?: ( value : T | undefined ) => string ;
54+ formatter ?: ( value : T | undefined , info : { userTyping : boolean ; input : string } ) => string ;
5555 /** Syntactic sugar of `formatter`. Config precision of display. */
5656 precision ?: number ;
5757 /** Syntactic sugar of `formatter`. Config decimal separator of display. */
@@ -170,10 +170,11 @@ const InputNumber = React.forwardRef(
170170 ) ;
171171
172172 // >>> Formatter
173+ const inputValueRef = React . useRef < string | number > ( '' ) ;
173174 const mergedFormatter = React . useCallback (
174175 ( number : string , userTyping : boolean ) => {
175176 if ( formatter ) {
176- return formatter ( number ) ;
177+ return formatter ( number , { userTyping , input : String ( inputValueRef . current ) } ) ;
177178 }
178179
179180 let str = typeof number === 'number' ? num2str ( number ) : number ;
@@ -212,6 +213,7 @@ const InputNumber = React.forwardRef(
212213 }
213214 return mergedFormatter ( decimalValue . toString ( ) , false ) ;
214215 } ) ;
216+ inputValueRef . current = inputValue ;
215217
216218 // Should always be string
217219 function setInputValue ( newValue : DecimalClass , userTyping : boolean ) {
@@ -469,7 +471,7 @@ const InputNumber = React.forwardRef(
469471 // But let it go if user set `formatter`
470472 if ( newValue . isNaN ( ) || ! userTypingRef . current || formatter ) {
471473 // Update value as effect
472- setInputValue ( newValue , false ) ;
474+ setInputValue ( newValue , userTypingRef . current ) ;
473475 }
474476 } , [ value ] ) ;
475477
0 commit comments