add react-navigation configuration
This commit is contained in:
parent
f072612313
commit
cdae0a6fd1
|
@ -20,6 +20,7 @@
|
||||||
"@react-native-firebase/crashlytics": "^11.2.0",
|
"@react-native-firebase/crashlytics": "^11.2.0",
|
||||||
"@react-native-picker/picker": "^1.14.0",
|
"@react-native-picker/picker": "^1.14.0",
|
||||||
"@react-navigation/native": "^5.9.4",
|
"@react-navigation/native": "^5.9.4",
|
||||||
|
"@react-navigation/stack": "^5.14.4",
|
||||||
"graphql": "^15.5.0",
|
"graphql": "^15.5.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"native-base": "^3.0.0-next.36",
|
"native-base": "^3.0.0-next.36",
|
||||||
|
|
7
src/config/app.ts
Normal file
7
src/config/app.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export const AUTHOR = {
|
||||||
|
FULL_NAME: 'Dawid Wysokiński',
|
||||||
|
EMAIL: 'contact@dwysokinski.me',
|
||||||
|
CONTACT: 'https://dwysokinski.me/#contact',
|
||||||
|
};
|
||||||
|
|
||||||
|
export const QUESTIONS = [1, 40];
|
3
src/config/cdn.ts
Normal file
3
src/config/cdn.ts
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
export const CDN_URI = __DEV__
|
||||||
|
? 'http://localhost:9000/'
|
||||||
|
: 'https://cdn.zdamegzaminzawodowy.pl';
|
7
src/config/routing.ts
Normal file
7
src/config/routing.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export enum Screen {
|
||||||
|
Home = 'HomeScreen',
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AppStackParamList = {
|
||||||
|
[Screen.Home]: undefined;
|
||||||
|
};
|
|
@ -7,7 +7,9 @@ import {
|
||||||
} from '@apollo/client';
|
} from '@apollo/client';
|
||||||
import { onError } from '@apollo/client/link/error';
|
import { onError } from '@apollo/client/link/error';
|
||||||
|
|
||||||
const createClient = (uri: string): ApolloClient<NormalizedCacheObject> => {
|
export const createClient = (
|
||||||
|
uri: string,
|
||||||
|
): ApolloClient<NormalizedCacheObject> => {
|
||||||
return new ApolloClient({
|
return new ApolloClient({
|
||||||
queryDeduplication: true,
|
queryDeduplication: true,
|
||||||
cache: new InMemoryCache(),
|
cache: new InMemoryCache(),
|
||||||
|
@ -32,5 +34,3 @@ const createClient = (uri: string): ApolloClient<NormalizedCacheObject> => {
|
||||||
]),
|
]),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createClient;
|
|
||||||
|
|
2
src/libs/graphql/index.ts
Normal file
2
src/libs/graphql/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './createClient';
|
||||||
|
export * from './types';
|
|
@ -1,11 +1,11 @@
|
||||||
import 'react-native-gesture-handler';
|
import 'react-native-gesture-handler';
|
||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useEffect, useRef } from 'react';
|
||||||
import { Text, View } from 'react-native';
|
import { ApolloProvider } from '@apollo/client';
|
||||||
import RNBootSplash from 'react-native-bootsplash';
|
import RNBootSplash from 'react-native-bootsplash';
|
||||||
import { extendTheme, NativeBaseProvider } from 'native-base';
|
import { extendTheme, NativeBaseProvider } from 'native-base';
|
||||||
import createClient from 'libs/graphql/createClient';
|
import { createClient } from 'libs/graphql';
|
||||||
import { API_URI } from 'config/api';
|
import { API_URI } from 'config/api';
|
||||||
import { ApolloProvider } from '@apollo/client';
|
import Navigation from './Navigation';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const client = useRef(createClient(API_URI)).current;
|
const client = useRef(createClient(API_URI)).current;
|
||||||
|
@ -26,9 +26,7 @@ const App = () => {
|
||||||
return (
|
return (
|
||||||
<NativeBaseProvider theme={theme}>
|
<NativeBaseProvider theme={theme}>
|
||||||
<ApolloProvider client={client}>
|
<ApolloProvider client={client}>
|
||||||
<View>
|
<Navigation />
|
||||||
<Text>test</Text>
|
|
||||||
</View>
|
|
||||||
</ApolloProvider>
|
</ApolloProvider>
|
||||||
</NativeBaseProvider>
|
</NativeBaseProvider>
|
||||||
);
|
);
|
||||||
|
|
12
src/screens/HomeScreen/HomeScreen.tsx
Normal file
12
src/screens/HomeScreen/HomeScreen.tsx
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { View, Heading } from 'native-base';
|
||||||
|
|
||||||
|
const HomeScreen = () => {
|
||||||
|
return (
|
||||||
|
<View>
|
||||||
|
<Heading color="primary.200">Zdam Egzamin Zawodowy</Heading>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default HomeScreen;
|
60
src/screens/Navigation.tsx
Normal file
60
src/screens/Navigation.tsx
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
import React, { useRef } from 'react';
|
||||||
|
import { createStackNavigator } from '@react-navigation/stack';
|
||||||
|
import analytics from '@react-native-firebase/analytics';
|
||||||
|
import { AppStackParamList, Screen } from 'config/routing';
|
||||||
|
|
||||||
|
import {
|
||||||
|
NavigationContainer,
|
||||||
|
NavigationContainerRef,
|
||||||
|
} from '@react-navigation/native';
|
||||||
|
import HomeScreen from './HomeScreen/HomeScreen';
|
||||||
|
|
||||||
|
const Stack = createStackNavigator<AppStackParamList>();
|
||||||
|
const AppStack = createStackNavigator<AppStackParamList>();
|
||||||
|
|
||||||
|
const AppScreens = () => (
|
||||||
|
<AppStack.Navigator
|
||||||
|
screenOptions={{ animationEnabled: false, headerShown: false }}
|
||||||
|
>
|
||||||
|
<Stack.Screen name={Screen.Home} component={HomeScreen} />
|
||||||
|
</AppStack.Navigator>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default function Navigation() {
|
||||||
|
const routeNameRef = useRef<string>('');
|
||||||
|
const navigationRef = useRef<NavigationContainerRef>(null);
|
||||||
|
|
||||||
|
const logScreenView = (route: string) => {
|
||||||
|
return analytics().logScreenView({
|
||||||
|
screen_name: route,
|
||||||
|
screen_class: route,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleReady = () => {
|
||||||
|
logScreenView(navigationRef.current?.getCurrentRoute()?.name ?? '');
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleStateChange = () => {
|
||||||
|
const previousRouteName = routeNameRef.current;
|
||||||
|
const currentRouteName =
|
||||||
|
navigationRef.current?.getCurrentRoute()?.name ?? '';
|
||||||
|
|
||||||
|
if (previousRouteName !== currentRouteName) {
|
||||||
|
logScreenView(currentRouteName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save the current route name for later comparision
|
||||||
|
routeNameRef.current = currentRouteName;
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<NavigationContainer
|
||||||
|
ref={navigationRef}
|
||||||
|
onReady={handleReady}
|
||||||
|
onStateChange={handleStateChange}
|
||||||
|
>
|
||||||
|
<AppScreens />
|
||||||
|
</NavigationContainer>
|
||||||
|
);
|
||||||
|
}
|
11
src/utils/buildURL.ts
Normal file
11
src/utils/buildURL.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import { CDN_URI } from 'config/cdn';
|
||||||
|
|
||||||
|
const buildURL = (type: 'cdn', str: string): string => {
|
||||||
|
switch (type) {
|
||||||
|
case 'cdn':
|
||||||
|
return CDN_URI + str;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default buildURL;
|
25
yarn.lock
25
yarn.lock
|
@ -2976,6 +2976,14 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid "^3.1.15"
|
nanoid "^3.1.15"
|
||||||
|
|
||||||
|
"@react-navigation/stack@^5.14.4":
|
||||||
|
version "5.14.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.14.4.tgz#32f6717c03494f0ca6cf0dd43d8302af824de9e9"
|
||||||
|
integrity sha512-gQjWK8JHtVkD1p7wzjtSPuScJI0mSAk/N/gzgjQZo+rDUwgM8rOTDcVNRbtEOqCEgLQcZrZQHwhOjkrJirehjQ==
|
||||||
|
dependencies:
|
||||||
|
color "^3.1.3"
|
||||||
|
react-native-iphone-x-helper "^1.3.0"
|
||||||
|
|
||||||
"@react-stately/checkbox@^3.0.1":
|
"@react-stately/checkbox@^3.0.1":
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.0.1.tgz#2e48a2085f1559549df62c1eda78299127acaf80"
|
resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.0.1.tgz#2e48a2085f1559549df62c1eda78299127acaf80"
|
||||||
|
@ -4718,7 +4726,7 @@ collection-visit@^1.0.0:
|
||||||
map-visit "^1.0.0"
|
map-visit "^1.0.0"
|
||||||
object-visit "^1.0.0"
|
object-visit "^1.0.0"
|
||||||
|
|
||||||
color-convert@^1.9.0:
|
color-convert@^1.9.0, color-convert@^1.9.1:
|
||||||
version "1.9.3"
|
version "1.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||||
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||||
|
@ -4742,7 +4750,7 @@ color-name@^1.0.0, color-name@~1.1.4:
|
||||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
color-string@^1.5.3:
|
color-string@^1.5.3, color-string@^1.5.4:
|
||||||
version "1.5.5"
|
version "1.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
|
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
|
||||||
integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==
|
integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==
|
||||||
|
@ -4750,6 +4758,14 @@ color-string@^1.5.3:
|
||||||
color-name "^1.0.0"
|
color-name "^1.0.0"
|
||||||
simple-swizzle "^0.2.2"
|
simple-swizzle "^0.2.2"
|
||||||
|
|
||||||
|
color@^3.1.3:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e"
|
||||||
|
integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^1.9.1"
|
||||||
|
color-string "^1.5.4"
|
||||||
|
|
||||||
colorette@^1.0.7, colorette@^1.2.1:
|
colorette@^1.0.7, colorette@^1.2.1:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
||||||
|
@ -9683,6 +9699,11 @@ react-native-gesture-handler@^1.10.3:
|
||||||
invariant "^2.2.4"
|
invariant "^2.2.4"
|
||||||
prop-types "^15.7.2"
|
prop-types "^15.7.2"
|
||||||
|
|
||||||
|
react-native-iphone-x-helper@^1.3.0:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010"
|
||||||
|
integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==
|
||||||
|
|
||||||
react-native-material-ripple@^0.9.1:
|
react-native-material-ripple@^0.9.1:
|
||||||
version "0.9.1"
|
version "0.9.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-material-ripple/-/react-native-material-ripple-0.9.1.tgz#db1ad9dd7cf97011e4cd8475ae2041ade0f891cb"
|
resolved "https://registry.yarnpkg.com/react-native-material-ripple/-/react-native-material-ripple-0.9.1.tgz#db1ad9dd7cf97011e4cd8475ae2041ade0f891cb"
|
||||||
|
|
Reference in New Issue
Block a user