-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.js
103 lines (77 loc) · 3.19 KB
/
App.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
import { NavigationContainer } from '@react-navigation/native'
import React, { useCallback, useEffect, useMemo, useState } from 'react'
import { Provider as PaperProvider } from 'react-native-paper'
import { connect, useSelector } from 'react-redux'
import admob, { MaxAdContentRating } from '@react-native-firebase/admob'
import language from './src/languages/Languages'
import { loadUser } from './src/actions/auth'
import { changePrefferedLanguage, getBlockedUsers, getUsers, registerDevice } from './src/actions/user'
import { MainStack } from './screens/navigation'
import { ThemeContext, themes } from './src/constants/context'
import { refreshToken, registerAppWithFCM, unSubscribeRefreshToken, checkPermission, messageListener } from './src/notifications/FCM'
import { getIsDarkThemeInfo, getPreferredLanguageInfo } from './src/constants/selector'
import { notificationLinking } from './src/notifications/DeepLinking'
const App = ({ loadUser, getUsers, registerDevice, changePrefferedLanguage, getBlockedUsers }) => {
const isDark = useSelector(getIsDarkThemeInfo)
const prefferedLanguage = useSelector(getPreferredLanguageInfo)
const [isDarkTheme, setIsDarkTheme] = useState(isDark)
const toggleTheme = useCallback(() => {
return setIsDarkTheme(!isDarkTheme)
}, [isDarkTheme])
const themeContext = useMemo(() => ({
toggleTheme,
isDarkTheme
}), [toggleTheme,isDarkTheme])
const admobConf = () => {
admob()
.setRequestConfiguration({
// Update all future requests suitable for parental guidance
maxAdContentRating: MaxAdContentRating.PG,
// Indicates that you want your content treated as child-directed for purposes of COPPA.
tagForChildDirectedTreatment: true,
// Indicates that you want the ad request to be handled in a
// manner suitable for users under the age of consent.
tagForUnderAgeOfConsent: true,
})
.then(() => {
// Request config successfully set!
})
}
const chooseLanguage = useCallback(() => {
const lng = language.getInterfaceLanguage().substring(0,2)
let moment = require('moment')
require('moment/locale/tr')
require('moment/locale/en-gb')
if (lng === 'tr')
{
moment.locale('tr')
if (prefferedLanguage === 'en')
changePrefferedLanguage('tr')
}
language.setLanguage(lng)
}, [changePrefferedLanguage, prefferedLanguage])
useEffect(() => {
chooseLanguage()
getBlockedUsers()
checkPermission()
registerAppWithFCM()
admobConf()
refreshToken()
loadUser()
getUsers()
return () => {
messageListener()
unSubscribeRefreshToken()
}
}, [chooseLanguage, getBlockedUsers, getUsers, loadUser, registerDevice])
return (
<ThemeContext.Provider value={themeContext}>
<PaperProvider theme={isDarkTheme ? themes.dark : themes.light}>
<NavigationContainer theme={isDarkTheme ? themes.dark : themes.light} linking={notificationLinking}>
<MainStack />
</NavigationContainer>
</PaperProvider>
</ThemeContext.Provider>
)
}
export default connect(null, { loadUser, getUsers, registerDevice, changePrefferedLanguage, getBlockedUsers })(App)