diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 6bc485b82d9e..157c17e5ed38 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -17,6 +17,7 @@ - [*] Shipping Labels: Fix UI issues on edit address screen [https://github.com/woocommerce/woocommerce-android/pull/14476] - [Internal] Updated UserAgent of API requests to use `http.agent` System Property to fix performance issues related to WebView usage on app launch [https://github.com/woocommerce/woocommerce-android/pull/14431] - [*] Shipping Labels: Improved handling of address validation errors [https://github.com/woocommerce/woocommerce-android/pull/14468] +- [*] Shipping Labels: Improved the error message for empty shipping rates list [https://github.com/woocommerce/woocommerce-android/pull/14433] 23.0 ----- diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt index 9f08c22f9d11..dcd17f458d4e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt @@ -62,6 +62,7 @@ import com.woocommerce.android.ui.orders.wooshippinglabels.purchased.ObserveShip import com.woocommerce.android.ui.orders.wooshippinglabels.purchased.printing.FetchShippingLabelFile import com.woocommerce.android.ui.orders.wooshippinglabels.rates.datasource.WooShippingRateModel import com.woocommerce.android.ui.orders.wooshippinglabels.rates.domain.GetShippingRates +import com.woocommerce.android.ui.orders.wooshippinglabels.rates.domain.NoAvailableRatesException import com.woocommerce.android.ui.orders.wooshippinglabels.rates.ui.CarrierUI import com.woocommerce.android.ui.orders.wooshippinglabels.rates.ui.ShippingRateOption import com.woocommerce.android.ui.orders.wooshippinglabels.rates.ui.ShippingRateUI @@ -670,7 +671,13 @@ class WooShippingLabelCreationViewModel @Inject constructor( trackShippingRatesLoading(isSuccess = true) }, onFailure = { exception -> - updateState(ShippingRatesState.Error) + val errorMessage = if (exception is NoAvailableRatesException) { + exception.messageResId + } else { + R.string.woo_shipping_labels_package_creation_shipping_rates_loading_error + } + + updateState(ShippingRatesState.Error(errorMessage)) trackShippingRatesLoading(isSuccess = false, error = exception.message) } ) @@ -1269,7 +1276,7 @@ class WooShippingLabelCreationViewModel @Inject constructor( val missingDescription: Int ) : ShippingRatesState() - data object Error : ShippingRatesState() + data class Error(@StringRes val message: Int) : ShippingRatesState() data class Loading( val selectedRatesSortOrder: ShippingSortOption diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/ErrorMessageWithButton.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/ErrorMessageWithButton.kt index 081ecb5000bd..a8e8552d41a1 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/ErrorMessageWithButton.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/ErrorMessageWithButton.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.MaterialTheme import androidx.compose.material.Text @@ -30,7 +31,8 @@ fun ErrorMessageWithButton( Column( modifier = modifier .fillMaxSize() - .background(MaterialTheme.colors.surface), + .background(MaterialTheme.colors.surface) + .padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(24.dp, Alignment.CenterVertically) ) { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRates.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRates.kt index 761223e71f79..04218aecbd8c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRates.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRates.kt @@ -1,5 +1,7 @@ package com.woocommerce.android.ui.orders.wooshippinglabels.rates.domain +import androidx.annotation.StringRes +import com.woocommerce.android.R import com.woocommerce.android.model.Address import com.woocommerce.android.ui.orders.shippinglabels.creation.ShippingLabelHazmatCategory import com.woocommerce.android.ui.orders.wooshippinglabels.customs.CustomsData @@ -36,7 +38,13 @@ class GetShippingRates @Inject constructor( ).fold( onSuccess = { ratesResponse -> if (ratesResponse.isEmpty()) { - Result.failure(Exception("no_rates_available")) + val message = if (hazmatSelection == null) { + R.string.woo_shipping_labels_package_creation_shipping_rates_empty + } else { + R.string.woo_shipping_labels_package_creation_shipping_rates_empty_with_hazmat + } + + Result.failure(NoAvailableRatesException(message)) } else { try { val mappedRates = shippingMapper(ratesResponse, currencyCode) @@ -51,3 +59,5 @@ class GetShippingRates @Inject constructor( } ) } + +class NoAvailableRatesException(@StringRes val messageResId: Int) : Exception("No available rates") diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/ui/ShippingRatesSection.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/ui/ShippingRatesSection.kt index 016a0f0713e2..75e632265311 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/ui/ShippingRatesSection.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/ui/ShippingRatesSection.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.sizeIn import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import com.woocommerce.android.R import com.woocommerce.android.ui.orders.wooshippinglabels.WooShippingLabelCreationViewModel import com.woocommerce.android.ui.orders.wooshippinglabels.packages.components.ErrorMessageWithButton @@ -32,8 +31,8 @@ internal fun ShippingRatesSection( ) } - WooShippingLabelCreationViewModel.ShippingRatesState.Error -> ErrorMessageWithButton( - message = R.string.woo_shipping_labels_package_creation_shipping_rates_loading_error, + is WooShippingLabelCreationViewModel.ShippingRatesState.Error -> ErrorMessageWithButton( + message = shippingRatesState.message, modifier = Modifier.sizeIn(minHeight = 300.dp), onRetryClick = { onRefreshShippingRates() } ) diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 376727affb57..0f14870e922b 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4650,6 +4650,8 @@ We are unable to load carrier packages. We are unable to load saved packages. We are unable to load shipping rates. + We couldn\'t find a shipping service for the combination of the selected package and the total shipment weight. Please adjust your input and try again. + We couldn\'t find a shipping service for the combination of the selected HAZMAT category, the selected package and the total shipment weight. Please adjust your input and try again. Star this item Unstar this item Add a destination address to get shipping rates diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRatesTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRatesTest.kt index 1b912450d0a2..ea731d9052c4 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRatesTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/rates/domain/GetShippingRatesTest.kt @@ -130,5 +130,6 @@ class GetShippingRatesTest : BaseUnitTest() { ) assertTrue(result.isFailure) + assertTrue(result.exceptionOrNull() is NoAvailableRatesException) } }