-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.js
115 lines (105 loc) · 4.16 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import {Alert, AppRegistry, Platform} from 'react-native';
import 'react-native-gesture-handler';
import {setJSExceptionHandler, setNativeExceptionHandler} from '@sticknet/react-native-exception-handler';
import DeviceInfo from 'react-native-device-info';
import RNRestart from 'react-native-restart';
import firebase from '@react-native-firebase/app';
import '@react-native-firebase/auth';
import '@react-native-firebase/database';
import '@react-native-firebase/messaging';
import AsyncStorage from '@react-native-async-storage/async-storage';
import Config from 'react-native-config';
import PushNotification from 'react-native-push-notification';
import axios from './src/actions/myaxios';
import bgMessaging from './src/actions/notifications/bgMessaging';
import {URL} from './src/actions/URL';
import {name as appName} from './app.json';
import {globalData, endMessageKeys, startMessageKeys} from './src/actions/globalVariables';
import App from './src/App';
import NavigationService from './src/actions/NavigationService';
if (Config.TESTING === '1' || __DEV__) {
firebase.auth().settings.appVerificationDisabledForTesting = true;
}
if (__DEV__) {
// @ts-ignore
import('./src/store/ReactotronConfig').then(() => console.log('Reactotron Configured'));
}
PushNotification.configure({requestPermissions: false});
const isLoggedIn = async () => {
const res = await AsyncStorage.multiGet([
'@userId',
'@loggedIn',
'@focusedTab',
'@startMessageKeys',
'@endMessageKeys',
]);
const userId = res[0][1];
const loggedIn = res[1][1];
// let initialRoute = 'Authentication';
let initialRoute = Config.TESTING !== '1' ? 'PrivacyNotice' : 'Authentication';
let focusedTab = 'HomeTab';
if (userId && loggedIn) {
focusedTab = res[2][1] || 'HomeTab';
initialRoute = focusedTab.slice(0, -3);
globalData.loggedIn = true;
}
globalData.initialRoute = initialRoute;
globalData.focusedTab = focusedTab;
globalData.userId = userId;
Object.assign(startMessageKeys, JSON.parse(res[3][1] || '{}'));
Object.assign(endMessageKeys, JSON.parse(res[4][1] || '{}'));
};
isLoggedIn();
if (Platform.OS === 'android') {
firebase.messaging().setBackgroundMessageHandler(async (remoteMessage) => {
// @ts-ignore
await bgMessaging(remoteMessage);
});
} else {
firebase.messaging().setBackgroundMessageHandler(async () => {});
}
if (!__DEV__) {
console.log = () => {};
console.count = () => {};
console.error = () => {};
setNativeExceptionHandler(async function (exceptionString) {
if (Platform.OS === 'ios') {
const body = {
string: exceptionString,
native: true,
model: await DeviceInfo.getModel(),
system_version: await DeviceInfo.getSystemVersion(),
app_version: await DeviceInfo.getVersion(),
platform: Platform.OS === 'ios' ? 'I' : 'A',
screen: NavigationService.getRoute(),
is_fatal: true,
userId: '',
};
const userId = await AsyncStorage.getItem('@userId');
if (userId) body.userId = userId;
await axios.post(`${URL}/api/error-report/`, body);
}
});
}
setJSExceptionHandler(async (error, isFatal) => {
if (isFatal) {
const body = {
string: error.toString(),
native: false,
model: await DeviceInfo.getModel(),
system_version: await DeviceInfo.getSystemVersion(),
app_version: await DeviceInfo.getVersion(),
platform: Platform.OS === 'ios' ? 'I' : 'A',
screen: NavigationService.getRoute(),
is_fatal: true,
userId: '',
};
const userId = await AsyncStorage.getItem('@userId');
if (userId) body.userId = userId;
await axios.post(`${URL}/api/error-report/`, body);
Alert.alert('Unexpected Error!', 'An unexpected error has occurred. The application needs to restart.', [
{text: 'Restart', onPress: () => RNRestart.Restart()},
]);
}
}, false);
AppRegistry.registerComponent(appName, () => App);