NTP-15268 | rcc mandate log check (#13985)

This commit is contained in:
Akshita Singh
2024-12-05 21:33:29 +05:30
committed by GitHub
parent 1e90bebbe3
commit fdc02786bd
4 changed files with 72 additions and 49 deletions

View File

@@ -734,7 +734,7 @@ fun getAnnotatedDescriptionForSuccessBottomSheet(description: String): Annotated
SpanStyle(
fontSize = 14.sp,
fontFamily = naviFontFamily,
color = NaviPayColor.ctaPrimary,
color = ctaPrimary,
textDecoration = TextDecoration.Underline,
fontWeight = getFontWeight(FontWeightEnum.NAVI_HEADLINE_REGULAR)
),

View File

@@ -74,7 +74,6 @@ import com.navi.pay.common.ui.RenderBottomSheetMenuOptionItem
import com.navi.pay.common.ui.SecondaryRoundedButton
import com.navi.pay.common.ui.ShadowStrip
import com.navi.pay.common.ui.SuccessBottomSheetContent
import com.navi.pay.common.ui.ThemeRoundedButton
import com.navi.pay.common.utils.NaviPayNotificationHandler
import com.navi.pay.common.utils.SnackBarPredefinedConfig
import com.navi.pay.common.utils.launchOnboardingSDK
@@ -88,6 +87,7 @@ import com.navi.pay.management.mandate.model.view.MandateCategory
import com.navi.pay.management.mandate.model.view.MandateEntity
import com.navi.pay.management.mandate.model.view.MandateOnboardingAction
import com.navi.pay.management.mandate.model.view.MandateScreenBackNavigation
import com.navi.pay.management.mandate.viewmodel.CtaLoaderType
import com.navi.pay.management.mandate.viewmodel.MandateDetailOfPendingCategoryBottomSheetState
import com.navi.pay.management.mandate.viewmodel.MandateDetailOfPendingCategoryViewModel
import com.navi.pay.management.mandate.viewmodel.MandateDetailUIStateOfPendingCategory
@@ -131,8 +131,8 @@ fun MandateDetailScreenOfPendingCategory(
mandateDetailOfPendingCategoryViewModel.showSnackBar.collectAsStateWithLifecycle()
val bottomSheetStateHolder by
mandateDetailOfPendingCategoryViewModel.bottomSheetStateHolder.collectAsStateWithLifecycle()
val showLoader by
mandateDetailOfPendingCategoryViewModel.showLoader.collectAsStateWithLifecycle()
val ctaLoaderType by
mandateDetailOfPendingCategoryViewModel.ctaLoaderType.collectAsStateWithLifecycle()
val selectedBankAccount by
mandateDetailOfPendingCategoryViewModel.selectedBankAccount.collectAsStateWithLifecycle()
@@ -143,6 +143,20 @@ fun MandateDetailScreenOfPendingCategory(
)
val scope = rememberCoroutineScope()
val onBackClick = {
if (bottomSheetState.isVisible && bottomSheetStateHolder.showBottomSheet) {
scope.launch {
mandateDetailOfPendingCategoryViewModel.updateBottomSheetUIState(
showBottomSheet = false
)
}
} else {
resultNavigator.navigateBack(
result = mandateDetailOfPendingCategoryViewModel.mandateScreenBackNavigationState
)
}
}
val onDismissBottomSheet: () -> Unit = {
scope
.launch { bottomSheetState.hide() }
@@ -151,6 +165,8 @@ fun MandateDetailScreenOfPendingCategory(
mandateDetailOfPendingCategoryViewModel.updateBottomSheetUIState(
showBottomSheet = false
)
} else {
onBackClick()
}
}
}
@@ -207,19 +223,7 @@ fun MandateDetailScreenOfPendingCategory(
}
}
BackHandler {
if (bottomSheetState.isVisible) {
scope.launch {
mandateDetailOfPendingCategoryViewModel.updateBottomSheetUIState(
showBottomSheet = false
)
}
} else {
resultNavigator.navigateBack(
result = mandateDetailOfPendingCategoryViewModel.mandateScreenBackNavigationState
)
}
}
BackHandler { onBackClick() }
val onApproveButtonClicked = {
naviPayAnalytics.onManageDetailsApproveClick(mandateEntity = mandateEntity)
@@ -296,7 +300,7 @@ fun MandateDetailScreenOfPendingCategory(
mandateDetailOfPendingCategoryViewModel,
bottomSheetUIState = bottomSheetStateHolder.bottomSheetUIState,
naviPayAnalytics = naviPayAnalytics,
showLoader = showLoader,
ctaLoaderType = ctaLoaderType,
onDeclineMandateActionClicked = onDeclineMandateActionClicked,
mandateEntity = mandateDetailOfPendingCategoryViewModel.mandateEntity,
onAddAccountClicked = onAddAccountClicked,
@@ -348,7 +352,8 @@ fun MandateDetailScreenOfPendingCategory(
)
}
},
snackBarState = snackBarState
snackBarState = snackBarState,
ctaLoaderType = ctaLoaderType
)
}
is MandateDetailUIStateOfPendingCategory.Success -> {
@@ -378,7 +383,8 @@ fun RenderMandateDetailScreenOfPendingCategory(
mandateDetailOfPendingCategoryViewModel: MandateDetailOfPendingCategoryViewModel,
onApproveButtonClicked: () -> Unit,
onDeclineButtonClicked: () -> Unit,
snackBarState: Boolean
snackBarState: Boolean,
ctaLoaderType: CtaLoaderType
) {
val coroutineScope = rememberCoroutineScope()
@@ -539,7 +545,8 @@ fun RenderMandateDetailScreenOfPendingCategory(
mandateDetailOfPendingCategoryViewModel,
onDeclineButtonClicked = onDeclineButtonClicked,
onApproveButtonClicked = onApproveButtonClicked,
mandateEntity = mandateEntity
mandateEntity = mandateEntity,
ctaLoaderType = ctaLoaderType
)
}
},
@@ -568,7 +575,8 @@ fun AccountSelectionFooter(
mandateDetailOfPendingCategoryViewModel: MandateDetailOfPendingCategoryViewModel,
onDeclineButtonClicked: () -> Unit,
onApproveButtonClicked: () -> Unit,
mandateEntity: MandateEntity?
mandateEntity: MandateEntity?,
ctaLoaderType: CtaLoaderType
) {
val bankAccountState by
@@ -617,7 +625,7 @@ fun AccountSelectionFooter(
paddingValues = PaddingValues(16.dp),
enabled = positiveButtonEnabled,
lottieFileName = NAVI_PAY_PRIMARY_CTA_LOADER_LOTTIE,
showLoader = false
showLoader = ctaLoaderType == CtaLoaderType.Approve
) {
onApproveButtonClicked()
}
@@ -635,10 +643,14 @@ fun AccountSelectionFooter(
Spacer(modifier = Modifier.width(16.dp))
ThemeRoundedButton(
text = stringResource(id = R.string.approve),
LoaderRoundedButton(
modifier = Modifier.weight(1f),
enabled = positiveButtonEnabled
text = stringResource(id = R.string.approve),
paddingValues = PaddingValues(vertical = 14.dp, horizontal = 10.dp),
enabled = positiveButtonEnabled,
lottieFileName = NAVI_PAY_PRIMARY_CTA_LOADER_LOTTIE,
showLoader = ctaLoaderType == CtaLoaderType.Approve,
debounceTime = 800L
) {
onApproveButtonClicked()
}
@@ -683,7 +695,7 @@ private fun RenderBottomSheetOfMandateDetailOfPendingCategory(
mandateDetailOfPendingCategoryViewModel: MandateDetailOfPendingCategoryViewModel,
bottomSheetUIState: MandateDetailOfPendingCategoryBottomSheetState,
naviPayAnalytics: NaviPayAnalytics.NaviPayManageAutoPay,
showLoader: Boolean,
ctaLoaderType: CtaLoaderType,
onDeclineMandateActionClicked: () -> Unit,
mandateEntity: MandateEntity?,
onPayButtonClicked: () -> Unit,
@@ -740,7 +752,7 @@ private fun RenderBottomSheetOfMandateDetailOfPendingCategory(
)
}
},
showLoader = showLoader
showLoader = ctaLoaderType == CtaLoaderType.Decline
)
is MandateDetailOfPendingCategoryBottomSheetState.Error -> {

View File

@@ -46,6 +46,7 @@ import com.navi.pay.common.ui.BottomSheetTopGradientBox
import com.navi.pay.common.ui.LoaderRoundedButton
import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState
import com.navi.pay.management.mandate.model.view.MandateEntity
import com.navi.pay.management.mandate.viewmodel.CtaLoaderType
import com.navi.pay.management.mandate.viewmodel.MandateDetailOfPendingCategoryViewModel
import com.navi.pay.utils.NAVI_PAY_PRIMARY_CTA_LOADER_LOTTIE
import com.navi.pay.utils.getDisplayableAmount
@@ -65,7 +66,7 @@ fun PendingMandateAccountSelectionBottomSheetView(
val selectedBankAccount by
mandateDetailOfPendingCategoryViewModel.selectedBankAccount.collectAsStateWithLifecycle()
val showPayButtonLoader by
mandateDetailOfPendingCategoryViewModel.showLoader.collectAsStateWithLifecycle()
mandateDetailOfPendingCategoryViewModel.ctaLoaderType.collectAsStateWithLifecycle()
val sheetHeight = LocalConfiguration.current.screenHeightDp.dp * 0.85f
Column(
@@ -130,7 +131,7 @@ fun PendingMandateAccountSelectionBottomSheetView(
paddingValues = PaddingValues(16.dp),
enabled = primaryButtonEnabled,
lottieFileName = NAVI_PAY_PRIMARY_CTA_LOADER_LOTTIE,
showLoader = showPayButtonLoader
showLoader = showPayButtonLoader == CtaLoaderType.Approve
) {
onPayButtonClicked()
}

View File

@@ -11,6 +11,7 @@ import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.navi.base.cache.datastore.DataStoreHelper
import com.navi.base.utils.DateUtils
import com.navi.base.utils.EMPTY
import com.navi.base.utils.ResourceProvider
import com.navi.common.network.models.RepoResult
import com.navi.common.network.models.isSuccess
@@ -146,8 +147,8 @@ constructor(
private val _showSnackBar = MutableStateFlow(false)
val showSnackBar = _showSnackBar.asStateFlow()
private val _showLoader = MutableStateFlow(false)
val showLoader = _showLoader.asStateFlow()
private val _ctaLoaderType = MutableStateFlow(CtaLoaderType.None)
val ctaLoaderType = _ctaLoaderType.asStateFlow()
private val _navigateToNextScreen =
MutableSharedFlow<NavigateToNextScreenFromMandateDetailOfPendingCategory>()
@@ -289,8 +290,8 @@ constructor(
}
}
private fun updateShowLoaderState(showLoader: Boolean) {
_showLoader.update { showLoader }
private fun updateCtaLoaderTypeState(loaderType: CtaLoaderType) {
_ctaLoaderType.update { loaderType }
}
private fun initMandateEntity() {
@@ -375,19 +376,21 @@ constructor(
featureTags = validateVpaResponse.featureTags,
screenName = screenName
)
val isAccountEligible =
accountEligibilityMerchantHelper.getAccountEligibility(
eligibility = accountTypeEligibilityMap[linkedAccountEntity.accountType],
amount = mandateEntity?.amount?.toDouble() ?: 0.0
)
return EligibilityState(
isAccountEligible =
accountEligibilityMerchantHelper.getAccountEligibility(
eligibility =
accountTypeEligibilityMap[linkedAccountEntity.accountType],
amount = mandateEntity?.amount?.toDouble() ?: 0.0
),
isAccountEligible = isAccountEligible,
inEligibilityReason =
accountEligibilityMerchantHelper.getIneligibilityReason(
eligibility =
accountTypeEligibilityMap[linkedAccountEntity.accountType],
accountType = linkedAccountEntity.accountType
)
if (!isAccountEligible)
accountEligibilityMerchantHelper.getIneligibilityReason(
eligibility =
accountTypeEligibilityMap[linkedAccountEntity.accountType],
accountType = linkedAccountEntity.accountType
)
else EMPTY
)
}
} else { // For approve mandate, only payer VPA account is eligible
@@ -511,7 +514,7 @@ constructor(
return@launch
}
updateShowLoaderState(true)
updateCtaLoaderTypeState(CtaLoaderType.Approve)
updateBottomSheetUIState(showBottomSheet = false, allowStateChange = false)
if (isPendingMandateOfTypeCreate) {
@@ -519,7 +522,7 @@ constructor(
} else {
approveMandate()
}
updateShowLoaderState(false)
updateCtaLoaderTypeState(CtaLoaderType.None)
}
}
@@ -900,7 +903,7 @@ constructor(
return@launch
}
updateShowLoaderState(true)
updateCtaLoaderTypeState(CtaLoaderType.Decline)
val declineMandateRequest =
ReviewMandateRequest(
@@ -941,6 +944,7 @@ constructor(
when (declineMandateData.state) {
MandateResponseState.SUCCESS.name -> {
naviPayAnalytics.onMandateDeclineSuccess(mandateEntity)
updateBottomSheetUIState(showBottomSheet = false)
updateNavigateToNextScreen(
navigateToNextScreen =
NavigateToNextScreenFromMandateDetailOfPendingCategory.MandateScreen(
@@ -970,7 +974,7 @@ constructor(
)
}
}
updateShowLoaderState(false)
updateCtaLoaderTypeState(CtaLoaderType.None)
}
}
@@ -1122,3 +1126,9 @@ sealed class NavigateToNextScreenFromMandateDetailOfPendingCategory {
data class MandateActiveOrCompletedDetailScreen(val mandateEntity: MandateEntity?) :
NavigateToNextScreenFromMandateDetailOfPendingCategory()
}
enum class CtaLoaderType {
Approve,
Decline,
None
}