yogevbd 6 years ago
parent
commit
d37ca89d94
3 changed files with 28 additions and 24 deletions
  1. 15
    16
      lib/ios/RNNCommandsHandler.m
  2. 4
    4
      lib/ios/RNNModalManager.h
  3. 9
    4
      lib/ios/RNNModalManager.m

+ 15
- 16
lib/ios/RNNCommandsHandler.m View File

33
 	RNNEventEmitter* _eventEmitter;
33
 	RNNEventEmitter* _eventEmitter;
34
 }
34
 }
35
 
35
 
36
--(instancetype) initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter {
36
+- (instancetype)initWithStore:(RNNStore*)store controllerFactory:(RNNControllerFactory*)controllerFactory eventEmitter:(RNNEventEmitter *)eventEmitter {
37
 	self = [super init];
37
 	self = [super init];
38
 	_store = store;
38
 	_store = store;
39
 	_controllerFactory = controllerFactory;
39
 	_controllerFactory = controllerFactory;
46
 
46
 
47
 #pragma mark - public
47
 #pragma mark - public
48
 
48
 
49
--(void) setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
49
+- (void)setRoot:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
50
 	[self assertReady];
50
 	[self assertReady];
51
 	
51
 	
52
 	[_modalManager dismissAllModals];
52
 	[_modalManager dismissAllModals];
59
 	completion();
59
 	completion();
60
 }
60
 }
61
 
61
 
62
--(void) mergeOptions:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
62
+- (void)mergeOptions:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion {
63
 	[self assertReady];
63
 	[self assertReady];
64
 	
64
 	
65
 	UIViewController* vc = [_store findComponentForId:componentId];
65
 	UIViewController* vc = [_store findComponentForId:componentId];
87
 	
87
 	
88
 }
88
 }
89
 
89
 
90
--(void) setDefaultOptions:(NSDictionary*)optionsDict completion:(RNNTransitionCompletionBlock)completion {
90
+- (void)setDefaultOptions:(NSDictionary*)optionsDict completion:(RNNTransitionCompletionBlock)completion {
91
 	[self assertReady];
91
 	[self assertReady];
92
 	[_controllerFactory setDefaultOptionsDict:optionsDict];
92
 	[_controllerFactory setDefaultOptionsDict:optionsDict];
93
 }
93
 }
94
 
94
 
95
--(void)push:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
95
+- (void)push:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
96
 	[self assertReady];
96
 	[self assertReady];
97
 
97
 
98
 	RNNRootViewController *newVc = (RNNRootViewController *)[_controllerFactory createLayoutAndSaveToStore:layout];
98
 	RNNRootViewController *newVc = (RNNRootViewController *)[_controllerFactory createLayoutAndSaveToStore:layout];
135
 	}
135
 	}
136
 }
136
 }
137
 
137
 
138
--(void)setStackRoot:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
138
+- (void)setStackRoot:(NSString*)componentId layout:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
139
 	[self assertReady];
139
 	[self assertReady];
140
 	
140
 	
141
 	UIViewController<RNNRootViewProtocol> *newVC = [_controllerFactory createLayoutAndSaveToStore:layout];
141
 	UIViewController<RNNRootViewProtocol> *newVC = [_controllerFactory createLayoutAndSaveToStore:layout];
148
 	} rejection:rejection];
148
 	} rejection:rejection];
149
 }
149
 }
150
 
150
 
151
--(void)pop:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
151
+- (void)pop:(NSString*)componentId options:(NSDictionary*)options completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
152
 	[self assertReady];
152
 	[self assertReady];
153
 
153
 
154
 	RNNRootViewController *vc = (RNNRootViewController*)[_store findComponentForId:componentId];
154
 	RNNRootViewController *vc = (RNNRootViewController*)[_store findComponentForId:componentId];
175
 	}];
175
 	}];
176
 }
176
 }
177
 
177
 
178
--(void) popTo:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
178
+- (void)popTo:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion rejection:(RCTPromiseRejectBlock)rejection {
179
 	[self assertReady];
179
 	[self assertReady];
180
 	RNNRootViewController *vc = (RNNRootViewController*)[_store findComponentForId:componentId];
180
 	RNNRootViewController *vc = (RNNRootViewController*)[_store findComponentForId:componentId];
181
 	
181
 	
205
 	[CATransaction commit];
205
 	[CATransaction commit];
206
 }
206
 }
207
 
207
 
208
--(void) showModal:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
208
+- (void)showModal:(NSDictionary*)layout completion:(RNNTransitionCompletionBlock)completion {
209
 	[self assertReady];
209
 	[self assertReady];
210
 
210
 
211
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
211
 	UIViewController<RNNRootViewProtocol> *newVc = [_controllerFactory createLayoutAndSaveToStore:layout];
215
 	}];
215
 	}];
216
 }
216
 }
217
 
217
 
218
--(void) dismissModal:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
218
+- (void)dismissModal:(NSString*)componentId completion:(RNNTransitionCompletionBlock)completion {
219
 	[self assertReady];
219
 	[self assertReady];
220
 
220
 
221
 	[CATransaction begin];
221
 	[CATransaction begin];
222
 	[CATransaction setCompletionBlock:^{
222
 	[CATransaction setCompletionBlock:^{
223
 		[_eventEmitter sendOnNavigationCommandCompletion:dismissModal params:@{@"componentId": componentId}];
223
 		[_eventEmitter sendOnNavigationCommandCompletion:dismissModal params:@{@"componentId": componentId}];
224
-		completion();
225
 	}];
224
 	}];
226
 	
225
 	
227
-	[_modalManager dismissModal:componentId];
226
+	[_modalManager dismissModal:componentId completion:completion];
228
 	
227
 	
229
 	[CATransaction commit];
228
 	[CATransaction commit];
230
 }
229
 }
231
 
230
 
232
--(void) dismissAllModalsWithCompletion:(RNNTransitionCompletionBlock)completion {
231
+- (void)dismissAllModalsWithCompletion:(RNNTransitionCompletionBlock)completion {
233
 	[self assertReady];
232
 	[self assertReady];
234
 
233
 
235
 	[CATransaction begin];
234
 	[CATransaction begin];
243
 	[CATransaction commit];
242
 	[CATransaction commit];
244
 }
243
 }
245
 
244
 
246
--(void)showOverlay:(NSDictionary *)layout completion:(RNNTransitionCompletionBlock)completion {
245
+- (void)showOverlay:(NSDictionary *)layout completion:(RNNTransitionCompletionBlock)completion {
247
 	[self assertReady];
246
 	[self assertReady];
248
 
247
 
249
 	UIViewController<RNNRootViewProtocol>* overlayVC = [_controllerFactory createOverlay:layout];
248
 	UIViewController<RNNRootViewProtocol>* overlayVC = [_controllerFactory createOverlay:layout];
266
 
265
 
267
 #pragma mark - private
266
 #pragma mark - private
268
 
267
 
269
--(void)removePopedViewControllers:(NSArray*)viewControllers {
268
+- (void)removePopedViewControllers:(NSArray*)viewControllers {
270
 	for (UIViewController *popedVC in viewControllers) {
269
 	for (UIViewController *popedVC in viewControllers) {
271
 		[_store removeComponentByViewControllerInstance:popedVC];
270
 		[_store removeComponentByViewControllerInstance:popedVC];
272
 	}
271
 	}
273
 }
272
 }
274
 
273
 
275
--(void) assertReady {
274
+- (void)assertReady {
276
 	if (!_store.isReadyToReceiveCommands) {
275
 	if (!_store.isReadyToReceiveCommands) {
277
 		[[NSException exceptionWithName:@"BridgeNotLoadedError"
276
 		[[NSException exceptionWithName:@"BridgeNotLoadedError"
278
 								 reason:@"Bridge not yet loaded! Send commands after Navigation.events().onAppLaunched() has been called."
277
 								 reason:@"Bridge not yet loaded! Send commands after Navigation.events().onAppLaunched() has been called."

+ 4
- 4
lib/ios/RNNModalManager.h View File

6
 
6
 
7
 @property (nonatomic, strong) UIViewController<RNNRootViewProtocol>* toVC;
7
 @property (nonatomic, strong) UIViewController<RNNRootViewProtocol>* toVC;
8
 
8
 
9
--(instancetype)initWithStore:(RNNStore*)store;
10
--(void)showModal:(UIViewController*)viewController animated:(BOOL)animated completion:(RNNTransitionCompletionBlock)completion;
11
--(void)dismissModal:(NSString*)componentId;
12
--(void)dismissAllModals;
9
+- (instancetype)initWithStore:(RNNStore*)store;
10
+- (void)showModal:(UIViewController*)viewController animated:(BOOL)animated completion:(RNNTransitionCompletionBlock)completion;
11
+- (void)dismissModal:(NSString *)componentId completion:(RNNTransitionCompletionBlock)completion;
12
+- (void)dismissAllModals;
13
 
13
 
14
 @end
14
 @end

+ 9
- 4
lib/ios/RNNModalManager.m View File

55
 	}
55
 	}
56
 }
56
 }
57
 
57
 
58
--(void)dismissModal:(NSString *)componentId {
58
+- (void)dismissModal:(NSString *)componentId completion:(RNNTransitionCompletionBlock)completion {
59
 	[[_store pendingModalIdsToDismiss] addObject:componentId];
59
 	[[_store pendingModalIdsToDismiss] addObject:componentId];
60
-	[self removePendingNextModalIfOnTop];
60
+	[self removePendingNextModalIfOnTop:completion];
61
 }
61
 }
62
 
62
 
63
 -(void)dismissAllModals {
63
 -(void)dismissAllModals {
69
 #pragma mark - private
69
 #pragma mark - private
70
 
70
 
71
 
71
 
72
--(void)removePendingNextModalIfOnTop {
72
+-(void)removePendingNextModalIfOnTop:(RNNTransitionCompletionBlock)completion {
73
 	NSString *componentId = [[_store pendingModalIdsToDismiss] lastObject];
73
 	NSString *componentId = [[_store pendingModalIdsToDismiss] lastObject];
74
 	UIViewController<RNNRootViewProtocol> *modalToDismiss = (UIViewController<RNNRootViewProtocol>*)[_store findComponentForId:componentId];
74
 	UIViewController<RNNRootViewProtocol> *modalToDismiss = (UIViewController<RNNRootViewProtocol>*)[_store findComponentForId:componentId];
75
 	RNNNavigationOptions* options = modalToDismiss.getLeafViewController.options;
75
 	RNNNavigationOptions* options = modalToDismiss.getLeafViewController.options;
88
 		[modalToDismiss dismissViewControllerAnimated:options.animations.dismissModal.enable completion:^{
88
 		[modalToDismiss dismissViewControllerAnimated:options.animations.dismissModal.enable completion:^{
89
 			[[_store pendingModalIdsToDismiss] removeObject:componentId];
89
 			[[_store pendingModalIdsToDismiss] removeObject:componentId];
90
 			[_store removeComponent:componentId];
90
 			[_store removeComponent:componentId];
91
-			[self removePendingNextModalIfOnTop];
91
+			
92
+			if (completion) {
93
+				completion();
94
+			}
95
+			
96
+			[self removePendingNextModalIfOnTop:nil];
92
 		}];
97
 		}];
93
 	}
98
 	}
94
 }
99
 }