react-navigation-shared-element icon indicating copy to clipboard operation
react-navigation-shared-element copied to clipboard

"id" prop is not passed to the Navigator in react-navigation v6

Open ChrisYohann opened this issue 3 years ago • 0 comments

Hi everyone,

I have an issue with react-navigation v6.

Usually I take advantage of the id prop of the navigator to retrieve a not direct parent navigator using the useNavigation hook like this :

type ExploreScreenProps = StackScreenProps<
  ExploreStackParamList,
  'ExploreScreen',
  NavigatorName
>;
type AppNavigationProp = StackNavigationProp<RootStackParamList>;

const ExploreScreen = ({ navigation }: ExploreScreenProps) => {
  const parentNavigation = navigation.getParent<AppNavigationProp>(
    NavigatorName.APP_NAVIGATOR,
  );

  // This should return the navigation object but it returns undefined
  console.log('Parent Navigation :', parentNavigation);

 }

But When I use createSharedElementStackNavigator, The id prop is not accepted. and I have this error :

My code :

const AppNavigatorShared =
  createSharedElementStackNavigator<ContentStackParamList>();


const AppScreen = () => (
  <AppNavigatorShared.Navigator
    id={NavigatorName.APP_NAVIGATOR} // 
    initialRouteName={ScreenName.HOME_SCREEN}

The error :

Type '{ children: Element[]; id: NavigatorName; initialRouteName: ScreenName.HOME_SCREEN; screenOptions: { headerTitleAlign: "center"; headerShadowVisible: false; headerStyle: { ...; }; headerTintColor: string; }; }' is not assignable to type 'IntrinsicAttributes & ((Omit<((Omit<DefaultRouterOptions<string> & { children: ReactNode; screenListeners?: Partial<{ ...; }> | ((props: { ...; }) => Partial<...>) | undefined; screenOptions?: StackNavigationOptions | ... 1 more ... | undefined; defaultScreenOptions?: StackNavigationOptions | ... 1 more ... | undefi...'.
  Property 'id' does not exist on type 'IntrinsicAttributes & ((Omit<((Omit<DefaultRouterOptions<string> & { children: ReactNode; screenListeners?: Partial<{ ...; }> | ((props: { ...; }) => Partial<...>) | undefined; screenOptions?: StackNavigationOptions | ... 1 more ... | undefined; defaultScreenOptions?: StackNavigationOptions | ... 1 more ... | undefi...'.

I tried to pass a name prop in the createSharedElementStackNavigator like this, according to that line https://github.com/IjzerenHein/react-navigation-shared-element/blob/1ce95a2e10d56a100bcb1fbb81ada88050cd2f86/src/createSharedElementStackNavigator.tsx#L56-L58

const AppNavigatorShared =
  createSharedElementStackNavigator<ContentStackParamList>({
    name: NavigatorName.APP_NAVIGATOR,
    debug: true,
  });

but it did not change anything.

Someone has an idea ? Thanks !

ChrisYohann avatar Jul 17 '22 09:07 ChrisYohann