Browse Source

events onNavigationCommand support - #1078

yogevbd 6 years ago
parent
commit
ffa4e13d3a

+ 1
- 1
lib/ios/RNNBridgeManager.m View File

64
 
64
 
65
 	id<RNNRootViewCreator> rootViewCreator = [[RNNReactRootViewCreator alloc] initWithBridge:bridge];
65
 	id<RNNRootViewCreator> rootViewCreator = [[RNNReactRootViewCreator alloc] initWithBridge:bridge];
66
 	RNNControllerFactory *controllerFactory = [[RNNControllerFactory alloc] initWithRootViewCreator:rootViewCreator store:_store eventEmitter:eventEmitter andBridge:bridge];
66
 	RNNControllerFactory *controllerFactory = [[RNNControllerFactory alloc] initWithRootViewCreator:rootViewCreator store:_store eventEmitter:eventEmitter andBridge:bridge];
67
-	_commandsHandler = [[RNNCommandsHandler alloc] initWithStore:_store controllerFactory:controllerFactory];
67
+	_commandsHandler = [[RNNCommandsHandler alloc] initWithStore:_store controllerFactory:controllerFactory eventEmitter:eventEmitter];
68
 	RNNBridgeModule *bridgeModule = [[RNNBridgeModule alloc] initWithCommandsHandler:_commandsHandler];
68
 	RNNBridgeModule *bridgeModule = [[RNNBridgeModule alloc] initWithCommandsHandler:_commandsHandler];
69
 
69
 
70
 	return @[bridgeModule,eventEmitter];
70
 	return @[bridgeModule,eventEmitter];

+ 1
- 1
lib/ios/RNNCommandsHandler.h View File

6
 
6
 
7
 @interface RNNCommandsHandler : NSObject
7
 @interface RNNCommandsHandler : NSObject
8
 
8
 
9
--(instancetype) initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory;
9
+-(instancetype) initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter*)eventEmitter;
10
 
10
 
11
 -(void) setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion;
11
 -(void) setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion;
12
 
12
 

+ 33
- 6
lib/ios/RNNCommandsHandler.m View File

6
 #import "RNNRootViewController.h"
6
 #import "RNNRootViewController.h"
7
 #import "React/RCTUIManager.h"
7
 #import "React/RCTUIManager.h"
8
 
8
 
9
+static NSString* const setRoot	= @"setRoot";
10
+static NSString* const setStackRoot	= @"setStackRoot";
11
+static NSString* const push	= @"push";
12
+static NSString* const pop	= @"pop";
13
+static NSString* const popTo	= @"popTo";
14
+static NSString* const popToRoot	= @"popToRoot";
15
+static NSString* const showModal	= @"showModal";
16
+static NSString* const dismissModal	= @"dismissModal";
17
+static NSString* const dismissAllModals	= @"dismissAllModals";
18
+static NSString* const showOverlay	= @"showOverlay";
19
+static NSString* const dismissOverlay	= @"dismissOverlay";
20
+static NSString* const mergeOptions	= @"mergeOptions";
21
+static NSString* const setDefaultOptions	= @"setDefaultOptions";
22
+
9
 @implementation RNNCommandsHandler {
23
 @implementation RNNCommandsHandler {
10
 	RNNControllerFactory *_controllerFactory;
24
 	RNNControllerFactory *_controllerFactory;
11
 	RNNStore *_store;
25
 	RNNStore *_store;
12
 	RNNNavigationStackManager* _navigationStackManager;
26
 	RNNNavigationStackManager* _navigationStackManager;
13
 	RNNModalManager* _modalManager;
27
 	RNNModalManager* _modalManager;
14
 	RNNOverlayManager* _overlayManager;
28
 	RNNOverlayManager* _overlayManager;
29
+	RNNEventEmitter* _eventEmitter;
15
 }
30
 }
16
 
31
 
17
--(instancetype) initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory {
32
+-(instancetype) initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter {
18
 	self = [super init];
33
 	self = [super init];
19
 	_store = store;
34
 	_store = store;
20
 	_controllerFactory = controllerFactory;
35
 	_controllerFactory = controllerFactory;
36
+	_eventEmitter = eventEmitter;
21
 	_navigationStackManager = [[RNNNavigationStackManager alloc] initWithStore:_store];
37
 	_navigationStackManager = [[RNNNavigationStackManager alloc] initWithStore:_store];
22
 	_modalManager = [[RNNModalManager alloc] initWithStore:_store];
38
 	_modalManager = [[RNNModalManager alloc] initWithStore:_store];
23
 	_overlayManager = [[RNNOverlayManager alloc] initWithStore:_store];
39
 	_overlayManager = [[RNNOverlayManager alloc] initWithStore:_store];
30
 	[self assertReady];
46
 	[self assertReady];
31
 	
47
 	
32
 	[_modalManager dismissAllModals];
48
 	[_modalManager dismissAllModals];
33
-	
49
+	[_eventEmitter sendOnNavigationComment:setRoot params:@{@"layout": layout}];
50
+
34
 	UIViewController *vc = [_controllerFactory createLayoutAndSaveToStore:layout];
51
 	UIViewController *vc = [_controllerFactory createLayoutAndSaveToStore:layout];
35
 	
52
 	
36
 	UIApplication.sharedApplication.delegate.window.rootViewController = vc;
53
 	UIApplication.sharedApplication.delegate.window.rootViewController = vc;
40
 
57
 
41
 -(void) mergeOptions:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
58
 -(void) mergeOptions:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
42
 	[self assertReady];
59
 	[self assertReady];
43
-	
60
+	[_eventEmitter sendOnNavigationComment:mergeOptions params:@{@"componentId": componentId, @"options": options}];
61
+
44
 	UIViewController* vc = [_store findComponentForId:componentId];
62
 	UIViewController* vc = [_store findComponentForId:componentId];
45
 	if([vc isKindOfClass:[RNNRootViewController class]]) {
63
 	if([vc isKindOfClass:[RNNRootViewController class]]) {
46
 		RNNRootViewController* rootVc = (RNNRootViewController*)vc;
64
 		RNNRootViewController* rootVc = (RNNRootViewController*)vc;
56
 
74
 
57
 -(void) setDefaultOptions:(NSDictionary*)optionsDict completion:(RNNTransitionCompletionBlock)completion {
75
 -(void) setDefaultOptions:(NSDictionary*)optionsDict completion:(RNNTransitionCompletionBlock)completion {
58
 	[self assertReady];
76
 	[self assertReady];
77
+	[_eventEmitter sendOnNavigationComment:setDefaultOptions params:@{@"options": optionsDict}];
59
 	[_controllerFactory setDefaultOptionsDict:optionsDict];
78
 	[_controllerFactory setDefaultOptionsDict:optionsDict];
60
 }
79
 }
61
 
80
 
62
 -(void)push:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
81
 -(void)push:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
63
 	[self assertReady];
82
 	[self assertReady];
64
-	
83
+	[_eventEmitter sendOnNavigationComment:push params:@{@"componentId": componentId}];
65
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
84
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
66
 	[_navigationStackManager push:newVc onTop:componentId completion:^{
85
 	[_navigationStackManager push:newVc onTop:componentId completion:^{
67
 		completion();
86
 		completion();
70
 
89
 
71
 -(void)setStackRoot:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
90
 -(void)setStackRoot:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
72
 	[self assertReady];
91
 	[self assertReady];
73
-	
92
+	[_eventEmitter sendOnNavigationComment:setStackRoot params:@{@"componentId": componentId}];
93
+
74
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
94
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
75
 	[_navigationStackManager setRoot:newVc fromComponent:componentId completion:^{
95
 	[_navigationStackManager setRoot:newVc fromComponent:componentId completion:^{
76
 		completion();
96
 		completion();
79
 
99
 
80
 -(void)pop:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
100
 -(void)pop:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
81
 	[self assertReady];
101
 	[self assertReady];
102
+	[_eventEmitter sendOnNavigationComment:pop params:@{@"componentId": componentId}];
82
 	[CATransaction begin];
103
 	[CATransaction begin];
83
 	[CATransaction setCompletionBlock:^{
104
 	[CATransaction setCompletionBlock:^{
84
 		completion();
105
 		completion();
97
 
118
 
98
 -(void) popTo:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
119
 -(void) popTo:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
99
 	[self assertReady];
120
 	[self assertReady];
121
+	[_eventEmitter sendOnNavigationComment:popTo params:@{@"componentId": componentId}];
100
 	[CATransaction begin];
122
 	[CATransaction begin];
101
 	[CATransaction setCompletionBlock:^{
123
 	[CATransaction setCompletionBlock:^{
102
 		completion();
124
 		completion();
109
 
131
 
110
 -(void) popToRoot:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
132
 -(void) popToRoot:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
111
 	[self assertReady];
133
 	[self assertReady];
134
+	[_eventEmitter sendOnNavigationComment:popToRoot params:@{@"componentId": componentId}];
112
 	[CATransaction begin];
135
 	[CATransaction begin];
113
 	[CATransaction setCompletionBlock:^{
136
 	[CATransaction setCompletionBlock:^{
114
 		completion();
137
 		completion();
121
 
144
 
122
 -(void) showModal:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
145
 -(void) showModal:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
123
 	[self assertReady];
146
 	[self assertReady];
124
-	
147
+	[_eventEmitter sendOnNavigationComment:showModal params:@{@"layout": layout}];
125
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
148
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
126
 	[_modalManager showModal:newVc completion:^{
149
 	[_modalManager showModal:newVc completion:^{
127
 		completion();
150
 		completion();
130
 
153
 
131
 -(void) dismissModal:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
154
 -(void) dismissModal:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
132
 	[self assertReady];
155
 	[self assertReady];
156
+	[_eventEmitter sendOnNavigationComment:dismissModal params:@{@"componentId": componentId}];
133
 	[CATransaction begin];
157
 	[CATransaction begin];
134
 	[CATransaction setCompletionBlock:^{
158
 	[CATransaction setCompletionBlock:^{
135
 		completion();
159
 		completion();
142
 
166
 
143
 -(void) dismissAllModalsWithCompletion:(RNNTransitionCompletionBlock)completion {
167
 -(void) dismissAllModalsWithCompletion:(RNNTransitionCompletionBlock)completion {
144
 	[self assertReady];
168
 	[self assertReady];
169
+	[_eventEmitter sendOnNavigationComment:dismissAllModals params:nil];
145
 	[CATransaction begin];
170
 	[CATransaction begin];
146
 	[CATransaction setCompletionBlock:^{
171
 	[CATransaction setCompletionBlock:^{
147
 		completion();
172
 		completion();
154
 
179
 
155
 -(void)showOverlay:(NSDictionary *)layout completion:(RNNTransitionCompletionBlock)completion {
180
 -(void)showOverlay:(NSDictionary *)layout completion:(RNNTransitionCompletionBlock)completion {
156
 	[self assertReady];
181
 	[self assertReady];
182
+	[_eventEmitter sendOnNavigationComment:showOverlay params:@{@"layout": layout}];
157
 	UIViewController<RNNRootViewProtocol>* overlayVC = [_controllerFactory createOverlay:layout];
183
 	UIViewController<RNNRootViewProtocol>* overlayVC = [_controllerFactory createOverlay:layout];
158
 	[_overlayManager showOverlay:overlayVC completion:^{
184
 	[_overlayManager showOverlay:overlayVC completion:^{
159
 		completion();
185
 		completion();
162
 
188
 
163
 - (void)dismissOverlay:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
189
 - (void)dismissOverlay:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
164
 	[self assertReady];
190
 	[self assertReady];
191
+	[_eventEmitter sendOnNavigationComment:dismissModal params:@{@"componentId": componentId}];
165
 	[_overlayManager dismissOverlay:componentId completion:^{	
192
 	[_overlayManager dismissOverlay:componentId completion:^{	
166
 		completion();
193
 		completion();
167
 	}];
194
 	}];

+ 4
- 0
lib/ios/RNNEventEmitter.h View File

14
 
14
 
15
 -(void)sendOnNavigationButtonPressed:(NSString*)componentId buttonId:(NSString*)buttonId;
15
 -(void)sendOnNavigationButtonPressed:(NSString*)componentId buttonId:(NSString*)buttonId;
16
 
16
 
17
+-(void)sendOnNavigationEvent:(NSString *)commandName params:(NSDictionary*)params;
18
+
19
+-(void)sendOnNavigationComment:(NSString *)commandName params:(NSDictionary*)params;
20
+
17
 @end
21
 @end

+ 10
- 0
lib/ios/RNNEventEmitter.m View File

11
 static NSString* const componentDidAppear	= @"RNN.componentDidAppear";
11
 static NSString* const componentDidAppear	= @"RNN.componentDidAppear";
12
 static NSString* const componentDidDisappear	= @"RNN.componentDidDisappear";
12
 static NSString* const componentDidDisappear	= @"RNN.componentDidDisappear";
13
 static NSString* const onNavigationButtonPressed	= @"RNN.onNavigationButtonPressed";
13
 static NSString* const onNavigationButtonPressed	= @"RNN.onNavigationButtonPressed";
14
+static NSString* const onNavigationCommand	= @"RNN.onNavigationCommand";
15
+static NSString* const onNavigationEvent	= @"RNN.onNavigationEvent";
14
 
16
 
15
 -(NSArray<NSString *> *)supportedEvents {
17
 -(NSArray<NSString *> *)supportedEvents {
16
 	return @[onAppLaunched, componentDidAppear, componentDidDisappear, onNavigationButtonPressed];
18
 	return @[onAppLaunched, componentDidAppear, componentDidDisappear, onNavigationButtonPressed];
38
 	[self send:onNavigationButtonPressed body:@{@"componentId":componentId , @"buttonId": buttonId}];
40
 	[self send:onNavigationButtonPressed body:@{@"componentId":componentId , @"buttonId": buttonId}];
39
 }
41
 }
40
 
42
 
43
+-(void)sendOnNavigationComment:(NSString *)commandName params:(NSDictionary*)params {
44
+	[self send:onNavigationButtonPressed body:@{@"commandName":commandName , @"params": params}];
45
+}
46
+
47
+-(void)sendOnNavigationEvent:(NSString *)commandName params:(NSDictionary*)params {
48
+	[self send:onNavigationEvent body:@{@"commandName":commandName , @"params": params}];
49
+}
50
+
41
 - (void)addListener:(NSString *)eventName {
51
 - (void)addListener:(NSString *)eventName {
42
 	[super addListener:eventName];
52
 	[super addListener:eventName];
43
 	if ([eventName isEqualToString:onAppLaunched]) {
53
 	if ([eventName isEqualToString:onAppLaunched]) {