Skip to content

Commit cff4670

Browse files
authored
fix: prevent hover state from showing when ToggleButtonGroup is disabled (#9449)
1 parent 953488a commit cff4670

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

packages/react-aria-components/src/ToggleButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const ToggleButton = /*#__PURE__*/ (forwardRef as forwardRefType)(functio
7171
: useToggleButton({...props, id: props.id != null ? String(props.id) : undefined}, state, ref);
7272

7373
let {focusProps, isFocused, isFocusVisible} = useFocusRing(props);
74-
let {hoverProps, isHovered} = useHover(props);
74+
let {hoverProps, isHovered} = useHover({...props, isDisabled});
7575
let renderProps = useRenderProps({
7676
...props,
7777
id: undefined,

packages/react-aria-components/test/ToggleButtonGroup.test.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13-
import {pointerMap, render} from '@react-spectrum/test-utils-internal';
13+
import {installPointerEvent, pointerMap, render} from '@react-spectrum/test-utils-internal';
1414
import React from 'react';
1515
import {ToggleButton, ToggleButtonGroup} from '../';
1616
import userEvent from '@testing-library/user-event';
@@ -25,6 +25,7 @@ function renderGroup(props) {
2525
}
2626

2727
describe('ToggleButtonGroup', () => {
28+
installPointerEvent();
2829
let user;
2930
beforeAll(() => {
3031
user = userEvent.setup({delay: null, pointerMap});
@@ -59,6 +60,17 @@ describe('ToggleButtonGroup', () => {
5960
}
6061
});
6162

63+
it('should not show hover state when disabled', async () => {
64+
let {getAllByRole} = renderGroup({isDisabled: true, className: ({isHovered}) => (isHovered ? 'hover' : '')});
65+
let radios = getAllByRole('radio');
66+
await user.hover(radios[0]);
67+
expect(radios[0]).not.toHaveAttribute('data-hovered');
68+
expect(radios[0]).not.toHaveClass('hover');
69+
await user.hover(radios[1]);
70+
expect(radios[1]).not.toHaveAttribute('data-hovered');
71+
expect(radios[1]).not.toHaveClass('hover');
72+
});
73+
6274
it('should support uncontrolled single selection', async () => {
6375
let onSelectionChange = jest.fn();
6476
let {getByRole, getAllByRole} = renderGroup({selectionMode: 'single', onSelectionChange});

0 commit comments

Comments
 (0)