about summary refs log tree commit diff
path: root/src/lib/hooks/useGoBack.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/hooks/useGoBack.ts')
-rw-r--r--src/lib/hooks/useGoBack.ts23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/hooks/useGoBack.ts b/src/lib/hooks/useGoBack.ts
new file mode 100644
index 000000000..59555bdac
--- /dev/null
+++ b/src/lib/hooks/useGoBack.ts
@@ -0,0 +1,23 @@
+import {StackActions, useNavigation} from '@react-navigation/native'
+
+import {NavigationProp} from 'lib/routes/types'
+import {router} from '#/routes'
+
+export function useGoBack(onGoBack?: () => unknown) {
+  const navigation = useNavigation<NavigationProp>()
+  return () => {
+    onGoBack?.()
+    if (navigation.canGoBack()) {
+      navigation.goBack()
+    } else {
+      navigation.navigate('HomeTab')
+      // Checking the state for routes ensures that web doesn't encounter errors while going back
+      if (navigation.getState()?.routes) {
+        navigation.dispatch(StackActions.push(...router.matchPath('/')))
+      } else {
+        navigation.navigate('HomeTab')
+        navigation.dispatch(StackActions.popToTop())
+      }
+    }
+  }
+}