-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.js
118 lines (109 loc) · 3.65 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import "react-native-gesture-handler";
import { Provider } from "react-redux";
import middleware from "./src/store/middleware";
import reducer from "./src/store/reducers";
import Navigation from "./src/navigation/";
import NavigationWelcome from "./src/navigation/NavigationWelcome";
import { createStore } from "redux";
import { useEffect, useState } from "react";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import { ToastProvider } from "react-native-toast-notifications";
import { MenuProvider } from "react-native-popup-menu";
import { getTools, isFirstTimeLaunch, storeTools } from "./_DATA";
import * as QuickActions from "expo-quick-actions";
import { useTranslation } from "react-i18next";
import mobileAds from "react-native-google-mobile-ads";
import { requestTrackingPermissionsAsync } from "expo-tracking-transparency";
import { setTrackingStat } from "./_DATA";
import { RevenueCatProvider } from "./src/providers/RevenueCatProvider";
import * as SplashScreen from "expo-splash-screen";
const App = () => {
const store = createStore(reducer, middleware);
const [getStartedBtnPressed, setGetStartedBtnPressed] = useState(false);
const [isFirstTimeState, setIsFirstTimeState] = useState(false);
const [theme, setTheme] = useState(null);
const [isThemeChanged, setIsThemeChanged] = useState(false);
const { t } = useTranslation();
const text = (text) => "screens.QuickAction." + text;
SplashScreen.setOptions({
duration: 1000,
fade: true,
});
useEffect(() => {
(async () => {
// Google AdMob will show any messages here that you just set up on the AdMob Privacy & Messaging page
const { status: trackingStatus } =
await requestTrackingPermissionsAsync();
if (trackingStatus !== "granted") {
await setTrackingStat(false);
} else {
await setTrackingStat(true);
}
// Initialize the ads
await mobileAds().initialize();
})();
}, []);
useEffect(() => {
const checkFirstTimeLaunch = async () => {
const isFirstTime = await isFirstTimeLaunch();
if (isFirstTime) {
setIsFirstTimeState(true);
}
};
checkFirstTimeLaunch();
}, []);
useEffect(() => {
QuickActions.setItems([
{
title: t(text("search")),
icon: "symbol:magnifyingglass",
id: "search",
},
{
title: t(text("createTool")),
icon: "symbol:plus",
id: "createTool",
},
{
title: t(text("favorite")),
icon: "symbol:star",
id: "favorite",
},
{
title: t(text("quickAccess")),
subtitle: t(text("quickAccessSub")),
icon: "symbol:arrow.forward.to.line.circle",
id: "quickAccess",
},
]);
}, []);
return (
<RevenueCatProvider>
<MenuProvider>
<ToastProvider>
<GestureHandlerRootView style={{ flex: 1 }}>
<Provider store={store}>
{getStartedBtnPressed || !isFirstTimeState ? (
<Navigation
theme={theme}
setTheme={setTheme}
isThemeChanged={isThemeChanged}
setIsThemeChanged={setIsThemeChanged}
/>
) : (
<NavigationWelcome
isThemeChanged={isThemeChanged}
setIsThemeChanged={setIsThemeChanged}
theme={theme}
setTheme={setTheme}
setGetStartedBtnPressed={setGetStartedBtnPressed}
/>
)}
</Provider>
</GestureHandlerRootView>
</ToastProvider>
</MenuProvider>
</RevenueCatProvider>
);
};
export default App;