TP-00000 | more performance optimisations
This commit is contained in:
55
src/PersistStorageEngine.ts
Normal file
55
src/PersistStorageEngine.ts
Normal 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();
|
||||
};
|
||||
@@ -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());
|
||||
|
||||
@@ -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} />;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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));
|
||||
}, []);
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user