From f5233c53f856627bc3a0482c1fe432403b4ab3dc Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Wed, 23 Sep 2020 09:03:48 +0200 Subject: [PATCH] Fix crash on app start --- App.tsx | 6 +- src/navigation/MainNavigator.tsx | 6 +- src/navigation/TabNavigator.tsx | 90 ++++++++++--------- src/screens/About/AboutDependenciesScreen.tsx | 4 +- src/screens/Amicale/AmicaleContactScreen.tsx | 4 +- src/screens/Home/ScannerScreen.tsx | 4 +- 6 files changed, 63 insertions(+), 51 deletions(-) diff --git a/App.tsx b/App.tsx index 8c32968..5e10caa 100644 --- a/App.tsx +++ b/App.tsx @@ -55,7 +55,7 @@ type StateType = { currentTheme: ReactNativePaper.Theme | undefined; }; -export default class App extends React.Component { +export default class App extends React.Component<{}, StateType> { navigatorRef: {current: null | NavigationContainerRef}; defaultHomeRoute: string | null; @@ -64,8 +64,8 @@ export default class App extends React.Component { urlHandler: URLHandler; - constructor() { - super(null); + constructor(props: {}) { + super(props); this.state = { isLoading: true, showIntro: true, diff --git a/src/navigation/MainNavigator.tsx b/src/navigation/MainNavigator.tsx index 223af6d..a8da42f 100644 --- a/src/navigation/MainNavigator.tsx +++ b/src/navigation/MainNavigator.tsx @@ -284,5 +284,9 @@ type PropsType = { }; export default function MainNavigator(props: PropsType) { - return TabNavigator(props)} />; + return ( + } + /> + ); } diff --git a/src/navigation/TabNavigator.tsx b/src/navigation/TabNavigator.tsx index 4f62730..e53ce76 100644 --- a/src/navigation/TabNavigator.tsx +++ b/src/navigation/TabNavigator.tsx @@ -142,7 +142,7 @@ function HomeStackComponent( defaultData: {[key: string]: string}, ) { let params; - if (initialRoute != null) { + if (initialRoute) { params = {data: defaultData, nextScreen: initialRoute, shouldOpen: true}; } const {colors} = useTheme(); @@ -255,45 +255,53 @@ type PropsType = { defaultHomeData: {[key: string]: string}; }; -export default function TabNavigator(props: PropsType) { - let defaultRoute = 'home'; - if (!props.defaultHomeRoute) { - defaultRoute = AsyncStorageManager.getString( - AsyncStorageManager.PREFERENCES.defaultStartScreen.key, - ).toLowerCase(); - } - const createHomeStackComponent = () => - HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData); +export default class TabNavigator extends React.Component { + defaultRoute: string; + createHomeStackComponent: () => any; - return ( - }> - - - - - - - ); + constructor(props: PropsType) { + super(props); + this.defaultRoute = 'home'; + if (!props.defaultHomeRoute) { + this.defaultRoute = AsyncStorageManager.getString( + AsyncStorageManager.PREFERENCES.defaultStartScreen.key, + ).toLowerCase(); + } + this.createHomeStackComponent = () => + HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData); + } + + render() { + return ( + }> + + + + + + + ); + } } diff --git a/src/screens/About/AboutDependenciesScreen.tsx b/src/screens/About/AboutDependenciesScreen.tsx index 82dc982..a7013d9 100644 --- a/src/screens/About/AboutDependenciesScreen.tsx +++ b/src/screens/About/AboutDependenciesScreen.tsx @@ -53,8 +53,8 @@ const LIST_ITEM_HEIGHT = 64; export default class AboutDependenciesScreen extends React.Component<{}> { data: Array; - constructor() { - super({}); + constructor(props: {}) { + super(props); this.data = generateListFromObject(packageJson.dependencies); } diff --git a/src/screens/Amicale/AmicaleContactScreen.tsx b/src/screens/Amicale/AmicaleContactScreen.tsx index de99509..28b6919 100644 --- a/src/screens/Amicale/AmicaleContactScreen.tsx +++ b/src/screens/Amicale/AmicaleContactScreen.tsx @@ -38,8 +38,8 @@ class AmicaleContactScreen extends React.Component<{}> { // Dataset containing information about contacts CONTACT_DATASET: Array; - constructor() { - super({}); + constructor(props: {}) { + super(props); this.CONTACT_DATASET = [ { name: i18n.t('screens.amicaleAbout.roles.interSchools'), diff --git a/src/screens/Home/ScannerScreen.tsx b/src/screens/Home/ScannerScreen.tsx index 9e948dd..4de737e 100644 --- a/src/screens/Home/ScannerScreen.tsx +++ b/src/screens/Home/ScannerScreen.tsx @@ -55,8 +55,8 @@ const styles = StyleSheet.create({ type PermissionResults = 'unavailable' | 'denied' | 'blocked' | 'granted'; class ScannerScreen extends React.Component<{}, StateType> { - constructor() { - super({}); + constructor(props: {}) { + super(props); this.state = { hasPermission: false, scanned: false,