Skip to content

Commit 3650677

Browse files
committed
format value on every change
1 parent 37f1ed2 commit 3650677

1 file changed

Lines changed: 15 additions & 11 deletions

File tree

src/InputNumber.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ export interface InputNumberProps<T extends ValueType = ValueType>
8888
/** Parse display value to validate number */
8989
parser?: (displayValue: string | undefined, info: { prevValue: string }) => T;
9090
/** Transform `value` to display value show in input */
91-
formatter?: (value: T | undefined, info: { userTyping: boolean; input: string, prevValue: string }) => string;
91+
formatter?: (
92+
value: T | undefined,
93+
info: { userTyping: boolean; input: string; prevValue: string },
94+
) => string;
9295
/** Syntactic sugar of `formatter`. Config precision of display. */
9396
precision?: number;
9497
/** Syntactic sugar of `formatter`. Config decimal separator of display. */
@@ -171,8 +174,8 @@ const InternalInputNumber = React.forwardRef(
171174
}
172175
}
173176

174-
175177
const prevValueRef = React.useRef<string | number>('');
178+
const inputValueRef = React.useRef<string | number>('');
176179

177180
// ====================== Formatter ======================
178181
/**
@@ -222,11 +225,14 @@ const InternalInputNumber = React.forwardRef(
222225
);
223226

224227
// >>> Formatter
225-
const inputValueRef = React.useRef<string | number>('');
226228
const mergedFormatter = React.useCallback(
227229
(number: string, userTyping: boolean) => {
228230
if (formatter) {
229-
return formatter(number, { userTyping, input: String(inputValueRef.current), prevValue: String(prevValueRef.current) });
231+
return formatter(number, {
232+
userTyping,
233+
input: String(inputValueRef.current),
234+
prevValue: String(prevValueRef.current),
235+
});
230236
}
231237

232238
let str = typeof number === 'number' ? num2str(number) : number;
@@ -389,14 +395,12 @@ const InternalInputNumber = React.forwardRef(
389395
const collectInputValue = (inputStr: string) => {
390396
recordCursor();
391397

392-
393398
// Update inputValue in case input can not parse as number
394399
// Refresh ref value immediately since it may used by formatter
395-
prevValueRef.current = inputValueRef.current
400+
prevValueRef.current = inputValueRef.current;
396401
inputValueRef.current = inputStr;
397402
setInternalInputValue(inputStr);
398403

399-
400404
// Parse number
401405
if (!compositionRef.current) {
402406
const finalValue = mergedParser(inputStr);
@@ -488,8 +492,8 @@ const InternalInputNumber = React.forwardRef(
488492
if (value !== undefined) {
489493
// Reset back with controlled value first
490494
setInputValue(decimalValue, false);
491-
} else if (!formatValue.isNaN()) {
492-
// Reset input back since no validate value
495+
} else {
496+
// Format value
493497
setInputValue(formatValue, false);
494498
}
495499
};
@@ -533,7 +537,7 @@ const InternalInputNumber = React.forwardRef(
533537
const onWheel = (event) => {
534538
if (wheel === false) {
535539
return;
536-
};
540+
}
537541
// moving mouse wheel rises wheel event with deltaY < 0
538542
// scroll value grows from top to bottom, as screen Y coordinate
539543
onInternalStep(event.deltaY < 0);
@@ -546,7 +550,7 @@ const InternalInputNumber = React.forwardRef(
546550
// https://stackoverflow.com/questions/63663025/react-onwheel-handler-cant-preventdefault-because-its-a-passive-event-listenev
547551
input.addEventListener('wheel', onWheel);
548552
return () => input.removeEventListener('wheel', onWheel);
549-
};
553+
}
550554
}, [onInternalStep]);
551555

552556
// >>> Focus & Blur

0 commit comments

Comments
 (0)