UNPKG

@applicaster/zapp-react-native-app

Version:

Zapp App Component for Applicaster's Quick Brick React Native App

65 lines (51 loc) 1.88 kB
import * as React from "react"; import { BackHandler } from "react-native"; import * as R from "ramda"; import { QUICK_BRICK_EVENTS, sendQuickBrickEvent, } from "@applicaster/zapp-react-native-bridge/QuickBrick"; import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation"; import { useAnalytics } from "@applicaster/zapp-react-native-utils/analyticsUtils"; import { useRivers } from "@applicaster/zapp-react-native-utils/reactHooks/state"; const getHome = R.compose(R.find(R.propEq("home", true)), R.values); const InteractionManagerComponent = () => { const { sendHardwareBackButtonClickEvent } = useAnalytics(); const rivers = useRivers(); const navigator = useNavigation(); const isHomeScreen = () => { const homeId = R.compose(R.prop("id"), getHome)(rivers); const homePath = `/river/${homeId}`; return homePath === navigator.currentRoute; }; const exitToBackground = () => { sendQuickBrickEvent(QUICK_BRICK_EVENTS.MOVE_APP_TO_BACKGROUND, { MOVE_APP_TO_BACKGROUND: true, }); }; const goToHome = () => { const home = getHome(rivers); navigator.replace(home); }; const onHardwareBackPress = React.useCallback(() => { if (navigator && !navigator.canGoBack()) { if (isHomeScreen()) { exitToBackground(); } else { goToHome(); } } else { sendHardwareBackButtonClickEvent({ navigator }); navigator.goBack(); } return true; // Take care! see jsdoc above }, [navigator.currentRoute]); React.useEffect(() => { BackHandler.addEventListener("hardwareBackPress", onHardwareBackPress); return () => { BackHandler.removeEventListener("hardwareBackPress", onHardwareBackPress); }; }, [onHardwareBackPress]); return null; }; export const InteractionManager = React.memo(InteractionManagerComponent);