NTP-8696 | React BuildConfig Optimisations (#13268)

This commit is contained in:
Kshitij Pramod Ghongadi
2024-10-24 18:45:52 +05:30
committed by GitHub
parent 4239607795
commit 3757bf8cb6
8 changed files with 91 additions and 14 deletions

11
App.tsx
View File

@@ -14,10 +14,7 @@ import {
import { sendAsAnalyticsEvent } from "./App/common/hooks/useAnalyticsEvent";
import { CtaData } from "./App/common/interface";
import RnApp from "./App/common/navigator/RnAppCreator";
import {
getBuildConfigDetails,
setBuildConfigDetails,
} from "./App/common/utilities/CacheUtils";
import { setBuildConfigDetailsFromCta } from "./App/common/utilities/CacheUtils";
import {
getStringPreference,
setStringPreference,
@@ -39,11 +36,8 @@ export default class App extends Component<{}, AppState> {
};
}
checkForUpdates = async () => {
let flavor: string | undefined;
getBuildConfigDetails().then(res => {
flavor = res?.baseUrl;
});
const cta = this.getInitialCta();
await setBuildConfigDetailsFromCta(cta!!);
await codePush.sync(
{
installMode:
@@ -146,7 +140,6 @@ export default class App extends Component<{}, AppState> {
override componentDidMount(): void {
this.checkForUpdates();
setBuildConfigDetails();
}
override componentWillUnmount(): void {

View File

@@ -0,0 +1,6 @@
export enum BuildConfigConstants {
BASE_URL = "baseUrl",
APP_VERSION_NAME = "appVersionName",
APP_VERSION_CODE = "appVersionCode",
FLAVOR = "flavor",
}

View File

@@ -9,3 +9,4 @@ export * from "./SentryConstants";
export * from "./StringConstant";
export * from "./WidgetNameConstants";
export * from "./StatusCodeConstant";
export * from "./BuildConfigConstants";

View File

@@ -4,6 +4,7 @@ export type CtaData = {
url: string;
type?: string;
parameters?: Array<LineItem>;
additionalParameters?: Array<LineItem>;
data?: any;
finish?: boolean;
screenKey?: string;

View File

@@ -1,14 +1,17 @@
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/ScreenNameConstants";
import { BUILD_CONFIG_DETAILS } from "../constants/StringConstant";
} 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> => {
@@ -66,6 +69,20 @@ export const setBuildConfigDetails = async () => {
}
};
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);
@@ -87,6 +104,36 @@ export const getBuildConfigDetails =
}
};
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,
) => {

View File

@@ -21,6 +21,7 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler
import com.facebook.react.modules.core.DeviceEventManagerModule
import com.google.gson.Gson
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
import com.navi.base.utils.PROD
import com.navi.base.utils.orFalse
import com.navi.common.CommonLibManager
@@ -68,7 +69,8 @@ class ReactActivity : BaseActivity(), DefaultHardwareBackBtnHandler, RequestToCa
// also libjsi is pre-instantiated from node modules
val reactApplication = application as ReactApplication
reactInstanceManager = reactApplication.reactNativeHost.reactInstanceManager
val ctaData = intent.extras?.getString(Constants.KEY_CTA_DATA)
var ctaData = intent.extras?.getString(Constants.KEY_CTA_DATA)
val buildConfigDetails = CommonLibManager.buildConfigDetails
val ctaDataObject: CtaData? = gson.fromJson(ctaData, CtaData::class.java)
var statusBarColor: Int? = R.color.white
ctaDataObject?.parameters?.forEach {
@@ -76,6 +78,26 @@ class ReactActivity : BaseActivity(), DefaultHardwareBackBtnHandler, RequestToCa
statusBarColor = it.value.parseColorSafe()
}
}
ctaDataObject?.additionalParameters =
listOf(
LineItem(
key = Constants.BuildConfigConstants.BASE_URL,
value = buildConfigDetails.baseUrl
),
LineItem(
key = Constants.BuildConfigConstants.APP_VERSION_NAME,
value = buildConfigDetails.appVersionName
),
LineItem(
key = Constants.BuildConfigConstants.APP_VERSION_CODE,
value = buildConfigDetails.appVersionCode
),
LineItem(
key = Constants.BuildConfigConstants.FLAVOR,
value = buildConfigDetails.flavor
)
)
ctaData = gson.toJson(ctaDataObject)
val bundle: Bundle? = if (ctaData != null) Bundle() else null
bundle?.putString(Constants.KEY_CTA_DATA, ctaData.toString())
reactRootView.startReactApplication(

View File

@@ -387,4 +387,11 @@ object Constants {
const val TOGGLE_SWITCH_CHECKED_STATE = "checked"
const val AUTHENTICATION_SESSION_TIME_OUT_THRESHOLD = 5 * 60 * 1000L // 5 mins
}
object BuildConfigConstants {
const val BASE_URL = "baseUrl"
const val APP_VERSION_NAME = "appVersionName"
const val APP_VERSION_CODE = "appVersionCode"
const val FLAVOR = "flavor"
}
}

View File

@@ -1,3 +1,3 @@
export const BASE_URL = "https://sa.navi.com";
export const BASE_URL = "https://sa.navi.com/";
export const BUNDLE_VERSION = "x-rn-bundle-version";
export const GZIP = "gzip";