Files
address-verification-app/App.tsx
Aman Sethi a82a2b35aa @TP-20999 fixed flickering and not loading issues of image | Aman Sethi (#133)
* images fix

* add fast image lib

* prop of loading from hook

* remove care from package.json

* add rn-ui exported image wrapper

* rn ui update
2023-03-13 16:49:31 +05:30

102 lines
4.1 KiB
TypeScript

import React from 'react';
import { LogBox, PermissionsAndroid, Platform , KeyboardAvoidingView, PermissionStatus} from 'react-native';
import {Provider} from 'react-redux';
import store, {persistor} from './src/store/store';
import {PersistGate} from 'redux-persist/integration/react';
import {NavigationContainer} from '@react-navigation/native';
import {navigationRef} from './src/components/utlis/navigationUtlis';
import FullScreenLoader from './RN-UI-LIB/src/components/FullScreenLoader';
import ProtectedRouter from './ProtectedRouter';
import { toast, toastConfigs, ToastContainer } from './RN-UI-LIB/src/components/toast';
import ErrorBoundary from './src/common/ErrorBoundary';
import * as Sentry from '@sentry/browser';
import { SENTRY_DSN } from './src/constants/config';
import useNativeButtons from './src/hooks/useNativeButton';
import { StatusBar } from 'react-native';
import { COLORS } from './RN-UI-LIB/src/styles/colors';
import codePush from 'react-native-code-push';
import { ENV } from './src/constants/config';
import { mockApiServer } from './src/mock-api/server';
import Text from './RN-UI-LIB/src/components/Text';
import { PermissionStatusEnum } from './src/services/geolocation.service';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { LocalStorageKeys } from './src/common/Constants';
Sentry.init({ dsn: SENTRY_DSN });
if (ENV !== 'prod') {
// mockApiServer();
}
LogBox.ignoreAllLogs();
export let GlobalImageMap: Record<string, string> = {};
const askForPermissions = (setPermissions:React.Dispatch<React.SetStateAction<boolean>> ) => {
if (Platform.OS === 'android') {
PermissionsAndroid.requestMultiple(
[PermissionsAndroid.PERMISSIONS.CAMERA,
PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE]
).then((result) => {
if (result['android.permission.ACCESS_COARSE_LOCATION']
&& result['android.permission.CAMERA']
&& result['android.permission.READ_CONTACTS']
&& result['android.permission.ACCESS_FINE_LOCATION']
&& result['android.permission.READ_EXTERNAL_STORAGE']
&& result['android.permission.WRITE_EXTERNAL_STORAGE'] === PermissionStatusEnum.GRANTED) {
setPermissions(true)
} else {
toast({type:'info', text1:'Please Go into Settings -> Applications -> Field App -> Permissions and Allow permissions to continue'});
setPermissions(false)
}
});
}
}
const App = () => {
useNativeButtons();
const [permissions, setPermissions] = React.useState(true);
React.useEffect(()=>{
askForPermissions(setPermissions);
(async() => {
const data = await AsyncStorage.getItem(LocalStorageKeys.GLOBAL_IMAGE_MAP);
if(data) {
const parsedData = JSON.parse(data);
GlobalImageMap = parsedData;
}
})()
}, [])
return (
<Provider store={store}>
<PersistGate
loading={<FullScreenLoader loading />}
persistor={persistor}>
<NavigationContainer ref={navigationRef}>
<StatusBar backgroundColor={COLORS.BACKGROUND.INDIGO_DARK} />
<ErrorBoundary>
{/* TODO: ASK Adhaya for designs its been more than 1 month */}
{permissions ? <ProtectedRouter /> : <Text>Please grant Permissions</Text>}
</ErrorBoundary>
</NavigationContainer>
{
<KeyboardAvoidingView
behavior='position'>
<ToastContainer
config={toastConfigs}
position="bottom"
/>
</KeyboardAvoidingView>
}
</PersistGate>
</Provider>
);
};
export default codePush(App);