Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: provide a way to prevent native navigation #801

Merged
merged 28 commits into from
Sep 7, 2021

Conversation

WoLewicki
Copy link
Member

@WoLewicki WoLewicki commented Feb 5, 2021

Description

Updated the behavior of native Android back button to fire an event to JS with goBack() action instead of triggering navigation on the native side by default. It allows the user to discard the navigation action. Requested in #742.

Keep in mind that this can be considered BREAKING CHANGE if you relied on default header back button native dismissal. It can be switched by setting nativeBackButtonDismissalEnabled: true on the screen.

Unfortunately, there seems to be no way to prevent navigation on iOS default back button clicked.

reverted on the JS side
Instead, the navigation state can be restored after the end of the transition.

Also added the similar abstraction to swipe dismiss and modal dismiss on iOS.

Changes

Added new event HeaderBackButtonClickedEvent which is fired when the native Android header back button is clicked and nativeBackButtonDismissalEnabled: false (which is default) is applied (before, clicking this button fired dismiss action on the native side without taking JS navigation into consideration). This event then triggers the same action as dismiss event and can be prevented by user. It makes all the options of navigating back on Android (hw back button, calling navigation.goBack() and header back button) to behave the same.

reverted on the JS side
Added similar abstraction for default native header back button, swipe dismiss and modal dismiss on iOS. It can be cancelled by setting preventNativeDismiss: true which triggers onNativeDismissCancelled callback. It calls navigation.pop by default and can be overridden by the user.

Checklist

@darron1217
Copy link

It seems not working now. (I rebased it with latest version)

@WoLewicki
Copy link
Member Author

Yeah, I changed the implementation and added a prop preventGoingBack, which, when set to true, will make the JS decide of the navigation, so you can prevent it. I added this option for navigation options on iOS too, like swiping and dismissing a modal. The only problem is that there seems to be no option to prevent the navigation on iOS native back button unfortunately.

@darron1217
Copy link

Then, does this PR compatible with 2.17.1?
Or should I have to upgrade it to 2.18.0?

@WoLewicki
Copy link
Member Author

I haven't yet rebased the PR to the newest master, but it should be compatible with both versions.

@darron1217
Copy link

It works well on both versions. (It was my problem)
I've created patch file for patch-package :)

react-native-screens+2.18.0.patch

diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/GoingBackPreventedEvent.java b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/GoingBackPreventedEvent.java
new file mode 100644
index 0000000..1367ef6
--- /dev/null
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/GoingBackPreventedEvent.java
@@ -0,0 +1,30 @@
+package com.swmansion.rnscreens;
+
+import com.facebook.react.bridge.Arguments;
+import com.facebook.react.uimanager.events.Event;
+import com.facebook.react.uimanager.events.RCTEventEmitter;
+
+public class GoingBackPreventedEvent extends Event<GoingBackPreventedEvent> {
+
+    public static final String EVENT_NAME = "topGoingBackPrevented";
+
+    public GoingBackPreventedEvent(int viewId) {
+        super(viewId);
+    }
+
+    @Override
+    public String getEventName() {
+        return EVENT_NAME;
+    }
+
+    @Override
+    public short getCoalescingKey() {
+        // All events for a given view can be coalesced.
+        return 0;
+    }
+
+    @Override
+    public void dispatch(RCTEventEmitter rctEventEmitter) {
+        rctEventEmitter.receiveEvent(getViewTag(), getEventName(), Arguments.createMap());
+    }
+}
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.java b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.java
index e34a58e..7f3eb5d 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.java
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.java
@@ -68,6 +68,7 @@ public class Screen extends ViewGroup {
   private ReplaceAnimation mReplaceAnimation = ReplaceAnimation.POP;
   private StackAnimation mStackAnimation = StackAnimation.DEFAULT;
   private boolean mGestureEnabled = true;
+  private boolean mPreventGoingBack = false;
 
   @Override
   protected void onAnimationStart() {
@@ -205,6 +206,10 @@ public class Screen extends ViewGroup {
     mGestureEnabled = gestureEnabled;
   }
 
+  public void setPreventGoingBack(boolean preventGoingBack) {
+    mPreventGoingBack = preventGoingBack;
+  }
+
   public StackAnimation getStackAnimation() {
     return mStackAnimation;
   }
@@ -255,4 +260,8 @@ public class Screen extends ViewGroup {
   public boolean isGestureEnabled() {
     return mGestureEnabled;
   }
+
+  public boolean preventsGoingBack() {
+    return mPreventGoingBack;
+  }
 }
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.java b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.java
index 6a8ef5c..40ebbe2 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.java
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.java
@@ -166,6 +166,13 @@ public class ScreenFragment extends Fragment {
     }
   }
 
+  protected void dispatchOnGoingBackPrevented() {
+    ((ReactContext) mScreenView.getContext())
+            .getNativeModule(UIManagerModule.class)
+            .getEventDispatcher()
+            .dispatchEvent(new GoingBackPreventedEvent(mScreenView.getId()));
+  }
+
   public void registerChildScreenContainer(ScreenContainer screenContainer) {
     mChildScreenContainers.add(screenContainer);
   }
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java
index 0cdd4fb..70e7d18 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.java
@@ -73,10 +73,18 @@ public class ScreenStackHeaderConfig extends ViewGroup {
         if (stack != null && stack.getRootScreen() == fragment.getScreen()) {
           Fragment parentFragment = fragment.getParentFragment();
           if (parentFragment instanceof ScreenStackFragment) {
-            ((ScreenStackFragment) parentFragment).dismiss();
+            if (((ScreenStackFragment) parentFragment).getScreen().preventsGoingBack()) {
+              ((ScreenStackFragment) parentFragment).dispatchOnGoingBackPrevented();
+            } else {
+              ((ScreenStackFragment) parentFragment).dismiss();
+            }
           }
         } else {
-          fragment.dismiss();
+          if (fragment.getScreen().preventsGoingBack()) {
+            fragment.dispatchOnGoingBackPrevented();
+          } else {
+            fragment.dismiss();
+          }
         }
       }
     }
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.java b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.java
index bc02485..1c21a57 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.java
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.java
@@ -79,6 +79,11 @@ public class ScreenViewManager extends ViewGroupManager<Screen> {
     view.setGestureEnabled(gestureEnabled);
   }
 
+  @ReactProp(name = "preventGoingBack")
+  public void setPreventGoingBack(Screen view, boolean preventGoingBack) {
+    view.setPreventGoingBack(preventGoingBack);
+  }
+
   @ReactProp(name = "replaceAnimation")
   public void setReplaceAnimation(Screen view, String animation) {
     if (animation == null || "pop".equals(animation)) {
@@ -102,6 +107,8 @@ public class ScreenViewManager extends ViewGroupManager<Screen> {
             MapBuilder.of("registrationName", "onWillDisappear"),
             ScreenDisappearEvent.EVENT_NAME,
             MapBuilder.of("registrationName", "onDisappear"),
+            GoingBackPreventedEvent.EVENT_NAME,
+            MapBuilder.of("registrationName", "onGoingBackPrevented"),
             StackFinishTransitioningEvent.EVENT_NAME,
             MapBuilder.of("registrationName", "onFinishTransitioning"));
   }
diff --git a/node_modules/react-native-screens/ios/RNSScreen.h b/node_modules/react-native-screens/ios/RNSScreen.h
index cadda9f..10945f5 100644
--- a/node_modules/react-native-screens/ios/RNSScreen.h
+++ b/node_modules/react-native-screens/ios/RNSScreen.h
@@ -59,6 +59,8 @@ typedef NS_ENUM(NSInteger, RNSActivityState) {
 @property (nonatomic, copy) RCTDirectEventBlock onDismissed;
 @property (nonatomic, copy) RCTDirectEventBlock onWillAppear;
 @property (nonatomic, copy) RCTDirectEventBlock onWillDisappear;
+@property (nonatomic, copy) RCTDirectEventBlock onGoingBackPrevented;
+
 @property (weak, nonatomic) UIView<RNSScreenContainerDelegate> *reactSuperview;
 @property (nonatomic, retain) UIViewController *controller;
 @property (nonatomic, readonly) BOOL dismissed;
@@ -67,6 +69,7 @@ typedef NS_ENUM(NSInteger, RNSActivityState) {
 @property (nonatomic) RNSScreenStackAnimation stackAnimation;
 @property (nonatomic) RNSScreenStackPresentation stackPresentation;
 @property (nonatomic) RNSScreenReplaceAnimation replaceAnimation;
+@property (nonatomic) BOOL preventGoingBack;
 
 - (void)notifyFinishTransitioning;
 
diff --git a/node_modules/react-native-screens/ios/RNSScreen.m b/node_modules/react-native-screens/ios/RNSScreen.m
index 3836d22..6e38f43 100644
--- a/node_modules/react-native-screens/ios/RNSScreen.m
+++ b/node_modules/react-native-screens/ios/RNSScreen.m
@@ -30,6 +30,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
     _gestureEnabled = YES;
     _replaceAnimation = RNSScreenReplaceAnimationPop;
     _dismissed = NO;
+    _preventGoingBack = NO;
   }
 
   return self;
@@ -162,6 +163,11 @@ - (void)setGestureEnabled:(BOOL)gestureEnabled
   _gestureEnabled = gestureEnabled;
 }
 
+- (void)setPreventGoingBack:(BOOL)preventGoingBack
+{
+  _preventGoingBack = preventGoingBack;
+}
+
 - (void)setReplaceAnimation:(RNSScreenReplaceAnimation)replaceAnimation
 {
   _replaceAnimation = replaceAnimation;
@@ -289,7 +295,13 @@ - (RCTTouchHandler *)touchHandler
 
 - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
 {
-  return _gestureEnabled;
+  if (_preventGoingBack) {
+    if (self.onGoingBackPrevented) {
+      self.onGoingBackPrevented(nil);
+    }
+    return NO;
+  }
+  return YES;
 }
 
 - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
@@ -522,11 +534,14 @@ @implementation RNSScreenManager
 RCT_EXPORT_VIEW_PROPERTY(replaceAnimation, RNSScreenReplaceAnimation)
 RCT_EXPORT_VIEW_PROPERTY(stackPresentation, RNSScreenStackPresentation)
 RCT_EXPORT_VIEW_PROPERTY(stackAnimation, RNSScreenStackAnimation)
+RCT_EXPORT_VIEW_PROPERTY(preventGoingBack, BOOL)
+
 RCT_EXPORT_VIEW_PROPERTY(onWillAppear, RCTDirectEventBlock);
 RCT_EXPORT_VIEW_PROPERTY(onWillDisappear, RCTDirectEventBlock);
 RCT_EXPORT_VIEW_PROPERTY(onAppear, RCTDirectEventBlock);
 RCT_EXPORT_VIEW_PROPERTY(onDisappear, RCTDirectEventBlock);
 RCT_EXPORT_VIEW_PROPERTY(onDismissed, RCTDirectEventBlock);
+RCT_EXPORT_VIEW_PROPERTY(onGoingBackPrevented, RCTDirectEventBlock);
 
 - (UIView *)view
 {
diff --git a/node_modules/react-native-screens/ios/RNSScreenStack.m b/node_modules/react-native-screens/ios/RNSScreenStack.m
index 92b8558..017bde6 100644
--- a/node_modules/react-native-screens/ios/RNSScreenStack.m
+++ b/node_modules/react-native-screens/ios/RNSScreenStack.m
@@ -153,7 +153,16 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
   
   RNSScreenView *topScreen = (RNSScreenView *)_controller.viewControllers.lastObject.view;
   
-  return _controller.viewControllers.count > 1 && topScreen.gestureEnabled;
+  if (!topScreen.gestureEnabled || _controller.viewControllers.count < 2) {
+    return NO;
+  }
+  
+  if (topScreen.preventGoingBack) {
+    topScreen.onGoingBackPrevented(nil);
+    return NO;
+  }
+
+  return YES;
 }
 
 - (void)markChildUpdated
diff --git a/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js b/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js
index 93ea448..074e89f 100644
--- a/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js
+++ b/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js
@@ -247,6 +247,7 @@ class StackView extends _react.default.Component {
         stackAnimation: stackAnimation,
         stackPresentation: stackPresentation,
         replaceAnimation: options.replaceAnimation === undefined ? 'pop' : options.replaceAnimation,
+        preventGoingBack: options.preventGoingBack,
         pointerEvents: index === this.props.navigation.state.routes.length - 1 ? 'auto' : 'none',
         gestureEnabled: _reactNative.Platform.OS === 'android' ? false : options.gestureEnabled === undefined ? true : options.gestureEnabled,
         onAppear: () => this._onAppear(route, descriptor),
diff --git a/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js.map b/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js.map
index 7401e6b..05b8f5f 100644
--- a/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js.map
+++ b/node_modules/react-native-screens/lib/commonjs/createNativeStackNavigator.js.map
@@ -1 +1 @@
-{"version":3,"sources":["createNativeStackNavigator.js"],"names":["renderComponentOrThunk","componentOrThunk","props","REMOVE_ACTION","StackView","React","Component","route","navigation","dispatch","type","immediate","key","descriptor","options","onAppear","StackActions","completeTransition","toChildKey","state","routes","lastRoute","length","index","navigationConfig","headerMode","backButtonInCustomView","direction","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerHideBackButton","headerLargeStyle","headerLargeTitleStyle","headerStyle","headerTintColor","headerTitleStyle","headerTopInsetEnabled","hideShadow","largeTitle","largeTitleHideShadow","screenOrientation","statusBarAnimation","statusBarHidden","statusBarStyle","title","translucent","scene","headerOptions","backTitle","backTitleFontFamily","fontFamily","backTitleFontSize","fontSize","color","topInsetEnabled","hideBackButton","largeTitleBackgroundColor","backgroundColor","largeTitleColor","largeTitleFontFamily","largeTitleFontSize","largeTitleFontWeight","fontWeight","titleColor","titleFontFamily","titleFontSize","titleFontWeight","undefined","hasHeader","header","blurEffect","children","backButtonImage","push","headerLeft","headerBackImage","goBack","requestAnimationFrame","headerPressColorAndroid","backButtonTitle","truncatedBackButtonTitle","backTitleVisible","layoutPreset","headerTitle","headerRight","getComponent","mode","transparentCard","SceneComponent","stackPresentation","cardTransparent","stackAnimation","animationEnabled","screenProps","StyleSheet","absoluteFill","cardStyle","replaceAnimation","Platform","OS","gestureEnabled","_onAppear","_removeScene","_renderHeaderConfig","render","descriptors","styles","scenes","_onFinishTransitioning","map","i","_renderScene","create","flex","createStackNavigator","routeConfigMap","stackConfig","router","superGetStateForAction","getStateForAction","action","backRouteIndex","backRoute","find","indexOf","newRoutes","splice","isTransitioning"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport {\n  Screen,\n  ScreenStack,\n  ScreenStackHeaderBackButtonImage,\n  ScreenStackHeaderCenterView,\n  ScreenStackHeaderConfig,\n  ScreenStackHeaderLeftView,\n  ScreenStackHeaderRightView,\n} from 'react-native-screens';\nimport {\n  createNavigator,\n  SceneView,\n  StackActions,\n  StackRouter,\n} from 'react-navigation';\nimport { HeaderBackButton } from 'react-navigation-stack';\n\nfunction renderComponentOrThunk(componentOrThunk, props) {\n  if (typeof componentOrThunk === 'function') {\n    return componentOrThunk(props);\n  }\n  return componentOrThunk;\n}\n\nconst REMOVE_ACTION = 'NativeStackNavigator/REMOVE';\n\nclass StackView extends React.Component {\n  _removeScene = (route) => {\n    this.props.navigation.dispatch({\n      type: REMOVE_ACTION,\n      immediate: true,\n      key: route.key,\n    });\n  };\n\n  _onAppear = (route, descriptor) => {\n    descriptor.options &&\n      descriptor.options.onAppear &&\n      descriptor.options.onAppear();\n    this.props.navigation.dispatch(\n      StackActions.completeTransition({\n        toChildKey: route.key,\n        key: this.props.navigation.state.key,\n      })\n    );\n  };\n\n  _onFinishTransitioning = () => {\n    const { routes } = this.props.navigation.state;\n    const lastRoute = routes?.length && routes[routes.length - 1];\n\n    if (lastRoute) {\n      this.props.navigation.dispatch(\n        StackActions.completeTransition({\n          toChildKey: lastRoute.key,\n          key: this.props.navigation.state.key,\n        })\n      );\n    }\n  };\n\n  _renderHeaderConfig = (index, route, descriptor) => {\n    const { navigationConfig } = this.props;\n    const { options } = descriptor;\n    const { headerMode } = navigationConfig;\n\n    const {\n      backButtonInCustomView,\n      direction,\n      headerBackTitle,\n      headerBackTitleStyle,\n      headerBackTitleVisible,\n      headerHideBackButton,\n      headerLargeStyle,\n      headerLargeTitleStyle,\n      headerStyle,\n      headerTintColor,\n      headerTitleStyle,\n      headerTopInsetEnabled = true,\n      hideShadow,\n      largeTitle,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      translucent,\n    } = options;\n\n    const scene = {\n      index,\n      key: route.key,\n      route,\n      descriptor,\n    };\n\n    const headerOptions = {\n      backButtonInCustomView,\n      backTitle: headerBackTitleVisible === false ? '' : headerBackTitle,\n      backTitleFontFamily:\n        headerBackTitleStyle && headerBackTitleStyle.fontFamily,\n      backTitleFontSize: headerBackTitleStyle && headerBackTitleStyle.fontSize,\n      color: headerTintColor,\n      direction,\n      topInsetEnabled: headerTopInsetEnabled,\n      hideBackButton: headerHideBackButton,\n      hideShadow,\n      largeTitle,\n      largeTitleBackgroundColor:\n        (headerLargeStyle && headerLargeStyle.backgroundColor) ||\n        (headerLargeTitleStyle && headerLargeTitleStyle.backgroundColor),\n      largeTitleColor: headerLargeTitleStyle && headerLargeTitleStyle.color,\n      largeTitleFontFamily:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontFamily,\n      largeTitleFontSize:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontSize,\n      largeTitleFontWeight:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontWeight,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      titleColor:\n        (headerTitleStyle && headerTitleStyle.color) || headerTintColor,\n      titleFontFamily: headerTitleStyle && headerTitleStyle.fontFamily,\n      titleFontSize: headerTitleStyle && headerTitleStyle.fontSize,\n      titleFontWeight: headerTitleStyle && headerTitleStyle.fontWeight,\n      translucent: translucent === undefined ? false : translucent,\n    };\n\n    const hasHeader = headerMode !== 'none' && options.header !== null;\n    if (!hasHeader) {\n      return <ScreenStackHeaderConfig {...headerOptions} hidden />;\n    }\n\n    if (headerStyle !== undefined) {\n      headerOptions.backgroundColor = headerStyle.backgroundColor;\n      headerOptions.blurEffect = headerStyle.blurEffect;\n    }\n\n    const children = [];\n\n    if (options.backButtonImage) {\n      children.push(\n        <ScreenStackHeaderBackButtonImage\n          key=\"backImage\"\n          source={options.backButtonImage}\n        />\n      );\n    }\n\n    if (options.headerLeft !== undefined) {\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          {renderComponentOrThunk(options.headerLeft, { scene })}\n        </ScreenStackHeaderLeftView>\n      );\n    } else if (options.headerBackImage !== undefined) {\n      const goBack = () => {\n        // Go back on next tick because button ripple effect needs to happen on Android\n        requestAnimationFrame(() => {\n          descriptor.navigation.goBack(descriptor.key);\n        });\n      };\n\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          <HeaderBackButton\n            onPress={goBack}\n            pressColorAndroid={options.headerPressColorAndroid}\n            tintColor={options.headerTintColor}\n            backImage={options.headerBackImage}\n            title={options.backButtonTitle}\n            truncatedTitle={options.truncatedBackButtonTitle}\n            backTitleVisible={this.props.backTitleVisible}\n            titleStyle={options.headerBackTitleStyle}\n            layoutPreset={this.props.layoutPreset}\n            scene={scene}\n          />\n        </ScreenStackHeaderLeftView>\n      );\n    }\n\n    if (options.headerTitle) {\n      if (title === undefined && typeof options.headerTitle === 'string') {\n        headerOptions.title = options.headerTitle;\n      } else {\n        children.push(\n          <ScreenStackHeaderCenterView key=\"center\">\n            {renderComponentOrThunk(options.headerTitle, { scene })}\n          </ScreenStackHeaderCenterView>\n        );\n      }\n    }\n\n    if (options.headerRight) {\n      children.push(\n        <ScreenStackHeaderRightView key=\"right\">\n          {renderComponentOrThunk(options.headerRight, { scene })}\n        </ScreenStackHeaderRightView>\n      );\n    }\n\n    if (children.length > 0) {\n      headerOptions.children = children;\n    }\n\n    return <ScreenStackHeaderConfig {...headerOptions} />;\n  };\n\n  _renderScene = (index, route, descriptor) => {\n    const { navigation, getComponent, options } = descriptor;\n    const { mode, transparentCard } = this.props.navigationConfig;\n    const SceneComponent = getComponent();\n\n    let stackPresentation = 'push';\n    if (mode === 'modal' || mode === 'containedModal') {\n      stackPresentation = mode;\n      if (transparentCard || options.cardTransparent) {\n        stackPresentation =\n          mode === 'containedModal'\n            ? 'containedTransparentModal'\n            : 'transparentModal';\n      }\n    }\n\n    let stackAnimation = options.stackAnimation;\n    if (options.animationEnabled === false) {\n      stackAnimation = 'none';\n    }\n\n    const { screenProps } = this.props;\n    return (\n      <Screen\n        key={`screen_${route.key}`}\n        style={[StyleSheet.absoluteFill, options.cardStyle]}\n        stackAnimation={stackAnimation}\n        stackPresentation={stackPresentation}\n        replaceAnimation={\n          options.replaceAnimation === undefined\n            ? 'pop'\n            : options.replaceAnimation\n        }\n        pointerEvents={\n          index === this.props.navigation.state.routes.length - 1\n            ? 'auto'\n            : 'none'\n        }\n        gestureEnabled={\n          Platform.OS === 'android'\n            ? false\n            : options.gestureEnabled === undefined\n            ? true\n            : options.gestureEnabled\n        }\n        onAppear={() => this._onAppear(route, descriptor)}\n        onDismissed={() => this._removeScene(route)}>\n        {this._renderHeaderConfig(index, route, descriptor)}\n        <SceneView\n          screenProps={screenProps}\n          navigation={navigation}\n          component={SceneComponent}\n        />\n      </Screen>\n    );\n  };\n\n  render() {\n    const { navigation, descriptors } = this.props;\n\n    return (\n      <ScreenStack\n        style={styles.scenes}\n        onFinishTransitioning={this._onFinishTransitioning}>\n        {navigation.state.routes.map((route, i) =>\n          this._renderScene(i, route, descriptors[route.key])\n        )}\n      </ScreenStack>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scenes: { flex: 1 },\n});\n\nfunction createStackNavigator(routeConfigMap, stackConfig = {}) {\n  const router = StackRouter(routeConfigMap, stackConfig);\n\n  // belowe we override getStateForAction method in order to add handling for\n  // a custom native stack navigation action. The action REMOVE that we want to\n  // add works in a similar way to POP, but it does not remove all the routes\n  // that sit on top of the removed route. For example if we have three routes\n  // [a,b,c] and call POP on b, then both b and c will go away. In case we\n  // call REMOVE on b, only b will be removed from the stack and the resulting\n  // state will be [a, c]\n  const superGetStateForAction = router.getStateForAction;\n  router.getStateForAction = (action, state) => {\n    if (action.type === REMOVE_ACTION) {\n      const { key, immediate } = action;\n      let backRouteIndex = state.index;\n      if (key) {\n        const backRoute = state.routes.find((route) => route.key === key);\n        backRouteIndex = state.routes.indexOf(backRoute);\n      }\n\n      if (backRouteIndex > 0) {\n        const newRoutes = [...state.routes];\n        newRoutes.splice(backRouteIndex, 1);\n        return {\n          ...state,\n          routes: newRoutes,\n          index: newRoutes.length - 1,\n          isTransitioning: immediate !== true,\n        };\n      }\n    }\n    return superGetStateForAction(action, state);\n  };\n  // Create a navigator with StackView as the view\n  return createNavigator(StackView, router, stackConfig);\n}\n\nexport default createStackNavigator;\n"]}
\ No newline at end of file
+{"version":3,"sources":["createNativeStackNavigator.js"],"names":["renderComponentOrThunk","componentOrThunk","props","REMOVE_ACTION","StackView","React","Component","route","navigation","dispatch","type","immediate","key","descriptor","options","onAppear","StackActions","completeTransition","toChildKey","state","routes","lastRoute","length","index","navigationConfig","headerMode","backButtonInCustomView","direction","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerHideBackButton","headerLargeStyle","headerLargeTitleStyle","headerStyle","headerTintColor","headerTitleStyle","headerTopInsetEnabled","hideShadow","largeTitle","largeTitleHideShadow","screenOrientation","statusBarAnimation","statusBarHidden","statusBarStyle","title","translucent","scene","headerOptions","backTitle","backTitleFontFamily","fontFamily","backTitleFontSize","fontSize","color","topInsetEnabled","hideBackButton","largeTitleBackgroundColor","backgroundColor","largeTitleColor","largeTitleFontFamily","largeTitleFontSize","largeTitleFontWeight","fontWeight","titleColor","titleFontFamily","titleFontSize","titleFontWeight","undefined","hasHeader","header","blurEffect","children","backButtonImage","push","headerLeft","headerBackImage","goBack","requestAnimationFrame","headerPressColorAndroid","backButtonTitle","truncatedBackButtonTitle","backTitleVisible","layoutPreset","headerTitle","headerRight","getComponent","mode","transparentCard","SceneComponent","stackPresentation","cardTransparent","stackAnimation","animationEnabled","screenProps","StyleSheet","absoluteFill","cardStyle","replaceAnimation","preventGoingBack","Platform","OS","gestureEnabled","_onAppear","_removeScene","_renderHeaderConfig","render","descriptors","styles","scenes","_onFinishTransitioning","map","i","_renderScene","create","flex","createStackNavigator","routeConfigMap","stackConfig","router","superGetStateForAction","getStateForAction","action","backRouteIndex","backRoute","find","indexOf","newRoutes","splice","isTransitioning"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport {\n  Screen,\n  ScreenStack,\n  ScreenStackHeaderBackButtonImage,\n  ScreenStackHeaderCenterView,\n  ScreenStackHeaderConfig,\n  ScreenStackHeaderLeftView,\n  ScreenStackHeaderRightView,\n} from 'react-native-screens';\nimport {\n  createNavigator,\n  SceneView,\n  StackActions,\n  StackRouter,\n} from 'react-navigation';\nimport { HeaderBackButton } from 'react-navigation-stack';\n\nfunction renderComponentOrThunk(componentOrThunk, props) {\n  if (typeof componentOrThunk === 'function') {\n    return componentOrThunk(props);\n  }\n  return componentOrThunk;\n}\n\nconst REMOVE_ACTION = 'NativeStackNavigator/REMOVE';\n\nclass StackView extends React.Component {\n  _removeScene = (route) => {\n    this.props.navigation.dispatch({\n      type: REMOVE_ACTION,\n      immediate: true,\n      key: route.key,\n    });\n  };\n\n  _onAppear = (route, descriptor) => {\n    descriptor.options &&\n      descriptor.options.onAppear &&\n      descriptor.options.onAppear();\n    this.props.navigation.dispatch(\n      StackActions.completeTransition({\n        toChildKey: route.key,\n        key: this.props.navigation.state.key,\n      })\n    );\n  };\n\n  _onFinishTransitioning = () => {\n    const { routes } = this.props.navigation.state;\n    const lastRoute = routes?.length && routes[routes.length - 1];\n\n    if (lastRoute) {\n      this.props.navigation.dispatch(\n        StackActions.completeTransition({\n          toChildKey: lastRoute.key,\n          key: this.props.navigation.state.key,\n        })\n      );\n    }\n  };\n\n  _renderHeaderConfig = (index, route, descriptor) => {\n    const { navigationConfig } = this.props;\n    const { options } = descriptor;\n    const { headerMode } = navigationConfig;\n\n    const {\n      backButtonInCustomView,\n      direction,\n      headerBackTitle,\n      headerBackTitleStyle,\n      headerBackTitleVisible,\n      headerHideBackButton,\n      headerLargeStyle,\n      headerLargeTitleStyle,\n      headerStyle,\n      headerTintColor,\n      headerTitleStyle,\n      headerTopInsetEnabled = true,\n      hideShadow,\n      largeTitle,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      translucent,\n    } = options;\n\n    const scene = {\n      index,\n      key: route.key,\n      route,\n      descriptor,\n    };\n\n    const headerOptions = {\n      backButtonInCustomView,\n      backTitle: headerBackTitleVisible === false ? '' : headerBackTitle,\n      backTitleFontFamily:\n        headerBackTitleStyle && headerBackTitleStyle.fontFamily,\n      backTitleFontSize: headerBackTitleStyle && headerBackTitleStyle.fontSize,\n      color: headerTintColor,\n      direction,\n      topInsetEnabled: headerTopInsetEnabled,\n      hideBackButton: headerHideBackButton,\n      hideShadow,\n      largeTitle,\n      largeTitleBackgroundColor:\n        (headerLargeStyle && headerLargeStyle.backgroundColor) ||\n        (headerLargeTitleStyle && headerLargeTitleStyle.backgroundColor),\n      largeTitleColor: headerLargeTitleStyle && headerLargeTitleStyle.color,\n      largeTitleFontFamily:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontFamily,\n      largeTitleFontSize:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontSize,\n      largeTitleFontWeight:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontWeight,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      titleColor:\n        (headerTitleStyle && headerTitleStyle.color) || headerTintColor,\n      titleFontFamily: headerTitleStyle && headerTitleStyle.fontFamily,\n      titleFontSize: headerTitleStyle && headerTitleStyle.fontSize,\n      titleFontWeight: headerTitleStyle && headerTitleStyle.fontWeight,\n      translucent: translucent === undefined ? false : translucent,\n    };\n\n    const hasHeader = headerMode !== 'none' && options.header !== null;\n    if (!hasHeader) {\n      return <ScreenStackHeaderConfig {...headerOptions} hidden />;\n    }\n\n    if (headerStyle !== undefined) {\n      headerOptions.backgroundColor = headerStyle.backgroundColor;\n      headerOptions.blurEffect = headerStyle.blurEffect;\n    }\n\n    const children = [];\n\n    if (options.backButtonImage) {\n      children.push(\n        <ScreenStackHeaderBackButtonImage\n          key=\"backImage\"\n          source={options.backButtonImage}\n        />\n      );\n    }\n\n    if (options.headerLeft !== undefined) {\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          {renderComponentOrThunk(options.headerLeft, { scene })}\n        </ScreenStackHeaderLeftView>\n      );\n    } else if (options.headerBackImage !== undefined) {\n      const goBack = () => {\n        // Go back on next tick because button ripple effect needs to happen on Android\n        requestAnimationFrame(() => {\n          descriptor.navigation.goBack(descriptor.key);\n        });\n      };\n\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          <HeaderBackButton\n            onPress={goBack}\n            pressColorAndroid={options.headerPressColorAndroid}\n            tintColor={options.headerTintColor}\n            backImage={options.headerBackImage}\n            title={options.backButtonTitle}\n            truncatedTitle={options.truncatedBackButtonTitle}\n            backTitleVisible={this.props.backTitleVisible}\n            titleStyle={options.headerBackTitleStyle}\n            layoutPreset={this.props.layoutPreset}\n            scene={scene}\n          />\n        </ScreenStackHeaderLeftView>\n      );\n    }\n\n    if (options.headerTitle) {\n      if (title === undefined && typeof options.headerTitle === 'string') {\n        headerOptions.title = options.headerTitle;\n      } else {\n        children.push(\n          <ScreenStackHeaderCenterView key=\"center\">\n            {renderComponentOrThunk(options.headerTitle, { scene })}\n          </ScreenStackHeaderCenterView>\n        );\n      }\n    }\n\n    if (options.headerRight) {\n      children.push(\n        <ScreenStackHeaderRightView key=\"right\">\n          {renderComponentOrThunk(options.headerRight, { scene })}\n        </ScreenStackHeaderRightView>\n      );\n    }\n\n    if (children.length > 0) {\n      headerOptions.children = children;\n    }\n\n    return <ScreenStackHeaderConfig {...headerOptions} />;\n  };\n\n  _renderScene = (index, route, descriptor) => {\n    const { navigation, getComponent, options } = descriptor;\n    const { mode, transparentCard } = this.props.navigationConfig;\n    const SceneComponent = getComponent();\n\n    let stackPresentation = 'push';\n    if (mode === 'modal' || mode === 'containedModal') {\n      stackPresentation = mode;\n      if (transparentCard || options.cardTransparent) {\n        stackPresentation =\n          mode === 'containedModal'\n            ? 'containedTransparentModal'\n            : 'transparentModal';\n      }\n    }\n\n    let stackAnimation = options.stackAnimation;\n    if (options.animationEnabled === false) {\n      stackAnimation = 'none';\n    }\n\n    const { screenProps } = this.props;\n    return (\n      <Screen\n        key={`screen_${route.key}`}\n        style={[StyleSheet.absoluteFill, options.cardStyle]}\n        stackAnimation={stackAnimation}\n        stackPresentation={stackPresentation}\n        replaceAnimation={\n          options.replaceAnimation === undefined\n            ? 'pop'\n            : options.replaceAnimation\n        }\n        preventGoingBack={options.preventGoingBack}\n        pointerEvents={\n          index === this.props.navigation.state.routes.length - 1\n            ? 'auto'\n            : 'none'\n        }\n        gestureEnabled={\n          Platform.OS === 'android'\n            ? false\n            : options.gestureEnabled === undefined\n            ? true\n            : options.gestureEnabled\n        }\n        onAppear={() => this._onAppear(route, descriptor)}\n        onDismissed={() => this._removeScene(route)}>\n        {this._renderHeaderConfig(index, route, descriptor)}\n        <SceneView\n          screenProps={screenProps}\n          navigation={navigation}\n          component={SceneComponent}\n        />\n      </Screen>\n    );\n  };\n\n  render() {\n    const { navigation, descriptors } = this.props;\n\n    return (\n      <ScreenStack\n        style={styles.scenes}\n        onFinishTransitioning={this._onFinishTransitioning}>\n        {navigation.state.routes.map((route, i) =>\n          this._renderScene(i, route, descriptors[route.key])\n        )}\n      </ScreenStack>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scenes: { flex: 1 },\n});\n\nfunction createStackNavigator(routeConfigMap, stackConfig = {}) {\n  const router = StackRouter(routeConfigMap, stackConfig);\n\n  // belowe we override getStateForAction method in order to add handling for\n  // a custom native stack navigation action. The action REMOVE that we want to\n  // add works in a similar way to POP, but it does not remove all the routes\n  // that sit on top of the removed route. For example if we have three routes\n  // [a,b,c] and call POP on b, then both b and c will go away. In case we\n  // call REMOVE on b, only b will be removed from the stack and the resulting\n  // state will be [a, c]\n  const superGetStateForAction = router.getStateForAction;\n  router.getStateForAction = (action, state) => {\n    if (action.type === REMOVE_ACTION) {\n      const { key, immediate } = action;\n      let backRouteIndex = state.index;\n      if (key) {\n        const backRoute = state.routes.find((route) => route.key === key);\n        backRouteIndex = state.routes.indexOf(backRoute);\n      }\n\n      if (backRouteIndex > 0) {\n        const newRoutes = [...state.routes];\n        newRoutes.splice(backRouteIndex, 1);\n        return {\n          ...state,\n          routes: newRoutes,\n          index: newRoutes.length - 1,\n          isTransitioning: immediate !== true,\n        };\n      }\n    }\n    return superGetStateForAction(action, state);\n  };\n  // Create a navigator with StackView as the view\n  return createNavigator(StackView, router, stackConfig);\n}\n\nexport default createStackNavigator;\n"]}
\ No newline at end of file
diff --git a/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js b/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js
index 4a93af2..d5b14ca 100644
--- a/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js
+++ b/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js
@@ -71,7 +71,8 @@ function NativeStackView({
       replaceAnimation = 'pop',
       stackPresentation = 'push',
       stackAnimation,
-      contentStyle
+      contentStyle,
+      preventGoingBack = false
     } = options;
     const viewStyles = [styles.container, stackPresentation !== 'transparentModal' && {
       backgroundColor: colors.background
@@ -80,6 +81,7 @@ function NativeStackView({
       key: route.key,
       style: _reactNative.StyleSheet.absoluteFill,
       gestureEnabled: isAndroid ? false : gestureEnabled,
+      preventGoingBack: preventGoingBack,
       replaceAnimation: replaceAnimation,
       stackPresentation: stackPresentation,
       stackAnimation: stackAnimation,
@@ -123,6 +125,16 @@ function NativeStackView({
           target: route.key
         });
       },
+      onGoingBackPrevented: () => {
+        navigation.emit({
+          type: 'dismiss',
+          target: route.key
+        });
+        navigation.dispatch({ ..._native.StackActions.pop(),
+          source: route.key,
+          target: key
+        });
+      },
       onDismissed: () => {
         navigation.emit({
           type: 'dismiss',
diff --git a/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js.map b/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js.map
index 5f35571..f6affb0 100644
--- a/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js.map
+++ b/node_modules/react-native-screens/lib/commonjs/native-stack/views/NativeStackView.js.map
@@ -1 +1 @@
-{"version":3,"sources":["NativeStackView.tsx"],"names":["Screen","ScreenComponent","isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","NativeStackView","state","navigation","descriptors","key","routes","colors","styles","container","map","route","options","render","renderScene","gestureEnabled","replaceAnimation","stackAnimation","contentStyle","viewStyles","backgroundColor","background","StyleSheet","absoluteFill","emit","type","data","closing","target","dispatch","StackActions","pop","source","create","flex"],"mappings":"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","sourcesContent":["import {\n  ParamListBase,\n  StackActions,\n  StackNavigationState,\n  useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport {\n  Screen as ScreenComponent,\n  ScreenProps,\n  ScreenStack,\n  StackPresentationTypes,\n} from 'react-native-screens';\nimport {\n  NativeStackDescriptorMap,\n  NativeStackNavigationHelpers,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\n\nconst Screen = (ScreenComponent as unknown) as React.ComponentType<ScreenProps>;\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n  const DebugContainer = (\n    props: ViewProps & { stackPresentation: StackPresentationTypes }\n  ) => {\n    const { stackPresentation, ...rest } = props;\n    if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n      return (\n        <AppContainer>\n          <View {...rest} />\n        </AppContainer>\n      );\n    }\n    return <View {...rest} />;\n  };\n  // @ts-ignore Wrong props\n  Container = DebugContainer;\n}\n\ntype Props = {\n  state: StackNavigationState<ParamListBase>;\n  navigation: NativeStackNavigationHelpers;\n  descriptors: NativeStackDescriptorMap;\n};\n\nexport default function NativeStackView({\n  state,\n  navigation,\n  descriptors,\n}: Props): JSX.Element {\n  const { key, routes } = state;\n  const { colors } = useTheme();\n\n  return (\n    <ScreenStack style={styles.container}>\n      {routes.map((route) => {\n        const { options, render: renderScene } = descriptors[route.key];\n        const {\n          gestureEnabled,\n          replaceAnimation = 'pop',\n          stackPresentation = 'push',\n          stackAnimation,\n          contentStyle,\n        } = options;\n\n        const viewStyles = [\n          styles.container,\n          stackPresentation !== 'transparentModal' && {\n            backgroundColor: colors.background,\n          },\n          contentStyle,\n        ];\n\n        return (\n          <Screen\n            key={route.key}\n            style={StyleSheet.absoluteFill}\n            gestureEnabled={isAndroid ? false : gestureEnabled}\n            replaceAnimation={replaceAnimation}\n            stackPresentation={stackPresentation}\n            stackAnimation={stackAnimation}\n            onWillAppear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onWillDisappear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onAppear={() => {\n              navigation.emit({\n                type: 'appear',\n                target: route.key,\n              });\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onDisappear={() => {\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onDismissed={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}>\n            <HeaderConfig {...options} route={route} />\n            <Container\n              style={viewStyles}\n              // @ts-ignore Wrong props passed to View\n              stackPresentation={stackPresentation}>\n              {renderScene()}\n            </Container>\n          </Screen>\n        );\n      })}\n    </ScreenStack>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["NativeStackView.tsx"],"names":["Screen","ScreenComponent","isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","NativeStackView","state","navigation","descriptors","key","routes","colors","styles","container","map","route","options","render","renderScene","gestureEnabled","replaceAnimation","stackAnimation","contentStyle","preventGoingBack","viewStyles","backgroundColor","background","StyleSheet","absoluteFill","emit","type","data","closing","target","dispatch","StackActions","pop","source","create","flex"],"mappings":"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","sourcesContent":["import {\n  ParamListBase,\n  StackActions,\n  StackNavigationState,\n  useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport {\n  Screen as ScreenComponent,\n  ScreenProps,\n  ScreenStack,\n  StackPresentationTypes,\n} from 'react-native-screens';\nimport {\n  NativeStackDescriptorMap,\n  NativeStackNavigationHelpers,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\n\nconst Screen = (ScreenComponent as unknown) as React.ComponentType<ScreenProps>;\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n  const DebugContainer = (\n    props: ViewProps & { stackPresentation: StackPresentationTypes }\n  ) => {\n    const { stackPresentation, ...rest } = props;\n    if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n      return (\n        <AppContainer>\n          <View {...rest} />\n        </AppContainer>\n      );\n    }\n    return <View {...rest} />;\n  };\n  // @ts-ignore Wrong props\n  Container = DebugContainer;\n}\n\ntype Props = {\n  state: StackNavigationState<ParamListBase>;\n  navigation: NativeStackNavigationHelpers;\n  descriptors: NativeStackDescriptorMap;\n};\n\nexport default function NativeStackView({\n  state,\n  navigation,\n  descriptors,\n}: Props): JSX.Element {\n  const { key, routes } = state;\n  const { colors } = useTheme();\n\n  return (\n    <ScreenStack style={styles.container}>\n      {routes.map((route) => {\n        const { options, render: renderScene } = descriptors[route.key];\n        const {\n          gestureEnabled,\n          replaceAnimation = 'pop',\n          stackPresentation = 'push',\n          stackAnimation,\n          contentStyle,\n          preventGoingBack = false,\n        } = options;\n\n        const viewStyles = [\n          styles.container,\n          stackPresentation !== 'transparentModal' && {\n            backgroundColor: colors.background,\n          },\n          contentStyle,\n        ];\n\n        return (\n          <Screen\n            key={route.key}\n            style={StyleSheet.absoluteFill}\n            gestureEnabled={isAndroid ? false : gestureEnabled}\n            preventGoingBack={preventGoingBack}\n            replaceAnimation={replaceAnimation}\n            stackPresentation={stackPresentation}\n            stackAnimation={stackAnimation}\n            onWillAppear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onWillDisappear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onAppear={() => {\n              navigation.emit({\n                type: 'appear',\n                target: route.key,\n              });\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onDisappear={() => {\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onGoingBackPrevented={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}\n            onDismissed={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}>\n            <HeaderConfig {...options} route={route} />\n            <Container\n              style={viewStyles}\n              // @ts-ignore Wrong props passed to View\n              stackPresentation={stackPresentation}>\n              {renderScene()}\n            </Container>\n          </Screen>\n        );\n      })}\n    </ScreenStack>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n"]}
\ No newline at end of file
diff --git a/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js b/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js
index 50baa44..cf9345e 100644
--- a/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js
+++ b/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js
@@ -234,6 +234,7 @@ class StackView extends React.Component {
         stackAnimation: stackAnimation,
         stackPresentation: stackPresentation,
         replaceAnimation: options.replaceAnimation === undefined ? 'pop' : options.replaceAnimation,
+        preventGoingBack: options.preventGoingBack,
         pointerEvents: index === this.props.navigation.state.routes.length - 1 ? 'auto' : 'none',
         gestureEnabled: Platform.OS === 'android' ? false : options.gestureEnabled === undefined ? true : options.gestureEnabled,
         onAppear: () => this._onAppear(route, descriptor),
diff --git a/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js.map b/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js.map
index 0daa481..8c5a065 100644
--- a/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js.map
+++ b/node_modules/react-native-screens/lib/module/createNativeStackNavigator.js.map
@@ -1 +1 @@
-{"version":3,"sources":["createNativeStackNavigator.js"],"names":["React","Platform","StyleSheet","Screen","ScreenStack","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","createNavigator","SceneView","StackActions","StackRouter","HeaderBackButton","renderComponentOrThunk","componentOrThunk","props","REMOVE_ACTION","StackView","Component","route","navigation","dispatch","type","immediate","key","descriptor","options","onAppear","completeTransition","toChildKey","state","routes","lastRoute","length","index","navigationConfig","headerMode","backButtonInCustomView","direction","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerHideBackButton","headerLargeStyle","headerLargeTitleStyle","headerStyle","headerTintColor","headerTitleStyle","headerTopInsetEnabled","hideShadow","largeTitle","largeTitleHideShadow","screenOrientation","statusBarAnimation","statusBarHidden","statusBarStyle","title","translucent","scene","headerOptions","backTitle","backTitleFontFamily","fontFamily","backTitleFontSize","fontSize","color","topInsetEnabled","hideBackButton","largeTitleBackgroundColor","backgroundColor","largeTitleColor","largeTitleFontFamily","largeTitleFontSize","largeTitleFontWeight","fontWeight","titleColor","titleFontFamily","titleFontSize","titleFontWeight","undefined","hasHeader","header","blurEffect","children","backButtonImage","push","headerLeft","headerBackImage","goBack","requestAnimationFrame","headerPressColorAndroid","backButtonTitle","truncatedBackButtonTitle","backTitleVisible","layoutPreset","headerTitle","headerRight","getComponent","mode","transparentCard","SceneComponent","stackPresentation","cardTransparent","stackAnimation","animationEnabled","screenProps","absoluteFill","cardStyle","replaceAnimation","OS","gestureEnabled","_onAppear","_removeScene","_renderHeaderConfig","render","descriptors","styles","scenes","_onFinishTransitioning","map","i","_renderScene","create","flex","createStackNavigator","routeConfigMap","stackConfig","router","superGetStateForAction","getStateForAction","action","backRouteIndex","backRoute","find","indexOf","newRoutes","splice","isTransitioning"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport {\n  Screen,\n  ScreenStack,\n  ScreenStackHeaderBackButtonImage,\n  ScreenStackHeaderCenterView,\n  ScreenStackHeaderConfig,\n  ScreenStackHeaderLeftView,\n  ScreenStackHeaderRightView,\n} from 'react-native-screens';\nimport {\n  createNavigator,\n  SceneView,\n  StackActions,\n  StackRouter,\n} from 'react-navigation';\nimport { HeaderBackButton } from 'react-navigation-stack';\n\nfunction renderComponentOrThunk(componentOrThunk, props) {\n  if (typeof componentOrThunk === 'function') {\n    return componentOrThunk(props);\n  }\n  return componentOrThunk;\n}\n\nconst REMOVE_ACTION = 'NativeStackNavigator/REMOVE';\n\nclass StackView extends React.Component {\n  _removeScene = (route) => {\n    this.props.navigation.dispatch({\n      type: REMOVE_ACTION,\n      immediate: true,\n      key: route.key,\n    });\n  };\n\n  _onAppear = (route, descriptor) => {\n    descriptor.options &&\n      descriptor.options.onAppear &&\n      descriptor.options.onAppear();\n    this.props.navigation.dispatch(\n      StackActions.completeTransition({\n        toChildKey: route.key,\n        key: this.props.navigation.state.key,\n      })\n    );\n  };\n\n  _onFinishTransitioning = () => {\n    const { routes } = this.props.navigation.state;\n    const lastRoute = routes?.length && routes[routes.length - 1];\n\n    if (lastRoute) {\n      this.props.navigation.dispatch(\n        StackActions.completeTransition({\n          toChildKey: lastRoute.key,\n          key: this.props.navigation.state.key,\n        })\n      );\n    }\n  };\n\n  _renderHeaderConfig = (index, route, descriptor) => {\n    const { navigationConfig } = this.props;\n    const { options } = descriptor;\n    const { headerMode } = navigationConfig;\n\n    const {\n      backButtonInCustomView,\n      direction,\n      headerBackTitle,\n      headerBackTitleStyle,\n      headerBackTitleVisible,\n      headerHideBackButton,\n      headerLargeStyle,\n      headerLargeTitleStyle,\n      headerStyle,\n      headerTintColor,\n      headerTitleStyle,\n      headerTopInsetEnabled = true,\n      hideShadow,\n      largeTitle,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      translucent,\n    } = options;\n\n    const scene = {\n      index,\n      key: route.key,\n      route,\n      descriptor,\n    };\n\n    const headerOptions = {\n      backButtonInCustomView,\n      backTitle: headerBackTitleVisible === false ? '' : headerBackTitle,\n      backTitleFontFamily:\n        headerBackTitleStyle && headerBackTitleStyle.fontFamily,\n      backTitleFontSize: headerBackTitleStyle && headerBackTitleStyle.fontSize,\n      color: headerTintColor,\n      direction,\n      topInsetEnabled: headerTopInsetEnabled,\n      hideBackButton: headerHideBackButton,\n      hideShadow,\n      largeTitle,\n      largeTitleBackgroundColor:\n        (headerLargeStyle && headerLargeStyle.backgroundColor) ||\n        (headerLargeTitleStyle && headerLargeTitleStyle.backgroundColor),\n      largeTitleColor: headerLargeTitleStyle && headerLargeTitleStyle.color,\n      largeTitleFontFamily:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontFamily,\n      largeTitleFontSize:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontSize,\n      largeTitleFontWeight:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontWeight,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      titleColor:\n        (headerTitleStyle && headerTitleStyle.color) || headerTintColor,\n      titleFontFamily: headerTitleStyle && headerTitleStyle.fontFamily,\n      titleFontSize: headerTitleStyle && headerTitleStyle.fontSize,\n      titleFontWeight: headerTitleStyle && headerTitleStyle.fontWeight,\n      translucent: translucent === undefined ? false : translucent,\n    };\n\n    const hasHeader = headerMode !== 'none' && options.header !== null;\n    if (!hasHeader) {\n      return <ScreenStackHeaderConfig {...headerOptions} hidden />;\n    }\n\n    if (headerStyle !== undefined) {\n      headerOptions.backgroundColor = headerStyle.backgroundColor;\n      headerOptions.blurEffect = headerStyle.blurEffect;\n    }\n\n    const children = [];\n\n    if (options.backButtonImage) {\n      children.push(\n        <ScreenStackHeaderBackButtonImage\n          key=\"backImage\"\n          source={options.backButtonImage}\n        />\n      );\n    }\n\n    if (options.headerLeft !== undefined) {\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          {renderComponentOrThunk(options.headerLeft, { scene })}\n        </ScreenStackHeaderLeftView>\n      );\n    } else if (options.headerBackImage !== undefined) {\n      const goBack = () => {\n        // Go back on next tick because button ripple effect needs to happen on Android\n        requestAnimationFrame(() => {\n          descriptor.navigation.goBack(descriptor.key);\n        });\n      };\n\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          <HeaderBackButton\n            onPress={goBack}\n            pressColorAndroid={options.headerPressColorAndroid}\n            tintColor={options.headerTintColor}\n            backImage={options.headerBackImage}\n            title={options.backButtonTitle}\n            truncatedTitle={options.truncatedBackButtonTitle}\n            backTitleVisible={this.props.backTitleVisible}\n            titleStyle={options.headerBackTitleStyle}\n            layoutPreset={this.props.layoutPreset}\n            scene={scene}\n          />\n        </ScreenStackHeaderLeftView>\n      );\n    }\n\n    if (options.headerTitle) {\n      if (title === undefined && typeof options.headerTitle === 'string') {\n        headerOptions.title = options.headerTitle;\n      } else {\n        children.push(\n          <ScreenStackHeaderCenterView key=\"center\">\n            {renderComponentOrThunk(options.headerTitle, { scene })}\n          </ScreenStackHeaderCenterView>\n        );\n      }\n    }\n\n    if (options.headerRight) {\n      children.push(\n        <ScreenStackHeaderRightView key=\"right\">\n          {renderComponentOrThunk(options.headerRight, { scene })}\n        </ScreenStackHeaderRightView>\n      );\n    }\n\n    if (children.length > 0) {\n      headerOptions.children = children;\n    }\n\n    return <ScreenStackHeaderConfig {...headerOptions} />;\n  };\n\n  _renderScene = (index, route, descriptor) => {\n    const { navigation, getComponent, options } = descriptor;\n    const { mode, transparentCard } = this.props.navigationConfig;\n    const SceneComponent = getComponent();\n\n    let stackPresentation = 'push';\n    if (mode === 'modal' || mode === 'containedModal') {\n      stackPresentation = mode;\n      if (transparentCard || options.cardTransparent) {\n        stackPresentation =\n          mode === 'containedModal'\n            ? 'containedTransparentModal'\n            : 'transparentModal';\n      }\n    }\n\n    let stackAnimation = options.stackAnimation;\n    if (options.animationEnabled === false) {\n      stackAnimation = 'none';\n    }\n\n    const { screenProps } = this.props;\n    return (\n      <Screen\n        key={`screen_${route.key}`}\n        style={[StyleSheet.absoluteFill, options.cardStyle]}\n        stackAnimation={stackAnimation}\n        stackPresentation={stackPresentation}\n        replaceAnimation={\n          options.replaceAnimation === undefined\n            ? 'pop'\n            : options.replaceAnimation\n        }\n        pointerEvents={\n          index === this.props.navigation.state.routes.length - 1\n            ? 'auto'\n            : 'none'\n        }\n        gestureEnabled={\n          Platform.OS === 'android'\n            ? false\n            : options.gestureEnabled === undefined\n            ? true\n            : options.gestureEnabled\n        }\n        onAppear={() => this._onAppear(route, descriptor)}\n        onDismissed={() => this._removeScene(route)}>\n        {this._renderHeaderConfig(index, route, descriptor)}\n        <SceneView\n          screenProps={screenProps}\n          navigation={navigation}\n          component={SceneComponent}\n        />\n      </Screen>\n    );\n  };\n\n  render() {\n    const { navigation, descriptors } = this.props;\n\n    return (\n      <ScreenStack\n        style={styles.scenes}\n        onFinishTransitioning={this._onFinishTransitioning}>\n        {navigation.state.routes.map((route, i) =>\n          this._renderScene(i, route, descriptors[route.key])\n        )}\n      </ScreenStack>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scenes: { flex: 1 },\n});\n\nfunction createStackNavigator(routeConfigMap, stackConfig = {}) {\n  const router = StackRouter(routeConfigMap, stackConfig);\n\n  // belowe we override getStateForAction method in order to add handling for\n  // a custom native stack navigation action. The action REMOVE that we want to\n  // add works in a similar way to POP, but it does not remove all the routes\n  // that sit on top of the removed route. For example if we have three routes\n  // [a,b,c] and call POP on b, then both b and c will go away. In case we\n  // call REMOVE on b, only b will be removed from the stack and the resulting\n  // state will be [a, c]\n  const superGetStateForAction = router.getStateForAction;\n  router.getStateForAction = (action, state) => {\n    if (action.type === REMOVE_ACTION) {\n      const { key, immediate } = action;\n      let backRouteIndex = state.index;\n      if (key) {\n        const backRoute = state.routes.find((route) => route.key === key);\n        backRouteIndex = state.routes.indexOf(backRoute);\n      }\n\n      if (backRouteIndex > 0) {\n        const newRoutes = [...state.routes];\n        newRoutes.splice(backRouteIndex, 1);\n        return {\n          ...state,\n          routes: newRoutes,\n          index: newRoutes.length - 1,\n          isTransitioning: immediate !== true,\n        };\n      }\n    }\n    return superGetStateForAction(action, state);\n  };\n  // Create a navigator with StackView as the view\n  return createNavigator(StackView, router, stackConfig);\n}\n\nexport default createStackNavigator;\n"]}
\ No newline at end of file
+{"version":3,"sources":["createNativeStackNavigator.js"],"names":["React","Platform","StyleSheet","Screen","ScreenStack","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","createNavigator","SceneView","StackActions","StackRouter","HeaderBackButton","renderComponentOrThunk","componentOrThunk","props","REMOVE_ACTION","StackView","Component","route","navigation","dispatch","type","immediate","key","descriptor","options","onAppear","completeTransition","toChildKey","state","routes","lastRoute","length","index","navigationConfig","headerMode","backButtonInCustomView","direction","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerHideBackButton","headerLargeStyle","headerLargeTitleStyle","headerStyle","headerTintColor","headerTitleStyle","headerTopInsetEnabled","hideShadow","largeTitle","largeTitleHideShadow","screenOrientation","statusBarAnimation","statusBarHidden","statusBarStyle","title","translucent","scene","headerOptions","backTitle","backTitleFontFamily","fontFamily","backTitleFontSize","fontSize","color","topInsetEnabled","hideBackButton","largeTitleBackgroundColor","backgroundColor","largeTitleColor","largeTitleFontFamily","largeTitleFontSize","largeTitleFontWeight","fontWeight","titleColor","titleFontFamily","titleFontSize","titleFontWeight","undefined","hasHeader","header","blurEffect","children","backButtonImage","push","headerLeft","headerBackImage","goBack","requestAnimationFrame","headerPressColorAndroid","backButtonTitle","truncatedBackButtonTitle","backTitleVisible","layoutPreset","headerTitle","headerRight","getComponent","mode","transparentCard","SceneComponent","stackPresentation","cardTransparent","stackAnimation","animationEnabled","screenProps","absoluteFill","cardStyle","replaceAnimation","preventGoingBack","OS","gestureEnabled","_onAppear","_removeScene","_renderHeaderConfig","render","descriptors","styles","scenes","_onFinishTransitioning","map","i","_renderScene","create","flex","createStackNavigator","routeConfigMap","stackConfig","router","superGetStateForAction","getStateForAction","action","backRouteIndex","backRoute","find","indexOf","newRoutes","splice","isTransitioning"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport {\n  Screen,\n  ScreenStack,\n  ScreenStackHeaderBackButtonImage,\n  ScreenStackHeaderCenterView,\n  ScreenStackHeaderConfig,\n  ScreenStackHeaderLeftView,\n  ScreenStackHeaderRightView,\n} from 'react-native-screens';\nimport {\n  createNavigator,\n  SceneView,\n  StackActions,\n  StackRouter,\n} from 'react-navigation';\nimport { HeaderBackButton } from 'react-navigation-stack';\n\nfunction renderComponentOrThunk(componentOrThunk, props) {\n  if (typeof componentOrThunk === 'function') {\n    return componentOrThunk(props);\n  }\n  return componentOrThunk;\n}\n\nconst REMOVE_ACTION = 'NativeStackNavigator/REMOVE';\n\nclass StackView extends React.Component {\n  _removeScene = (route) => {\n    this.props.navigation.dispatch({\n      type: REMOVE_ACTION,\n      immediate: true,\n      key: route.key,\n    });\n  };\n\n  _onAppear = (route, descriptor) => {\n    descriptor.options &&\n      descriptor.options.onAppear &&\n      descriptor.options.onAppear();\n    this.props.navigation.dispatch(\n      StackActions.completeTransition({\n        toChildKey: route.key,\n        key: this.props.navigation.state.key,\n      })\n    );\n  };\n\n  _onFinishTransitioning = () => {\n    const { routes } = this.props.navigation.state;\n    const lastRoute = routes?.length && routes[routes.length - 1];\n\n    if (lastRoute) {\n      this.props.navigation.dispatch(\n        StackActions.completeTransition({\n          toChildKey: lastRoute.key,\n          key: this.props.navigation.state.key,\n        })\n      );\n    }\n  };\n\n  _renderHeaderConfig = (index, route, descriptor) => {\n    const { navigationConfig } = this.props;\n    const { options } = descriptor;\n    const { headerMode } = navigationConfig;\n\n    const {\n      backButtonInCustomView,\n      direction,\n      headerBackTitle,\n      headerBackTitleStyle,\n      headerBackTitleVisible,\n      headerHideBackButton,\n      headerLargeStyle,\n      headerLargeTitleStyle,\n      headerStyle,\n      headerTintColor,\n      headerTitleStyle,\n      headerTopInsetEnabled = true,\n      hideShadow,\n      largeTitle,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      translucent,\n    } = options;\n\n    const scene = {\n      index,\n      key: route.key,\n      route,\n      descriptor,\n    };\n\n    const headerOptions = {\n      backButtonInCustomView,\n      backTitle: headerBackTitleVisible === false ? '' : headerBackTitle,\n      backTitleFontFamily:\n        headerBackTitleStyle && headerBackTitleStyle.fontFamily,\n      backTitleFontSize: headerBackTitleStyle && headerBackTitleStyle.fontSize,\n      color: headerTintColor,\n      direction,\n      topInsetEnabled: headerTopInsetEnabled,\n      hideBackButton: headerHideBackButton,\n      hideShadow,\n      largeTitle,\n      largeTitleBackgroundColor:\n        (headerLargeStyle && headerLargeStyle.backgroundColor) ||\n        (headerLargeTitleStyle && headerLargeTitleStyle.backgroundColor),\n      largeTitleColor: headerLargeTitleStyle && headerLargeTitleStyle.color,\n      largeTitleFontFamily:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontFamily,\n      largeTitleFontSize:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontSize,\n      largeTitleFontWeight:\n        headerLargeTitleStyle && headerLargeTitleStyle.fontWeight,\n      largeTitleHideShadow,\n      screenOrientation,\n      statusBarAnimation,\n      statusBarHidden,\n      statusBarStyle,\n      title,\n      titleColor:\n        (headerTitleStyle && headerTitleStyle.color) || headerTintColor,\n      titleFontFamily: headerTitleStyle && headerTitleStyle.fontFamily,\n      titleFontSize: headerTitleStyle && headerTitleStyle.fontSize,\n      titleFontWeight: headerTitleStyle && headerTitleStyle.fontWeight,\n      translucent: translucent === undefined ? false : translucent,\n    };\n\n    const hasHeader = headerMode !== 'none' && options.header !== null;\n    if (!hasHeader) {\n      return <ScreenStackHeaderConfig {...headerOptions} hidden />;\n    }\n\n    if (headerStyle !== undefined) {\n      headerOptions.backgroundColor = headerStyle.backgroundColor;\n      headerOptions.blurEffect = headerStyle.blurEffect;\n    }\n\n    const children = [];\n\n    if (options.backButtonImage) {\n      children.push(\n        <ScreenStackHeaderBackButtonImage\n          key=\"backImage\"\n          source={options.backButtonImage}\n        />\n      );\n    }\n\n    if (options.headerLeft !== undefined) {\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          {renderComponentOrThunk(options.headerLeft, { scene })}\n        </ScreenStackHeaderLeftView>\n      );\n    } else if (options.headerBackImage !== undefined) {\n      const goBack = () => {\n        // Go back on next tick because button ripple effect needs to happen on Android\n        requestAnimationFrame(() => {\n          descriptor.navigation.goBack(descriptor.key);\n        });\n      };\n\n      children.push(\n        <ScreenStackHeaderLeftView key=\"left\">\n          <HeaderBackButton\n            onPress={goBack}\n            pressColorAndroid={options.headerPressColorAndroid}\n            tintColor={options.headerTintColor}\n            backImage={options.headerBackImage}\n            title={options.backButtonTitle}\n            truncatedTitle={options.truncatedBackButtonTitle}\n            backTitleVisible={this.props.backTitleVisible}\n            titleStyle={options.headerBackTitleStyle}\n            layoutPreset={this.props.layoutPreset}\n            scene={scene}\n          />\n        </ScreenStackHeaderLeftView>\n      );\n    }\n\n    if (options.headerTitle) {\n      if (title === undefined && typeof options.headerTitle === 'string') {\n        headerOptions.title = options.headerTitle;\n      } else {\n        children.push(\n          <ScreenStackHeaderCenterView key=\"center\">\n            {renderComponentOrThunk(options.headerTitle, { scene })}\n          </ScreenStackHeaderCenterView>\n        );\n      }\n    }\n\n    if (options.headerRight) {\n      children.push(\n        <ScreenStackHeaderRightView key=\"right\">\n          {renderComponentOrThunk(options.headerRight, { scene })}\n        </ScreenStackHeaderRightView>\n      );\n    }\n\n    if (children.length > 0) {\n      headerOptions.children = children;\n    }\n\n    return <ScreenStackHeaderConfig {...headerOptions} />;\n  };\n\n  _renderScene = (index, route, descriptor) => {\n    const { navigation, getComponent, options } = descriptor;\n    const { mode, transparentCard } = this.props.navigationConfig;\n    const SceneComponent = getComponent();\n\n    let stackPresentation = 'push';\n    if (mode === 'modal' || mode === 'containedModal') {\n      stackPresentation = mode;\n      if (transparentCard || options.cardTransparent) {\n        stackPresentation =\n          mode === 'containedModal'\n            ? 'containedTransparentModal'\n            : 'transparentModal';\n      }\n    }\n\n    let stackAnimation = options.stackAnimation;\n    if (options.animationEnabled === false) {\n      stackAnimation = 'none';\n    }\n\n    const { screenProps } = this.props;\n    return (\n      <Screen\n        key={`screen_${route.key}`}\n        style={[StyleSheet.absoluteFill, options.cardStyle]}\n        stackAnimation={stackAnimation}\n        stackPresentation={stackPresentation}\n        replaceAnimation={\n          options.replaceAnimation === undefined\n            ? 'pop'\n            : options.replaceAnimation\n        }\n        preventGoingBack={options.preventGoingBack}\n        pointerEvents={\n          index === this.props.navigation.state.routes.length - 1\n            ? 'auto'\n            : 'none'\n        }\n        gestureEnabled={\n          Platform.OS === 'android'\n            ? false\n            : options.gestureEnabled === undefined\n            ? true\n            : options.gestureEnabled\n        }\n        onAppear={() => this._onAppear(route, descriptor)}\n        onDismissed={() => this._removeScene(route)}>\n        {this._renderHeaderConfig(index, route, descriptor)}\n        <SceneView\n          screenProps={screenProps}\n          navigation={navigation}\n          component={SceneComponent}\n        />\n      </Screen>\n    );\n  };\n\n  render() {\n    const { navigation, descriptors } = this.props;\n\n    return (\n      <ScreenStack\n        style={styles.scenes}\n        onFinishTransitioning={this._onFinishTransitioning}>\n        {navigation.state.routes.map((route, i) =>\n          this._renderScene(i, route, descriptors[route.key])\n        )}\n      </ScreenStack>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scenes: { flex: 1 },\n});\n\nfunction createStackNavigator(routeConfigMap, stackConfig = {}) {\n  const router = StackRouter(routeConfigMap, stackConfig);\n\n  // belowe we override getStateForAction method in order to add handling for\n  // a custom native stack navigation action. The action REMOVE that we want to\n  // add works in a similar way to POP, but it does not remove all the routes\n  // that sit on top of the removed route. For example if we have three routes\n  // [a,b,c] and call POP on b, then both b and c will go away. In case we\n  // call REMOVE on b, only b will be removed from the stack and the resulting\n  // state will be [a, c]\n  const superGetStateForAction = router.getStateForAction;\n  router.getStateForAction = (action, state) => {\n    if (action.type === REMOVE_ACTION) {\n      const { key, immediate } = action;\n      let backRouteIndex = state.index;\n      if (key) {\n        const backRoute = state.routes.find((route) => route.key === key);\n        backRouteIndex = state.routes.indexOf(backRoute);\n      }\n\n      if (backRouteIndex > 0) {\n        const newRoutes = [...state.routes];\n        newRoutes.splice(backRouteIndex, 1);\n        return {\n          ...state,\n          routes: newRoutes,\n          index: newRoutes.length - 1,\n          isTransitioning: immediate !== true,\n        };\n      }\n    }\n    return superGetStateForAction(action, state);\n  };\n  // Create a navigator with StackView as the view\n  return createNavigator(StackView, router, stackConfig);\n}\n\nexport default createStackNavigator;\n"]}
\ No newline at end of file
diff --git a/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js b/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js
index 89de35e..ec75aca 100644
--- a/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js
+++ b/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js
@@ -53,7 +53,8 @@ export default function NativeStackView({
       replaceAnimation = 'pop',
       stackPresentation = 'push',
       stackAnimation,
-      contentStyle
+      contentStyle,
+      preventGoingBack = false
     } = options;
     const viewStyles = [styles.container, stackPresentation !== 'transparentModal' && {
       backgroundColor: colors.background
@@ -62,6 +63,7 @@ export default function NativeStackView({
       key: route.key,
       style: StyleSheet.absoluteFill,
       gestureEnabled: isAndroid ? false : gestureEnabled,
+      preventGoingBack: preventGoingBack,
       replaceAnimation: replaceAnimation,
       stackPresentation: stackPresentation,
       stackAnimation: stackAnimation,
@@ -105,6 +107,16 @@ export default function NativeStackView({
           target: route.key
         });
       },
+      onGoingBackPrevented: () => {
+        navigation.emit({
+          type: 'dismiss',
+          target: route.key
+        });
+        navigation.dispatch({ ...StackActions.pop(),
+          source: route.key,
+          target: key
+        });
+      },
       onDismissed: () => {
         navigation.emit({
           type: 'dismiss',
diff --git a/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js.map b/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js.map
index 7c1fd78..d0ee948 100644
--- a/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js.map
+++ b/node_modules/react-native-screens/lib/module/native-stack/views/NativeStackView.js.map
@@ -1 +1 @@
-{"version":3,"sources":["NativeStackView.tsx"],"names":["StackActions","useTheme","React","Platform","StyleSheet","View","AppContainer","Screen","ScreenComponent","ScreenStack","HeaderConfig","isAndroid","OS","Container","__DEV__","DebugContainer","props","stackPresentation","rest","NativeStackView","state","navigation","descriptors","key","routes","colors","styles","container","map","route","options","render","renderScene","gestureEnabled","replaceAnimation","stackAnimation","contentStyle","viewStyles","backgroundColor","background","absoluteFill","emit","type","data","closing","target","dispatch","pop","source","create","flex"],"mappings":";;AAAA,SAEEA,YAFF,EAIEC,QAJF,QAKO,0BALP;AAMA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,UAAnB,EAA+BC,IAA/B,QAAsD,cAAtD,C,CACA;;AACA,OAAOC,YAAP,MAAyB,iDAAzB;AACA,SACEC,MAAM,IAAIC,eADZ,EAGEC,WAHF,QAKO,sBALP;AAUA,OAAOC,YAAP,MAAyB,gBAAzB;AAEA,MAAMH,MAAM,GAAIC,eAAhB;AACA,MAAMG,SAAS,GAAGR,QAAQ,CAACS,EAAT,KAAgB,SAAlC;AAEA,IAAIC,SAAS,GAAGR,IAAhB;;AAEA,IAAIS,OAAJ,EAAa;AACX,QAAMC,cAAc,GAClBC,KADqB,IAElB;AACH,UAAM;AAAEC,MAAAA,iBAAF;AAAqB,SAAGC;AAAxB,QAAiCF,KAAvC;;AACA,QAAIb,QAAQ,CAACS,EAAT,KAAgB,KAAhB,IAAyBK,iBAAiB,KAAK,MAAnD,EAA2D;AACzD,0BACE,oBAAC,YAAD,qBACE,oBAAC,IAAD,EAAUC,IAAV,CADF,CADF;AAKD;;AACD,wBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD,GAZD,CADW,CAcX;;;AACAL,EAAAA,SAAS,GAAGE,cAAZ;AACD;;AAQD,eAAe,SAASI,eAAT,CAAyB;AACtCC,EAAAA,KADsC;AAEtCC,EAAAA,UAFsC;AAGtCC,EAAAA;AAHsC,CAAzB,EAIQ;AACrB,QAAM;AAAEC,IAAAA,GAAF;AAAOC,IAAAA;AAAP,MAAkBJ,KAAxB;AACA,QAAM;AAAEK,IAAAA;AAAF,MAAaxB,QAAQ,EAA3B;AAEA,sBACE,oBAAC,WAAD;AAAa,IAAA,KAAK,EAAEyB,MAAM,CAACC;AAA3B,KACGH,MAAM,CAACI,GAAP,CAAYC,KAAD,IAAW;AACrB,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA,MAAM,EAAEC;AAAnB,QAAmCV,WAAW,CAACO,KAAK,CAACN,GAAP,CAApD;AACA,UAAM;AACJU,MAAAA,cADI;AAEJC,MAAAA,gBAAgB,GAAG,KAFf;AAGJjB,MAAAA,iBAAiB,GAAG,MAHhB;AAIJkB,MAAAA,cAJI;AAKJC,MAAAA;AALI,QAMFN,OANJ;AAQA,UAAMO,UAAU,GAAG,CACjBX,MAAM,CAACC,SADU,EAEjBV,iBAAiB,KAAK,kBAAtB,IAA4C;AAC1CqB,MAAAA,eAAe,EAAEb,MAAM,CAACc;AADkB,KAF3B,EAKjBH,YALiB,CAAnB;AAQA,wBACE,oBAAC,MAAD;AACE,MAAA,GAAG,EAAEP,KAAK,CAACN,GADb;AAEE,MAAA,KAAK,EAAEnB,UAAU,CAACoC,YAFpB;AAGE,MAAA,cAAc,EAAE7B,SAAS,GAAG,KAAH,GAAWsB,cAHtC;AAIE,MAAA,gBAAgB,EAAEC,gBAJpB;AAKE,MAAA,iBAAiB,EAAEjB,iBALrB;AAME,MAAA,cAAc,EAAEkB,cANlB;AAOE,MAAA,YAAY,EAAE,MAAM;AAClBd,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,iBADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAHA,SAAhB;AAKD,OAbH;AAcE,MAAA,eAAe,EAAE,MAAM;AACrBF,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,iBADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAHA,SAAhB;AAKD,OApBH;AAqBE,MAAA,QAAQ,EAAE,MAAM;AACdF,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,QADQ;AAEdG,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAFA,SAAhB;AAIAF,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAHA,SAAhB;AAKD,OA/BH;AAgCE,MAAA,WAAW,EAAE,MAAM;AACjBF,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAHA,SAAhB;AAKD,OAtCH;AAuCE,MAAA,WAAW,EAAE,MAAM;AACjBF,QAAAA,UAAU,CAACoB,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,SADQ;AAEdG,UAAAA,MAAM,EAAEhB,KAAK,CAACN;AAFA,SAAhB;AAKAF,QAAAA,UAAU,CAACyB,QAAX,CAAoB,EAClB,GAAG9C,YAAY,CAAC+C,GAAb,EADe;AAElBC,UAAAA,MAAM,EAAEnB,KAAK,CAACN,GAFI;AAGlBsB,UAAAA,MAAM,EAAEtB;AAHU,SAApB;AAKD;AAlDH,oBAmDE,oBAAC,YAAD,eAAkBO,OAAlB;AAA2B,MAAA,KAAK,EAAED;AAAlC,OAnDF,eAoDE,oBAAC,SAAD;AACE,MAAA,KAAK,EAAEQ,UADT,CAEE;AAFF;AAGE,MAAA,iBAAiB,EAAEpB;AAHrB,OAIGe,WAAW,EAJd,CApDF,CADF;AA6DD,GA/EA,CADH,CADF;AAoFD;AAED,MAAMN,MAAM,GAAGtB,UAAU,CAAC6C,MAAX,CAAkB;AAC/BtB,EAAAA,SAAS,EAAE;AACTuB,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","sourcesContent":["import {\n  ParamListBase,\n  StackActions,\n  StackNavigationState,\n  useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport {\n  Screen as ScreenComponent,\n  ScreenProps,\n  ScreenStack,\n  StackPresentationTypes,\n} from 'react-native-screens';\nimport {\n  NativeStackDescriptorMap,\n  NativeStackNavigationHelpers,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\n\nconst Screen = (ScreenComponent as unknown) as React.ComponentType<ScreenProps>;\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n  const DebugContainer = (\n    props: ViewProps & { stackPresentation: StackPresentationTypes }\n  ) => {\n    const { stackPresentation, ...rest } = props;\n    if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n      return (\n        <AppContainer>\n          <View {...rest} />\n        </AppContainer>\n      );\n    }\n    return <View {...rest} />;\n  };\n  // @ts-ignore Wrong props\n  Container = DebugContainer;\n}\n\ntype Props = {\n  state: StackNavigationState<ParamListBase>;\n  navigation: NativeStackNavigationHelpers;\n  descriptors: NativeStackDescriptorMap;\n};\n\nexport default function NativeStackView({\n  state,\n  navigation,\n  descriptors,\n}: Props): JSX.Element {\n  const { key, routes } = state;\n  const { colors } = useTheme();\n\n  return (\n    <ScreenStack style={styles.container}>\n      {routes.map((route) => {\n        const { options, render: renderScene } = descriptors[route.key];\n        const {\n          gestureEnabled,\n          replaceAnimation = 'pop',\n          stackPresentation = 'push',\n          stackAnimation,\n          contentStyle,\n        } = options;\n\n        const viewStyles = [\n          styles.container,\n          stackPresentation !== 'transparentModal' && {\n            backgroundColor: colors.background,\n          },\n          contentStyle,\n        ];\n\n        return (\n          <Screen\n            key={route.key}\n            style={StyleSheet.absoluteFill}\n            gestureEnabled={isAndroid ? false : gestureEnabled}\n            replaceAnimation={replaceAnimation}\n            stackPresentation={stackPresentation}\n            stackAnimation={stackAnimation}\n            onWillAppear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onWillDisappear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onAppear={() => {\n              navigation.emit({\n                type: 'appear',\n                target: route.key,\n              });\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onDisappear={() => {\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onDismissed={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}>\n            <HeaderConfig {...options} route={route} />\n            <Container\n              style={viewStyles}\n              // @ts-ignore Wrong props passed to View\n              stackPresentation={stackPresentation}>\n              {renderScene()}\n            </Container>\n          </Screen>\n        );\n      })}\n    </ScreenStack>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["NativeStackView.tsx"],"names":["StackActions","useTheme","React","Platform","StyleSheet","View","AppContainer","Screen","ScreenComponent","ScreenStack","HeaderConfig","isAndroid","OS","Container","__DEV__","DebugContainer","props","stackPresentation","rest","NativeStackView","state","navigation","descriptors","key","routes","colors","styles","container","map","route","options","render","renderScene","gestureEnabled","replaceAnimation","stackAnimation","contentStyle","preventGoingBack","viewStyles","backgroundColor","background","absoluteFill","emit","type","data","closing","target","dispatch","pop","source","create","flex"],"mappings":"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","sourcesContent":["import {\n  ParamListBase,\n  StackActions,\n  StackNavigationState,\n  useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport {\n  Screen as ScreenComponent,\n  ScreenProps,\n  ScreenStack,\n  StackPresentationTypes,\n} from 'react-native-screens';\nimport {\n  NativeStackDescriptorMap,\n  NativeStackNavigationHelpers,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\n\nconst Screen = (ScreenComponent as unknown) as React.ComponentType<ScreenProps>;\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n  const DebugContainer = (\n    props: ViewProps & { stackPresentation: StackPresentationTypes }\n  ) => {\n    const { stackPresentation, ...rest } = props;\n    if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n      return (\n        <AppContainer>\n          <View {...rest} />\n        </AppContainer>\n      );\n    }\n    return <View {...rest} />;\n  };\n  // @ts-ignore Wrong props\n  Container = DebugContainer;\n}\n\ntype Props = {\n  state: StackNavigationState<ParamListBase>;\n  navigation: NativeStackNavigationHelpers;\n  descriptors: NativeStackDescriptorMap;\n};\n\nexport default function NativeStackView({\n  state,\n  navigation,\n  descriptors,\n}: Props): JSX.Element {\n  const { key, routes } = state;\n  const { colors } = useTheme();\n\n  return (\n    <ScreenStack style={styles.container}>\n      {routes.map((route) => {\n        const { options, render: renderScene } = descriptors[route.key];\n        const {\n          gestureEnabled,\n          replaceAnimation = 'pop',\n          stackPresentation = 'push',\n          stackAnimation,\n          contentStyle,\n          preventGoingBack = false,\n        } = options;\n\n        const viewStyles = [\n          styles.container,\n          stackPresentation !== 'transparentModal' && {\n            backgroundColor: colors.background,\n          },\n          contentStyle,\n        ];\n\n        return (\n          <Screen\n            key={route.key}\n            style={StyleSheet.absoluteFill}\n            gestureEnabled={isAndroid ? false : gestureEnabled}\n            preventGoingBack={preventGoingBack}\n            replaceAnimation={replaceAnimation}\n            stackPresentation={stackPresentation}\n            stackAnimation={stackAnimation}\n            onWillAppear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onWillDisappear={() => {\n              navigation.emit({\n                type: 'transitionStart',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onAppear={() => {\n              navigation.emit({\n                type: 'appear',\n                target: route.key,\n              });\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: false },\n                target: route.key,\n              });\n            }}\n            onDisappear={() => {\n              navigation.emit({\n                type: 'transitionEnd',\n                data: { closing: true },\n                target: route.key,\n              });\n            }}\n            onGoingBackPrevented={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}\n            onDismissed={() => {\n              navigation.emit({\n                type: 'dismiss',\n                target: route.key,\n              });\n\n              navigation.dispatch({\n                ...StackActions.pop(),\n                source: route.key,\n                target: key,\n              });\n            }}>\n            <HeaderConfig {...options} route={route} />\n            <Container\n              style={viewStyles}\n              // @ts-ignore Wrong props passed to View\n              stackPresentation={stackPresentation}>\n              {renderScene()}\n            </Container>\n          </Screen>\n        );\n      })}\n    </ScreenStack>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n});\n"]}
\ No newline at end of file
diff --git a/node_modules/react-native-screens/lib/typescript/types.d.ts b/node_modules/react-native-screens/lib/typescript/types.d.ts
index 9b8a453..d3bb46b 100644
--- a/node_modules/react-native-screens/lib/typescript/types.d.ts
+++ b/node_modules/react-native-screens/lib/typescript/types.d.ts
@@ -201,6 +201,11 @@ export declare type NativeStackNavigationOptions = {
      * Boolean indicating whether the navigation bar is translucent.
      */
     headerTranslucent?: boolean;
+    /**
+     * Boolean indicating whether the navigation should be performed only on the JS side to be able to prevent it.
+     * Affects header back button behavior on Android. On iOS, it affects swipe gesture, header back button (TBD) and modal dismissal. Works only with `gestureEnabled` set to `true` for modal and swipe.
+     */
+    preventGoingBack?: boolean;
     /**
      * How should the screen replacing another screen animate. Defaults to `pop`.
      * The following values are currently supported:
diff --git a/node_modules/react-native-screens/src/createNativeStackNavigator.js b/node_modules/react-native-screens/src/createNativeStackNavigator.js
index ed695e7..0af272b 100644
--- a/node_modules/react-native-screens/src/createNativeStackNavigator.js
+++ b/node_modules/react-native-screens/src/createNativeStackNavigator.js
@@ -246,6 +246,7 @@ class StackView extends React.Component {
             ? 'pop'
             : options.replaceAnimation
         }
+        preventGoingBack={options.preventGoingBack}
         pointerEvents={
           index === this.props.navigation.state.routes.length - 1
             ? 'auto'
diff --git a/node_modules/react-native-screens/src/index.d.ts b/node_modules/react-native-screens/src/index.d.ts
index aced5e5..9e2fa8c 100644
--- a/node_modules/react-native-screens/src/index.d.ts
+++ b/node_modules/react-native-screens/src/index.d.ts
@@ -79,6 +79,10 @@ declare module 'react-native-screens' {
      * @description A callback that gets called when the current screen appears.
      */
     onAppear?: (e: NativeSyntheticEvent<NativeTouchEvent>) => void;
+    /**
+     * @description A callback that gets called when the native header back button is clicked on Android. It enables the option to prevent going back.
+     */
+    onBackButtonClicked?: (e: NativeSyntheticEvent<NativeTouchEvent>) => void;
     onComponentRef?: (view: unknown) => void;
     /**
      * @description A callback that gets called when the current screen disappears.
@@ -88,6 +92,10 @@ declare module 'react-native-screens' {
      * @description A callback that gets called when the current screen is dismissed by hardware back (on Android) or dismiss gesture (swipe back or down). The callback takes no arguments.
      */
     onDismissed?: (e: NativeSyntheticEvent<NativeTouchEvent>) => void;
+    /**
+     * @description A callback that gets called when the current screen is prevented from dismissing by setting `preventGoingBack` to `true`. The callback takes no arguments.
+     */
+    onGoingBackPrevented?: (e: NativeSyntheticEvent<NativeTouchEvent>) => void;
     /**
      * @description A callback that gets called when the current screen will appear. This is called as soon as the transition begins.
      */
@@ -96,6 +104,10 @@ declare module 'react-native-screens' {
      * @description A callback that gets called when the current screen will disappear. This is called as soon as the transition begins.
      */
     onWillDisappear?: (e: NativeSyntheticEvent<NativeTouchEvent>) => void;
+    /**
+     * @description Boolean indicating whether the navigation should be performed only on the JS side to be able to prevent it. Affects header back button behavior on Android. On iOS, it affects swipe gesture, header back button (TBD) and modal dismissal. Works only with `gestureEnabled` set to `true` for modal and swipe.
+     */
+    preventGoingBack?: boolean;
     /**
      * @description Allows for the customization of the type of animation to use when this screen replaces another screen at the top of the stack. The following values are currently supported:
      *  @type "push" – performs push animation
diff --git a/node_modules/react-native-screens/src/native-stack/types.tsx b/node_modules/react-native-screens/src/native-stack/types.tsx
index 9f6dff5..9a6db1b 100644
--- a/node_modules/react-native-screens/src/native-stack/types.tsx
+++ b/node_modules/react-native-screens/src/native-stack/types.tsx
@@ -215,6 +215,11 @@ export type NativeStackNavigationOptions = {
    * Boolean indicating whether the navigation bar is translucent.
    */
   headerTranslucent?: boolean;
+  /**
+   * Boolean indicating whether the navigation should be performed only on the JS side to be able to prevent it.
+   * Affects header back button behavior on Android. On iOS, it affects swipe gesture, header back button (TBD) and modal dismissal. Works only with `gestureEnabled` set to `true` for modal and swipe.
+   */
+  preventGoingBack?: boolean;
   /**
    * How should the screen replacing another screen animate. Defaults to `pop`.
    * The following values are currently supported:
diff --git a/node_modules/react-native-screens/src/native-stack/views/NativeStackView.tsx b/node_modules/react-native-screens/src/native-stack/views/NativeStackView.tsx
index 30775c5..027f4aa 100644
--- a/node_modules/react-native-screens/src/native-stack/views/NativeStackView.tsx
+++ b/node_modules/react-native-screens/src/native-stack/views/NativeStackView.tsx
@@ -67,6 +67,7 @@ export default function NativeStackView({
           stackPresentation = 'push',
           stackAnimation,
           contentStyle,
+          preventGoingBack = false,
         } = options;
 
         const viewStyles = [
@@ -82,6 +83,7 @@ export default function NativeStackView({
             key={route.key}
             style={StyleSheet.absoluteFill}
             gestureEnabled={isAndroid ? false : gestureEnabled}
+            preventGoingBack={preventGoingBack}
             replaceAnimation={replaceAnimation}
             stackPresentation={stackPresentation}
             stackAnimation={stackAnimation}
@@ -117,6 +119,18 @@ export default function NativeStackView({
                 target: route.key,
               });
             }}
+            onGoingBackPrevented={() => {
+              navigation.emit({
+                type: 'dismiss',
+                target: route.key,
+              });
+
+              navigation.dispatch({
+                ...StackActions.pop(),
+                source: route.key,
+                target: key,
+              });
+            }}
             onDismissed={() => {
               navigation.emit({
                 type: 'dismiss',

@darron1217
Copy link

Yeah, I changed the implementation and added a prop preventGoingBack, which, when set to true, will make the JS decide of the navigation, so you can prevent it. I added this option for navigation options on iOS too, like swiping and dismissing a modal. The only problem is that there seems to be no option to prevent the navigation on iOS native back button unfortunately.

iOS seems not supporting this feature officially.
Then, how about implementing custom < button when the option preventGoingBack: true is specified?

@WoLewicki
Copy link
Member Author

Yeah, maybe it is a way to go, but I think it will be left for the users to decide about the custom back button. We expose prop headerLeft which is the best option for this.

@WoLewicki WoLewicki marked this pull request as ready for review April 26, 2021 12:46
@WoLewicki WoLewicki changed the title feat: make Android back button fire event feat: provide a way to prevent native navigation Jul 6, 2021
@nandorojo
Copy link

nandorojo commented Aug 4, 2021

@WoLewicki wanted to follow up from my comments on the RN discord about this. Do you think this PR will get merged soon? This feature will really improve the UX of forms by asking users if they want to discard unsaved changes.

I think it’s totally fair to require a custom back button to implement this behavior. I’m happy to add this to the docs if it would help move the PR along :)

If I want to test it, should I just generate a patch from this PR, and then use the beforeRemove event listener from React Navigation? Also, is this PR compatible with the latest version of screens?

thanks!

@WoLewicki
Copy link
Member Author

I added another implementation on iOS that makes it possible to reattach screens dismissed by native gestures. Please check preventNativeDismiss and onNativeDismissCancelled for more information.

@@ -85,6 +85,15 @@ String that applies `rtl` or `ltr` form to the stack. On Android, you have to ad

Boolean indicating whether to show the menu on longPress of iOS >= 14 back button. Only supported on iOS.

#### `enableNativeBackButtonDismissal` (Android only)
Copy link
Collaborator

@satya164 satya164 Aug 9, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd name it nativeBackButtonDismissalEnabled to match the naming patterns of other APIs in React Navigation

src/native-stack/utils/usePreventDismiss.tsx Outdated Show resolved Hide resolved
@@ -11,6 +11,7 @@ export { default as NativeStackView } from './views/NativeStackView';
/**
* Utilities
*/
export { default as usePreventDismiss } from './utils/usePreventDismiss';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd make this part of the screens package

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’m currently using v5. On web, I use stack navigation, and on ios/android I use native-stack.

Should I use this hook only on native, and then use the typical beforeRemove event listener in an effect on web?

(Once I upgrade to v6 I assume this won’t matter, but it’s going to take me a little bit.)

@trajano
Copy link

trajano commented Aug 26, 2021

Can this be merged in assuming it works?

#### `nativeBackButtonDismissalEnabled` (Android only)

Boolean indicating whether, when the Android default back button is clicked, the `pop` action should be performed on the native side or on the JS side to be able to prevent it.
Unfortunately the same behavior is not available on iOS since the behavior of native back button cannot be changed there. In order to prevent the dismiss there, you should provide your own back button using `headerLeft`.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a Component that we can use to provide the back button with the same stylings as the native one including the chevron and the localized Back text?

@@ -297,6 +304,58 @@ function Home() {
}
```

#### `usePreventDismiss` (iOS only)

A hook to be used in order to prevent the native dismissal options (swipe and default header back button) on iOS. It should be used along with `react-navigation` `beforeRemove` listener to provide the behavior similar to the one in `stack` navigator. Example of usage:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add a note (assuming it is implemented as follows)

Using this on platforms other than iOS will be a noop.

@@ -297,6 +304,58 @@ function Home() {
}
```

#### `usePreventDismiss` (iOS only)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be better to use usePreventNativeDismiss since this is specifically to disable native behaviour.

@nandorojo
Copy link

A few questions:

  1. Gestures

What does the behavior look like for gestures here?

Does it fully block the ability to swipe? Or does it let you swipe, and then snap the screen back into place if there are unsaved changes?

I think the second approach would be ideal, similar to the Native modal.

  1. Cross-platform hook

The docs recommend using beforeRemove yourself on other platforms. But it’s a bit awkward to conditionally use hooks based on platform.

What if this PR implemented the beforeRemove listener on platforms other than iOS?

  1. Usage

I’m slightly confused by what the option is on the screen. Is that just an added way to prevent Native dismissal? Or do you need to both use the hook and pass the option to each screen?

Thanks @WoLewicki @kacperkapusciak!

@WoLewicki
Copy link
Member Author

WoLewicki commented Sep 6, 2021

After consultation with @satya164, we decided to merge only the native part of code for now in order for it to be available in next Expo SDK. The JS part is yet to be decided, probably some generic way to apply navigation preventing via a hook will be exposed. Only part left is the change of default Android back button behavior being now sending an event with dismiss to JS instead of popping the screen natively.

@nandorojo
Copy link

@WoLewicki sounds good, thanks for the update. Let me know if I can help in any way.

Will these Native changes also apply to React Navigation v6's Native stack?

@WoLewicki
Copy link
Member Author

After these changes are released, you can use the newest react-native-screens version which will have those native changes. Then it is up to v6 native-stack implementation to apply the JS changes in order for it to work correctly there.

@WoLewicki WoLewicki merged commit b1d6bca into master Sep 7, 2021
@WoLewicki WoLewicki deleted the @wolewicki/android-back-button-event branch September 7, 2021 11:41
@sdandois
Copy link

sdandois commented Feb 4, 2022

Link to @react-navigation issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants