This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
mobile-app/src/screens/Navigation.tsx

63 lines
1.7 KiB
TypeScript

import React, { useRef } from 'react';
import analytics from '@react-native-firebase/analytics';
import { AppStackParamList, Screen } from 'config/routing';
import {
NavigationContainer,
NavigationContainerRef,
} from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './HomeScreen/HomeScreen';
import TestScreen from './TestScreen/TestScreen';
const Stack = createStackNavigator<AppStackParamList>();
const AppStack = createStackNavigator<AppStackParamList>();
const AppScreens = () => (
<AppStack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name={Screen.HOME} component={HomeScreen} />
<Stack.Screen name={Screen.TEST} component={TestScreen} />
</AppStack.Navigator>
);
const Navigation = () => {
const routeNameRef = useRef<string>('');
const navigationRef = useRef<NavigationContainerRef>(null);
const logScreenView = (route: string) => {
return analytics().logScreenView({
screen_name: route,
screen_class: route,
});
};
const handleReady = () => {
logScreenView(navigationRef.current?.getCurrentRoute()?.name ?? '');
};
const handleStateChange = () => {
const previousRouteName = routeNameRef.current;
const currentRouteName =
navigationRef.current?.getCurrentRoute()?.name ?? '';
if (previousRouteName !== currentRouteName) {
logScreenView(currentRouteName);
}
// Save the current route name for later comparision
routeNameRef.current = currentRouteName;
};
return (
<NavigationContainer
ref={navigationRef}
onReady={handleReady}
onStateChange={handleStateChange}
>
<AppScreens />
</NavigationContainer>
);
};
export default Navigation;