forked from software-mansion/react-native-gesture-handler
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRNGestureHandlerModule.m
More file actions
127 lines (93 loc) · 3.31 KB
/
RNGestureHandlerModule.m
File metadata and controls
127 lines (93 loc) · 3.31 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#import "RNGestureHandlerModule.h"
#import <React/RCTLog.h>
#import <React/RCTViewManager.h>
#import <React/RCTComponent.h>
#import "RNGestureHandlerState.h"
#import "RNGestureHandler.h"
@interface RNGestureHandlerModule () <RNGestureHandlerEventEmitter>
@end
@interface RNDummyViewManager : RCTViewManager
@end
@implementation RNDummyViewManager
RCT_EXPORT_MODULE()
RCT_EXPORT_VIEW_PROPERTY(onGestureHandlerEvent, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(onGestureHandlerStateChange, RCTDirectEventBlock)
@end
@implementation RNGestureHandlerModule
{
RNGestureHandlerRegistry *_registry;
}
RCT_EXPORT_MODULE()
- (dispatch_queue_t)methodQueue
{
return dispatch_get_main_queue();
}
- (void)setBridge:(RCTBridge *)bridge
{
[super setBridge:bridge];
_registry = [RNGestureHandlerRegistry new];
}
RCT_EXPORT_METHOD(createGestureHandler:(nonnull NSNumber *)viewTag withName:(nonnull NSString *)handlerName tag:(nonnull NSNumber *)handlerTag config:(NSDictionary *)config)
{
static NSDictionary *map;
static dispatch_once_t mapToken;
dispatch_once(&mapToken, ^{
map = @{
@"PanGestureHandler" : [RNPanGestureHandler class],
@"TapGestureHandler" : [RNTapGestureHandler class],
@"LongPressGestureHandler": [RNLongPressGestureHandler class],
@"NativeViewGestureHandler": [RNNativeViewGestureHandler class],
@"PinchGestureHandler": [RNPinchGestureHandler class],
@"RotationGestureHandler": [RNRotationGestureHandler class],
};
});
Class nodeClass = map[handlerName];
if (!nodeClass) {
RCTLogError(@"Gesture handler type %@ is not supported", handlerName);
return;
}
RNGestureHandler *gestureHandler = [[nodeClass alloc] initWithTag:handlerTag config:config];
[_registry registerGestureHandler:gestureHandler forViewWithTag:viewTag];
gestureHandler.emitter = self;
UIView *view = [self.bridge.uiManager viewForReactTag:viewTag];
[gestureHandler bindToView:view];
}
RCT_EXPORT_METHOD(dropGestureHandlersForView:(nonnull NSNumber *)viewTag)
{
[_registry dropGestureHandlersForViewWithTag:viewTag];
}
RCT_EXPORT_METHOD(handleSetJSResponder:(nonnull NSNumber *)viewTag blockNativeResponder:(nonnull NSNumber *)blockNativeResponder)
{
// TODO: js responder support
}
RCT_EXPORT_METHOD(handleClearJSResponder)
{
// TODO: js responder support
}
#pragma mark Events
- (NSArray<NSString *> *)supportedEvents
{
return @[@"onGestureHandlerEvent", @"onGestureHandlerStateChange"];
}
- (void)sendTouchEvent:(RNGestureHandlerEvent *)event
{
[self.bridge.eventDispatcher sendEvent:event];
}
- (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event
{
[self.bridge.eventDispatcher sendEvent:event];
}
#pragma mark Module Constants
- (NSDictionary *)constantsToExport
{
return @{ @"State": @{
@"UNDETERMINED": @(RNGestureHandlerStateUndetermined),
@"BEGAN": @(RNGestureHandlerStateBegan),
@"ACTIVE": @(RNGestureHandlerStateActive),
@"CANCELLED": @(RNGestureHandlerStateCancelled),
@"FAILED": @(RNGestureHandlerStateFailed),
@"END": @(RNGestureHandlerStateEnd)
}
};
}
@end