NTP-15268 | rcc mandate log check (#13985)
This commit is contained in:
@@ -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)
|
||||
),
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user