1
1
import * as React from 'react' ;
2
2
import { PressableProps } from 'react-native' ;
3
- import { PressableFocusProps , PressableHoverProps , PressableHoverEventProps , PressablePressProps } from './Pressability/Pressability.types' ;
3
+ import { PressableFocusProps , PressableHoverProps , PressablePressProps } from './Pressability/Pressability.types' ;
4
4
import {
5
5
IPressableHooks ,
6
6
IWithPressableOptions ,
@@ -16,16 +16,10 @@ import { usePressability } from './usePressability';
16
16
/**
17
17
* hover specific state and callback helper
18
18
*/
19
- function useHoverHelper ( props : PressableHoverProps ) : [ PressableHoverEventProps , IHoverState ] {
19
+ function useHoverHelper ( props : PressableHoverProps ) : [ PressableHoverProps , IHoverState ] {
20
20
const [ hoverState , setHoverState ] = React . useState ( { hovered : false } ) ;
21
21
22
- // https://github.com/facebook/react-native/issues/32406
23
- // Pressability exposes onHoverIn & onHoverOut, and converts them into onMouseEnter/onMouseLeave event handlers
24
- // passed into an inner <View> component. However,Pressable does not expose onHoverIn/onHoverOut as props. Our
25
- // desktop ports do expose onMouseEnter & onMouseLeave as event handlers on View though. As a workaround, let's
26
- // have our public API take in onHoverIn & onHoverOut as props, but pass them as onMouseEnter/onMouseLeave
27
-
28
- const onMouseEnter = React . useCallback (
22
+ const onHoverIn = React . useCallback (
29
23
( e ) => {
30
24
setHoverState ( { hovered : true } ) ;
31
25
if ( props . onHoverIn ) {
@@ -35,7 +29,7 @@ function useHoverHelper(props: PressableHoverProps): [PressableHoverEventProps,
35
29
[ setHoverState , props . onHoverIn ] ,
36
30
) ;
37
31
38
- const onMouseLeave = React . useCallback (
32
+ const onHoverOut = React . useCallback (
39
33
( e ) => {
40
34
setHoverState ( { hovered : false } ) ;
41
35
if ( props . onHoverOut ) {
@@ -44,7 +38,7 @@ function useHoverHelper(props: PressableHoverProps): [PressableHoverEventProps,
44
38
} ,
45
39
[ setHoverState , props . onHoverOut ] ,
46
40
) ;
47
- return [ { onMouseEnter , onMouseLeave } , hoverState ] ;
41
+ return [ { onHoverIn , onHoverOut } , hoverState ] ;
48
42
}
49
43
50
44
/**
@@ -132,12 +126,8 @@ export function usePressState<T extends object>(props: IWithPressableOptions<T>)
132
126
*/
133
127
// eslint-disable-next-line @typescript-eslint/ban-types
134
128
export function useHoverState < T extends object > ( props : IWithPressableOptions < T > ) : [ IWithPressableEvents < T > , IHoverState ] {
135
- // https://github.com/facebook/react-native/issues/32406
136
- // Pressability takes in onHoverIn & onHoverOut, while useHoverHelper returns onMouseEnter & onMouseLeave.
137
- // Lets be sure to pass these props properly into usePressability.
138
129
const [ hoverProps , hoverState ] = useHoverHelper ( props ) ;
139
- const { onMouseEnter, onMouseLeave, ...restHoverProps } = hoverProps ;
140
- return [ { ...props , ...usePressability ( { ...props , onHoverIn : onMouseEnter , onHoverOut : onMouseLeave , ...restHoverProps } ) } , hoverState ] ;
130
+ return [ { ...props , ...usePressability ( { ...props , ...hoverProps } ) } , hoverState ] ;
141
131
}
142
132
143
133
/**
@@ -152,16 +142,8 @@ export function useAsPressable<T extends object>(props: IWithPressableOptions<T>
152
142
const [ hoverProps , hoverState ] = useHoverHelper ( props ) ;
153
143
const [ focusProps , focusState ] = useFocusHelper ( props ) ;
154
144
const [ pressProps , pressState ] = usePressHelper ( props ) ;
145
+ const pressabilityProps = usePressability ( { ...props , ...hoverProps , ...focusProps , ...pressProps } ) ;
155
146
156
- // https://github.com/facebook/react-native/issues/32406
157
- // Convert onMouseEnter & onMouseLeave back into onHoverIn & onHoverOut before passing into usePressability
158
- const pressabilityProps = usePressability ( {
159
- onHoverIn : hoverProps . onMouseEnter ,
160
- onHoverOut : hoverProps . onMouseLeave ,
161
- ...focusProps ,
162
- ...pressProps ,
163
- ...props ,
164
- } ) ;
165
147
return {
166
148
props : { ...props , ...pressabilityProps } ,
167
149
state : { ...hoverState , ...focusState , ...pressState } ,
0 commit comments