TP-00000 | more performance optimisations

This commit is contained in:
Varnit Goyal
2023-11-02 18:19:49 +05:30
parent 1eeaadc5cd
commit b2e446bfb4
7 changed files with 77 additions and 39 deletions

View File

@@ -0,0 +1,55 @@
import { MMKV } from 'react-native-mmkv';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { GenericObject } from '@common/GenericTypes';
let storageEngine: GenericObject | null = null;
const initializeStorageEngine = () => {
/*
only want to enable mmkv for production build due
to limitation of mmkv not working with react native debugger
since its dependent on JSI
*/
if (!__DEV__) {
const storage = new MMKV();
const reduxStorage: Storage = {
setItem: async (key, value) => {
storage.set(key, value);
return await Promise.resolve(true);
},
getItem: async (key) => {
const value = storage.getString(key);
return await Promise.resolve(value);
},
removeItem: async (key) => {
storage.delete(key);
await Promise.resolve();
},
clearAll: async () => {
storage.clearAll();
await Promise.resolve();
},
};
storageEngine = reduxStorage;
return reduxStorage;
}
storageEngine = AsyncStorage;
return AsyncStorage;
};
export const getStorageEngine = () => {
if (storageEngine) {
return storageEngine;
}
return initializeStorageEngine();
};
export const clearStorageEngine = async () => {
if (storageEngine?.clearAll) {
storageEngine.clearAll();
}
await AsyncStorage.clear();
};

View File

@@ -38,6 +38,7 @@ import { resetProfileData } from '../reducer/profileSlice';
import CosmosForegroundService from '../services/foregroundServices/foreground.service';
import { resetReportees } from '../reducer/reporteesSlice';
import { resetPerformanceData } from '@reducers/agentPerformanceSlice';
import { clearStorageEngine, getStorageEngine } from '../PersistStorageEngine';
export interface GenerateOTPPayload {
phoneNumber: string;
@@ -201,6 +202,7 @@ export const handleLogout = () => async (dispatch: AppDispatch) => {
await auth().signOut();
await handleGoogleLogout();
await clearAllAsyncStorage();
await clearStorageEngine();
setGlobalUserData({
token: '',
agentId: '',
@@ -236,6 +238,8 @@ export const handleImpersonatedUserLogin =
.then(async (response: AxiosResponse<IUser>) => {
//clear current user data
await clearAllAsyncStorage();
//clear redux store if stored in mmkv
await clearStorageEngine();
CosmosForegroundService.clearTasks();
await foregroundService.stopAll();
dispatch(resetCasesData());

View File

@@ -67,28 +67,20 @@ const BlockerScreen = (props: IBlockerScreen) => {
}, [JSON.stringify(forceUninstallData || {})]);
React.useEffect(() => {
handleBlacklistedAppsForBlockingCosmos().then((blacklistedAppsInstalled) =>
dispatch(
setBlacklistedAppsInstalledData({ blacklistedAppsInstalled: blacklistedAppsInstalled })
)
);
const appStateChange = AppState.addEventListener('change', async (change) => {
setTimeout(async () => {
const trace = await perf().startTrace('blacklistedAppsInstalled');
handleBlacklistedAppsForBlockingCosmos().then((blacklistedAppsInstalled) =>
dispatch(
setBlacklistedAppsInstalledData({ blacklistedAppsInstalled: blacklistedAppsInstalled })
)
dispatch(
setBlacklistedAppsInstalledData({ blacklistedAppsInstalled: blacklistedAppsInstalled })
)
);
await trace.stop();
}, 3000);
});
return () => appStateChange.remove();
}, [BLACKLISTED_APPS_LIST]);
}, []);
const handleDownloadNewApp = () => {
if (forceReinstallData?.reinstall_endpoint) {
@@ -163,7 +155,9 @@ const BlockerScreen = (props: IBlockerScreen) => {
}
if (blacklistedAppsInstalled?.length > 0) {
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_BLOCKER_SCREEN_LOADED_FOR_BLACKLISTED_APPS);
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_BLOCKER_SCREEN_LOADED_FOR_BLACKLISTED_APPS, {
installedApps: blacklistedAppsInstalled,
});
return <BlockerScreenApps blacklistedAppsInstalled={blacklistedAppsInstalled} />;
}

View File

@@ -23,6 +23,7 @@ import { RouteProp } from '@react-navigation/native';
import crashlytics from '@react-native-firebase/crashlytics';
import { deflate } from 'react-native-gzip';
import { IGeolocationCoordinate } from '../../types/addressGeolocation.types';
import { MMKV } from 'react-native-mmkv';
const fs = ReactNativeBlobUtil.fs;
@@ -125,6 +126,10 @@ export const clearAllAsyncStorage = async () => {
return;
};
export const clearAllMmkvStorage = async () => {
MMKV.clearStore();
};
export const sanitizeString = (str = '') => {
return str?.trim() || DEFAULT_TEXT;
};

View File

@@ -80,9 +80,6 @@ const AllCasesMain = () => {
});
if (nextTab === BOTTOM_TAB_ROUTES.Dashboard)
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_PERFORMANCE_DASHBOARD_BUTTON_CLICKED, {});
if (e?.data?.routeName === BOTTOM_TAB_ROUTES.Profile) {
dispatch(getSelfieDocument());
}
};
useEffect(() => {

View File

@@ -65,6 +65,7 @@ function AuthRouter() {
alfredSetUserId(deviceId);
}
alfredSetCodePushVersion(getAppVersion());
NetworkStatusService.listenForOnline(dispatch);
}, []);
// for setting user token in global.ts for api calling's
@@ -80,8 +81,6 @@ function AuthRouter() {
// Sets the dispatch for apiHelper
registerNavigateAndDispatch(dispatch);
NetworkStatusService.listenForOnline(dispatch);
useEffect(() => {
Linking.addEventListener('url', (event) => handleUrl(event.url));
}, []);

View File

@@ -12,6 +12,9 @@ import {
} from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';
import blacklistedAppsInstalledSlice from '@reducers/blacklistedAppsInstalledSlice';
import feedbackFiltersSlice from '@reducers/feedbackFiltersSlice';
import { MMKV } from 'react-native-mmkv';
import caseReducer from '../reducer/caseReducer';
import userSlice from '../reducer/userSlice';
import loginSlice from '../reducer/loginSlice';
@@ -31,27 +34,8 @@ import feedbackImagesSlice from '../reducer/feedbackImagesSlice';
import configSlice from '../reducer/configSlice';
import profileSlice from '../reducer/profileSlice';
import reporteesSlice from '../reducer/reporteesSlice';
import blacklistedAppsInstalledSlice from '@reducers/blacklistedAppsInstalledSlice';
import feedbackFiltersSlice from '@reducers/feedbackFiltersSlice';
import agentPerformanceSlice from '../reducer/agentPerformanceSlice';
import { MMKV } from 'react-native-mmkv';
const storage = new MMKV();
export const reduxStorage: Storage = {
setItem: (key, value) => {
storage.set(key, value);
return Promise.resolve(true);
},
getItem: (key) => {
const value = storage.getString(key);
return Promise.resolve(value);
},
removeItem: (key) => {
storage.delete(key);
return Promise.resolve();
},
};
import { getStorageEngine } from '../PersistStorageEngine';
const rootReducer = combineReducers({
case: caseReducer,
@@ -81,7 +65,7 @@ const rootReducer = combineReducers({
const persistConfig = {
key: 'root',
version: 1,
storage: reduxStorage,
storage: getStorageEngine(),
whitelist: [
'case',
'allCases',