Skip to content

Commit 8e44d5a

Browse files
authored
Fix Numberfield android focus lost (#2127)
1 parent 63ddab7 commit 8e44d5a

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

packages/@react-aria/button/src/useButton.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export function useButton(props: AriaButtonProps<ElementType>, ref: RefObject<an
5454
onPressChange,
5555
// @ts-ignore - undocumented
5656
preventFocusOnPress,
57+
// @ts-ignore - undocumented
58+
allowFocusWhenDisabled,
5759
// @ts-ignore
5860
onClick: deprecatedOnClick,
5961
href,
@@ -91,6 +93,9 @@ export function useButton(props: AriaButtonProps<ElementType>, ref: RefObject<an
9193
});
9294

9395
let {focusableProps} = useFocusable(props, ref);
96+
if (allowFocusWhenDisabled) {
97+
focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;
98+
}
9499
let buttonProps = mergeProps(focusableProps, pressProps);
95100
buttonProps = mergeProps(buttonProps, filterDOMProps(props, {labelable: true}));
96101

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ export function useNumberField(props: AriaNumberFieldProps, state: NumberFieldSt
260260
'aria-controls': inputId,
261261
excludeFromTabOrder: true,
262262
preventFocusOnPress: true,
263+
allowFocusWhenDisabled: true,
263264
isDisabled: !state.canIncrement,
264265
onPressStart: onButtonPressStart
265266
});
@@ -271,6 +272,7 @@ export function useNumberField(props: AriaNumberFieldProps, state: NumberFieldSt
271272
'aria-controls': inputId,
272273
excludeFromTabOrder: true,
273274
preventFocusOnPress: true,
275+
allowFocusWhenDisabled: true,
274276
isDisabled: !state.canDecrement,
275277
onPressStart: onButtonPressStart
276278
});

packages/@react-aria/spinbutton/src/useSpinButton.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@ export function useSpinButton(
167167
[onDecrement, minValue, value]
168168
);
169169

170+
let cancelContextMenu = (e) => {
171+
e.preventDefault();
172+
};
173+
170174
return {
171175
spinButtonProps: {
172176
role: 'spinbutton',
@@ -182,14 +186,26 @@ export function useSpinButton(
182186
onBlur
183187
},
184188
incrementButtonProps: {
185-
onPressStart: () => onIncrementPressStart(400),
186-
onPressEnd: clearAsync,
189+
onPressStart: () => {
190+
onIncrementPressStart(400);
191+
window.addEventListener('contextmenu', cancelContextMenu);
192+
},
193+
onPressEnd: () => {
194+
clearAsync();
195+
window.removeEventListener('contextmenu', cancelContextMenu);
196+
},
187197
onFocus,
188198
onBlur
189199
},
190200
decrementButtonProps: {
191-
onPressStart: () => onDecrementPressStart(400),
192-
onPressEnd: clearAsync,
201+
onPressStart: () => {
202+
onDecrementPressStart(400);
203+
window.addEventListener('contextmenu', cancelContextMenu);
204+
},
205+
onPressEnd: () => {
206+
clearAsync();
207+
window.removeEventListener('contextmenu', cancelContextMenu);
208+
},
193209
onFocus,
194210
onBlur
195211
}

0 commit comments

Comments
 (0)