about summary refs log tree commit diff
path: root/src/view/com/pager/FixedTouchableHighlight.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/com/pager/FixedTouchableHighlight.tsx')
-rw-r--r--src/view/com/pager/FixedTouchableHighlight.tsx42
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>
+  )
+}