From 89c9cde64ffbcb717657ef7ba1b7b786de1e3a97 Mon Sep 17 00:00:00 2001 From: malinajirka Date: Mon, 5 May 2025 12:13:14 +0200 Subject: [PATCH 1/4] Fix vertical alignment of empty coupons screen --- .../android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt index a95cec42320..fad6b226bd4 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt @@ -91,6 +91,7 @@ private fun WooPosCouponsScreen( ) is WooPosCouponsViewState.Empty -> WooPosItemsEmptyList( + modifier = Modifier.fillMaxSize(), title = stringResource(id = R.string.woopos_coupons_empty_list_title), message = stringResource(id = R.string.woopos_coupons_empty_list_message), contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), From abdbd2ad10730b865538ea9962d190f7b007035d Mon Sep 17 00:00:00 2001 From: malinajirka Date: Mon, 5 May 2025 12:40:16 +0200 Subject: [PATCH 2/4] Add CTA to empty coupon screen --- .../ui/woopos/home/items/WooPosItemsList.kt | 50 ++++++++++++++++++- .../home/items/coupons/WooPosCouponsScreen.kt | 2 + .../items/coupons/WooPosCouponsUIEvent.kt | 1 + WooCommerce/src/main/res/values/strings.xml | 1 + 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt index d50f5c21776..f15317b754f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt @@ -50,6 +50,7 @@ import coil.request.ImageRequest import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.ShadowType +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosButton import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosCard import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosLazyColumn import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosShimmerBox @@ -478,6 +479,43 @@ fun WooPosItemsEmptyList( title: String, message: String, contentDescription: String, +) { + WooPosItemsEmptyListInternal( + modifier = modifier, + title = title, + message = message, + contentDescription = contentDescription, + actionLabel = null, + onActionClicked = null + ) +} +@Composable +fun WooPosItemsEmptyList( + modifier: Modifier = Modifier, + title: String, + message: String, + contentDescription: String, + actionLabel: String, + onActionClicked: (() -> Unit), +) { + WooPosItemsEmptyListInternal( + modifier = modifier, + title = title, + message = message, + contentDescription = contentDescription, + actionLabel = actionLabel, + onActionClicked = onActionClicked + ) +} + +@Composable +private fun WooPosItemsEmptyListInternal( + modifier: Modifier = Modifier, + title: String, + message: String, + contentDescription: String, + actionLabel: String?, + onActionClicked: (() -> Unit)? = null, ) { Box( modifier = modifier.verticalScroll(rememberScrollState()), @@ -510,7 +548,17 @@ fun WooPosItemsEmptyList( textAlign = TextAlign.Center ) - Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) + Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) + + if (onActionClicked != null && actionLabel != null) { + WooPosButton( + text = actionLabel, + onClick = onActionClicked, + modifier = Modifier + .fillMaxWidth(0.5f) + .height(80.dp) + ) + } } } } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt index fad6b226bd4..0f65cee7a33 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt @@ -95,6 +95,8 @@ private fun WooPosCouponsScreen( title = stringResource(id = R.string.woopos_coupons_empty_list_title), message = stringResource(id = R.string.woopos_coupons_empty_list_message), contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), + actionLabel = stringResource(id = R.string.woopos_coupons_empty_list_create_coupon_label), + onActionClicked = { onUIEvent(WooPosCouponsUIEvent.CreateCouponClicked) } ) is WooPosCouponsViewState.Error -> CouponsError { onUIEvent(WooPosCouponsUIEvent.RetryTriggered) } diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsUIEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsUIEvent.kt index 34d0b367726..1f91e4e2b95 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsUIEvent.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsUIEvent.kt @@ -6,5 +6,6 @@ sealed class WooPosCouponsUIEvent { data object RetryLoadMoreTriggered : WooPosCouponsUIEvent() data object RetryTriggered : WooPosCouponsUIEvent() data class CouponClicked(val couponId: Long) : WooPosCouponsUIEvent() + data object CreateCouponClicked : WooPosCouponsUIEvent() data object BackButtonClicked : WooPosCouponsUIEvent() } diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 3743c71c856..5da4db43702 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4333,6 +4333,7 @@ No coupons No coupons found Boost your business by sending customers special offers and discounts. + Create coupon Error loading coupons Give it another go? Retry From ba5cbe5bafaf42d9e24d689a1d6dd3276063c63f Mon Sep 17 00:00:00 2001 From: malinajirka Date: Mon, 5 May 2025 12:40:41 +0200 Subject: [PATCH 3/4] Consume Create Coupon clicked in VM --- .../ui/woopos/home/items/coupons/WooPosCouponsViewModel.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsViewModel.kt index 97b081a2b87..dd10780264b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsViewModel.kt @@ -69,6 +69,10 @@ class WooPosCouponsViewModel @Inject constructor( } RetryTriggered -> fetchCoupons() + + is WooPosCouponsUIEvent.CreateCouponClicked -> { + error("Create coupon clicked event not implemented yet") + } } } From 35b78fb836ef052d7cd075bcdeb1733444078e0a Mon Sep 17 00:00:00 2001 From: malinajirka Date: Mon, 5 May 2025 13:32:30 +0200 Subject: [PATCH 4/4] Fix detekt --- .../woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt index f15317b754f..3e0a77b4ca3 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt @@ -489,6 +489,7 @@ fun WooPosItemsEmptyList( onActionClicked = null ) } + @Composable fun WooPosItemsEmptyList( modifier: Modifier = Modifier,