NTP-24573| Sidharth Bamba | Feature/saving bill error handling (#14714)
This commit is contained in:
@@ -220,3 +220,6 @@ const val TXN_AMOUNT = "TXN_AMOUNT"
|
||||
const val BAU = "BAU"
|
||||
const val ALL = "ALL"
|
||||
const val APP_VERSION_CODE = "APP_VERSION"
|
||||
|
||||
// url
|
||||
const val SAVED_BILL_URL_PREFIX = "billpay-gateway/v1/billpay/bills/saved"
|
||||
|
||||
@@ -183,4 +183,14 @@ constructor(
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun getSavedBillsDetailsOnError(
|
||||
path: String,
|
||||
metricInfo: MetricInfo<RepoResult<Any?>>,
|
||||
): RepoResult<Any?> {
|
||||
return apiResponseCallback(
|
||||
naviBbpsRetrofitService.savedBills(path),
|
||||
metricInfo = metricInfo,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.navi.bbps.common.CATEGORY_ID_MOBILE_PREPAID
|
||||
import com.navi.bbps.common.CATEGORY_ID_WATER
|
||||
import com.navi.bbps.common.MOBILE_NUMBER_LENGTH
|
||||
import com.navi.bbps.common.NAVI_BBPS_TSTORE_ORDER_DETAILS_REDIRECTION
|
||||
import com.navi.bbps.common.SAVED_BILL_URL_PREFIX
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor
|
||||
import com.navi.bbps.customHide
|
||||
import com.navi.common.checkmate.model.MetricInfo
|
||||
@@ -229,4 +230,8 @@ object NaviBbpsCommonUtils {
|
||||
fun isDiscountAmountGreaterThanZero(discountAmount: String): Boolean {
|
||||
return discountAmount.toDoubleOrNull().orZero() > 0.0
|
||||
}
|
||||
|
||||
fun isUrlPathValidForSavedBills(urlPath: String): Boolean {
|
||||
return urlPath.isNotEmpty() && urlPath.startsWith(SAVED_BILL_URL_PREFIX)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,6 +90,7 @@ constructor(
|
||||
private val naviBbpsSessionHelper: NaviBbpsSessionHelper,
|
||||
private val getABTestingExperimentUseCase: GetABTestingExperimentUseCase,
|
||||
private val litmusExperimentsUseCase: LitmusExperimentsUseCase,
|
||||
private val naviBbpsCommonRepository: BbpsCommonRepository,
|
||||
) :
|
||||
NaviBbpsBaseVM(
|
||||
naviBbpsVmData = NaviBbpsVmData(screen = NaviBbpsScreen.NAVI_BBPS_CUSTOMER_DATA_INPUT)
|
||||
@@ -672,4 +673,11 @@ constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun onSavedBillCtaClicked(apiUrl: String) {
|
||||
naviBbpsCommonRepository.getSavedBillsDetailsOnError(
|
||||
path = apiUrl,
|
||||
metricInfo = getBbpsMetricInfo(screenName = naviBbpsVmData.screen.screenName),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ import com.navi.bbps.common.NAVI_HOME
|
||||
import com.navi.bbps.common.NaviBbpsAnalytics
|
||||
import com.navi.bbps.common.RCBP_CATEGORY
|
||||
import com.navi.bbps.common.SCROLL_OFFSET_FOR_TITLE_IN_HEADER
|
||||
import com.navi.bbps.common.model.view.NaviBbpsButtonAction
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor
|
||||
import com.navi.bbps.common.ui.BbpsBillerConsentView
|
||||
import com.navi.bbps.common.ui.BbpsCircleImage
|
||||
@@ -83,6 +84,7 @@ import com.navi.bbps.common.ui.NaviBbpsHeader
|
||||
import com.navi.bbps.common.ui.NaviBbpsModalBottomSheetLayout
|
||||
import com.navi.bbps.common.ui.OfferRolodexWithShimmer
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isOfferExperimentEnabled
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isUrlPathValidForSavedBills
|
||||
import com.navi.bbps.customHide
|
||||
import com.navi.bbps.entry.NaviBbpsActivity
|
||||
import com.navi.bbps.entry.NaviBbpsRouter
|
||||
@@ -200,6 +202,22 @@ fun CustomerDataInputScreen(
|
||||
|
||||
val scope = rememberCoroutineScope()
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
naviBbpsActivity.errorEventHandler.bbpsErrorCtaClickEvent.collectLatest { event ->
|
||||
// In case of bill fetch error, go back to previous screen
|
||||
if (
|
||||
event.clickedButtonConfig.action is NaviBbpsButtonAction.Redirect &&
|
||||
isUrlPathValidForSavedBills(urlPath = event.clickedButtonConfig.action.url)
|
||||
) {
|
||||
customerDataInputViewModel.onSavedBillCtaClicked(
|
||||
apiUrl = event.clickedButtonConfig.action.url
|
||||
)
|
||||
bottomSheetState.hide()
|
||||
navigator.navigateUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val openSheet = {
|
||||
scope.launch { bottomSheetState.show() }
|
||||
Unit
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.navi.bbps.common.NaviBbpsScreen
|
||||
import com.navi.bbps.common.model.NaviBbpsVmData
|
||||
import com.navi.bbps.common.model.config.NaviBbpsDefaultConfig
|
||||
import com.navi.bbps.common.model.view.NaviBbpsSessionHelper
|
||||
import com.navi.bbps.common.repository.BbpsCommonRepository
|
||||
import com.navi.bbps.common.usecase.FetchBillHandler
|
||||
import com.navi.bbps.common.usecase.GetABTestingExperimentUseCase
|
||||
import com.navi.bbps.common.usecase.NaviBbpsConfigUseCase
|
||||
@@ -131,6 +132,7 @@ constructor(
|
||||
private val resProvider: ResourceProvider,
|
||||
private val rewardsNudgeEntityFetchUseCase: RewardNudgeUseCase,
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
private val naviBbpsCommonRepository: BbpsCommonRepository,
|
||||
) :
|
||||
NaviBbpsBaseVM(
|
||||
naviBbpsVmData = NaviBbpsVmData(screen = NaviBbpsScreen.NAVI_BBPS_PAY_BILL_SCREEN)
|
||||
@@ -1210,4 +1212,11 @@ constructor(
|
||||
_isArcProtected.update { isArcProtected }
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun onSavedBillCtaClicked(apiUrl: String) {
|
||||
naviBbpsCommonRepository.getSavedBillsDetailsOnError(
|
||||
path = apiUrl,
|
||||
metricInfo = getBbpsMetricInfo(screenName = naviBbpsVmData.screen.screenName),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.navi.bbps.common.CATEGORY_ID_MOBILE_PREPAID
|
||||
import com.navi.bbps.common.CoinsSyncManager
|
||||
import com.navi.bbps.common.NaviBbpsScreen
|
||||
import com.navi.bbps.common.model.view.NaviBbpsSessionHelper
|
||||
import com.navi.bbps.common.repository.BbpsCommonRepository
|
||||
import com.navi.bbps.common.usecase.FetchBillHandler
|
||||
import com.navi.bbps.common.usecase.GetABTestingExperimentUseCase
|
||||
import com.navi.bbps.common.usecase.NaviBbpsConfigUseCase
|
||||
@@ -86,6 +87,7 @@ constructor(
|
||||
private val litmusExperimentsUseCase: LitmusExperimentsUseCase,
|
||||
private val naviPaymentRewardEventBus: NaviPaymentRewardsEventBus,
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
private val naviBbpsCommonRepository: BbpsCommonRepository,
|
||||
) :
|
||||
PayBillViewModel(
|
||||
savedStateHandle = savedStateHandle,
|
||||
@@ -104,6 +106,7 @@ constructor(
|
||||
rewardsNudgeEntityFetchUseCase = rewardsNudgeEntityFetchUseCase,
|
||||
payBillRepository = payBillRepository,
|
||||
naviCacheRepository = naviCacheRepository,
|
||||
naviBbpsCommonRepository = naviBbpsCommonRepository,
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -66,6 +66,7 @@ import com.navi.bbps.common.NaviBbpsAnalytics
|
||||
import com.navi.bbps.common.NaviBbpsDimens
|
||||
import com.navi.bbps.common.NaviBbpsScreen
|
||||
import com.navi.bbps.common.SCROLL_OFFSET_FOR_TITLE_IN_HEADER
|
||||
import com.navi.bbps.common.model.view.NaviBbpsButtonAction
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor
|
||||
import com.navi.bbps.common.ui.BbpsBillerConsentView
|
||||
import com.navi.bbps.common.ui.BbpsCircleImage
|
||||
@@ -75,6 +76,7 @@ import com.navi.bbps.common.ui.NaviBbpsModalBottomSheetLayout
|
||||
import com.navi.bbps.common.ui.SetStatusBarColor
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isCreditCardCategory
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isUrlPathValidForSavedBills
|
||||
import com.navi.bbps.common.utils.getDisplayableAmount
|
||||
import com.navi.bbps.customHide
|
||||
import com.navi.bbps.entry.NaviBbpsActivity
|
||||
@@ -196,15 +198,6 @@ fun PayBillScreen(
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
naviBbpsActivity.errorEventHandler.bbpsErrorCtaClickEvent.collectLatest { event ->
|
||||
// In case of bill fetch error, go back to previous screen
|
||||
if (event.errorConfig.tag == PayBillViewModel.TAG_BILL_FETCH_ERROR) {
|
||||
navigator.navigateUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
payBillViewModel.navigateToOrderDetailsScreen.collectLatest { navigateToOrderDetailsScreen
|
||||
->
|
||||
@@ -277,6 +270,24 @@ fun PayBillScreen(
|
||||
confirmValueChange = { true },
|
||||
)
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
naviBbpsActivity.errorEventHandler.bbpsErrorCtaClickEvent.collectLatest { event ->
|
||||
when {
|
||||
event.errorConfig.tag == PayBillViewModel.TAG_BILL_FETCH_ERROR -> {
|
||||
navigator.navigateUp()
|
||||
}
|
||||
event.clickedButtonConfig.action is NaviBbpsButtonAction.Redirect -> {
|
||||
val apiUrl = event.clickedButtonConfig.action.url
|
||||
if (isUrlPathValidForSavedBills(urlPath = apiUrl)) {
|
||||
payBillViewModel.onSavedBillCtaClicked(apiUrl = apiUrl)
|
||||
bottomSheetState.hide()
|
||||
navigator.navigateUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (billCategoryEntity.categoryId != CATEGORY_ID_CREDIT_CARD) {
|
||||
SetStatusBarColor(activity = naviBbpsActivity, colorResId = R.color.bbps_bgAlt)
|
||||
} else {
|
||||
|
||||
@@ -87,6 +87,7 @@ import com.navi.bbps.common.SCROLL_OFFSET_FOR_TITLE_IN_HEADER
|
||||
import com.navi.bbps.common.SYMBOL_RUPEE
|
||||
import com.navi.bbps.common.model.config.NaviBbpsDefaultConfig
|
||||
import com.navi.bbps.common.model.view.LoadingState
|
||||
import com.navi.bbps.common.model.view.NaviBbpsButtonAction
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor.ctaPrimary
|
||||
import com.navi.bbps.common.ui.BbpsBillerConsentView
|
||||
@@ -102,6 +103,7 @@ import com.navi.bbps.common.utils.NaviBbpsCommonUtils
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isCategoryOfTypeAmountChipsRequired
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isCreditCardCategory
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isRechargeCategory
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.isUrlPathValidForSavedBills
|
||||
import com.navi.bbps.common.utils.getDisplayableAmount
|
||||
import com.navi.bbps.customHide
|
||||
import com.navi.bbps.entry.NaviBbpsActivity
|
||||
@@ -114,6 +116,7 @@ import com.navi.bbps.feature.customerinput.model.view.BillerDetailsEntity
|
||||
import com.navi.bbps.feature.destinations.MyBillHistoryDetailsScreenDestination
|
||||
import com.navi.bbps.feature.mybills.model.view.MyBillEntity
|
||||
import com.navi.bbps.feature.mybills.model.view.UnpaidBillDetails
|
||||
import com.navi.bbps.feature.paybill.PayBillViewModel
|
||||
import com.navi.bbps.feature.paybill.PayBillViewModelV2
|
||||
import com.navi.bbps.feature.paybill.model.network.PayBillResponse
|
||||
import com.navi.bbps.feature.paybill.model.network.PaymentAmountExactness
|
||||
@@ -380,6 +383,24 @@ fun PayBillScreenV2(
|
||||
skipHalfExpanded = true,
|
||||
)
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
naviBbpsActivity.errorEventHandler.bbpsErrorCtaClickEvent.collectLatest { event ->
|
||||
when {
|
||||
event.errorConfig.tag == PayBillViewModel.TAG_BILL_FETCH_ERROR -> {
|
||||
navigator.navigateUp()
|
||||
}
|
||||
event.clickedButtonConfig.action is NaviBbpsButtonAction.Redirect -> {
|
||||
val apiUrl = event.clickedButtonConfig.action.url
|
||||
if (isUrlPathValidForSavedBills(urlPath = apiUrl)) {
|
||||
payBillViewModelV2.onSavedBillCtaClicked(apiUrl = apiUrl)
|
||||
bottomSheetState.hide()
|
||||
navigator.navigateUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetStatusBarColor(activity = naviBbpsActivity, colorResId = R.color.bbps_text_white)
|
||||
|
||||
val onBackClicked = {
|
||||
|
||||
@@ -118,6 +118,7 @@ constructor(
|
||||
private val rewardsNudgeEntityFetchUseCase: RewardNudgeUseCase,
|
||||
private val naviBbpsSessionHelper: NaviBbpsSessionHelper,
|
||||
@NaviBbpsGsonBuilder private val gson: Gson,
|
||||
private val naviBbpsCommonRepository: BbpsCommonRepository,
|
||||
savedStateHandle: SavedStateHandle,
|
||||
) :
|
||||
NaviBbpsBaseVM(
|
||||
@@ -1082,6 +1083,13 @@ constructor(
|
||||
private suspend fun updateNavigateToNextScreenOnHelpCta(ctaData: CtaData?) {
|
||||
_navigateToNextScreenFromHelpCta.emit(ctaData)
|
||||
}
|
||||
|
||||
suspend fun onSavedBillCtaClicked(apiUrl: String) {
|
||||
naviBbpsCommonRepository.getSavedBillsDetailsOnError(
|
||||
path = apiUrl,
|
||||
metricInfo = getBbpsMetricInfo(screenName = naviBbpsVmData.screen.screenName),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
sealed class PrepaidRechargeScreenBottomSheetUIState {
|
||||
|
||||
@@ -47,6 +47,7 @@ import com.navi.bbps.common.DASH
|
||||
import com.navi.bbps.common.NAVI_HOME
|
||||
import com.navi.bbps.common.NaviBbpsAnalytics
|
||||
import com.navi.bbps.common.RCBP_CATEGORY
|
||||
import com.navi.bbps.common.model.view.NaviBbpsButtonAction
|
||||
import com.navi.bbps.common.model.view.PrepaidPlanItemLoadingState
|
||||
import com.navi.bbps.common.theme.NaviBbpsColor
|
||||
import com.navi.bbps.common.ui.KeyboardVisibilityObserver
|
||||
@@ -182,6 +183,18 @@ fun PrepaidRechargeScreen(
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
naviBbpsActivity.errorEventHandler.bbpsErrorCtaClickEvent.collectLatest { event ->
|
||||
if (event.clickedButtonConfig.action is NaviBbpsButtonAction.Redirect) {
|
||||
prepaidRechargeViewModel.onSavedBillCtaClicked(
|
||||
apiUrl = event.clickedButtonConfig.action.url
|
||||
)
|
||||
bottomSheetState.hide()
|
||||
navigator.navigateUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val onBackClick = {
|
||||
if (bottomSheetState.isVisible) {
|
||||
closeSheet()
|
||||
|
||||
@@ -173,4 +173,9 @@ interface NaviBbpsRetrofitService {
|
||||
suspend fun fetchCoinDiscount(
|
||||
@Query("product") product: String = "BBPS"
|
||||
): Response<GenericResponse<CoinDiscountDetailsResponse>>
|
||||
|
||||
@PATCH("{url}")
|
||||
suspend fun savedBills(
|
||||
@Path("url", encoded = true) url: String
|
||||
): Response<GenericResponse<Any?>>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user