Skip to content
This repository has been archived by the owner on Feb 8, 2020. It is now read-only.

Commit

Permalink
feat: add createNavigator and not export Screen directly (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
osdnk committed Jul 16, 2019
1 parent 0ff3de1 commit f383d13
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 27 deletions.
6 changes: 4 additions & 2 deletions example/StackNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
CommonAction,
ParamListBase,
Router,
createNavigator,
} from '../src/index';

type Props = {
Expand Down Expand Up @@ -167,7 +168,6 @@ const StackRouter: Router<CommonAction | Action> = {
],
};
}

return null;

case 'REPLACE': {
Expand Down Expand Up @@ -224,7 +224,7 @@ const StackRouter: Router<CommonAction | Action> = {
},
};

export default function StackNavigator(props: Props) {
export function StackNavigator(props: Props) {
const { navigation, descriptors } = useNavigationBuilder(StackRouter, props);

return (
Expand Down Expand Up @@ -268,3 +268,5 @@ export default function StackNavigator(props: Props) {
</div>
);
}

export default createNavigator(StackNavigator);
6 changes: 4 additions & 2 deletions example/TabNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
CommonAction,
ParamListBase,
Router,
createNavigator,
} from '../src/index';

type Props = {
Expand Down Expand Up @@ -143,9 +144,8 @@ const TabRouter: Router<Action | CommonAction> = {
},
};

export default function TabNavigator(props: Props) {
export function TabNavigator(props: Props) {
const { navigation, descriptors } = useNavigationBuilder(TabRouter, props);

return (
<div style={{ display: 'flex', flexDirection: 'row', height: '100%' }}>
{navigation.state.routes.map((route, i, self) => (
Expand All @@ -164,3 +164,5 @@ export default function TabNavigator(props: Props) {
</div>
);
}

export default createNavigator(TabNavigator);
36 changes: 14 additions & 22 deletions example/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ import * as React from 'react';
import { render } from 'react-dom';
import {
NavigationContainer,
Screen,
CompositeNavigationProp,
TypedNavigator,
NavigationHelpers,
PartialState,
} from '../src';
import StackNavigator, { StackNavigationProp } from './StackNavigator';
import TabNavigator, { TabNavigationProp } from './TabNavigator';
import Stack, { StackNavigationProp } from './StackNavigator';
import Tab, { TabNavigationProp } from './TabNavigator';

type StackParamList = {
first: { author: string };
Expand All @@ -22,15 +20,9 @@ type TabParamList = {
fifth: undefined;
};

const Stack: TypedNavigator<StackParamList, typeof StackNavigator> = {
Navigator: StackNavigator,
Screen,
};
const MyStack = Stack<StackParamList>();

const Tab: TypedNavigator<TabParamList, typeof TabNavigator> = {
Navigator: TabNavigator,
Screen,
};
const MyTab = Tab<TabParamList>();

const First = ({
navigation,
Expand Down Expand Up @@ -150,27 +142,27 @@ function App() {
localStorage.setItem(PERSISTENCE_KEY, JSON.stringify(state))
}
>
<Stack.Navigator>
<Stack.Screen
<MyStack.Navigator>
<MyStack.Screen
name="first"
component={First}
options={{ title: 'Foo' }}
initialParams={{ author: 'Jane' }}
/>
<Stack.Screen
<MyStack.Screen
name="second"
component={Second}
options={{ title: 'Bar' }}
/>
<Stack.Screen name="third" options={{ title: 'Baz' }}>
<MyStack.Screen name="third" options={{ title: 'Baz' }}>
{() => (
<Tab.Navigator initialRouteName="fifth">
<Tab.Screen name="fourth" component={Fourth} />
<Tab.Screen name="fifth" component={Fifth} />
</Tab.Navigator>
<MyTab.Navigator initialRouteName="fifth">
<MyTab.Screen name="fourth" component={Fourth} />
<MyTab.Screen name="fifth" component={Fifth} />
</MyTab.Navigator>
)}
</Stack.Screen>
</Stack.Navigator>
</MyStack.Screen>
</MyStack.Navigator>
</NavigationContainer>
);
}
Expand Down
19 changes: 19 additions & 0 deletions src/createNavigator.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import * as React from 'react';
import { ParamListBase, ScreenProps, TypedNavigator } from './types';
import Screen from './Screen';

export default function createNavigator<N extends React.ComponentType<any>>(
RawNavigator: N
) {
return function Navigator<ParamList extends ParamListBase>(): TypedNavigator<
ParamList,
typeof RawNavigator
> {
return {
Navigator: RawNavigator,
Screen: Screen as React.ComponentType<
ScreenProps<ParamList, keyof ParamList>
>,
};
};
}
2 changes: 1 addition & 1 deletion src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export { default as NavigationContainer } from './NavigationContainer';
export { default as Screen } from './Screen';
export { default as createNavigator } from './createNavigator';

export { default as useNavigationBuilder } from './useNavigationBuilder';

Expand Down

0 comments on commit f383d13

Please sign in to comment.