Skip to content
Source
Sign inSign up
Open History to see the last commit

useAndroidWorkspaceNavigation.ts

29 lines1.0 KB

1import { StackActions, useFocusEffect, useNavigation } from "@react-navigation/native";
2import { useCallback } from "react";
3import { BackHandler, Keyboard, Platform } from "react-native";
4import { returnToAndroidWorkspaceList } from "../../../lib/android-workspace-navigation";
5​
6export function useWorkspaceBackNavigation() {
7 const navigation = useNavigation();
8 return () => {
9 if (Platform.OS === "android") returnToAndroidWorkspaceList(navigation);
10 else if (navigation.canGoBack()) navigation.goBack();
11 else navigation.dispatch(StackActions.replace("Home"));
12 };
14​
15export function useAndroidWorkspaceBack() {
16 const goBack = useWorkspaceBackNavigation();
17 useFocusEffect(
18 useCallback(() => {
19 if (Platform.OS !== "android") return;
20 const subscription = BackHandler.addEventListener("hardwareBackPress", () => {
21 if (Keyboard.isVisible()) Keyboard.dismiss();
22 else goBack();
23 return true;
24 });
25 return () => subscription.remove();
26 }, [goBack]),
27 );
28 return goBack;