8ab5eb6583
* move `notifee.ts` to notifications folder * install expo notifications * add UIBackgroundMode `remote-notifications` to app.json * fix notifee import in Debug.tsx * add `google-services.json` * add `development-device` class to eas.json * Add `notifications.ts` for native notification handling * send push token to server * update `@atproto/api` * fix putting notif token to server * fix how push token is uploaded * fix lint * enable debug appview proxy header on all platforms * setup `notifications.ts` to work with app view notifs * clean up notification handler * add comments * update packages to correct versions * remove notifee * clean up code a lil * rename push token endpoint * remove unnecessary comments * fix comments * Remove old background scheduler * Fixes to push notifications API use * Bump @atproto/api@0.6.6 --------- Co-authored-by: Paul Frazee <pfrazee@gmail.com>
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import 'react-native-url-polyfill/auto'
|
|
import React, {useState, useEffect} from 'react'
|
|
import 'lib/sentry' // must be relatively on top
|
|
import {withSentry} from 'lib/sentry'
|
|
import {Linking} from 'react-native'
|
|
import {RootSiblingParent} from 'react-native-root-siblings'
|
|
import * as SplashScreen from 'expo-splash-screen'
|
|
import {GestureHandlerRootView} from 'react-native-gesture-handler'
|
|
import {observer} from 'mobx-react-lite'
|
|
import {ThemeProvider} from 'lib/ThemeContext'
|
|
import {s} from 'lib/styles'
|
|
import * as view from './view/index'
|
|
import {RootStoreModel, setupState, RootStoreProvider} from './state'
|
|
import {Shell} from './view/shell'
|
|
import * as notifications from 'lib/notifications/notifications'
|
|
import * as analytics from 'lib/analytics/analytics'
|
|
import * as Toast from './view/com/util/Toast'
|
|
import {handleLink} from './Navigation'
|
|
|
|
SplashScreen.preventAutoHideAsync()
|
|
|
|
const App = observer(() => {
|
|
const [rootStore, setRootStore] = useState<RootStoreModel | undefined>(
|
|
undefined,
|
|
)
|
|
|
|
// init
|
|
useEffect(() => {
|
|
view.setup()
|
|
setupState().then(store => {
|
|
setRootStore(store)
|
|
analytics.init(store)
|
|
notifications.init(store)
|
|
SplashScreen.hideAsync()
|
|
Linking.getInitialURL().then((url: string | null) => {
|
|
if (url) {
|
|
handleLink(url)
|
|
}
|
|
})
|
|
Linking.addEventListener('url', ({url}) => {
|
|
handleLink(url)
|
|
})
|
|
store.onSessionDropped(() => {
|
|
Toast.show('Sorry! Your session expired. Please log in again.')
|
|
})
|
|
})
|
|
}, [])
|
|
|
|
// show nothing prior to init
|
|
if (!rootStore) {
|
|
return null
|
|
}
|
|
return (
|
|
<ThemeProvider theme={rootStore.shell.colorMode}>
|
|
<RootSiblingParent>
|
|
<analytics.Provider>
|
|
<RootStoreProvider value={rootStore}>
|
|
<GestureHandlerRootView style={s.h100pct}>
|
|
<Shell />
|
|
</GestureHandlerRootView>
|
|
</RootStoreProvider>
|
|
</analytics.Provider>
|
|
</RootSiblingParent>
|
|
</ThemeProvider>
|
|
)
|
|
})
|
|
|
|
export default withSentry(App)
|