diff --git a/App.tsx b/App.tsx index cd72e54c45..d8082b201d 100644 --- a/App.tsx +++ b/App.tsx @@ -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 { diff --git a/App/common/constants/BuildConfigConstants.ts b/App/common/constants/BuildConfigConstants.ts new file mode 100644 index 0000000000..e9aff69bb5 --- /dev/null +++ b/App/common/constants/BuildConfigConstants.ts @@ -0,0 +1,6 @@ +export enum BuildConfigConstants { + BASE_URL = "baseUrl", + APP_VERSION_NAME = "appVersionName", + APP_VERSION_CODE = "appVersionCode", + FLAVOR = "flavor", +} diff --git a/App/common/constants/index.ts b/App/common/constants/index.ts index 9410ed93d5..240187cb47 100644 --- a/App/common/constants/index.ts +++ b/App/common/constants/index.ts @@ -9,3 +9,4 @@ export * from "./SentryConstants"; export * from "./StringConstant"; export * from "./WidgetNameConstants"; export * from "./StatusCodeConstant"; +export * from "./BuildConfigConstants"; diff --git a/App/common/interface/index.ts b/App/common/interface/index.ts index 6a82a4b4bd..c80f86ac17 100644 --- a/App/common/interface/index.ts +++ b/App/common/interface/index.ts @@ -4,6 +4,7 @@ export type CtaData = { url: string; type?: string; parameters?: Array; + additionalParameters?: Array; data?: any; finish?: boolean; screenKey?: string; diff --git a/App/common/utilities/CacheUtils.ts b/App/common/utilities/CacheUtils.ts index 560bf969b9..c5b3d02c09 100644 --- a/App/common/utilities/CacheUtils.ts +++ b/App/common/utilities/CacheUtils.ts @@ -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 => { @@ -66,6 +69,20 @@ export const setBuildConfigDetails = async () => { } }; +export const setBuildConfigDetailsFromCta = async ( + ctaData: CtaData, +): Promise => { + let buildConfigDetails: BuildConfigDetails = + getBuildConfigDetailsFromCta(ctaData); + if (buildConfigDetails) { + await AsyncStorage.setItem( + BUILD_CONFIG_DETAILS, + JSON.stringify(buildConfigDetails), + ); + } + return buildConfigDetails; +}; + export const getBuildConfigDetails = async (): Promise => { 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, ) => { diff --git a/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt b/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt index db1f302527..e89315fe6c 100644 --- a/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt +++ b/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt @@ -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( diff --git a/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt b/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt index 8d6073ff07..08aed8e560 100644 --- a/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt +++ b/android/navi-common/src/main/java/com/navi/common/utils/Constants.kt @@ -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" + } } diff --git a/network/NetworkConstant.ts b/network/NetworkConstant.ts index ab21ffd0e6..b259760434 100644 --- a/network/NetworkConstant.ts +++ b/network/NetworkConstant.ts @@ -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";