161 lines
4.5 KiB
TypeScript
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;
|
|
};
|