Skip to content

Commit 3e7dbaa

Browse files
authored
Merge branch 'master' into add-architecture-documentation
2 parents 060573c + 9b489ac commit 3e7dbaa

37 files changed

+94
-62
lines changed

Mock.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

ios/RNNNavigationOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ extern const NSInteger BLUR_TOPBAR_TAG;
3636
@property(nonatomic, strong) WindowOptions *window;
3737

3838
@property(nonatomic, strong) Bool *popGesture;
39+
@property(nonatomic, strong) Bool *navigationButtonEventOnSwipeBack;
3940
@property(nonatomic, strong) Image *backgroundImage;
4041
@property(nonatomic, strong) Image *rootBackgroundImage;
4142
@property(nonatomic, strong) Text *modalPresentationStyle;

ios/RNNNavigationOptions.mm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ - (instancetype)initWithDict:(NSDictionary *)dict {
4141
self.window = [[WindowOptions alloc] initWithDict:dict[@"window"]];
4242

4343
self.popGesture = [[Bool alloc] initWithValue:dict[@"popGesture"]];
44+
self.navigationButtonEventOnSwipeBack = [[Bool alloc] initWithValue:dict[@"navigationButtonEventOnSwipeBack"]];
4445
self.backgroundImage = [ImageParser parse:dict key:@"backgroundImage"];
4546
self.rootBackgroundImage = [ImageParser parse:dict key:@"rootBackgroundImage"];
4647
self.modalPresentationStyle = [[Text alloc] initWithValue:dict[@"modalPresentationStyle"]];
@@ -73,6 +74,8 @@ - (RNNNavigationOptions *)mergeOptions:(RNNNavigationOptions *)options {
7374

7475
if (options.popGesture.hasValue)
7576
result.popGesture = options.popGesture;
77+
if (options.navigationButtonEventOnSwipeBack.hasValue)
78+
result.navigationButtonEventOnSwipeBack = options.navigationButtonEventOnSwipeBack;
7679
if (options.backgroundImage.hasValue)
7780
result.backgroundImage = options.backgroundImage;
7881
if (options.rootBackgroundImage.hasValue)
@@ -104,6 +107,7 @@ - (RNNNavigationOptions *)copy {
104107
[newOptions.window mergeOptions:self.window];
105108

106109
newOptions.popGesture = self.popGesture;
110+
newOptions.navigationButtonEventOnSwipeBack = self.navigationButtonEventOnSwipeBack;
107111
newOptions.backgroundImage = self.backgroundImage;
108112
newOptions.rootBackgroundImage = self.rootBackgroundImage;
109113
newOptions.modalPresentationStyle = self.modalPresentationStyle;

ios/ScreenAnimationController.mm

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,21 +75,13 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo
7575
}
7676

7777
- (void)prepareTransitionContext:(id<UIViewControllerContextTransitioning>)transitionContext {
78-
UIViewController *fromViewController =
79-
[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
8078
UIViewController *toViewController =
8179
[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
8280

8381
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
8482
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
8583

86-
BOOL isDismiss = (toView == nil);
87-
88-
if (isDismiss) {
89-
if (fromView) {
90-
[transitionContext.containerView addSubview:fromView];
91-
}
92-
} else {
84+
if (toView) {
9385
toViewController.view.alpha = 0;
9486
if (fromView) {
9587
[transitionContext.containerView addSubview:fromView];
@@ -137,26 +129,39 @@ - (void)performAnimationOnce {
137129
- (void)animateTransitions:(NSArray<id<DisplayLinkAnimatorDelegate>> *)animators
138130
andTransitioningContext:(id<UIViewControllerContextTransitioning>)transitionContext {
139131
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
132+
UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
133+
140134
BOOL isDismiss = (toView == nil);
141135

142-
DisplayLinkAnimator *displayLinkAnimator = [[DisplayLinkAnimator alloc]
143-
initWithDisplayLinkAnimators:animators
144-
duration:[self transitionDuration:transitionContext]];
145-
146-
[displayLinkAnimator setOnStart:^{
147-
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
136+
if (isDismiss) {
137+
[UIView animateWithDuration:[self transitionDuration:transitionContext]
138+
animations:^{
139+
fromVC.view.alpha = 0;
140+
} completion:^(BOOL finished) {
141+
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
142+
fromVC.view.alpha = 1;
143+
}];
144+
return;
145+
}
146+
147+
DisplayLinkAnimator *displayLinkAnimator = [[DisplayLinkAnimator alloc]
148+
initWithDisplayLinkAnimators:animators
149+
duration:[self transitionDuration:transitionContext]];
150+
151+
[displayLinkAnimator setOnStart:^{
148152
if (!isDismiss) {
153+
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
149154
toVC.view.alpha = 1.f;
150155
}
151-
}];
152-
153-
[displayLinkAnimator setCompletion:^{
154-
if (![transitionContext transitionWasCancelled]) {
155-
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
156-
}
157-
}];
158-
159-
[displayLinkAnimator start];
156+
}];
157+
158+
[displayLinkAnimator setCompletion:^{
159+
if (![transitionContext transitionWasCancelled]) {
160+
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
161+
}
162+
}];
163+
164+
[displayLinkAnimator start];
160165
}
161166

162167
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {

ios/StackControllerDelegate.mm

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,27 @@ - (instancetype)initWithEventEmitter:(RNNEventEmitter *)eventEmitter {
2626
- (void)navigationController:(UINavigationController *)navigationController
2727
willShowViewController:(UIViewController *)viewController
2828
animated:(BOOL)animated {
29-
if (_presentedViewController &&
30-
![navigationController.viewControllers containsObject:_presentedViewController]) {
31-
_isPopping = YES;
29+
if (_presentedViewController) {
30+
if (![navigationController.viewControllers containsObject:_presentedViewController]) {
31+
_isPopping = YES;
32+
}
33+
34+
id<UIViewControllerTransitionCoordinator> coordinator = navigationController.transitionCoordinator;
35+
if (coordinator && coordinator.isInteractive) {
36+
UIViewController *poppingViewController = _presentedViewController;
37+
[coordinator notifyWhenInteractionChangesUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
38+
if (!context.isCancelled) {
39+
if ([poppingViewController conformsToProtocol:@protocol(RNNLayoutProtocol)]) {
40+
UIViewController<RNNLayoutProtocol> *rnnVC = (UIViewController<RNNLayoutProtocol> *)poppingViewController;
41+
if ([rnnVC.options.navigationButtonEventOnSwipeBack withDefault:NO]) {
42+
NSString *buttonId = [rnnVC.options.topBar.backButton.identifier withDefault:@"RNN.back"];
43+
[self->_eventEmitter sendOnNavigationButtonPressed:rnnVC.layoutInfo.componentId
44+
buttonId:buttonId];
45+
}
46+
}
47+
}
48+
}];
49+
}
3250
}
3351
}
3452

jest.config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ module.exports = {
88
},
99
roots: [
1010
'<rootDir>/src/',
11-
'<rootDir>/Mock/',
1211
'<rootDir>/playground/src/',
1312
'<rootDir>/integration/',
1413
'<rootDir>/scripts/',
@@ -21,7 +20,7 @@ module.exports = {
2120
'^react-native$': '<rootDir>/node_modules/react-native',
2221
'^react-native-gesture-handler$': '<rootDir>/node_modules/react-native-gesture-handler',
2322
'^react-native-webview$': '<rootDir>/__mocks__/react-native-webview.js',
24-
'react-native-navigation/Mock': '<rootDir>/Mock/index',
23+
'react-native-navigation/Mock': '<rootDir>/src/Mock/index',
2524
'react-native-navigation': '<rootDir>/src',
2625
'^src$': '<rootDir>/src',
2726
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':

package.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,20 @@
2020
"rnn-link": "./autolink/postlink/run.js"
2121
},
2222
"main": "./lib/module/index.js",
23-
"types": "./lib/typescript/src/index.d.ts",
23+
"types": "./lib/typescript/index.d.ts",
2424
"react-native": "./src/index.ts",
2525
"exports": {
2626
".": {
27-
"react-native": "./src/index.ts",
27+
"types": "./lib/typescript/index.d.ts",
28+
"default": "./lib/module/index.js",
2829
"source": "./src/index.ts",
29-
"types": "./lib/typescript/src/index.d.ts",
30-
"default": "./lib/module/index.js"
30+
"react-native": "./src/index.ts"
31+
},
32+
"./Mock": {
33+
"types": "./lib/typescript/Mock/index.d.ts",
34+
"default": "./lib/module/Mock/index.js",
35+
"source": "./src/Mock/index.ts",
36+
"react-native": "./src/Mock/index.ts"
3137
},
3238
"./package.json": "./package.json"
3339
},

0 commit comments

Comments
 (0)