File tree Expand file tree Collapse file tree 2 files changed +41
-4
lines changed
packages/@react-aria/interactions Expand file tree Collapse file tree 2 files changed +41
-4
lines changed Original file line number Diff line number Diff line change @@ -109,7 +109,7 @@ export function useHover(props: HoverProps): HoverResult {
109
109
}
110
110
111
111
state . isHovered = true ;
112
- let target = event . target ;
112
+ let target = event . currentTarget ;
113
113
state . target = target ;
114
114
115
115
if ( onHoverStart ) {
@@ -136,7 +136,7 @@ export function useHover(props: HoverProps): HoverResult {
136
136
}
137
137
138
138
state . isHovered = false ;
139
- let target = event . target ;
139
+ let target = event . currentTarget ;
140
140
if ( onHoverEnd ) {
141
141
onHoverEnd ( {
142
142
type : 'hoverend' ,
@@ -194,7 +194,7 @@ export function useHover(props: HoverProps): HoverResult {
194
194
// Call the triggerHoverEnd as soon as isDisabled changes to true
195
195
// Safe to call triggerHoverEnd, it will early return if we aren't currently hovering
196
196
if ( isDisabled ) {
197
- triggerHoverEnd ( { target : state . target } , state . pointerType ) ;
197
+ triggerHoverEnd ( { currentTarget : state . target } , state . pointerType ) ;
198
198
}
199
199
} , [ isDisabled ] ) ;
200
200
Original file line number Diff line number Diff line change @@ -22,7 +22,7 @@ import {useHover} from '../';
22
22
23
23
function Example ( props ) {
24
24
let { hoverProps, isHovered} = useHover ( props ) ;
25
- return < div { ...hoverProps } > test{ isHovered && '-hovered' } </ div > ;
25
+ return < div { ...hoverProps } > test{ isHovered && '-hovered' } < div data-testid = "inner-target" /> < /div > ;
26
26
}
27
27
28
28
function pointerEvent ( type , opts ) {
@@ -98,6 +98,43 @@ describe('useHover', function () {
98
98
] ) ;
99
99
} ) ;
100
100
101
+ it ( 'hover event target should be the same element we attached listeners to even if we hover over inner elements' , function ( ) {
102
+ let events = [ ] ;
103
+ let addEvent = ( e ) => events . push ( e ) ;
104
+ let res = render (
105
+ < Example
106
+ onHoverStart = { addEvent }
107
+ onHoverEnd = { addEvent }
108
+ onHoverChange = { isHovering => addEvent ( { type : 'hoverchange' , isHovering} ) } />
109
+ ) ;
110
+
111
+ let el = res . getByText ( 'test' ) ;
112
+ let inner = res . getByTestId ( 'inner-target' ) ;
113
+ fireEvent ( inner , pointerEvent ( 'pointerover' , { pointerType : 'mouse' } ) ) ;
114
+ fireEvent ( inner , pointerEvent ( 'pointerout' , { pointerType : 'mouse' } ) ) ;
115
+
116
+ expect ( events ) . toEqual ( [
117
+ {
118
+ type : 'hoverstart' ,
119
+ target : el ,
120
+ pointerType : 'mouse'
121
+ } ,
122
+ {
123
+ type : 'hoverchange' ,
124
+ isHovering : true
125
+ } ,
126
+ {
127
+ type : 'hoverend' ,
128
+ target : el ,
129
+ pointerType : 'mouse'
130
+ } ,
131
+ {
132
+ type : 'hoverchange' ,
133
+ isHovering : false
134
+ }
135
+ ] ) ;
136
+ } ) ;
137
+
101
138
it ( 'should not fire hover events when pointerType is touch' , function ( ) {
102
139
let events = [ ] ;
103
140
let addEvent = ( e ) => events . push ( e ) ;
You can’t perform that action at this time.
0 commit comments