-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathApp.tsx
More file actions
103 lines (90 loc) · 3.12 KB
/
Copy pathApp.tsx
File metadata and controls
103 lines (90 loc) · 3.12 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
import React, { createContext, useState, Dispatch, SetStateAction, useEffect } from 'react';
import 'react-native-gesture-handler';
import { ApolloProvider, ApolloClient, ApolloLink, InMemoryCache } from '@apollo/client';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { createUploadLink } from 'apollo-upload-client';
import { getAccessToken } from './src/commons/libraries/getAccessToken';
import { onError } from '@apollo/client/link/error';
import { firebase } from '@react-native-firebase/firestore';
import { MenuProvider } from 'react-native-popup-menu';
import Navigation from './pages/navigation';
import { SafeAreaView } from 'react-native-safe-area-context';
import SplashScreen from 'react-native-splash-screen';
interface IGlobalContext {
setAccessToken?: Dispatch<SetStateAction<string>>;
}
export const GlobalContext = createContext<IGlobalContext>({});
const firebaseConfig = {
appId: '1:658624640581:android:7f53ac27eb8a4b09f4d52c',
apiKey: 'AIzaSyD041r1L0ujQLrDEEN6LQm09QHcMZ5QVPM',
projectId: 'goodneighbors-b9d7e',
storageBucket: 'goodneighbors-b9d7e.appspot.com',
messagingSenderId: '658624640581',
databaseURL: 'goodneighbors-b9d7e.firebaseapp.com',
};
export const firebaseStorage = !firebase.apps.length
? firebase.initializeApp(firebaseConfig)
: firebase.app();
const App = () => {
const [accessToken, setMyAccessToken] = useState('');
useEffect(() => {
try {
setTimeout(() => {
SplashScreen.hide();
}, 2500);
} catch (error) {
console.warn('에러발생');
console.warn(error);
}
});
const value = {
setAccessToken: setMyAccessToken,
};
const errorLink = onError(({ graphQLErrors, operation, forward }) => {
if (graphQLErrors) {
for (const err of graphQLErrors) {
if (err.extensions.code === 'UNAUTHENTICATED') {
operation.setContext({
headers: {
...operation.getContext().headers,
authorization: `Bearer ${getAccessToken(setMyAccessToken)}`,
},
});
return forward(operation);
}
}
}
});
const uploadLink = createUploadLink({
uri: 'http://backend04-team.codebootcamp.co.kr/team03',
headers: { authorization: `Bearer ${accessToken}` },
credentials: 'include',
});
const client = new ApolloClient({
link: ApolloLink.from([errorLink, uploadLink as unknown as ApolloLink]),
cache: new InMemoryCache(),
});
useEffect(() => {
async function accessToken() {
const result = await AsyncStorage.getItem('refreshToken', (_, result) => {
console.log('refreshToken', result);
if (result) {
setMyAccessToken(result);
}
});
console.log(result);
}
accessToken();
}, []);
return (
<GlobalContext.Provider value={value}>
<ApolloProvider client={client}>
<MenuProvider>
<SafeAreaView />
<Navigation />
</MenuProvider>
</ApolloProvider>
</GlobalContext.Provider>
);
};
export default App;