149 lines
4.0 KiB
TypeScript
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,
|
|
];
|