Skip to content

Commit 242ec90

Browse files
authored
fix: prevent cursor jumping when press delete key (#155)
1 parent 89a2d59 commit 242ec90

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/components/CurrencyInput.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ export const CurrencyInput: FC<CurrencyInputProps> = forwardRef<
123123
/* istanbul ignore next */
124124
if (selectionStart !== undefined && selectionStart !== null) {
125125
// Prevent cursor jumping
126-
const cursor = selectionStart + (formattedValue.length - value.length) || 1;
127-
setCursor(cursor);
126+
const newCursor = selectionStart + (formattedValue.length - value.length) || 1;
127+
setCursor(newCursor);
128128
}
129129

130130
setStateValue(formattedValue);
@@ -250,7 +250,7 @@ export const CurrencyInput: FC<CurrencyInputProps> = forwardRef<
250250
) {
251251
inputRef.current.setSelectionRange(cursor, cursor);
252252
}
253-
}, [cursor, inputRef, dirty]);
253+
}, [stateValue, cursor, inputRef, dirty]);
254254

255255
const formattedPropsValue =
256256
userValue !== undefined

src/components/__tests__/CurrencyInput-backspace.spec.tsx

+18
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,22 @@ describe('<CurrencyInput/> backspace', () => {
5656
userEvent.type(screen.getByRole('textbox'), '{backspace}');
5757
expect(screen.getByRole('textbox')).toHaveValue('');
5858
});
59+
60+
it('should handle Del key without moving cursor', () => {
61+
render(
62+
<CurrencyInput
63+
defaultValue=""
64+
onValueChange={onValueChangeSpy}
65+
groupSeparator={','}
66+
decimalScale={2}
67+
prefix="$"
68+
/>
69+
);
70+
71+
userEvent.type(screen.getByRole('textbox'), '123456789');
72+
expect(screen.getByRole('textbox')).toHaveValue('$123,456,789');
73+
74+
userEvent.type(screen.getByRole('textbox'), '{arrowleft}{arrowleft}{arrowleft}{del}');
75+
expect(screen.getByRole('textbox')).toHaveValue('$12,345,689');
76+
});
5977
});

0 commit comments

Comments
 (0)