NTP-853 | Sohan Reddy | Migration of RRErrorVM (#11750)
Co-authored-by: Kishan Kumar <kishan.kumar@navi.com>
This commit is contained in:
committed by
GitHub
parent
3c7d2d7281
commit
4b36b564ce
@@ -20,8 +20,8 @@ import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.navi.coin.ui.compose.screen.destinations.CoinErrorScreenDestination
|
||||
import com.navi.common.constants.SCREEN_NAME
|
||||
import com.navi.rr.common.error.ErrorHandler
|
||||
import com.navi.rr.common.vm.RRBaseVM
|
||||
import com.navi.rr.common.vm.RRErrorVM
|
||||
import com.navi.rr.utils.composeutils.InitErrorBottomSheet
|
||||
import com.navi.rr.utils.constants.Constants
|
||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||
@@ -43,12 +43,12 @@ fun Init(
|
||||
viewModel.eventUtils.setCurrentScreen(activity, screenName = viewModel.screenName)
|
||||
}
|
||||
|
||||
val showBottomSheet by RRErrorVM.showErrorBottomSheet.collectAsStateWithLifecycle()
|
||||
val showBottomSheet by ErrorHandler.showErrorBottomSheet.collectAsStateWithLifecycle()
|
||||
val showErrorScreen by
|
||||
RRErrorVM.showErrorScreen.collectAsStateWithLifecycle(
|
||||
ErrorHandler.showErrorScreen.collectAsStateWithLifecycle(
|
||||
minActiveState = Lifecycle.State.RESUMED
|
||||
)
|
||||
val error by RRErrorVM.error.collectAsStateWithLifecycle()
|
||||
val error by ErrorHandler.error.collectAsStateWithLifecycle()
|
||||
|
||||
if (showErrorScreen && showBottomSheet.not()) {
|
||||
navigator?.navigate(
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.rr.common.error
|
||||
|
||||
import com.navi.common.network.ApiConstants
|
||||
import com.navi.rr.R
|
||||
import com.navi.rr.common.models.RRErrorData
|
||||
import com.navi.rr.utils.constants.Constants
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
||||
interface ErrorHandler {
|
||||
val tryAgainDisable: MutableStateFlow<Boolean>
|
||||
|
||||
fun showError(error: RRErrorData)
|
||||
|
||||
fun hideError()
|
||||
|
||||
fun setCachePresent()
|
||||
|
||||
fun getErrorImageAsPerStatusCode(statusCode: Int): Int
|
||||
|
||||
fun getErrorMessageAsPerStatusCode(statusCode: Int, errorMessage: (String, String) -> Unit)
|
||||
|
||||
fun getErrorMessageAsPerStatusCodeForBottomSheet(
|
||||
statusCode: Int,
|
||||
errorMessage: (String, String) -> Unit
|
||||
)
|
||||
|
||||
companion object {
|
||||
val showErrorBottomSheet: MutableStateFlow<Boolean> = MutableStateFlow(false)
|
||||
val showErrorScreen: MutableStateFlow<Boolean> = MutableStateFlow(false)
|
||||
val error: MutableStateFlow<RRErrorData> = MutableStateFlow(RRErrorData())
|
||||
}
|
||||
}
|
||||
|
||||
class ErrorHandlerImpl @Inject constructor() : ErrorHandler {
|
||||
|
||||
override val tryAgainDisable = MutableStateFlow(false)
|
||||
private val _isCachePresent = MutableStateFlow(false)
|
||||
|
||||
override fun showError(error: RRErrorData) {
|
||||
ErrorHandler.error.update { error }
|
||||
ErrorHandler.showErrorBottomSheet.update { _isCachePresent.value }
|
||||
ErrorHandler.showErrorScreen.update { _isCachePresent.value.not() }
|
||||
}
|
||||
|
||||
override fun hideError() {
|
||||
ErrorHandler.showErrorScreen.update { false }
|
||||
ErrorHandler.showErrorBottomSheet.update { false }
|
||||
}
|
||||
|
||||
override fun setCachePresent() {
|
||||
_isCachePresent.update { true }
|
||||
}
|
||||
|
||||
override fun getErrorImageAsPerStatusCode(statusCode: Int): Int {
|
||||
return when (statusCode) {
|
||||
ApiConstants.NO_INTERNET -> R.drawable.no_internet_connection
|
||||
else -> R.drawable.something_went_wrong_triangle
|
||||
}
|
||||
}
|
||||
|
||||
override fun getErrorMessageAsPerStatusCode(
|
||||
statusCode: Int,
|
||||
errorMessage: (String, String) -> Unit
|
||||
) {
|
||||
when (statusCode) {
|
||||
ApiConstants.NO_INTERNET ->
|
||||
errorMessage.invoke(Constants.NO_INTERNET, Constants.PLEASE_CHECK_YOUR_INTERNET)
|
||||
else ->
|
||||
errorMessage.invoke(
|
||||
Constants.SOMETHING_WENT_WRONG_WITH_EXCLAMATION,
|
||||
Constants.WE_ARE_FACING_TECHNICAL_ISSUE
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getErrorMessageAsPerStatusCodeForBottomSheet(
|
||||
statusCode: Int,
|
||||
errorMessage: (String, String) -> Unit
|
||||
) {
|
||||
when (statusCode) {
|
||||
ApiConstants.NO_INTERNET ->
|
||||
errorMessage.invoke(
|
||||
Constants.NO_INTERNET_CONNECTION,
|
||||
Constants.NO_INTERNET_CONNECTION_SUBTITLE
|
||||
)
|
||||
else ->
|
||||
errorMessage.invoke(
|
||||
Constants.SOMETHING_WENT_WRONG_WITH_EXCLAMATION,
|
||||
Constants.WE_ARE_FACING_TECHNICAL_ISSUE
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,7 @@ import com.navi.design.font.FontWeightEnum
|
||||
import com.navi.design.theme.getFontWeight
|
||||
import com.navi.design.theme.ttComposeFontFamily
|
||||
import com.navi.rr.R
|
||||
import com.navi.rr.common.error.ErrorHandler
|
||||
import com.navi.rr.common.models.RRErrorData
|
||||
import com.navi.rr.common.vm.RRErrorVM
|
||||
import com.navi.rr.milestones.ui.themes.defaultPurple
|
||||
@@ -70,7 +71,7 @@ fun RRErrorScreen(
|
||||
navigator: DestinationsNavigator? = null
|
||||
) {
|
||||
|
||||
val error = RRErrorVM.error.collectAsStateWithLifecycle()
|
||||
val error = ErrorHandler.error.collectAsStateWithLifecycle()
|
||||
|
||||
var title by remember { mutableStateOf(Constants.SOMETHING_WENT_WRONG_WITH_EXCLAMATION) }
|
||||
var subtitle by remember { mutableStateOf(Constants.WE_ARE_FACING_TECHNICAL_ISSUE) }
|
||||
|
||||
@@ -10,7 +10,10 @@ package com.navi.rr.common.vm
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navi.common.constants.SCREEN_NAME
|
||||
import com.navi.common.forge.model.WidgetModelDefinition
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.rr.common.bottomsheet.RRBottomSheetStateHolder
|
||||
import com.navi.rr.common.error.ErrorHandler
|
||||
import com.navi.rr.common.error.ErrorHandlerImpl
|
||||
import com.navi.rr.utils.NaviRRAnalytics
|
||||
import com.navi.rr.utils.RRBaseCoroutineExceptionHandler
|
||||
import com.navi.rr.utils.facade.FireabaseEventFacade
|
||||
@@ -30,7 +33,7 @@ import kotlinx.coroutines.flow.asSharedFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
||||
abstract class RRBaseVM : RRErrorVM() {
|
||||
abstract class RRBaseVM : BaseVM(), ErrorHandler by ErrorHandlerImpl() {
|
||||
|
||||
private var systemBackCtaAction: UiTronActionData? = null
|
||||
|
||||
|
||||
@@ -7,82 +7,7 @@
|
||||
|
||||
package com.navi.rr.common.vm
|
||||
|
||||
import com.navi.common.network.ApiConstants
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.rr.R
|
||||
import com.navi.rr.common.models.RRErrorData
|
||||
import com.navi.rr.utils.constants.Constants
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
||||
@HiltViewModel
|
||||
open class RRErrorVM @Inject constructor() : BaseVM() {
|
||||
companion object {
|
||||
private val _showErrorBottomSheet = MutableStateFlow(false)
|
||||
val showErrorBottomSheet = _showErrorBottomSheet.asStateFlow()
|
||||
|
||||
private val _showErrorScreen = MutableStateFlow(false)
|
||||
val showErrorScreen = _showErrorScreen.asStateFlow()
|
||||
|
||||
private val _error = MutableStateFlow(RRErrorData())
|
||||
val error = _error.asStateFlow()
|
||||
}
|
||||
|
||||
private val _isCachePresent = MutableStateFlow(false)
|
||||
val tryAgainDisable = MutableStateFlow(false)
|
||||
|
||||
fun showError(error: RRErrorData) {
|
||||
_error.update { error }
|
||||
_showErrorBottomSheet.update { _isCachePresent.value }
|
||||
_showErrorScreen.update { _isCachePresent.value.not() }
|
||||
}
|
||||
|
||||
fun hideError() {
|
||||
_showErrorScreen.update { false }
|
||||
_showErrorBottomSheet.update { false }
|
||||
}
|
||||
|
||||
fun setCachePresent() {
|
||||
_isCachePresent.update { true }
|
||||
}
|
||||
|
||||
fun getErrorImageAsPerStatusCode(statusCode: Int): Int {
|
||||
return when (statusCode) {
|
||||
ApiConstants.NO_INTERNET -> R.drawable.no_internet_connection
|
||||
else -> R.drawable.something_went_wrong_triangle
|
||||
}
|
||||
}
|
||||
|
||||
fun getErrorMessageAsPerStatusCode(statusCode: Int, errorMessage: (String, String) -> Unit) {
|
||||
when (statusCode) {
|
||||
ApiConstants.NO_INTERNET ->
|
||||
errorMessage.invoke(Constants.NO_INTERNET, Constants.PLEASE_CHECK_YOUR_INTERNET)
|
||||
else ->
|
||||
errorMessage.invoke(
|
||||
Constants.SOMETHING_WENT_WRONG_WITH_EXCLAMATION,
|
||||
Constants.WE_ARE_FACING_TECHNICAL_ISSUE
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun getErrorMessageAsPerStatusCodeForBottomSheet(
|
||||
statusCode: Int,
|
||||
errorMessage: (String, String) -> Unit
|
||||
) {
|
||||
when (statusCode) {
|
||||
ApiConstants.NO_INTERNET ->
|
||||
errorMessage.invoke(
|
||||
Constants.NO_INTERNET_CONNECTION,
|
||||
Constants.NO_INTERNET_CONNECTION_SUBTITLE
|
||||
)
|
||||
else ->
|
||||
errorMessage.invoke(
|
||||
Constants.SOMETHING_WENT_WRONG_WITH_EXCLAMATION,
|
||||
Constants.WE_ARE_FACING_TECHNICAL_ISSUE
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@HiltViewModel class RRErrorVM @Inject constructor() : RRBaseVM()
|
||||
|
||||
@@ -46,9 +46,9 @@ import com.navi.design.font.FontWeightEnum
|
||||
import com.navi.design.theme.getFontWeight
|
||||
import com.navi.design.theme.ttComposeFontFamily
|
||||
import com.navi.naviwidgets.R as NaviWidgetsR
|
||||
import com.navi.rr.common.error.ErrorHandler
|
||||
import com.navi.rr.common.theme.color.NaviRRColor
|
||||
import com.navi.rr.common.vm.RRBaseVM
|
||||
import com.navi.rr.common.vm.RRErrorVM
|
||||
import com.navi.rr.destinations.RRErrorScreenDestination
|
||||
import com.navi.rr.milestones.ui.themes.defaultPurple
|
||||
import com.navi.rr.utils.NaviRRAnalytics
|
||||
@@ -74,9 +74,9 @@ fun Init(
|
||||
viewModel.eventUtils.setCurrentScreen(activity, screenName = viewModel.screenName)
|
||||
}
|
||||
|
||||
val showBottomSheet by RRErrorVM.showErrorBottomSheet.collectAsStateWithLifecycle()
|
||||
val showErrorScreen by RRErrorVM.showErrorScreen.collectAsStateWithLifecycle()
|
||||
val error by RRErrorVM.error.collectAsStateWithLifecycle()
|
||||
val showBottomSheet by ErrorHandler.showErrorBottomSheet.collectAsStateWithLifecycle()
|
||||
val showErrorScreen by ErrorHandler.showErrorScreen.collectAsStateWithLifecycle()
|
||||
val error by ErrorHandler.error.collectAsStateWithLifecycle()
|
||||
|
||||
if (showErrorScreen) {
|
||||
navigator?.navigate(RRErrorScreenDestination(bundle = bundleOf(SCREEN_NAME to screenName)))
|
||||
|
||||
Reference in New Issue
Block a user