diff options
Diffstat (limited to 'src/view/com/pager/FixedTouchableHighlight.tsx')
-rw-r--r-- | src/view/com/pager/FixedTouchableHighlight.tsx | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/view/com/pager/FixedTouchableHighlight.tsx b/src/view/com/pager/FixedTouchableHighlight.tsx new file mode 100644 index 000000000..d07196975 --- /dev/null +++ b/src/view/com/pager/FixedTouchableHighlight.tsx @@ -0,0 +1,42 @@ +// FixedTouchableHighlight.tsx +import React, {ComponentProps, useRef} from 'react' +import {GestureResponderEvent, TouchableHighlight} from 'react-native' + +type Position = {pageX: number; pageY: number} + +export default function FixedTouchableHighlight({ + onPress, + onPressIn, + ...props +}: ComponentProps<typeof TouchableHighlight>) { + const _touchActivatePositionRef = useRef<Position | null>(null) + + function _onPressIn(e: GestureResponderEvent) { + const {pageX, pageY} = e.nativeEvent + + _touchActivatePositionRef.current = { + pageX, + pageY, + } + + onPressIn?.(e) + } + + function _onPress(e: GestureResponderEvent) { + const {pageX, pageY} = e.nativeEvent + + const absX = Math.abs(_touchActivatePositionRef.current?.pageX! - pageX) + const absY = Math.abs(_touchActivatePositionRef.current?.pageY! - pageY) + + const dragged = absX > 2 || absY > 2 + if (!dragged) { + onPress?.(e) + } + } + + return ( + <TouchableHighlight onPressIn={_onPressIn} onPress={_onPress} {...props}> + {props.children} + </TouchableHighlight> + ) +} |