Skip to content

Commit c267385

Browse files
authored
NumberField onChange before onBlur (#3207)
NumberField onChange before onBlur
1 parent ec36061 commit c267385

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

packages/@react-aria/numberfield/src/useNumberField.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export function useNumberField(props: AriaNumberFieldProps, state: NumberFieldSt
7070
validationState,
7171
label,
7272
formatOptions,
73-
onBlur,
73+
onBlur = () => {},
7474
onFocus,
7575
onFocusChange,
7676
onKeyDown,
@@ -204,8 +204,8 @@ export function useNumberField(props: AriaNumberFieldProps, state: NumberFieldSt
204204

205205
let inputProps = mergeProps(
206206
spinButtonProps,
207-
textFieldProps,
208207
focusProps,
208+
textFieldProps,
209209
{
210210
// override the spinbutton role, we can't focus a spin button with VO
211211
role: null,

packages/@react-spectrum/numberfield/test/NumberField.test.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('NumberField', function () {
3232
let onKeyUpSpy = jest.fn();
3333

3434
beforeAll(() => {
35-
jest.useFakeTimers('legacy');
35+
jest.useFakeTimers();
3636
});
3737

3838
afterAll(() => {
@@ -283,6 +283,17 @@ describe('NumberField', function () {
283283
expect(onBlurSpy).toHaveBeenCalledTimes(2); // blur spy is called after each blur
284284
});
285285

286+
it.each`
287+
Name
288+
${'NumberField'}
289+
`('$Name fires state change then blur', () => {
290+
let {textField} = renderNumberField({onChange: onChangeSpy, onBlur: onBlurSpy, step: 5});
291+
act(() => {textField.focus();});
292+
typeText(textField, '3');
293+
userEvent.tab();
294+
expect(onChangeSpy.mock.invocationCallOrder[0]).toBeLessThan(onBlurSpy.mock.invocationCallOrder[0]);
295+
});
296+
286297
it.each`
287298
Name
288299
${'NumberField'}

0 commit comments

Comments
 (0)