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

Commit 7195066

Browse files
committed
chore: migrate example to TS
1 parent b741de0 commit 7195066

25 files changed

Lines changed: 312 additions & 243 deletions

example/App.js renamed to example/App.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import { createAppContainer, SafeAreaView, ScrollView } from 'react-navigation';
55
import {
66
Assets as StackAssets,
77
createStackNavigator,
8+
NavigationStackScreenProps,
9+
NavigationStackOptions,
810
} from 'react-navigation-stack';
11+
// eslint-disable-next-line import/namespace
912
import { List, Divider } from 'react-native-paper';
1013

1114
import FullScreen from './src/FullScreen';
@@ -37,7 +40,13 @@ useScreens(true);
3740
// your app after you first load it with this option enabled.
3841
I18nManager.forceRTL(false);
3942

40-
const data = [
43+
type Item = {
44+
component: React.ComponentType<any>;
45+
title: string;
46+
routeName: string;
47+
};
48+
49+
const data: Item[] = [
4150
{ component: SimpleStack, title: 'Simple', routeName: 'SimpleStack' },
4251
{ component: HeaderPreset, title: 'UIKit Preset', routeName: 'UIKit' },
4352
{ component: RevealStack, title: 'Reveal Preset', routeName: 'Reveal' },
@@ -99,19 +108,19 @@ const data = [
99108
// Cache images
100109
Asset.loadAsync(StackAssets);
101110

102-
class Home extends React.Component {
111+
class Home extends React.Component<NavigationStackScreenProps> {
103112
static navigationOptions = {
104113
title: 'Examples',
105114
};
106115

107-
_renderItem = ({ item }) => (
116+
_renderItem = ({ item }: { item: Item }) => (
108117
<List.Item
109118
title={item.title}
110119
onPress={() => this.props.navigation.navigate(item.routeName)}
111120
/>
112121
);
113122

114-
_keyExtractor = item => item.routeName;
123+
_keyExtractor = (item: Item) => item.routeName;
115124

116125
render() {
117126
return (
@@ -141,7 +150,12 @@ class SafeAreaScrollView extends React.Component {
141150
const Root = createStackNavigator(
142151
{
143152
Home: createStackNavigator({ Home }),
144-
...data.reduce((acc, it) => {
153+
...data.reduce<{
154+
[key: string]: {
155+
screen: React.ComponentType<any>;
156+
navigationOptions: NavigationStackOptions;
157+
};
158+
}>((acc, it) => {
145159
acc[it.routeName] = {
146160
screen: it.component,
147161
navigationOptions: {

example/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import { AppRegistry } from 'react-native';
2-
import App from './App';
2+
import App from './App.tsx';
33

44
AppRegistry.registerComponent('StackExample', () => App);

example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
"react-native-web": "^0.11.4",
2727
"react-native-webview": "~5.12.0",
2828
"react-navigation": "^4.0.7",
29-
"react-navigation-drawer": "^2.0.0",
30-
"react-navigation-tabs": "2.2.0"
29+
"react-navigation-drawer": "^2.2.2",
30+
"react-navigation-tabs": "^2.5.5"
3131
},
3232
"devDependencies": {
3333
"babel-plugin-module-resolver": "^3.2.0",
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import React from 'react';
22
import { View, Text, StyleSheet, Dimensions } from 'react-native';
33
import Animated from 'react-native-reanimated';
4+
import { NavigationStackScreenComponent } from 'react-navigation-stack';
45

56
const HEIGHT = Dimensions.get('screen').height;
67

78
const { interpolate } = Animated;
89

9-
const DragLimitedToModal = () => (
10+
const DragLimitedToModal: NavigationStackScreenComponent = () => (
1011
<View style={styles.modal}>
1112
<Text style={styles.text}>Adjusts to the size of text</Text>
1213
</View>
Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import MapView from 'react-native-maps';
1010
import {
1111
createStackNavigator,
1212
StackGestureContext,
13+
NavigationStackScreenComponent,
14+
NavigationStackScreenProps,
1315
} from 'react-navigation-stack';
1416
import { NativeViewGestureHandler } from 'react-native-gesture-handler';
1517

16-
const IndexScreen = ({ navigation }) => (
18+
const IndexScreen: NavigationStackScreenComponent = ({ navigation }) => (
1719
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
1820
<Button title="Go to MapView" onPress={() => navigation.navigate('Map')} />
1921
<Button title="Go to WebView" onPress={() => navigation.navigate('Web')} />
@@ -28,8 +30,15 @@ IndexScreen.navigationOptions = {
2830
title: 'Gesture Interactions',
2931
};
3032

31-
class MapScreen extends React.Component {
32-
constructor(props) {
33+
class MapScreen extends React.Component<
34+
NavigationStackScreenProps,
35+
{ interactionComplete: boolean }
36+
> {
37+
static navigationOptions = {
38+
title: 'MapView',
39+
};
40+
41+
constructor(props: NavigationStackScreenProps) {
3342
super(props);
3443
InteractionManager.runAfterInteractions(() => {
3544
this.setState({ interactionComplete: true });
@@ -63,10 +72,6 @@ class MapScreen extends React.Component {
6372
}
6473
}
6574

66-
MapScreen.navigationOptions = {
67-
title: 'MapView',
68-
};
69-
7075
const WebViewScreen = () => (
7176
<StackGestureContext.Consumer>
7277
{ref => (
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import {
44
createStackNavigator,
55
TransitionPresets,
66
HeaderStyleInterpolators,
7+
NavigationStackScreenProps,
78
} from 'react-navigation-stack';
89

910
function createHeaderBackgroundExample(options = {}) {
1011
return createStackNavigator(
1112
{
1213
Login: {
13-
screen: ({ navigation }) => (
14+
screen: ({ navigation }: NavigationStackScreenProps) => (
1415
<View style={styles.container}>
1516
<Text
1617
style={styles.tips}
@@ -29,7 +30,7 @@ function createHeaderBackgroundExample(options = {}) {
2930
},
3031
},
3132
Games: {
32-
screen: ({ navigation }) => (
33+
screen: ({ navigation }: NavigationStackScreenProps) => (
3334
<View style={styles.container}>
3435
<Text
3536
style={styles.tips}
@@ -48,7 +49,7 @@ function createHeaderBackgroundExample(options = {}) {
4849
},
4950
},
5051
Main: {
51-
screen: ({ navigation }) => (
52+
screen: ({ navigation }: NavigationStackScreenProps) => (
5253
<View style={styles.container}>
5354
<Text style={styles.tips} onPress={() => navigation.navigate('My')}>
5455
Main Screen
@@ -60,7 +61,7 @@ function createHeaderBackgroundExample(options = {}) {
6061
},
6162
},
6263
My: {
63-
screen: ({ navigation }) => (
64+
screen: ({ navigation }: NavigationStackScreenProps) => (
6465
<View style={styles.container}>
6566
<Text
6667
style={styles.tips}
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import * as React from 'react';
2-
import { Button, StatusBar } from 'react-native';
2+
import { Button, StatusBar, StyleProp, ViewStyle } from 'react-native';
33
import { SafeAreaView } from 'react-navigation';
44
import {
55
createStackNavigator,
66
TransitionPresets,
77
HeaderStyleInterpolators,
8+
NavigationStackScreenProps,
89
} from 'react-navigation-stack';
910

10-
class HomeScreen extends React.Component {
11+
class HomeScreen extends React.Component<NavigationStackScreenProps> {
1112
static navigationOptions = {
1213
title: 'Welcome',
1314
};
@@ -30,7 +31,7 @@ class HomeScreen extends React.Component {
3031
}
3132
}
3233

33-
class OtherScreen extends React.Component {
34+
class OtherScreen extends React.Component<NavigationStackScreenProps> {
3435
static navigationOptions = {
3536
title: 'Your title here',
3637
};
@@ -57,7 +58,7 @@ class OtherScreen extends React.Component {
5758
}
5859
}
5960

60-
class ScreenWithLongTitle extends React.Component {
61+
class ScreenWithLongTitle extends React.Component<NavigationStackScreenProps> {
6162
static navigationOptions = {
6263
title: "Another title that's kind of long",
6364
};
@@ -76,7 +77,7 @@ class ScreenWithLongTitle extends React.Component {
7677
}
7778
}
7879

79-
class ScreenWithNoHeader extends React.Component {
80+
class ScreenWithNoHeader extends React.Component<NavigationStackScreenProps> {
8081
static navigationOptions = {
8182
header: null,
8283
title: 'No Header',
@@ -109,7 +110,8 @@ const StackWithHeaderPreset = createStackNavigator(
109110
defaultNavigationOptions: {
110111
...TransitionPresets.SlideFromRightIOS,
111112
headerStyleInterpolator: HeaderStyleInterpolators.forUIKit,
112-
headerTitleContainerStyle: { left: null },
113+
// @ts-ignore
114+
headerTitleContainerStyle: { left: null } as StyleProp<ViewStyle>,
113115
gestureEnabled: true,
114116
},
115117
}
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import * as React from 'react';
22
import { Dimensions, Button, Image, View } from 'react-native';
3-
import { createStackNavigator } from 'react-navigation-stack';
3+
import {
4+
createStackNavigator,
5+
NavigationStackScreenProps,
6+
} from 'react-navigation-stack';
47
import { FlatList, BorderlessButton } from 'react-native-gesture-handler';
58

6-
class ListScreen extends React.Component {
7-
static navigationOptions = ({ navigation }) => ({
9+
class ListScreen extends React.Component<NavigationStackScreenProps> {
10+
static navigationOptions = ({ navigation }: NavigationStackScreenProps) => ({
811
title: 'Image list',
912
headerBackTitle: 'Back',
1013
headerLeft: () => (
@@ -13,7 +16,7 @@ class ListScreen extends React.Component {
1316
});
1417

1518
state = {
16-
items: Array.apply(null, Array(60)).map((v, i) => {
19+
items: Array.apply(null, Array(60)).map((_, i) => {
1720
return {
1821
id: i,
1922
src: `https://source.unsplash.com/random/400x${400 + i}`,
@@ -40,14 +43,14 @@ class ListScreen extends React.Component {
4043
</View>
4144
)}
4245
numColumns={3}
43-
keyExtractor={(item, index) => index}
46+
keyExtractor={(_, index) => String(index)}
4447
style={{ flex: 1, backgroundColor: '#fff' }}
4548
/>
4649
);
4750
}
4851
}
4952

50-
class DetailsScreen extends React.Component {
53+
class DetailsScreen extends React.Component<NavigationStackScreenProps> {
5154
static navigationOptions = {
5255
title: 'Random image from Unsplash',
5356
};
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import * as React from 'react';
22
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
3-
import { createStackNavigator } from 'react-navigation-stack';
3+
import {
4+
createStackNavigator,
5+
NavigationStackScreenProps,
6+
} from 'react-navigation-stack';
47
import { createAppContainer } from 'react-navigation';
58

6-
class ScreenOne extends React.Component {
9+
class ScreenOne extends React.Component<NavigationStackScreenProps> {
710
componentDidMount() {
8-
this._timer = setTimeout(() => {
11+
setTimeout(() => {
912
this.props.navigation.navigate('Screen2');
10-
clearTimeout(this._timer);
1113
}, 0);
1214
}
1315

@@ -29,7 +31,7 @@ class ScreenOne extends React.Component {
2931
}
3032
}
3133

32-
class ScreenTwo extends React.Component {
34+
class ScreenTwo extends React.Component<NavigationStackScreenProps> {
3335
render() {
3436
return (
3537
<View style={styles.container}>

0 commit comments

Comments
 (0)