NTP-58776 | Unified Error Experience | Default value fix (#16157)

This commit is contained in:
Kshitij Pramod Ghongadi
2025-05-15 12:41:29 +05:30
committed by GitHub
parent b19fa913d6
commit feac0b54b5
3 changed files with 67 additions and 33 deletions

View File

@@ -10,7 +10,12 @@ import {
ErrorMetaData,
GenericActionPayload,
} from "../../../../../common/actions/GenericAction";
import { RETRY } from "../../../../../common/constants";
import {
RETRY,
STATUS_CODE_NO_INTERNET,
AXIOS_CODE_NETWORK,
AXIOS_CODE_CANCELED,
} from "../../../../../common/constants";
import {
CtaData,
StaticHeaderProperties,
@@ -36,7 +41,16 @@ const QuoteOfferErrorScreen = ({
handleActions && handleActions(errorMetaData);
};
const isNetworkError =
(errorMetaData?.errorStatusCode &&
[20, 21, 23, 24].includes(errorMetaData.errorStatusCode)) ||
errorMetaData?.errorAxiosCode === AXIOS_CODE_NETWORK ||
errorMetaData?.errorAxiosCode === AXIOS_CODE_CANCELED;
useEffect(() => {
if (!isNetworkError) {
return;
}
if (
lastConnectionStatus.current === false &&
netInfo.isConnected === true
@@ -44,7 +58,7 @@ const QuoteOfferErrorScreen = ({
onPress();
}
lastConnectionStatus.current = netInfo.isConnected;
}, [netInfo.isConnected]);
}, [netInfo.isConnected, isNetworkError]);
const errorResponse = getErrorResponseFromStatusCode(
errorMetaData?.errorStatusCode,

View File

@@ -21,6 +21,7 @@ import androidx.lifecycle.repeatOnLifecycle
import com.navi.base.utils.ConnectivityObserver
import com.navi.base.utils.orFalse
import com.navi.common.R as CommonR
import com.navi.common.network.ApiConstants
import com.navi.common.network.models.ErrorMessage
import com.navi.common.network.models.GenericErrorResponse
import com.navi.common.network.models.toNaviErrorPageWidget
@@ -46,8 +47,7 @@ abstract class GiBaseFragment : BaseFragment(), ActionHandler.ActionOwner {
protected val requestCallbackVM by viewModels<RequestCallbackVM>()
@Inject lateinit var connectivityObserver: ConnectivityObserver
protected val connectivityStateFlow by lazy { connectivityObserver.observe() }
private var previousState: ConnectivityObserver.Status? =
ConnectivityObserver.Status.Unavailable
private var previousState: ConnectivityObserver.Status? = ConnectivityObserver.Status.Available
abstract fun getViewModel(): GiBaseVM?
@@ -126,26 +126,36 @@ abstract class GiBaseFragment : BaseFragment(), ActionHandler.ActionOwner {
showCloseButton: Boolean = true,
onCloseButtonClick: () -> Unit,
) {
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
connectivityStateFlow.collect { state ->
val wasDisconnected =
previousState in
listOf(
ConnectivityObserver.Status.Lost,
ConnectivityObserver.Status.Unavailable,
ConnectivityObserver.Status.Losing,
)
val isNetworkError =
errorMessage?.statusCode in
listOf(
ApiConstants.NO_INTERNET,
ApiConstants.API_CODE_CONNECT_EXCEPTION,
ApiConstants.API_CODE_UNKNOWN_HOST,
)
if (
wasDisconnected &&
state == ConnectivityObserver.Status.Available &&
connectivityObserver.isInternetConnected()
) {
onRetryClick(view.tag)
if (isNetworkError) {
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
connectivityStateFlow.collect { state ->
val wasDisconnected =
previousState in
listOf(
ConnectivityObserver.Status.Lost,
ConnectivityObserver.Status.Unavailable,
ConnectivityObserver.Status.Losing,
)
if (
wasDisconnected &&
state == ConnectivityObserver.Status.Available &&
connectivityObserver.isInternetConnected()
) {
onRetryClick(view.tag)
}
previousState = state
}
previousState = state
}
}
}

View File

@@ -20,6 +20,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.viewinterop.AndroidView
import com.navi.base.utils.ConnectivityObserver
import com.navi.common.network.ApiConstants
import com.navi.common.network.models.ErrorMessage
import com.navi.common.network.models.toNaviErrorPageWidget
import com.navi.naviwidgets.views.NaviErrorPageView
@@ -34,22 +35,30 @@ fun InitErrorView(
onCloseButtonClick: () -> Unit,
connectivityObserver: Flow<ConnectivityObserver.Status>? = null,
) {
connectivityObserver?.let {
val isNetworkError =
errorMessage?.statusCode in
listOf(
ApiConstants.NO_INTERNET,
ApiConstants.API_CODE_CONNECT_EXCEPTION,
ApiConstants.API_CODE_UNKNOWN_HOST,
)
if (isNetworkError && connectivityObserver != null) {
val connectivityState by
connectivityObserver.collectAsState(initial = ConnectivityObserver.Status.Unavailable)
var previousState by remember { mutableStateOf<ConnectivityObserver.Status?>(null) }
LaunchedEffect(connectivityState) {
val wasDisconnected =
previousState in
setOf(
ConnectivityObserver.Status.Lost,
ConnectivityObserver.Status.Unavailable,
ConnectivityObserver.Status.Losing,
)
if (wasDisconnected && connectivityState == ConnectivityObserver.Status.Available) {
if (
previousState != null &&
previousState in
setOf(
ConnectivityObserver.Status.Lost,
ConnectivityObserver.Status.Unavailable,
ConnectivityObserver.Status.Losing,
) &&
connectivityState == ConnectivityObserver.Status.Available
) {
onRetryClick(view?.tag)
}
@@ -75,6 +84,7 @@ fun InitErrorView(
},
)
}
view?.let { HandleError(it) }
}