-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathARTouchProvider.js
More file actions
60 lines (60 loc) · 1.58 KB
/
ARTouchProvider.js
File metadata and controls
60 lines (60 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import React, { Component, createContext } from "react";
import { doTap } from "./RNSwiftBridge";
const { Provider, Consumer: ARTouchConsumer } = createContext({});
class ARTouchProvider extends Component {
registeredNodes = {};
constructor(props) {
super(props);
this.state = {
providerValue: {
registerNode: this.registerNode.bind(this),
removeNode: this.removeNode.bind(this),
triggerAtLocation: this.triggerAtLocation.bind(this)
}
};
}
async getNodesFromLocation(x, y) {
const out = await doTap(x, y);
return out;
}
async triggerAtLocation(prop, x, y) {
const out = await this.getNodesFromLocation(x, y);
if (out.nodes && out.nodes.length) {
for (var x = 0; x < out.nodes.length; x++) {
if (this.triggerProp(out.nodes[x], prop)) break;
}
}
}
triggerProp(nodeID, propName) {
const node = this.registeredNodes[nodeID];
if (
node &&
node.props &&
node.props[propName] &&
typeof node.props[propName] == "function"
) {
node.props[propName]();
return true;
}
return false;
}
registerNode(id, node) {
this.registeredNodes[id] = node;
}
removeNode(id) {
delete this.registeredNodes[id];
}
render() {
return (
<Provider value={this.state.providerValue}>
{typeof this.props.children == "function" ? (
<ARTouchConsumer>{this.props.children}</ARTouchConsumer>
) : (
this.props.children
)}
</Provider>
);
}
}
export { ARTouchProvider, ARTouchConsumer };
export default ARTouchProvider;