Files
super-app/App/common/utilities/CacheUtils.ts
2024-10-24 13:15:52 +00:00

149 lines
4.0 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 {
BENEFIT_SCREEN,
BUILD_CONFIG_DETAILS,
BUY_INSURANCE_SCREEN,
BuildConfigConstants,
COMPARE_PLAN_SCREEN,
QUOTE_OFFER_SCREEN,
} from "../constants";
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) {
// The key exists in AsyncStorage
const deserializedObject = JSON.parse(value);
try {
return deserializedObject as ScreenData;
} catch (error) {
return null;
}
} else {
return null;
}
} catch (error) {
console.error("Error checking AsyncStorage:", error);
return null;
}
};
export const saveScreenDataInCache = async (
key: string | null,
data: ScreenData | null,
) => {
if (!!key && !!data) {
const serializedObject = JSON.stringify(data);
await AsyncStorage.setItem(key, serializedObject);
} else {
console.error("key or data was invalid");
}
};
export const getCacheKey = (
screenName: string | null | undefined,
screenKey: string | null | undefined,
) => {
if (!!screenKey && !!screenName) {
return screenName + "#" + screenKey;
} else {
return screenName;
}
};
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;
};
export const isScreenWhiteListedForCaching = (
screenName: string | null | undefined,
) => {
return !screensWithCachingDisabled.includes(screenName || "");
};
export const screensWithCachingDisabled = [
BUY_INSURANCE_SCREEN,
QUOTE_OFFER_SCREEN,
COMPARE_PLAN_SCREEN,
BENEFIT_SCREEN,
];