From e79b542bb5b88cd647c028690cec919db2a2a3f9 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 15:45:21 -0300 Subject: [PATCH 01/13] Split custom package template creation from a simple package selection --- .../WooShippingLabelPackageCreationViewModel.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 158ae224dab..c6ba35e8a12 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -106,12 +106,15 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( fun onAddCustomPackageClick(savePackageAsTemplate: Boolean) { val customPackage = _viewState.value.customPackageCreationData - selectedSite.getOrNull() - ?.takeIf { savePackageAsTemplate } - ?.let { customPackage.submitToStore(it) } - customPackage.toPackageData() - .let { triggerEvent(PackageSelected(it)) } + if (savePackageAsTemplate) { + selectedSite.getOrNull() + ?.let { customPackage.submitToStore(it) } + ?.let { triggerEvent(PackageSelected(customPackage.toPackageData())) } + } else { + customPackage.toPackageData() + .let { triggerEvent(PackageSelected(it)) } + } } fun onPackageTypeSpinnerClick() { From a806a84966457633783ae9a3c9ac4653f2c86fdc Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 16:03:10 -0300 Subject: [PATCH 02/13] Add PackageData.fromPackageDAO function --- .../wooshippinglabels/packages/ui/UIModels.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt index 04df804ba86..49d330d7df5 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt @@ -4,6 +4,7 @@ import android.os.Parcelable import com.woocommerce.android.R import com.woocommerce.android.extensions.isNotNullOrEmpty import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageType +import com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource.PackageDAO import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize @@ -58,6 +59,23 @@ data class PackageData( isLetter = false, groupName = null ) + + fun fromPackageDAO( + dao: PackageDAO, + isSelected: Boolean = false, + isPredefined: Boolean = true + ): PackageData = PackageData( + id = dao.id, + name = dao.name, + dimensions = dao.dimensions, + weight = dao.weight, + isSelected = isSelected, + isPredefined = isPredefined, + isLetter = dao.isLetter, + dimensionUnit = dao.dimensionUnit, + weightUnit = dao.weightUnit, + groupName = dao.groupName + ) } } From 2f19815ac208271d07c1b12ae49be835d48ce45d Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 16:04:13 -0300 Subject: [PATCH 03/13] Refactor FetchPredefinedPackagesFromStore with PackageData.fromPackageDAO usage --- .../FetchPredefinedPackagesFromStore.kt | 35 +++---------------- 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt index 949d2f935cd..d43715178fd 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt @@ -19,27 +19,13 @@ class FetchPredefinedPackagesFromStore @Inject constructor( ?: return PredefinedPackagesState.Error return PredefinedPackagesState.Data( - savedPackages = storePackages.filterSavedData(), - carrierPackages = storePackages.filterCarrierData() + carrierPackages = storePackages.filterCarrierData(), + savedPackages = storePackages + .savedPackages + .map { PackageData.fromPackageDAO(it) } ) } - private fun StorePackagesDAO.filterSavedData() = - savedPackages.map { packageDAO -> - PackageData( - name = packageDAO.name, - dimensions = packageDAO.dimensions, - weight = packageDAO.weight, - isSelected = false, - isPredefined = true, - isLetter = packageDAO.isLetter, - dimensionUnit = packageDAO.dimensionUnit, - weightUnit = packageDAO.weightUnit, - groupName = packageDAO.groupName, - id = packageDAO.id, - ) - } - private fun StorePackagesDAO.filterCarrierData() = mapOf( carrierPackages .parseCarrierData(CarrierType.USPS) @@ -57,18 +43,7 @@ class FetchPredefinedPackagesFromStore @Inject constructor( CarrierPackageGroup( groupName = group.description, packages = group.packages.map { packageItem -> - PackageData( - name = packageItem.name, - dimensions = packageItem.dimensions, - weight = packageItem.weight, - isSelected = false, - isPredefined = true, - isLetter = packageItem.isLetter, - dimensionUnit = packageItem.dimensionUnit, - weightUnit = packageItem.weightUnit, - groupName = packageItem.groupName, - id = packageItem.id, - ) + PackageData.fromPackageDAO(packageItem) } ) } From 62a4454d79fdb033c492334d7e761e52f5e95193 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 16:16:15 -0300 Subject: [PATCH 04/13] Update package submission request to return a Result --- ...ooShippingLabelPackageCreationViewModel.kt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index c6ba35e8a12..8fb311e19ce 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -108,9 +108,11 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( val customPackage = _viewState.value.customPackageCreationData if (savePackageAsTemplate) { - selectedSite.getOrNull() - ?.let { customPackage.submitToStore(it) } - ?.let { triggerEvent(PackageSelected(customPackage.toPackageData())) } + launch { + selectedSite.getOrNull() + ?.let { customPackage.submitToStore(it) } + ?.let { triggerEvent(PackageSelected(customPackage.toPackageData())) } + } } else { customPackage.toPackageData() .let { triggerEvent(PackageSelected(it)) } @@ -191,9 +193,8 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( ?.let { set(it, updatedPackage) } } - private fun CustomPackageCreationData.submitToStore(site: SiteModel) { - launch { - packageRepository.createCustomPackage( + private suspend fun CustomPackageCreationData.submitToStore(site: SiteModel): Result { + val response = packageRepository.createCustomPackage( site = site, requestData = this@submitToStore.let { CustomPackageCreationRequestData( @@ -206,7 +207,12 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( ) }.let { listOf(it) } ) - } + + return response.takeIf { it.isError.not() } + ?.model?.firstOrNull() + ?.let { PackageData.fromPackageDAO(it) } + ?.let { Result.success(it) } + ?: Result.failure(Throwable("Failed to save package")) } @Parcelize From c601e7afbbde88f538cc9ab80655104f278366ff Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 17:10:47 -0300 Subject: [PATCH 05/13] Handle Error and Loading events coming from WooShippingLabelPackageCreationViewModel --- ...WooShippingLabelPackageCreationFragment.kt | 35 +++++++++++++++++++ ...ooShippingLabelPackageCreationViewModel.kt | 8 +++++ 2 files changed, 43 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index fcdffb3796d..696cfb4f6de 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -14,15 +14,21 @@ import com.woocommerce.android.extensions.navigateBackWithResult import com.woocommerce.android.extensions.navigateSafely import com.woocommerce.android.ui.base.BaseFragment import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground +import com.woocommerce.android.ui.dialog.WooDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageSelected import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageType +import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowErrorDialog +import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowLoadingDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowPackageTypeDialog +import com.woocommerce.android.widgets.CustomProgressDialog import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class WooShippingLabelPackageCreationFragment : BaseFragment() { val viewModel: WooShippingLabelPackageCreationViewModel by viewModels() + private var progressDialog: CustomProgressDialog? = null + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return ComposeView(requireContext()).apply { setViewCompositionStrategy(DisposeOnViewTreeLifecycleDestroyed) @@ -44,6 +50,8 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { viewModel.event.observe(viewLifecycleOwner) { event -> when (event) { is ShowPackageTypeDialog -> handlePackageTypeSelection(event.currentSelection) + is ShowLoadingDialog -> showLoadingDialog(event.show, event.messageResId) + is ShowErrorDialog -> showErrorDialog(event.titleResId, event.messageResId) is PackageSelected -> navigateBackWithResult(PACKAGE_SELECTION_RESULT, event.packageData) } } @@ -72,6 +80,33 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { ).let { findNavController().navigateSafely(it) } } + private fun showLoadingDialog( + show: Boolean, + messageResId: Int + ) { + if (show) { + progressDialog = CustomProgressDialog.show( + title = getString(R.string.loading), + message = getString(messageResId) + ) + } else { + progressDialog?.dismiss() + progressDialog = null + } + } + + private fun showErrorDialog( + titleResId: Int, + messageResId: Int, + ) { + WooDialog.showDialog( + activity = requireActivity(), + titleId = titleResId, + messageId = messageResId, + positiveButtonId = R.string.dialog_ok + ) + } + companion object { const val SELECTOR_REQUEST_KEY = "package_type" const val PACKAGE_SELECTION_RESULT = "package_selection" diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 8fb311e19ce..1c9150fd623 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -262,4 +262,12 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( data class PackageSelected(val packageData: PackageData) : MultiLiveEvent.Event() data class ShowPackageTypeDialog(val currentSelection: PackageType) : MultiLiveEvent.Event() + data class ShowLoadingDialog( + val show: Boolean, + val messageResId: Int + ) : MultiLiveEvent.Event() + data class ShowErrorDialog( + val titleResId: Int, + val messageResId: Int + ) : MultiLiveEvent.Event() } From a101ec4c1447a83caaf6837fd7afca5f4564208f Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 17:35:10 -0300 Subject: [PATCH 06/13] Set the loading dialog to use a fixed message --- .../packages/WooShippingLabelPackageCreationFragment.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index 696cfb4f6de..8a74ae1b6b6 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -50,7 +50,7 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { viewModel.event.observe(viewLifecycleOwner) { event -> when (event) { is ShowPackageTypeDialog -> handlePackageTypeSelection(event.currentSelection) - is ShowLoadingDialog -> showLoadingDialog(event.show, event.messageResId) + is ShowLoadingDialog -> showLoadingDialog(event.show) is ShowErrorDialog -> showErrorDialog(event.titleResId, event.messageResId) is PackageSelected -> navigateBackWithResult(PACKAGE_SELECTION_RESULT, event.packageData) } @@ -80,14 +80,11 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { ).let { findNavController().navigateSafely(it) } } - private fun showLoadingDialog( - show: Boolean, - messageResId: Int - ) { + private fun showLoadingDialog(show: Boolean) { if (show) { progressDialog = CustomProgressDialog.show( title = getString(R.string.loading), - message = getString(messageResId) + message = getString(R.string.please_wait) ) } else { progressDialog?.dismiss() From cf042dc3a435b5bd4cce13bd72684ed4b2b68778 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 18:02:29 -0300 Subject: [PATCH 07/13] Fully handle package creation response --- ...ooShippingLabelPackageCreationViewModel.kt | 37 +++++++++++++------ WooCommerce/src/main/res/values/strings.xml | 2 + 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 1c9150fd623..abc278a47bd 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -106,16 +106,10 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( fun onAddCustomPackageClick(savePackageAsTemplate: Boolean) { val customPackage = _viewState.value.customPackageCreationData - if (savePackageAsTemplate) { - launch { - selectedSite.getOrNull() - ?.let { customPackage.submitToStore(it) } - ?.let { triggerEvent(PackageSelected(customPackage.toPackageData())) } - } + handleCustomSelectionAsTemplate(customPackage) } else { - customPackage.toPackageData() - .let { triggerEvent(PackageSelected(it)) } + triggerEvent(PackageSelected(customPackage.toPackageData())) } } @@ -193,6 +187,28 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( ?.let { set(it, updatedPackage) } } + private fun handleCustomSelectionAsTemplate( + customPackage: CustomPackageCreationData + ) { + triggerEvent(ShowLoadingDialog(true)) + launch { + selectedSite.getOrNull() + ?.let { customPackage.submitToStore(it) } + ?.fold( + onSuccess = { + triggerEvent(PackageSelected(customPackage.toPackageData())) + }, + onFailure = { + triggerEvent(ShowLoadingDialog(false)) + triggerEvent(ShowErrorDialog( + R.string.woo_shipping_labels_package_creation_error_title, + R.string.woo_shipping_labels_package_creation_error_message + )) + } + ) ?: triggerEvent(PackageSelected(customPackage.toPackageData())) + } + } + private suspend fun CustomPackageCreationData.submitToStore(site: SiteModel): Result { val response = packageRepository.createCustomPackage( site = site, @@ -262,10 +278,7 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( data class PackageSelected(val packageData: PackageData) : MultiLiveEvent.Event() data class ShowPackageTypeDialog(val currentSelection: PackageType) : MultiLiveEvent.Event() - data class ShowLoadingDialog( - val show: Boolean, - val messageResId: Int - ) : MultiLiveEvent.Event() + data class ShowLoadingDialog(val show: Boolean) : MultiLiveEvent.Event() data class ShowErrorDialog( val titleResId: Int, val messageResId: Int diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index a12fa25078c..47339ed166f 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4447,5 +4447,7 @@ Failed to load the package data Box Envelope + We couldn\'t save the package as template + Do you want to proceed without saving as a template? Hmm, we can\'t find a WordPress.com account connected to this email address. From 6dc79e7458503f66203a625fdcd2741962af103e Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 18:21:32 -0300 Subject: [PATCH 08/13] Specialize the error dialog to the template creation error event --- .../WooShippingLabelPackageCreationFragment.kt | 13 +++++-------- .../WooShippingLabelPackageCreationViewModel.kt | 10 ++-------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index 8a74ae1b6b6..f1a92f9724b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -17,7 +17,7 @@ import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground import com.woocommerce.android.ui.dialog.WooDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageSelected import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageType -import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowErrorDialog +import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowTemplateCreationErrorDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowLoadingDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowPackageTypeDialog import com.woocommerce.android.widgets.CustomProgressDialog @@ -51,7 +51,7 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { when (event) { is ShowPackageTypeDialog -> handlePackageTypeSelection(event.currentSelection) is ShowLoadingDialog -> showLoadingDialog(event.show) - is ShowErrorDialog -> showErrorDialog(event.titleResId, event.messageResId) + is ShowTemplateCreationErrorDialog -> handleTemplateCreationError() is PackageSelected -> navigateBackWithResult(PACKAGE_SELECTION_RESULT, event.packageData) } } @@ -92,14 +92,11 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { } } - private fun showErrorDialog( - titleResId: Int, - messageResId: Int, - ) { + private fun handleTemplateCreationError() { WooDialog.showDialog( activity = requireActivity(), - titleId = titleResId, - messageId = messageResId, + titleId = R.string.woo_shipping_labels_package_creation_error_title, + messageId = R.string.woo_shipping_labels_package_creation_error_message, positiveButtonId = R.string.dialog_ok ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index abc278a47bd..abc3ffd12f7 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -200,10 +200,7 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( }, onFailure = { triggerEvent(ShowLoadingDialog(false)) - triggerEvent(ShowErrorDialog( - R.string.woo_shipping_labels_package_creation_error_title, - R.string.woo_shipping_labels_package_creation_error_message - )) + triggerEvent(ShowTemplateCreationErrorDialog) } ) ?: triggerEvent(PackageSelected(customPackage.toPackageData())) } @@ -279,8 +276,5 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( data class PackageSelected(val packageData: PackageData) : MultiLiveEvent.Event() data class ShowPackageTypeDialog(val currentSelection: PackageType) : MultiLiveEvent.Event() data class ShowLoadingDialog(val show: Boolean) : MultiLiveEvent.Event() - data class ShowErrorDialog( - val titleResId: Int, - val messageResId: Int - ) : MultiLiveEvent.Event() + object ShowTemplateCreationErrorDialog : MultiLiveEvent.Event() } From 4ab39455183fe7c04fe0a990741da30e4d0f4235 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 18:27:51 -0300 Subject: [PATCH 09/13] Fully handle package template creation recover options --- .../WooShippingLabelPackageCreationFragment.kt | 11 ++++++++++- WooCommerce/src/main/res/values/strings.xml | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index f1a92f9724b..d1270930a20 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -97,7 +97,16 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { activity = requireActivity(), titleId = R.string.woo_shipping_labels_package_creation_error_title, messageId = R.string.woo_shipping_labels_package_creation_error_message, - positiveButtonId = R.string.dialog_ok + positiveButtonId = R.string.woo_shipping_labels_package_creation_error_proceed, + neutralButtonId = R.string.woo_shipping_labels_package_creation_error_retry, + negativeButtonId = R.string.woo_shipping_labels_package_creation_error_cancel, + posBtnAction = { _, _ -> + viewModel.onAddCustomPackageClick(savePackageAsTemplate = false) + }, + neutBtAction = { _, _ -> + viewModel.onAddCustomPackageClick(savePackageAsTemplate = true) + } + ) } diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 47339ed166f..68fb1845adb 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4449,5 +4449,8 @@ Envelope We couldn\'t save the package as template Do you want to proceed without saving as a template? + Proceed + Retry + Cancel Hmm, we can\'t find a WordPress.com account connected to this email address. From 6b8cbf1c0577a55d724d8ef28c521d6a6b0307a7 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 18:30:38 -0300 Subject: [PATCH 10/13] Fix lint issues --- ...WooShippingLabelPackageCreationFragment.kt | 2 +- ...ooShippingLabelPackageCreationViewModel.kt | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index d1270930a20..792153c754e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -17,9 +17,9 @@ import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground import com.woocommerce.android.ui.dialog.WooDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageSelected import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageType -import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowTemplateCreationErrorDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowLoadingDialog import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowPackageTypeDialog +import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.ShowTemplateCreationErrorDialog import com.woocommerce.android.widgets.CustomProgressDialog import dagger.hilt.android.AndroidEntryPoint diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index abc3ffd12f7..929afc48c7c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -207,25 +207,25 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( } private suspend fun CustomPackageCreationData.submitToStore(site: SiteModel): Result { - val response = packageRepository.createCustomPackage( - site = site, - requestData = this@submitToStore.let { - CustomPackageCreationRequestData( - name = it.name, - isLetter = it.type == PackageType.ENVELOPE, - innerDimensions = it.dimensions, - boxWeight = it.weight?.toDoubleOrNull() ?: 0.0, - isUserDefined = true, - maxWeight = 0.0 - ) - }.let { listOf(it) } - ) + val response = packageRepository.createCustomPackage( + site = site, + requestData = this@submitToStore.let { + CustomPackageCreationRequestData( + name = it.name, + isLetter = it.type == PackageType.ENVELOPE, + innerDimensions = it.dimensions, + boxWeight = it.weight?.toDoubleOrNull() ?: 0.0, + isUserDefined = true, + maxWeight = 0.0 + ) + }.let { listOf(it) } + ) - return response.takeIf { it.isError.not() } - ?.model?.firstOrNull() - ?.let { PackageData.fromPackageDAO(it) } - ?.let { Result.success(it) } - ?: Result.failure(Throwable("Failed to save package")) + return response.takeIf { it.isError.not() } + ?.model?.firstOrNull() + ?.let { PackageData.fromPackageDAO(it) } + ?.let { Result.success(it) } + ?: Result.failure(Throwable("Failed to save package")) } @Parcelize From 9e09365303fe9ff1e108706a78d2628c5619f5f5 Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 18:47:19 -0300 Subject: [PATCH 11/13] Refactor custom package template creation code --- ...ooShippingLabelPackageCreationViewModel.kt | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 929afc48c7c..5ad4486a691 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -193,7 +193,7 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( triggerEvent(ShowLoadingDialog(true)) launch { selectedSite.getOrNull() - ?.let { customPackage.submitToStore(it) } + ?.let { sendCustomPackageToStore(it, customPackage) } ?.fold( onSuccess = { triggerEvent(PackageSelected(customPackage.toPackageData())) @@ -206,19 +206,20 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( } } - private suspend fun CustomPackageCreationData.submitToStore(site: SiteModel): Result { + private suspend fun sendCustomPackageToStore( + site: SiteModel, + packageData: CustomPackageCreationData + ): Result { val response = packageRepository.createCustomPackage( site = site, - requestData = this@submitToStore.let { - CustomPackageCreationRequestData( - name = it.name, - isLetter = it.type == PackageType.ENVELOPE, - innerDimensions = it.dimensions, - boxWeight = it.weight?.toDoubleOrNull() ?: 0.0, - isUserDefined = true, - maxWeight = 0.0 - ) - }.let { listOf(it) } + requestData = CustomPackageCreationRequestData( + name = packageData.name, + isLetter = packageData.type == PackageType.ENVELOPE, + innerDimensions = packageData.dimensions, + boxWeight = packageData.weight?.toDoubleOrNull() ?: 0.0, + isUserDefined = true, + maxWeight = 0.0 + ).let { listOf(it) } ) return response.takeIf { it.isError.not() } From 50298167e57a3381fd3b26a829093b71b1bb35bc Mon Sep 17 00:00:00 2001 From: ThomazFB Date: Thu, 2 Jan 2025 20:00:43 -0300 Subject: [PATCH 12/13] Update Loading and Error visibilities --- .../packages/WooShippingLabelPackageCreationFragment.kt | 9 ++------- .../packages/WooShippingLabelPackageCreationViewModel.kt | 1 + WooCommerce/src/main/res/values/strings.xml | 3 +-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt index 792153c754e..12b6a35b171 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationFragment.kt @@ -85,7 +85,7 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { progressDialog = CustomProgressDialog.show( title = getString(R.string.loading), message = getString(R.string.please_wait) - ) + ).also { it.show(parentFragmentManager, CustomProgressDialog.TAG) } } else { progressDialog?.dismiss() progressDialog = null @@ -98,15 +98,10 @@ class WooShippingLabelPackageCreationFragment : BaseFragment() { titleId = R.string.woo_shipping_labels_package_creation_error_title, messageId = R.string.woo_shipping_labels_package_creation_error_message, positiveButtonId = R.string.woo_shipping_labels_package_creation_error_proceed, - neutralButtonId = R.string.woo_shipping_labels_package_creation_error_retry, - negativeButtonId = R.string.woo_shipping_labels_package_creation_error_cancel, + neutralButtonId = R.string.woo_shipping_labels_package_creation_error_cancel, posBtnAction = { _, _ -> viewModel.onAddCustomPackageClick(savePackageAsTemplate = false) - }, - neutBtAction = { _, _ -> - viewModel.onAddCustomPackageClick(savePackageAsTemplate = true) } - ) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 5ad4486a691..f5c5fbc6d32 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -196,6 +196,7 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( ?.let { sendCustomPackageToStore(it, customPackage) } ?.fold( onSuccess = { + triggerEvent(ShowLoadingDialog(false)) triggerEvent(PackageSelected(customPackage.toPackageData())) }, onFailure = { diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 68fb1845adb..05d81d34a5b 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4448,9 +4448,8 @@ Box Envelope We couldn\'t save the package as template - Do you want to proceed without saving as a template? + Do you want to proceed without saving it? Proceed - Retry Cancel Hmm, we can\'t find a WordPress.com account connected to this email address. From 99625dbd059a007a67ab9b1ad502e7fa9908fe3c Mon Sep 17 00:00:00 2001 From: Alejo Date: Sat, 4 Jan 2025 12:37:47 -0300 Subject: [PATCH 13/13] solve conflicts --- .../WooShippingLabelPackageCreationViewModel.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt index 331e1b52279..3a0fd59c767 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt @@ -203,13 +203,19 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor( ?.fold( onSuccess = { triggerEvent(ShowLoadingDialog(false)) - triggerEvent(PackageSelected(customPackage.toPackageData())) + triggerEvent( + PackageSelected(customPackage.toPackageData(dimensionUnit = storeOptions.dimensionUnit)) + ) }, onFailure = { triggerEvent(ShowLoadingDialog(false)) triggerEvent(ShowTemplateCreationErrorDialog) } - ) ?: triggerEvent(PackageSelected(customPackage.toPackageData())) + ) ?: triggerEvent( + PackageSelected( + customPackage.toPackageData(dimensionUnit = storeOptions.dimensionUnit) + ) + ) } }