-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
73 lines (69 loc) · 2.62 KB
/
App.tsx
File metadata and controls
73 lines (69 loc) · 2.62 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
import React, { Suspense, useEffect } from 'react';
import { ErrorBoundary } from 'react-error-boundary';
import { I18nextProvider } from 'react-i18next';
import { Platform } from 'react-native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import i18n from '@/i18n';
import linking from '@/navigation/Linking';
import Router from '@/navigation/router';
import AppInitializationProvider from '@/provider/AppInitializationProvider';
import ErrorPage from '@/screens/ErrorPage';
import { useToastStore, useUserStore } from '@/store';
import { NavigationContainer, createNavigationContainerRef } from '@react-navigation/native';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import * as Notifications from 'expo-notifications';
import { queryClient } from '@/api/queryClient';
import { useNotification } from '@/hooks/useNotification';
import { Toast } from '@/components/common/Toast';
export const navigationRef = createNavigationContainerRef();
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: true,
shouldSetBadge: true,
shouldShowBanner: true,
shouldShowList: true,
priority: Notifications.AndroidNotificationPriority.HIGH,
}),
});
if (Platform.OS === 'android') {
Notifications.setNotificationChannelAsync('default', {
name: 'default',
description: 'notification',
importance: Notifications.AndroidImportance.HIGH,
vibrationPattern: [0, 250, 250, 250],
lightColor: '#FF231F7C',
enableVibrate: true,
enableLights: true,
showBadge: true,
lockscreenVisibility: Notifications.AndroidNotificationVisibility.PUBLIC,
});
}
export default function App() {
const { visible, icon, text, duration, hideToast } = useToastStore();
useNotification();
return (
<QueryClientProvider client={queryClient}>
<I18nextProvider i18n={i18n}>
<ErrorBoundary FallbackComponent={ErrorPage}>
<Suspense fallback={null}>
<GestureHandlerRootView style={{ flex: 1 }}>
<NavigationContainer ref={navigationRef} linking={linking}>
<AppInitializationProvider>
<Router />
<Toast
visible={visible}
icon={icon!}
text={text}
duration={duration}
onClose={hideToast}
/>
</AppInitializationProvider>
</NavigationContainer>
</GestureHandlerRootView>
</Suspense>
</ErrorBoundary>
</I18nextProvider>
</QueryClientProvider>
);
}