React events: extract common helper functions (#15449)
Nicolas Gallagher committed
Apr 19, 2019 at 08:40 UTC
5857c89da2b7322c24dc4448408a2c0d7489ac82
1 file changed
+60
packages/react-events/src/utils.js
new
+60
@@ -0,0 +1,60 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow
8
+ */
9
+
10
+import type {
11
+ ReactResponderEvent,
12
+ ReactResponderContext,
13
+} from 'shared/ReactTypes';
14
+
15
+export function getEventCurrentTarget(
16
+ event: ReactResponderEvent,
17
+ context: ReactResponderContext,
18
+) {
19
+ const target: any = event.target;
20
+ let currentTarget = target;
21
+ while (
22
+ currentTarget.parentNode &&
23
+ currentTarget.parentNode.nodeType === Node.ELEMENT_NODE &&
24
+ context.isTargetWithinEventComponent(currentTarget.parentNode)
25
+ ) {
26
+ currentTarget = currentTarget.parentNode;
27
+ }
28
+ return currentTarget;
29
+}
30
+
31
+export function getEventPointerType(event: ReactResponderEvent) {
32
+ const nativeEvent: any = event.nativeEvent;
33
+ const {type, pointerType} = nativeEvent;
34
+ if (pointerType != null) {
35
+ return pointerType;
36
+ }
37
+ if (type.indexOf('mouse') === 0) {
38
+ return 'mouse';
39
+ }
40
+ if (type.indexOf('touch') === 0) {
41
+ return 'touch';
42
+ }
43
+ if (type.indexOf('key') === 0) {
44
+ return 'keyboard';
45
+ }
46
+ return '';
47
+}
48
+
49
+export function isEventPositionWithinTouchHitTarget(
50
+ event: ReactResponderEvent,
51
+ context: ReactResponderContext,
52
+) {
53
+ const nativeEvent: any = event.nativeEvent;
54
+ const target: any = event.target;
55
+ return context.isPositionWithinTouchHitTarget(
56
+ target.ownerDocument,
57
+ nativeEvent.x,
58
+ nativeEvent.y,
59
+ );
60
+}