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

Commit 19a3d79

Browse files
committed
fix: fix typescript definitions. closes #163
1 parent ffef8cd commit 19a3d79

File tree

4 files changed

+52
-38
lines changed

4 files changed

+52
-38
lines changed

example/src/MaterialTopTabs.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,16 @@ class ContactsScreen extends React.Component {
3434
}
3535
}
3636

37-
export default createMaterialTopTabNavigator({
38-
AlbumsScreen,
39-
ArticleScreen,
40-
ContactsScreen,
41-
});
37+
export default createMaterialTopTabNavigator(
38+
{
39+
AlbumsScreen,
40+
ArticleScreen,
41+
ContactsScreen,
42+
},
43+
{
44+
lazy: true,
45+
tabBarOptions: {
46+
style: { backgroundColor: '#5620E4' },
47+
},
48+
}
49+
);

src/navigators/createBottomTabNavigator.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,26 @@ import {
2222
SceneDescriptorMap,
2323
} from '../types';
2424

25-
type Props = NavigationViewProps & {
26-
getAccessibilityRole: (props: {
27-
route: NavigationRoute;
28-
}) => AccessibilityRole | undefined;
29-
getAccessibilityStates: (props: {
30-
route: NavigationRoute;
31-
focused: boolean;
32-
}) => AccessibilityState[];
25+
type Config = {
3326
lazy?: boolean;
3427
tabBarComponent?: React.ComponentType<any>;
3528
tabBarOptions?: BottomTabBarOptions;
36-
navigation: NavigationTabProp;
37-
descriptors: SceneDescriptorMap;
38-
screenProps?: unknown;
3929
};
4030

31+
type Props = NavigationViewProps &
32+
Config & {
33+
getAccessibilityRole: (props: {
34+
route: NavigationRoute;
35+
}) => AccessibilityRole | undefined;
36+
getAccessibilityStates: (props: {
37+
route: NavigationRoute;
38+
focused: boolean;
39+
}) => AccessibilityState[];
40+
navigation: NavigationTabProp;
41+
descriptors: SceneDescriptorMap;
42+
screenProps?: unknown;
43+
};
44+
4145
type State = {
4246
loaded: number[];
4347
};
@@ -176,6 +180,6 @@ const styles = StyleSheet.create({
176180
},
177181
});
178182

179-
export default createTabNavigator<NavigationBottomTabOptions, Props>(
183+
export default createTabNavigator<Config, NavigationBottomTabOptions, Props>(
180184
TabNavigationView
181185
);

src/navigators/createMaterialTopTabNavigator.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ type Route = {
1717
routeName: string;
1818
};
1919

20-
type Props = NavigationViewProps & {
20+
type Config = {
2121
keyboardDismissMode?: 'none' | 'on-drag';
2222
swipeEnabled?: boolean;
2323
swipeDistanceThreshold?: number;
2424
swipeVelocityThreshold?: number;
25-
onSwipeStart?: () => void;
26-
onSwipeEnd?: () => void;
2725
initialLayout?: { width?: number; height?: number };
2826
lazy?: boolean;
2927
lazyPlaceholderComponent?: React.ComponentType<{ route: Route }>;
@@ -32,11 +30,17 @@ type Props = NavigationViewProps & {
3230
tabBarPosition?: 'top' | 'bottom';
3331
sceneContainerStyle?: StyleProp<ViewStyle>;
3432
style?: StyleProp<ViewStyle>;
35-
navigation: NavigationTabProp;
36-
descriptors: SceneDescriptorMap;
37-
screenProps?: unknown;
3833
};
3934

35+
type Props = NavigationViewProps &
36+
Config & {
37+
onSwipeStart?: () => void;
38+
onSwipeEnd?: () => void;
39+
navigation: NavigationTabProp;
40+
descriptors: SceneDescriptorMap;
41+
screenProps?: unknown;
42+
};
43+
4044
class MaterialTabView extends React.PureComponent<Props> {
4145
_renderLazyPlaceholder = (props: { route: Route }) => {
4246
const { lazyPlaceholderComponent: LazyPlaceholder } = this.props;
@@ -140,6 +144,6 @@ class MaterialTabView extends React.PureComponent<Props> {
140144
}
141145
}
142146

143-
export default createTabNavigator<NavigationMaterialTabOptions, Props>(
147+
export default createTabNavigator<Config, NavigationMaterialTabOptions, Props>(
144148
MaterialTabView
145149
);

src/utils/createTabNavigator.tsx

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type CommonProps = {
2727
screenProps?: unknown;
2828
};
2929

30-
type ExtraProps = {
31-
navigationConfig: any;
30+
type ExtraProps<Config extends {}> = {
31+
navigationConfig: Config;
3232
};
3333

3434
export type RenderIconProps = {
@@ -52,23 +52,22 @@ export type NavigationViewProps = {
5252
};
5353

5454
export default function createTabNavigator<
55+
Config extends {},
5556
Options extends NavigationCommonTabOptions,
5657
Props extends NavigationViewProps & CommonProps
5758
>(
58-
TabView: React.ComponentType<Props>
59+
TabView: React.ComponentType<Props & Config & Options>
5960
): (
6061
routes: RouteConfig<Options>,
6162
config?: CreateNavigatorConfig<
62-
{},
63+
Partial<Config>,
6364
NavigationTabRouterConfig,
6465
Partial<Options>,
6566
NavigationTabProp<NavigationRoute, any>
6667
>
67-
) => React.ComponentType<
68-
Pick<Props, Exclude<keyof Props, keyof NavigationViewProps>> & ExtraProps
69-
> {
68+
) => React.ComponentType<{}> {
7069
class NavigationView extends React.Component<
71-
Pick<Props, Exclude<keyof Props, keyof NavigationViewProps>> & ExtraProps
70+
Exclude<Props, NavigationViewProps> & ExtraProps<Config>
7271
> {
7372
_renderScene = ({ route }: { route: { key: string } }) => {
7473
const { screenProps, descriptors } = this.props;
@@ -232,14 +231,13 @@ export default function createTabNavigator<
232231
const { state } = navigation;
233232
const route = state.routes[state.index];
234233
const descriptor = descriptors[route.key];
235-
const options = {
236-
...navigationConfig,
237-
...descriptor.options,
238-
};
239234

240235
return (
236+
// TODO: don't have time to fix it right now
237+
// @ts-ignore
241238
<TabView
242-
{...options}
239+
{...navigationConfig}
240+
{...descriptor.options}
243241
getLabelText={this._getLabelText}
244242
getAccessibilityLabel={this._getAccessibilityLabel}
245243
getTestID={this._getTestID}
@@ -259,7 +257,7 @@ export default function createTabNavigator<
259257
return (
260258
routes: RouteConfig<Options>,
261259
config: CreateNavigatorConfig<
262-
{},
260+
Partial<Config>,
263261
NavigationTabRouterConfig,
264262
Partial<Options>,
265263
NavigationTabProp<NavigationRoute, any>

0 commit comments

Comments
 (0)