* 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
102 lines
4.1 KiB
TypeScript
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);
|