mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 17:15:54 +00:00
4d2c72b977
Summary: Previously, the back swipe navigation gesture would be enabled when the navigation bar is shown and disabled when the navigation bar is hidden. This change enables developers to control the back swipe gesture independently of the visibility of the navigation bar. An example use case would be that an app wants to render a custom navigation bar so it sets `navigationBarHidden` to true and it wants to enable the back swipe gesture so it sets `interactivePopGestureEnabled` to true. **Test plan (required)** - Created a test app to verify setting `interactivePopGestureEnabled` to `true` and `false` with the navigation bar both hidden and shown. - Verified prop works in a larger app. Adam Comella Microsoft Corp. Closes https://github.com/facebook/react-native/pull/7369 Differential Revision: D3269304 Pulled By: javache fb-gh-sync-id: ec4324f6517cec4b4fc4f62c4394dc9208a8af6a fbshipit-source-id: ec4324f6517cec4b4fc4f62c4394dc9208a8af6a
50 lines
1.6 KiB
Objective-C
50 lines
1.6 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import "RCTNavigatorManager.h"
|
|
|
|
#import "RCTBridge.h"
|
|
#import "RCTConvert.h"
|
|
#import "RCTNavigator.h"
|
|
#import "RCTUIManager.h"
|
|
#import "UIView+React.h"
|
|
|
|
@implementation RCTNavigatorManager
|
|
|
|
RCT_EXPORT_MODULE()
|
|
|
|
- (UIView *)view
|
|
{
|
|
return [[RCTNavigator alloc] initWithBridge:self.bridge];
|
|
}
|
|
|
|
RCT_EXPORT_VIEW_PROPERTY(requestedTopOfStack, NSInteger)
|
|
RCT_EXPORT_VIEW_PROPERTY(onNavigationProgress, RCTDirectEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(onNavigationComplete, RCTBubblingEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(interactivePopGestureEnabled, BOOL)
|
|
|
|
// TODO: remove error callbacks
|
|
RCT_EXPORT_METHOD(requestSchedulingJavaScriptNavigation:(nonnull NSNumber *)reactTag
|
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
|
callback:(RCTResponseSenderBlock)callback)
|
|
{
|
|
[self.bridge.uiManager addUIBlock:
|
|
^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RCTNavigator *> *viewRegistry){
|
|
RCTNavigator *navigator = viewRegistry[reactTag];
|
|
if ([navigator isKindOfClass:[RCTNavigator class]]) {
|
|
BOOL wasAcquired = [navigator requestSchedulingJavaScriptNavigation];
|
|
callback(@[@(wasAcquired)]);
|
|
} else {
|
|
RCTLogError(@"Cannot set lock: %@ (tag #%@) is not an RCTNavigator", navigator, reactTag);
|
|
}
|
|
}];
|
|
}
|
|
|
|
@end
|