about summary refs log tree commit diff
path: root/src/lib/hooks/useGoBack.ts
blob: e5a39f745c33f56e5870635039d5a3725a04612b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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())
      }
    }
  }
}