2021-01-13 01:03:46 +01:00
|
|
|
import { ActionSheetProvider } from '@expo/react-native-action-sheet'
|
2022-09-24 13:42:15 +02:00
|
|
|
import * as Sentry from '@sentry/react-native'
|
2022-12-28 23:41:36 +01:00
|
|
|
import { QueryClientProvider } from '@tanstack/react-query'
|
2021-03-27 00:02:32 +01:00
|
|
|
import AccessibilityManager from '@utils/accessibility/AccessibilityManager'
|
2022-12-28 23:41:36 +01:00
|
|
|
import getLanguage from '@utils/helpers/getLanguage'
|
|
|
|
import queryClient from '@utils/queryHooks'
|
|
|
|
import audio from '@utils/startup/audio'
|
|
|
|
import log from '@utils/startup/log'
|
|
|
|
import netInfo from '@utils/startup/netInfo'
|
|
|
|
import push from '@utils/startup/push'
|
|
|
|
import sentry from '@utils/startup/sentry'
|
|
|
|
import timezone from '@utils/startup/timezone'
|
|
|
|
import { storage } from '@utils/storage'
|
|
|
|
import {
|
|
|
|
getGlobalStorage,
|
|
|
|
removeAccount,
|
|
|
|
setAccount,
|
|
|
|
setGlobalStorage
|
|
|
|
} from '@utils/storage/actions'
|
2022-12-29 00:36:35 +01:00
|
|
|
import { migrateFromAsyncStorage, versionStorageGlobal } from '@utils/storage/migrations/toMMKV'
|
2020-12-27 18:43:49 +01:00
|
|
|
import ThemeManager from '@utils/styles/ThemeManager'
|
2022-10-11 22:28:59 +02:00
|
|
|
import * as Localization from 'expo-localization'
|
2020-12-13 22:31:55 +01:00
|
|
|
import * as SplashScreen from 'expo-splash-screen'
|
2020-12-22 00:50:47 +01:00
|
|
|
import React, { useCallback, useEffect, useState } from 'react'
|
2022-06-03 21:25:20 +02:00
|
|
|
import { LogBox, Platform } from 'react-native'
|
2021-12-18 12:06:35 +01:00
|
|
|
import { GestureHandlerRootView } from 'react-native-gesture-handler'
|
2022-12-28 23:41:36 +01:00
|
|
|
import { MMKV } from 'react-native-mmkv'
|
2022-11-20 16:14:08 +01:00
|
|
|
import { SafeAreaProvider } from 'react-native-safe-area-context'
|
2021-12-18 19:59:38 +01:00
|
|
|
import { enableFreeze } from 'react-native-screens'
|
2022-12-28 23:41:36 +01:00
|
|
|
import i18n from './i18n'
|
|
|
|
import Screens from './screens'
|
2021-01-13 01:03:46 +01:00
|
|
|
|
2021-02-27 16:33:54 +01:00
|
|
|
Platform.select({
|
|
|
|
android: LogBox.ignoreLogs(['Setting a timer for a long period of time'])
|
|
|
|
})
|
2020-11-04 22:26:38 +01:00
|
|
|
|
2021-01-23 02:41:50 +01:00
|
|
|
sentry()
|
2021-01-07 19:13:09 +01:00
|
|
|
audio()
|
2021-02-27 16:33:54 +01:00
|
|
|
push()
|
2022-05-08 17:56:26 +02:00
|
|
|
timezone()
|
2022-02-02 22:47:30 +01:00
|
|
|
enableFreeze(true)
|
2020-12-27 18:43:49 +01:00
|
|
|
|
2022-12-28 23:41:36 +01:00
|
|
|
log('log', 'App', 'delay splash')
|
|
|
|
SplashScreen.preventAutoHideAsync()
|
|
|
|
|
2020-11-23 00:07:32 +01:00
|
|
|
const App: React.FC = () => {
|
2021-01-07 19:13:09 +01:00
|
|
|
log('log', 'App', 'rendering App')
|
2022-12-28 23:41:36 +01:00
|
|
|
const [appIsReady, setAppIsReady] = useState(false)
|
2021-01-03 02:00:26 +01:00
|
|
|
const [localCorrupt, setLocalCorrupt] = useState<string>()
|
2020-12-28 23:20:18 +01:00
|
|
|
|
2022-12-29 00:36:35 +01:00
|
|
|
const [hasMigrated, setHasMigrated] = useState<boolean>(versionStorageGlobal !== undefined)
|
2022-12-28 23:41:36 +01:00
|
|
|
|
2020-12-13 22:31:55 +01:00
|
|
|
useEffect(() => {
|
2022-12-28 23:41:36 +01:00
|
|
|
const prepare = async () => {
|
2022-12-29 00:36:35 +01:00
|
|
|
if (!hasMigrated) {
|
2022-12-28 23:41:36 +01:00
|
|
|
try {
|
|
|
|
await migrateFromAsyncStorage()
|
|
|
|
setHasMigrated(true)
|
2022-12-29 00:36:35 +01:00
|
|
|
} catch {}
|
2022-12-28 23:41:36 +01:00
|
|
|
} else {
|
|
|
|
log('log', 'App', 'loading from MMKV')
|
|
|
|
const account = getGlobalStorage.string('account.active')
|
|
|
|
if (account) {
|
|
|
|
const storageAccount = new MMKV({ id: account })
|
|
|
|
const token = storageAccount.getString('auth.token')
|
|
|
|
if (token) {
|
|
|
|
log('log', 'App', `Binding storage of ${account}`)
|
|
|
|
storage.account = storageAccount
|
|
|
|
} else {
|
|
|
|
log('log', 'App', `Token not found for ${account}`)
|
|
|
|
removeAccount(account)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
log('log', 'App', 'No active account available')
|
|
|
|
const accounts = getGlobalStorage.object('accounts')
|
|
|
|
if (accounts?.length) {
|
|
|
|
log('log', 'App', `Setting active account ${accounts[accounts.length - 1]}`)
|
|
|
|
setAccount(accounts[accounts.length - 1])
|
|
|
|
} else {
|
|
|
|
setGlobalStorage('account.active', undefined)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let netInfoRes = undefined
|
2020-12-13 22:31:55 +01:00
|
|
|
try {
|
2022-12-28 23:41:36 +01:00
|
|
|
netInfoRes = await netInfo()
|
|
|
|
} catch {}
|
|
|
|
|
|
|
|
if (netInfoRes && netInfoRes.corrupted && netInfoRes.corrupted.length) {
|
|
|
|
setLocalCorrupt(netInfoRes.corrupted)
|
2020-12-13 22:31:55 +01:00
|
|
|
}
|
2021-01-07 19:13:09 +01:00
|
|
|
|
2022-12-28 23:41:36 +01:00
|
|
|
log('log', 'App', `locale: ${Localization.locale}`)
|
|
|
|
const language = getLanguage()
|
|
|
|
if (!language) {
|
|
|
|
if (Platform.OS !== 'ios') {
|
|
|
|
setGlobalStorage('app.language', 'en')
|
|
|
|
}
|
|
|
|
i18n.changeLanguage('en')
|
|
|
|
} else {
|
|
|
|
i18n.changeLanguage(language)
|
|
|
|
}
|
2021-01-07 19:13:09 +01:00
|
|
|
|
2022-12-28 23:41:36 +01:00
|
|
|
setAppIsReady(true)
|
2020-12-13 22:31:55 +01:00
|
|
|
}
|
|
|
|
|
2022-12-28 23:41:36 +01:00
|
|
|
prepare()
|
|
|
|
}, [])
|
|
|
|
const onLayoutRootView = useCallback(async () => {
|
|
|
|
if (appIsReady) {
|
|
|
|
log('log', 'App', 'hide splash')
|
2021-01-07 19:13:09 +01:00
|
|
|
await SplashScreen.hideAsync()
|
|
|
|
}
|
2022-12-28 23:41:36 +01:00
|
|
|
}, [appIsReady])
|
|
|
|
if (!appIsReady) {
|
|
|
|
return null
|
|
|
|
}
|
2020-12-22 00:50:47 +01:00
|
|
|
|
2020-11-23 00:07:32 +01:00
|
|
|
return (
|
2022-12-28 23:41:36 +01:00
|
|
|
<GestureHandlerRootView style={{ flex: 1 }} onLayout={onLayoutRootView}>
|
2021-12-18 12:06:35 +01:00
|
|
|
<QueryClientProvider client={queryClient}>
|
2022-12-28 23:41:36 +01:00
|
|
|
<SafeAreaProvider>
|
|
|
|
<ActionSheetProvider>
|
|
|
|
<AccessibilityManager>
|
|
|
|
<ThemeManager>
|
|
|
|
<Screens localCorrupt={localCorrupt} />
|
|
|
|
</ThemeManager>
|
|
|
|
</AccessibilityManager>
|
|
|
|
</ActionSheetProvider>
|
|
|
|
</SafeAreaProvider>
|
2021-12-18 12:06:35 +01:00
|
|
|
</QueryClientProvider>
|
|
|
|
</GestureHandlerRootView>
|
2020-11-23 00:07:32 +01:00
|
|
|
)
|
|
|
|
}
|
2020-10-31 21:04:46 +01:00
|
|
|
|
2022-09-24 13:42:15 +02:00
|
|
|
export default Sentry.wrap(App)
|