tweak
This commit is contained in:
@@ -1,16 +1,17 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {
|
import {
|
||||||
GestureResponderEvent,
|
GestureResponderEvent,
|
||||||
|
MeasureOnSuccessCallback,
|
||||||
NativeMouseEvent,
|
NativeMouseEvent,
|
||||||
NativeSyntheticEvent,
|
NativeSyntheticEvent,
|
||||||
PressableProps,
|
PressableProps,
|
||||||
View,
|
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {Pressable as BSPressable} from 'react-native-gesture-handler'
|
import {Pressable as BSPressable} from 'react-native-gesture-handler'
|
||||||
import {PressableEvent} from 'react-native-gesture-handler/lib/typescript/components/Pressable/PressableProps'
|
import {PressableEvent} from 'react-native-gesture-handler/lib/typescript/components/Pressable/PressableProps'
|
||||||
|
|
||||||
function pressableEventToGestureResponderEvent(
|
function pressableEventToGestureResponderEvent(
|
||||||
event: PressableEvent,
|
event: PressableEvent,
|
||||||
|
target: NormalizedRNGHPressable,
|
||||||
): GestureResponderEvent {
|
): GestureResponderEvent {
|
||||||
return {
|
return {
|
||||||
nativeEvent: {
|
nativeEvent: {
|
||||||
@@ -20,8 +21,10 @@ function pressableEventToGestureResponderEvent(
|
|||||||
identifier: event.nativeEvent.identifier.toString(),
|
identifier: event.nativeEvent.identifier.toString(),
|
||||||
target: event.nativeEvent.target.toString(),
|
target: event.nativeEvent.target.toString(),
|
||||||
},
|
},
|
||||||
target: null,
|
// @ts-expect-error
|
||||||
currentTarget: null,
|
target: target,
|
||||||
|
// @ts-expect-error
|
||||||
|
currentTarget: target,
|
||||||
preventDefault() {},
|
preventDefault() {},
|
||||||
stopPropagation() {},
|
stopPropagation() {},
|
||||||
cancelable: false,
|
cancelable: false,
|
||||||
@@ -43,11 +46,14 @@ function pressableEventToGestureResponderEvent(
|
|||||||
|
|
||||||
function pressableEventToMouseEvent(
|
function pressableEventToMouseEvent(
|
||||||
event: PressableEvent,
|
event: PressableEvent,
|
||||||
|
target: NormalizedRNGHPressable,
|
||||||
): MouseEvent & NativeSyntheticEvent<NativeMouseEvent> {
|
): MouseEvent & NativeSyntheticEvent<NativeMouseEvent> {
|
||||||
return {
|
return {
|
||||||
...event.nativeEvent,
|
...event.nativeEvent,
|
||||||
target: null,
|
// @ts-expect-error
|
||||||
currentTarget: null,
|
target: target,
|
||||||
|
// @ts-expect-error
|
||||||
|
currentTarget: target,
|
||||||
preventDefault() {},
|
preventDefault() {},
|
||||||
stopPropagation() {},
|
stopPropagation() {},
|
||||||
cancelable: false,
|
cancelable: false,
|
||||||
@@ -59,60 +65,64 @@ function pressableEventToMouseEvent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const NormalizedRNGHPressable = React.forwardRef<View, PressableProps>(
|
export class NormalizedRNGHPressable extends React.Component<PressableProps> {
|
||||||
function NormalizedPressable(
|
static displayName = 'Pressable'
|
||||||
{
|
|
||||||
onPress,
|
measure = (_: MeasureOnSuccessCallback) => {}
|
||||||
onLongPress,
|
|
||||||
onPressIn,
|
measureLayout = (_: number) => {}
|
||||||
onPressOut,
|
|
||||||
onHoverIn,
|
measureInWindow = (
|
||||||
onHoverOut,
|
_: (x: number, y: number, width: number, height: number) => void,
|
||||||
onFocus: _onFocus,
|
) => {}
|
||||||
...rest
|
|
||||||
},
|
setNativeProps = (_: PressableProps) => {}
|
||||||
_ref,
|
|
||||||
) {
|
focus = () => {}
|
||||||
const onNormalizedPress = (event: PressableEvent) => {
|
|
||||||
if (!onPress) return
|
blur = () => {}
|
||||||
onPress(pressableEventToGestureResponderEvent(event))
|
|
||||||
|
onPress = (event: PressableEvent) => {
|
||||||
|
if (!this.props.onPress) return
|
||||||
|
this.props.onPress(pressableEventToGestureResponderEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNormalizedLongPress = (event: PressableEvent) => {
|
onLongPress = (event: PressableEvent) => {
|
||||||
if (!onLongPress) return
|
if (!this.props.onLongPress) return
|
||||||
onLongPress(pressableEventToGestureResponderEvent(event))
|
this.props.onLongPress(pressableEventToGestureResponderEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNormalizedPressIn = (event: PressableEvent) => {
|
onPressIn = (event: PressableEvent) => {
|
||||||
if (!onPressIn) return
|
if (!this.props.onPressIn) return
|
||||||
onPressIn(pressableEventToGestureResponderEvent(event))
|
this.props.onPressIn(pressableEventToGestureResponderEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNormalizedPressOut = (event: PressableEvent) => {
|
onPressOut = (event: PressableEvent) => {
|
||||||
if (!onPressOut) return
|
if (!this.props.onPressOut) return
|
||||||
onPressOut(pressableEventToGestureResponderEvent(event))
|
this.props.onPressOut(pressableEventToGestureResponderEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNormalizedHoverIn = (event: PressableEvent) => {
|
onHoverIn = (event: PressableEvent) => {
|
||||||
if (!onHoverIn) return
|
if (!this.props.onHoverIn) return
|
||||||
onHoverIn(pressableEventToMouseEvent(event))
|
this.props.onHoverIn(pressableEventToMouseEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNormalizedHoverOut = (event: PressableEvent) => {
|
onHoverOut = (event: PressableEvent) => {
|
||||||
if (!onHoverOut) return
|
if (!this.props.onHoverOut) return
|
||||||
onHoverOut(pressableEventToMouseEvent(event))
|
this.props.onHoverOut(pressableEventToMouseEvent(event, this))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
return (
|
return (
|
||||||
<BSPressable
|
<BSPressable
|
||||||
onPress={onNormalizedPress}
|
{...this.props}
|
||||||
onLongPress={onNormalizedLongPress}
|
onPress={this.onPress}
|
||||||
onPressIn={onNormalizedPressIn}
|
onLongPress={this.onLongPress}
|
||||||
onPressOut={onNormalizedPressOut}
|
onPressIn={this.onPressIn}
|
||||||
onHoverIn={onNormalizedHoverIn}
|
onPressOut={this.onPressOut}
|
||||||
onHoverOut={onNormalizedHoverOut}
|
onHoverIn={this.onHoverIn}
|
||||||
{...rest}
|
onHoverOut={this.onHoverOut}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
},
|
}
|
||||||
)
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user