tooot/App.tsx

86 lines
2.3 KiB
TypeScript
Raw Normal View History

import * as SplashScreen from 'expo-splash-screen'
import React, { useEffect, useState } from 'react'
2020-12-18 23:58:53 +01:00
import { QueryClient, QueryClientProvider } from 'react-query'
2020-11-21 13:19:05 +01:00
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
2020-10-31 21:04:46 +01:00
2020-12-13 21:09:21 +01:00
import { Index } from '@root/Index'
import { persistor, store } from '@root/store'
2020-12-13 14:04:25 +01:00
import ThemeManager from '@utils/styles/ThemeManager'
2020-12-22 00:10:55 +01:00
import { resetLocal, updateLocal } from '@root/utils/slices/instancesSlice'
2020-12-13 14:04:25 +01:00
2020-12-18 23:58:53 +01:00
const queryClient = new QueryClient()
// if (__DEV__) {
// const whyDidYouRender = require('@welldone-software/why-did-you-render')
// whyDidYouRender(React, {
// trackAllPureComponents: true,
// trackHooks: true,
// hotReloadBufferMs: 1000
// })
// }
2020-11-17 23:57:23 +01:00
2020-11-23 00:07:32 +01:00
const App: React.FC = () => {
const [appLoaded, setAppLoaded] = useState(false)
useEffect(() => {
const delaySplash = async () => {
try {
await SplashScreen.preventAutoHideAsync()
} catch (e) {
console.warn(e)
}
}
delaySplash()
}, [])
useEffect(() => {
const hideSplash = async () => {
try {
await SplashScreen.hideAsync()
} catch (e) {
console.warn(e)
}
}
if (appLoaded) {
hideSplash()
}
}, [appLoaded])
2020-11-23 00:07:32 +01:00
return (
2020-12-21 23:30:26 +01:00
<QueryClientProvider client={queryClient}>
<Provider store={store}>
<PersistGate
persistor={persistor}
2020-12-22 00:10:55 +01:00
onBeforeLift={async () => {
const localUrl = store.getState().instances.local.url
const localToken = store.getState().instances.local.token
if (localUrl && localToken) {
const dispatchStatus = await store.dispatch(
updateLocal({ url: localUrl, token: localToken })
)
if (dispatchStatus.type.includes('/rejected')) {
store.dispatch(resetLocal())
}
}
setAppLoaded(true)
}}
2020-12-21 23:30:26 +01:00
>
{bootstrapped => {
if (bootstrapped) {
require('@root/i18n/i18n')
return (
<ThemeManager>
<Index />
</ThemeManager>
)
} else {
return null
}
}}
</PersistGate>
</Provider>
</QueryClientProvider>
2020-11-23 00:07:32 +01:00
)
}
2020-10-31 21:04:46 +01:00
export default App