-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
121 lines (111 loc) · 3.59 KB
/
App.tsx
File metadata and controls
121 lines (111 loc) · 3.59 KB
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
116
117
118
119
120
121
import notifee, { EventType } from '@notifee/react-native'
import messaging from '@react-native-firebase/messaging'
import { GoogleSignin } from '@react-native-google-signin/google-signin'
import { NavigationContainer } from '@react-navigation/native'
import { get, set } from 'lodash'
import React, { useRef } from 'react'
import { Platform, Text, TextInput } from 'react-native'
import Config from 'react-native-config'
import { Settings } from 'react-native-fbsdk-next'
import {
DefaultTheme,
Provider as PaperProvider,
TextInput as TextInputPaper,
} from 'react-native-paper'
import { SafeAreaProvider } from 'react-native-safe-area-context'
import { Provider as ReduxProvider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import { Constants } from 'src/common/constants'
import {
navigationOnReady,
navigationOnStateChange,
navigationRef,
} from 'src/common/navigation'
import {
createNotificationChannel,
displayNotification,
} from 'src/common/notifications'
import { AppContainer } from 'src/navigation'
import { setNotificationToBeHandled } from 'src/store/features/chat/chatSlice'
import { persistor, store } from 'src/store/store'
import { StreamChat } from 'stream-chat'
const theme = {
...DefaultTheme,
dark: false,
colors: {
...DefaultTheme.colors,
},
}
//TODO: For the moment dont support big font scales
set(Text, 'defaultProps', {
...get(Text, 'defaultProps', {}),
maxFontSizeMultiplier: Constants.FONT_SCALE_LIMIT,
})
set(TextInput, 'defaultProps', {
...get(TextInput, 'defaultProps', {}),
maxFontSizeMultiplier: Constants.FONT_SCALE_LIMIT,
})
set(TextInputPaper, 'defaultProps', {
...get(TextInputPaper, 'defaultProps', {}),
maxFontSizeMultiplier: Constants.FONT_SCALE_LIMIT,
})
export const chatClient = StreamChat.getInstance(
`${Config.STREAM_CHAT_API_KEY}`,
)
/// Register background handler
if (Platform.OS === 'android') {
messaging().setBackgroundMessageHandler(async remoteMessage => {
const channelId = await createNotificationChannel('chat', 'Chat')
try {
const message = await chatClient.getMessage(remoteMessage?.data?.id ?? '')
await displayNotification(
channelId,
`Nuevo mensaje de: ${message?.message?.user?.name}`,
message?.message?.text ?? '',
remoteMessage?.data,
)
} catch (error) {
notifee.onBackgroundEvent(async ({ detail, type }) => {
if (type === EventType.PRESS || type === EventType.ACTION_PRESS) {
store?.dispatch(setNotificationToBeHandled(detail))
}
await Promise.resolve()
})
await displayNotification(
channelId,
'Nuevo mensaje!',
'Contesta para continuar tu proceso de adopción',
remoteMessage?.data,
)
}
})
}
const App = () => {
GoogleSignin.configure({
offlineAccess: true,
webClientId: Config.GOOGLE_WEB_CLIENT_ID,
iosClientId: Config.GOOGLE_IOS_CLIENT_ID,
})
Settings.initializeSDK()
const routeNameRef = useRef<string>()
return (
<ReduxProvider store={store}>
<PersistGate loading={null} persistor={persistor}>
<PaperProvider theme={theme}>
<SafeAreaProvider>
<NavigationContainer
ref={navigationRef}
onReady={navigationOnReady(navigationRef, routeNameRef)}
onStateChange={navigationOnStateChange(
navigationRef,
routeNameRef,
)}>
<AppContainer />
</NavigationContainer>
</SafeAreaProvider>
</PaperProvider>
</PersistGate>
</ReduxProvider>
)
}
export default App