Files
super-app/App/common/utilities/CacheUtils.ts
2024-11-07 10:01:54 +00:00

161 lines
4.5 KiB
TypeScript

import AsyncStorage from "@react-native-async-storage/async-storage";
import { BASE_URL } from "../../../network/NetworkConstant";
import { NetworkConnectorModule } from "../../common/native-module/NativeModules";
import {
AnalyticsEventNameConstants,
BUILD_CONFIG_DETAILS,
BuildConfigConstants,
EVENT_NAMES,
} from "../constants";
import { sendAsAnalyticsEvent } from "../hooks/useAnalyticsEvent";
import { CtaData } from "../interface";
import { ScreenData } from "../interface/widgets/screenData/ScreenData";
import { LineItem } from "../interface/widgets/screenData/ScreenMetaData";
export const getScreenDataFromCache = async (
key: string,
): Promise<ScreenData | null> => {
try {
const value = await AsyncStorage.getItem(key);
if (!!value) {
try {
const deserializedObject = JSON.parse(value);
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_FETCH_SUCCESS,
properties: {
key: `${key}`,
},
});
return deserializedObject as ScreenData;
} catch (error) {
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_ERROR,
properties: {
error: EVENT_NAMES.JSON_PARSING_ERROR,
reason: `${error}`,
},
});
return null;
}
} else {
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_ERROR,
properties: {
error: EVENT_NAMES.INVALID_DATA_IN_CACHE,
},
});
return null;
}
} catch (error) {
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_ERROR,
properties: {
error: EVENT_NAMES.ERROR_CHECKING_ASYNC_STORAGE,
reason: `${error}`,
},
});
return null;
}
};
export const saveScreenDataInCache = async (
key: string | null,
data: ScreenData | null,
) => {
if (!!key && !!data) {
const serializedObject = JSON.stringify(data);
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_SAVE_SUCCESS,
properties: {
key: `${key}`,
},
});
await AsyncStorage.setItem(key, serializedObject);
} else {
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_CACHE_ERROR,
properties: {
error: EVENT_NAMES.INVALID_KEY_OR_DATA,
key: `${key}`,
},
});
}
};
export const setBuildConfigDetails = async () => {
let buildConfigData: string | undefined;
await NetworkConnectorModule.getBuildConfigDetails().then(
(response: string) => {
buildConfigData = response;
},
);
if (buildConfigData) {
await AsyncStorage.setItem(BUILD_CONFIG_DETAILS, buildConfigData);
}
};
export const setBuildConfigDetailsFromCta = async (
ctaData: CtaData,
): Promise<BuildConfigDetails | null> => {
let buildConfigDetails: BuildConfigDetails =
getBuildConfigDetailsFromCta(ctaData);
if (buildConfigDetails) {
await AsyncStorage.setItem(
BUILD_CONFIG_DETAILS,
JSON.stringify(buildConfigDetails),
);
}
return buildConfigDetails;
};
export const getBuildConfigDetails =
async (): Promise<BuildConfigDetails | null> => {
const value = await AsyncStorage.getItem(BUILD_CONFIG_DETAILS);
try {
if (!!value) {
// The key exists in AsyncStorage
const buildConfigData = JSON.parse(value);
try {
return buildConfigData as BuildConfigDetails;
} catch (error) {
return null;
}
} else {
return null;
}
} catch (error) {
// Sentry log -> Error checking BuildConfigDetails
return null;
}
};
export const getBuildConfigDetailsFromCta = (
ctaData: CtaData,
): BuildConfigDetails => {
let buildConfigDetails: BuildConfigDetails = {
baseUrl: "",
flavor: "",
appVersionName: "",
appVersionCode: "",
};
ctaData?.additionalParameters?.forEach((item: LineItem) => {
switch (item.key) {
case BuildConfigConstants.BASE_URL:
buildConfigDetails.baseUrl = item.value || BASE_URL;
break;
case BuildConfigConstants.FLAVOR:
buildConfigDetails.flavor = item.value || "";
break;
case BuildConfigConstants.APP_VERSION_NAME:
buildConfigDetails.appVersionName = item.value || "";
break;
case BuildConfigConstants.APP_VERSION_CODE:
buildConfigDetails.appVersionCode = item.value || "";
break;
default:
break;
}
});
return buildConfigDetails;
};