🚀React Native🚀 - react-navigation - force drawer item route navigation

Github markdown version - can be easier to read

The main point is to overwrite navigation property passed to DrawerItemList

  const onPress = {
    dispatch: (event: any) => {
      const routeName = event?.payload?.name;
      if (routeName) {
        return props.navigation.reset({
          index: 0,
          routes: [{ name: routeName }]
       });
      }
      return props.navigation.closeDrawer();
    }
  }

Below is complete example

const FirstScreen = () => <View />;
const SecondScreen = () => <View />;
const FirstRouteStackNavigator = () => (
  <Stack.Navigator>
    <Stack.Screen name="Screen 1" component={FirstScreen} />
  </Stack.Navigator>
);
const SecondRouteStackNavigator = () => (
  <Stack.Navigator>
    <Stack.Screen name="Screen 2" component={SecondScreen} />
  </Stack.Navigator>
);
function CustomDrawerContent(props) {
  return (
    <DrawerContentScrollView {...props}>
      <View>
        <DrawerItemList
          {...props}
          navigation={onPress}
        />
      </View>
    </DrawerContentScrollView>
  );
}
const Drawer = createDrawerNavigator();
const DrawerNavigator = () => {
  return (
    <Drawer.Navigator
      initialRouteName="Screen 1"
      drawerContent={(props) => <CustomDrawerContent {...props} />}
    >
      <Drawer.Screen name="Screen 1" component={FirstRouteStackNavigator} />
      <Drawer.Screen name="Screen 2" component={SecondRouteStackNavigator} />
    </Drawer.Navigator>
  );
};