Skip to content

Commit 88a0d86

Browse files
committed
add useComponentsByName custom hook, shared among both containers
1 parent 0cca1e0 commit 88a0d86

3 files changed

Lines changed: 21 additions & 14 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React, { useMemo } from 'react';
2+
import type { StackRouteConfig } from '../stack';
3+
import type { TabRouteConfig } from '../tabs';
4+
5+
export const useComponentsByName = (
6+
routeConfigs: StackRouteConfig[] | TabRouteConfig[],
7+
) => {
8+
return useMemo(() => {
9+
const map = new Map<string, React.ComponentType>();
10+
11+
for (const config of routeConfigs) {
12+
map.set(config.name, config.Component);
13+
}
14+
15+
return map;
16+
}, [routeConfigs]);
17+
};

apps/src/shared/gamma/containers/stack/StackContainer.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,12 @@ import {
2121
useRenderDebugInfo,
2222
} from 'react-native-screens/private';
2323
import { useParentNavigationEffect } from './hooks/useParentNavigationEffect';
24+
import { useComponentsByName } from '../shared/use-components-by-name';
2425

2526
export function StackContainer({ routeConfigs }: StackContainerProps) {
2627
useSanitizeRouteConfigs(routeConfigs);
2728

28-
const componentsByName = React.useMemo(() => {
29-
const map = new Map<string, StackRouteConfig['Component']>();
30-
for (const config of routeConfigs) {
31-
map.set(config.name, config.Component);
32-
}
33-
return map;
34-
}, [routeConfigs]);
29+
const componentsByName = useComponentsByName(routeConfigs);
3530

3631
const [stackNavState, navActionDispatch]: [
3732
StackNavigationState,

apps/src/shared/gamma/containers/tabs/TabsContainer.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
} from './reducer';
2222
import { RNSLog } from 'react-native-screens/private';
2323
import { TabsContainerItem } from './TabsContainerItem';
24+
import { useComponentsByName } from '../shared/use-components-by-name';
2425

2526
export function TabsContainer(props: TabsContainerProps) {
2627
RNSLog.info('TabsContainer render');
@@ -34,13 +35,7 @@ export function TabsContainer(props: TabsContainerProps) {
3435

3536
useSanitizeRouteConfigs(routeConfigs);
3637

37-
const componentsByName = React.useMemo(() => {
38-
const map = new Map<string, TabRouteConfig['Component']>();
39-
for (const config of routeConfigs) {
40-
map.set(config.name, config.Component);
41-
}
42-
return map;
43-
}, [routeConfigs]);
38+
const componentsByName = useComponentsByName(routeConfigs);
4439

4540
const [tabsNavState, dispatch]: [
4641
TabsContainerState,

0 commit comments

Comments
 (0)