From 53f267d7e572bf35258090c2943da00e2459e82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 12:38:26 +0200 Subject: [PATCH 01/13] Add error screen and retry logic --- .../ui/woopos/orders/WooPosOrdersScreen.kt | 35 ++++++++++++------- .../ui/woopos/orders/WooPosOrdersViewModel.kt | 4 +++ WooCommerce/src/main/res/values/strings.xml | 3 ++ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index 015934e4b69..ee61c4da3d0 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -45,6 +45,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInput import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInputState @@ -57,6 +58,7 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosThe import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState +import com.woocommerce.android.ui.woopos.home.items.products.ProductsError import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter @@ -82,6 +84,7 @@ fun WooPosOrdersScreen( isRefreshing = state.pullToRefreshState == WooPosPullToRefreshState.Refreshing, onOrderSelected = viewModel::onOrderSelected, onEndOfOrdersListReached = viewModel::onEndOfOrdersListReached, + onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked, viewModel::onPaginationErrorTryAgain, onSearchEvent = viewModel::onSearchEvent, modifier = Modifier @@ -109,6 +112,7 @@ private fun OrdersList( isRefreshing: Boolean, onOrderSelected: (Long) -> Unit, onEndOfOrdersListReached: () -> Unit, + onRetryClicked: () -> Unit, onPaginationErrorTryAgain: () -> Unit, onSearchEvent: (WooPosSearchUIEvent) -> Unit, modifier: Modifier = Modifier @@ -181,19 +185,7 @@ private fun OrdersList( } } - is WooPosOrdersState.Error -> { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - WooPosText( - text = state.message, - style = WooPosTypography.BodyMedium, - color = MaterialTheme.colorScheme.error, - modifier = Modifier.padding(WooPosSpacing.Large.value) - ) - } - } + is WooPosOrdersState.Error -> OrdersError { onRetryClicked() } is WooPosOrdersState.Empty -> { Column( @@ -397,6 +389,23 @@ private fun OrdersPaginationLoadingRow() { } } +@Composable +fun OrdersError(onRetryClicked: () -> Unit) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + WooPosErrorScreen( + message = stringResource(id = R.string.woopos_orders_loading_error_title), + reason = stringResource(id = R.string.woopos_orders_loading_error_message), + primaryButton = Button( + text = stringResource(id = R.string.woopos_orders_loading_error_retry_button), + click = onRetryClicked + ) + ) + } +} + @Composable private fun OrdersPaginationErrorRow(onPaginationErrorTryAgain: () -> Unit) { WooPosPaginationErrorIndicator( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt index 64ce5274f67..bae3027ceba 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt @@ -97,6 +97,10 @@ class WooPosOrdersViewModel @Inject constructor( loadMoreIfPossible() } + fun onOrdersLoadingErrorRetryButtonClicked() { + loadOrders() + } + @Suppress("ReturnCount") fun loadMoreIfPossible() { if (loadingJob?.isActive == true || loadingMoreOrdersJob?.isActive == true) return diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 917e4ee735b..8ce737ecad2 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -3761,6 +3761,9 @@ Unable to load more coupons Please check your internet connection and try again. + Unable to load orders + Please try again. + Retry Unable to load more orders Please try again. From 5698bc9552ca496ecbede4116242dc8483dae1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 13:10:49 +0200 Subject: [PATCH 02/13] Make error view full screen --- .../android/ui/woopos/orders/WooPosOrdersScreen.kt | 11 +++++++++-- .../android/ui/woopos/orders/WooPosOrdersViewModel.kt | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index ee61c4da3d0..99f2ed9454e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -76,6 +76,13 @@ fun WooPosOrdersScreen( val onBackClicked = { onNavigationEvent(WooPosNavigationEvent.GoBack) } BackHandler { onNavigationEvent(WooPosNavigationEvent.GoBack) } + if (state is WooPosOrdersState.Error) { + OrdersError( + onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked + ) + return + } + Row(modifier = Modifier.fillMaxSize()) { OrdersList( state = state, @@ -185,8 +192,6 @@ private fun OrdersList( } } - is WooPosOrdersState.Error -> OrdersError { onRetryClicked() } - is WooPosOrdersState.Empty -> { Column( modifier = Modifier.fillMaxSize(), @@ -210,6 +215,8 @@ private fun OrdersList( onPaginationErrorTryAgain = onPaginationErrorTryAgain, ) } + + is WooPosOrdersState.Error -> { /* handled full-screen in parent */ } } PullRefreshIndicator( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt index bae3027ceba..c36d62e0e07 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt @@ -98,6 +98,7 @@ class WooPosOrdersViewModel @Inject constructor( } fun onOrdersLoadingErrorRetryButtonClicked() { + _state.value = WooPosOrdersState.Loading(searchInputState = WooPosSearchInputState.Closed) loadOrders() } From a1fc60bd25a060bc7d78d64fae02485f6496eb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 15:17:16 +0200 Subject: [PATCH 03/13] Add empty state screen --- .../ui/woopos/orders/WooPosOrdersScreen.kt | 44 ++++++++++++------- .../ui/woopos/orders/WooPosOrdersViewModel.kt | 2 + .../res/drawable/ic_woo_pos_orders_empty.xml | 25 +++++++++++ WooCommerce/src/main/res/values/strings.xml | 6 ++- 4 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 WooCommerce/src/main/res/drawable/ic_woo_pos_orders_empty.xml diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index 99f2ed9454e..c4cd21286c1 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -35,6 +35,7 @@ import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.selected import androidx.compose.ui.semantics.semantics @@ -56,9 +57,9 @@ import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosToolba import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography +import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState -import com.woocommerce.android.ui.woopos.home.items.products.ProductsError import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter @@ -83,6 +84,13 @@ fun WooPosOrdersScreen( return } + if (state is WooPosOrdersState.Empty) { + OrdersEmpty( + onActionClicked = { viewModel::onOrdersEmptyActionClicked } + ) + return + } + Row(modifier = Modifier.fillMaxSize()) { OrdersList( state = state, @@ -119,7 +127,6 @@ private fun OrdersList( isRefreshing: Boolean, onOrderSelected: (Long) -> Unit, onEndOfOrdersListReached: () -> Unit, - onRetryClicked: () -> Unit, onPaginationErrorTryAgain: () -> Unit, onSearchEvent: (WooPosSearchUIEvent) -> Unit, modifier: Modifier = Modifier @@ -192,20 +199,6 @@ private fun OrdersList( } } - is WooPosOrdersState.Empty -> { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - WooPosText( - text = "No orders found", - style = WooPosTypography.BodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(WooPosSpacing.Large.value) - ) - } - } - is WooPosOrdersState.Content -> { WooPosOrdersListPaneScreen( modifier = Modifier.fillMaxSize(), @@ -216,6 +209,7 @@ private fun OrdersList( ) } + is WooPosOrdersState.Empty -> { /* handled full-screen in parent */ } is WooPosOrdersState.Error -> { /* handled full-screen in parent */ } } @@ -396,6 +390,24 @@ private fun OrdersPaginationLoadingRow() { } } +@Composable +fun OrdersEmpty(onActionClicked: () -> Unit) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + WooPosItemsEmptyList( + modifier = Modifier.fillMaxSize(), + icon = painterResource(id = R.drawable.ic_woo_pos_orders_empty), + title = stringResource(id = R.string.woopos_orders_empty_list_title), + message = stringResource(id = R.string.woopos_orders_empty_list_message), + contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), + actionLabel = stringResource(id = R.string.woopos_orders_empty_action_label), + onActionClicked = { onActionClicked() } + ) + } +} + @Composable fun OrdersError(onRetryClicked: () -> Unit) { Box( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt index c36d62e0e07..e3b84573340 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt @@ -97,6 +97,8 @@ class WooPosOrdersViewModel @Inject constructor( loadMoreIfPossible() } + fun onOrdersEmptyActionClicked() { } + fun onOrdersLoadingErrorRetryButtonClicked() { _state.value = WooPosOrdersState.Loading(searchInputState = WooPosSearchInputState.Closed) loadOrders() diff --git a/WooCommerce/src/main/res/drawable/ic_woo_pos_orders_empty.xml b/WooCommerce/src/main/res/drawable/ic_woo_pos_orders_empty.xml new file mode 100644 index 00000000000..8456e9683a1 --- /dev/null +++ b/WooCommerce/src/main/res/drawable/ic_woo_pos_orders_empty.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index 8ce737ecad2..f46ef6fcd35 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -3761,8 +3761,12 @@ Unable to load more coupons Please check your internet connection and try again. + No orders found + Explore how you can increase your store sales. + Learn more + No orders Unable to load orders - Please try again. + Please check your connection try again. Retry Unable to load more orders Please try again. From c88d5cd99c69108ee1dc60f42d1165aa3ed81561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 15:18:29 +0200 Subject: [PATCH 04/13] Remove non necessary parameter --- .../woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index c4cd21286c1..801d0de69ab 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -99,7 +99,6 @@ fun WooPosOrdersScreen( isRefreshing = state.pullToRefreshState == WooPosPullToRefreshState.Refreshing, onOrderSelected = viewModel::onOrderSelected, onEndOfOrdersListReached = viewModel::onEndOfOrdersListReached, - onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked, viewModel::onPaginationErrorTryAgain, onSearchEvent = viewModel::onSearchEvent, modifier = Modifier From 51b2c06698c8ad3ae588ba6e61f2c0c244e7c32a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 15:40:05 +0200 Subject: [PATCH 05/13] Add toolbar also for Error screen and refactor code --- .../ui/woopos/orders/WooPosOrdersScreen.kt | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index 801d0de69ab..5027ddc5588 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -79,13 +79,15 @@ fun WooPosOrdersScreen( if (state is WooPosOrdersState.Error) { OrdersError( - onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked + onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked, + onBackClicked = onBackClicked ) return } if (state is WooPosOrdersState.Empty) { OrdersEmpty( + onBackClicked = onBackClicked, onActionClicked = { viewModel::onOrdersEmptyActionClicked } ) return @@ -390,10 +392,12 @@ private fun OrdersPaginationLoadingRow() { } @Composable -fun OrdersEmpty(onActionClicked: () -> Unit) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center, +fun OrdersEmpty( + onBackClicked: () -> Unit, + onActionClicked: () -> Unit +) { + OrdersScaffoldWithToolbar( + onBackClicked = onBackClicked ) { WooPosItemsEmptyList( modifier = Modifier.fillMaxSize(), @@ -402,16 +406,18 @@ fun OrdersEmpty(onActionClicked: () -> Unit) { message = stringResource(id = R.string.woopos_orders_empty_list_message), contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), actionLabel = stringResource(id = R.string.woopos_orders_empty_action_label), - onActionClicked = { onActionClicked() } + onActionClicked = onActionClicked ) } } @Composable -fun OrdersError(onRetryClicked: () -> Unit) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center, +fun OrdersError( + onBackClicked: () -> Unit, + onRetryClicked: () -> Unit +) { + OrdersScaffoldWithToolbar( + onBackClicked = onBackClicked ) { WooPosErrorScreen( message = stringResource(id = R.string.woopos_orders_loading_error_title), @@ -424,6 +430,26 @@ fun OrdersError(onRetryClicked: () -> Unit) { } } +@Composable +private fun OrdersScaffoldWithToolbar( + onBackClicked: () -> Unit, + content: @Composable () -> Unit +) { + Column(modifier = Modifier.fillMaxSize()) { + WooPosToolbar( + titleText = stringResource(R.string.woopos_orders_title), + onBackClicked = onBackClicked, + modifier = Modifier.fillMaxWidth() + ) + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + content() + } + } +} + @Composable private fun OrdersPaginationErrorRow(onPaginationErrorTryAgain: () -> Unit) { WooPosPaginationErrorIndicator( From e3281f7d92205aa9346f40eeb12ad3fb199b6a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 15:52:27 +0200 Subject: [PATCH 06/13] Adjust button width --- .../ui/woopos/common/composeui/component/WooPosErrorScreen.kt | 4 ++-- .../android/ui/woopos/home/items/WooPosItemsList.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt index dd17eaa4d8a..0ddca8d505f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt @@ -78,7 +78,7 @@ fun WooPosErrorScreen( text = it.text, onClick = it.click, modifier = Modifier - .fillMaxWidth(.5f) + .fillMaxWidth(.3f) .height(80.dp) ) } @@ -88,7 +88,7 @@ fun WooPosErrorScreen( text = it.text, onClick = it.click, modifier = Modifier - .fillMaxWidth(.5f) + .fillMaxWidth(.3f) .height(80.dp) ) } 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 4b2d76c4404..b34f7eb203b 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 @@ -621,7 +621,7 @@ private fun WooPosItemsEmptyListInternal( text = actionLabel, onClick = onActionClicked, modifier = Modifier - .fillMaxWidth(0.5f) + .fillMaxWidth(0.3f) .height(80.dp) ) } From f4b1c8bc1cc9f3d3d8671fb4f30513eea33b513d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 16:12:58 +0200 Subject: [PATCH 07/13] Better formatting --- .../ui/woopos/common/composeui/component/WooPosErrorScreen.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt index 0ddca8d505f..46c0aef395b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt @@ -38,7 +38,8 @@ fun WooPosErrorScreen( secondaryButton: Button? = null ) { Column( - modifier = modifier.fillMaxSize() + modifier = modifier + .fillMaxSize() .clip(RoundedCornerShape(WooPosCornerRadius.Medium.value)) .padding(WooPosSpacing.XLarge.value.toAdaptivePadding()), horizontalAlignment = Alignment.CenterHorizontally, From 02070153ea437c11c9fc31f02681263f21b08d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 16:13:14 +0200 Subject: [PATCH 08/13] Keep detekt happy --- .../android/ui/woopos/orders/WooPosOrdersViewModel.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt index e3b84573340..a5f9203c269 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt @@ -97,7 +97,9 @@ class WooPosOrdersViewModel @Inject constructor( loadMoreIfPossible() } - fun onOrdersEmptyActionClicked() { } + fun onOrdersEmptyActionClicked() { + // Action to be defined + } fun onOrdersLoadingErrorRetryButtonClicked() { _state.value = WooPosOrdersState.Loading(searchInputState = WooPosSearchInputState.Closed) From 70e150e1746b7562e45c10f5b8e139d7b43d3d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Fri, 3 Oct 2025 16:13:31 +0200 Subject: [PATCH 09/13] Add unit test --- .../orders/WooPosOrdersViewModelTest.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt index 3241f1f6e0f..4dd3e5f1c0a 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt @@ -462,4 +462,34 @@ class WooPosOrdersViewModelTest { verify(dataSource).loadOrders() verify(dataSource, times(2)).loadMore() } + + @Test + fun `given Error, when retry tapped, then load orders again`() = runTest { + // GIVEN + whenever(dataSource.loadOrders()).thenReturn( + flow { emit(LoadOrdersResult.Error("boom")) } + ) + + viewModel = WooPosOrdersViewModel(dataSource) + advanceUntilIdle() + + whenever(dataSource.loadOrders()).thenReturn( + flow { + emit(LoadOrdersResult.SuccessCache(emptyList())) + emit(LoadOrdersResult.SuccessRemote(listOf(order(7), order(8)))) + } + ) + + // WHEN + viewModel.onOrdersLoadingErrorRetryButtonClicked() + advanceUntilIdle() + + // THEN + val after = viewModel.state.value as WooPosOrdersState.Content + assertThat(after.items.map { it.id }).containsExactly(7L, 8L) + assertThat(after.pullToRefreshState).isEqualTo(WooPosPullToRefreshState.Enabled) + assertThat(after.paginationState).isEqualTo(WooPosPaginationState.None) + + verify(dataSource, times(2)).loadOrders() + } } From 3c3b5f40359ecef6499c7ed53c19cbb82504a341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Mon, 6 Oct 2025 11:49:23 +0200 Subject: [PATCH 10/13] Add a shared modifier --- .../common/composeui/component/WooPosButtonModifier.kt | 10 ++++++++++ .../common/composeui/component/WooPosErrorScreen.kt | 8 ++------ .../android/ui/woopos/home/items/WooPosItemsList.kt | 5 ++--- 3 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt new file mode 100644 index 00000000000..2d004d5c574 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt @@ -0,0 +1,10 @@ +package com.woocommerce.android.ui.woopos.common.composeui.component + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +val WooPosButtonModifier = Modifier + .fillMaxWidth(0.3f) + .height(80.dp) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt index 46c0aef395b..dd7e4a5faff 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt @@ -78,9 +78,7 @@ fun WooPosErrorScreen( WooPosButton( text = it.text, onClick = it.click, - modifier = Modifier - .fillMaxWidth(.3f) - .height(80.dp) + modifier = WooPosButtonModifier ) } secondaryButton?.let { @@ -88,9 +86,7 @@ fun WooPosErrorScreen( WooPosOutlinedButton( text = it.text, onClick = it.click, - modifier = Modifier - .fillMaxWidth(.3f) - .height(80.dp) + modifier = WooPosButtonModifier ) } Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) 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 b34f7eb203b..15f0bafe6e9 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 @@ -55,6 +55,7 @@ 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.WooPosButtonModifier 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 @@ -620,9 +621,7 @@ private fun WooPosItemsEmptyListInternal( WooPosButton( text = actionLabel, onClick = onActionClicked, - modifier = Modifier - .fillMaxWidth(0.3f) - .height(80.dp) + modifier = WooPosButtonModifier ) } } From 2aec62a907479523b7d36aba137f14c876d5817c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Mon, 6 Oct 2025 13:16:18 +0200 Subject: [PATCH 11/13] Improve state handling and simplify composables --- .../ui/woopos/orders/WooPosOrdersScreen.kt | 206 ++++++------------ 1 file changed, 64 insertions(+), 142 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index 5027ddc5588..e2caed5b56b 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -41,7 +41,6 @@ import androidx.compose.ui.semantics.selected import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import androidx.constraintlayout.compose.ConstraintLayout import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview @@ -77,31 +76,45 @@ fun WooPosOrdersScreen( val onBackClicked = { onNavigationEvent(WooPosNavigationEvent.GoBack) } BackHandler { onNavigationEvent(WooPosNavigationEvent.GoBack) } - if (state is WooPosOrdersState.Error) { - OrdersError( - onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked, - onBackClicked = onBackClicked - ) - return - } + Box(modifier = Modifier.fillMaxSize()) { + when (val currentState = state) { + is WooPosOrdersState.Content -> OrdersContent(currentState, viewModel) + is WooPosOrdersState.Empty -> OrdersEmpty( + onActionClicked = { viewModel::onOrdersEmptyActionClicked } + ) - if (state is WooPosOrdersState.Empty) { - OrdersEmpty( - onBackClicked = onBackClicked, - onActionClicked = { viewModel::onOrdersEmptyActionClicked } - ) - return + is WooPosOrdersState.Error -> OrdersError( + onRetryClicked = viewModel::onOrdersLoadingErrorRetryButtonClicked + ) + + is WooPosOrdersState.Loading -> { + // full screen loading state + } + } + + if (state.searchInputState is WooPosSearchInputState.Closed) { + WooPosToolbar( + titleText = stringResource(R.string.woopos_orders_title), + onBackClicked = onBackClicked, + modifier = Modifier.fillMaxWidth() + ) + } } +} +@Composable +private fun OrdersContent( + state: WooPosOrdersState.Content, + viewModel: WooPosOrdersViewModel +) { Row(modifier = Modifier.fillMaxSize()) { - OrdersList( + OrdersListPane( state = state, - onBackClicked = onBackClicked, onRefresh = viewModel::onRefresh, isRefreshing = state.pullToRefreshState == WooPosPullToRefreshState.Refreshing, onOrderSelected = viewModel::onOrderSelected, onEndOfOrdersListReached = viewModel::onEndOfOrdersListReached, - viewModel::onPaginationErrorTryAgain, + onPaginationErrorTryAgain = viewModel::onPaginationErrorTryAgain, onSearchEvent = viewModel::onSearchEvent, modifier = Modifier .weight(0.3f) @@ -110,20 +123,19 @@ fun WooPosOrdersScreen( ) OrderDetails( - state = state, modifier = Modifier .weight(0.7f) .fillMaxHeight() - .background(MaterialTheme.colorScheme.surfaceContainerLow) + .background(MaterialTheme.colorScheme.surfaceContainerLow), + order = state.items.find { it.id == state.selectedOrderId }, ) } } @OptIn(ExperimentalMaterialApi::class) @Composable -private fun OrdersList( - state: WooPosOrdersState, - onBackClicked: () -> Unit, +private fun OrdersListPane( + state: WooPosOrdersState.Content, onRefresh: () -> Unit, isRefreshing: Boolean, onOrderSelected: (Long) -> Unit, @@ -133,40 +145,17 @@ private fun OrdersList( modifier: Modifier = Modifier ) { Column(modifier = modifier) { - ConstraintLayout( + Box( modifier = Modifier .fillMaxWidth() .heightIn(min = WOO_POS_ORDERS_TOOLBAR_HEIGHT), ) { - val (toolbar, searchInput) = createRefs() - - if (state.searchInputState is WooPosSearchInputState.Closed) { - WooPosToolbar( - titleText = stringResource(R.string.woopos_orders_title), - onBackClicked = onBackClicked, - modifier = Modifier.constrainAs(toolbar) { - start.linkTo(parent.start) - top.linkTo(parent.top) - bottom.linkTo(parent.bottom) - } - ) - } WooPosSearchInput( state = state.searchInputState, onEvent = onSearchEvent, modifier = Modifier .statusBarsPadding() - .constrainAs(searchInput) { - if (state.searchInputState is WooPosSearchInputState.Open) { - start.linkTo(parent.start) - end.linkTo(parent.end) - width = androidx.constraintlayout.compose.Dimension.fillToConstraints - } else { - end.linkTo(parent.end) - } - top.linkTo(parent.top) - bottom.linkTo(parent.bottom) - } + .align(Alignment.CenterEnd) ) } @@ -185,34 +174,13 @@ private fun OrdersList( enabled = state.pullToRefreshState != WooPosPullToRefreshState.Disabled ) ) { - when (state) { - is WooPosOrdersState.Loading -> { - Column( - modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - WooPosText( - text = stringResource(R.string.loading), - style = WooPosTypography.BodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(WooPosSpacing.Large.value) - ) - } - } - - is WooPosOrdersState.Content -> { - WooPosOrdersListPaneScreen( - modifier = Modifier.fillMaxSize(), - state = state, - onOrderSelected = onOrderSelected, - onEndOfOrdersListReached = onEndOfOrdersListReached, - onPaginationErrorTryAgain = onPaginationErrorTryAgain, - ) - } - - is WooPosOrdersState.Empty -> { /* handled full-screen in parent */ } - is WooPosOrdersState.Error -> { /* handled full-screen in parent */ } - } + OrdersList( + modifier = Modifier.fillMaxSize(), + state = state, + onOrderSelected = onOrderSelected, + onEndOfOrdersListReached = onEndOfOrdersListReached, + onPaginationErrorTryAgain = onPaginationErrorTryAgain, + ) PullRefreshIndicator( refreshing = isRefreshing, @@ -228,23 +196,7 @@ private fun OrdersList( } @Composable -private fun OrderDetails( - state: WooPosOrdersState, - modifier: Modifier = Modifier -) { - val selectedItem: OrderItemViewState? = when (state) { - is WooPosOrdersState.Content -> state.items.firstOrNull { it.id == state.selectedOrderId } - else -> null - } - - WooPosOrdersDetailPaneScreen( - selected = selectedItem, - modifier = modifier.fillMaxSize() - ) -} - -@Composable -fun WooPosOrdersListPaneScreen( +private fun OrdersList( modifier: Modifier = Modifier, state: WooPosOrdersState.Content, onOrderSelected: (Long) -> Unit, @@ -329,14 +281,14 @@ fun WooPosOrdersListPaneScreen( } @Composable -fun WooPosOrdersDetailPaneScreen( - selected: OrderItemViewState?, - modifier: Modifier = Modifier +private fun OrderDetails( + modifier: Modifier = Modifier, + order: OrderItemViewState?, ) { Column(modifier = modifier.fillMaxSize()) { WooPosToolbar( modifier = Modifier.fillMaxWidth(), - titleText = selected?.title ?: "--", + titleText = order?.title ?: "--", titleFontWeight = FontWeight.Bold ) Column( @@ -393,61 +345,31 @@ private fun OrdersPaginationLoadingRow() { @Composable fun OrdersEmpty( - onBackClicked: () -> Unit, onActionClicked: () -> Unit ) { - OrdersScaffoldWithToolbar( - onBackClicked = onBackClicked - ) { - WooPosItemsEmptyList( - modifier = Modifier.fillMaxSize(), - icon = painterResource(id = R.drawable.ic_woo_pos_orders_empty), - title = stringResource(id = R.string.woopos_orders_empty_list_title), - message = stringResource(id = R.string.woopos_orders_empty_list_message), - contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), - actionLabel = stringResource(id = R.string.woopos_orders_empty_action_label), - onActionClicked = onActionClicked - ) - } + WooPosItemsEmptyList( + modifier = Modifier.fillMaxSize(), + icon = painterResource(id = R.drawable.ic_woo_pos_orders_empty), + title = stringResource(id = R.string.woopos_orders_empty_list_title), + message = stringResource(id = R.string.woopos_orders_empty_list_message), + contentDescription = stringResource(id = R.string.woopos_coupons_empty_list_image_description), + actionLabel = stringResource(id = R.string.woopos_orders_empty_action_label), + onActionClicked = onActionClicked + ) } @Composable fun OrdersError( - onBackClicked: () -> Unit, onRetryClicked: () -> Unit ) { - OrdersScaffoldWithToolbar( - onBackClicked = onBackClicked - ) { - WooPosErrorScreen( - message = stringResource(id = R.string.woopos_orders_loading_error_title), - reason = stringResource(id = R.string.woopos_orders_loading_error_message), - primaryButton = Button( - text = stringResource(id = R.string.woopos_orders_loading_error_retry_button), - click = onRetryClicked - ) - ) - } -} - -@Composable -private fun OrdersScaffoldWithToolbar( - onBackClicked: () -> Unit, - content: @Composable () -> Unit -) { - Column(modifier = Modifier.fillMaxSize()) { - WooPosToolbar( - titleText = stringResource(R.string.woopos_orders_title), - onBackClicked = onBackClicked, - modifier = Modifier.fillMaxWidth() + WooPosErrorScreen( + message = stringResource(id = R.string.woopos_orders_loading_error_title), + reason = stringResource(id = R.string.woopos_orders_loading_error_message), + primaryButton = Button( + text = stringResource(id = R.string.woopos_orders_loading_error_retry_button), + click = onRetryClicked ) - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - content() - } - } + ) } @Composable From 483857a365e29311fef73ddfce187c907ebc811a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Tue, 7 Oct 2025 10:03:34 +0200 Subject: [PATCH 12/13] Fix detekt --- .../ui/woopos/common/composeui/component/WooPosErrorScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt index dd7e4a5faff..c1aaced6064 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size From 189e0a46e5ad052490cf379ab445f23d4f53754e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Tue, 7 Oct 2025 17:10:38 +0200 Subject: [PATCH 13/13] Extract the empty screen state to the components and better naming --- ...ent_and_refactor_empty_list_handling.patch | 558 ++++++++++++++++++ .../composeui/component/WooPosEmptyScreen.kt | 133 +++++ ...WooPosErrorAndEmptyStateButtonModifier.kt} | 2 +- .../composeui/component/WooPosErrorScreen.kt | 4 +- .../ui/woopos/home/items/WooPosItemsList.kt | 114 ---- .../home/items/coupons/WooPosCouponsScreen.kt | 4 +- .../search/WooPosCouponsSearchScreen.kt | 4 +- .../items/products/WooPosProductsScreen.kt | 4 +- .../items/search/WooPosItemsSearchScreen.kt | 4 +- .../variations/WooPosVariationsScreen.kt | 4 +- .../ui/woopos/orders/WooPosOrdersScreen.kt | 4 +- 11 files changed, 706 insertions(+), 129 deletions(-) create mode 100644 Add_WooPosEmptyScreen_component_and_refactor_empty_list_handling.patch create mode 100644 WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt rename WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/{WooPosButtonModifier.kt => WooPosErrorAndEmptyStateButtonModifier.kt} (84%) diff --git a/Add_WooPosEmptyScreen_component_and_refactor_empty_list_handling.patch b/Add_WooPosEmptyScreen_component_and_refactor_empty_list_handling.patch new file mode 100644 index 00000000000..01c69b4be33 --- /dev/null +++ b/Add_WooPosEmptyScreen_component_and_refactor_empty_list_handling.patch @@ -0,0 +1,558 @@ +Subject: [PATCH] Add WooPosEmptyScreen component and refactor empty list handling +--- +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt (date 1759845553863) +@@ -22,13 +22,13 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme + import com.woocommerce.android.ui.woopos.home.items.WooPosItemList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator + import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState + import com.woocommerce.android.ui.woopos.home.items.WooPosVariationsViewState +@@ -138,7 +138,7 @@ + } + + is WooPosVariationsViewState.Empty -> { +- WooPosItemsEmptyList( ++ WooPosEmptyScreen( + modifier = Modifier.fillMaxSize() + .padding(top = WooPosSpacing.Large.value), + title = stringResource(id = R.string.woopos_variations_empty_list_title), +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsScreen.kt (date 1759845553856) +@@ -19,6 +19,7 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing +@@ -26,7 +27,6 @@ + import com.woocommerce.android.ui.woopos.home.items.WooPosCouponsViewState + import com.woocommerce.android.ui.woopos.home.items.WooPosItemList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator + import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState + import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState +@@ -92,7 +92,7 @@ + modifier = Modifier.padding(top = WooPosSpacing.Large.value) + ) + +- is WooPosCouponsViewState.Empty -> WooPosItemsEmptyList( ++ is WooPosCouponsViewState.Empty -> WooPosEmptyScreen( + modifier = Modifier.fillMaxSize(), + icon = painterResource(id = R.drawable.img_empty_coupon_list), + title = stringResource(id = R.string.woopos_coupons_empty_list_title), +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt (date 1759845594034) +@@ -77,7 +77,7 @@ + WooPosButton( + text = it.text, + onClick = it.click, +- modifier = WooPosButtonModifier ++ modifier = WooPosErrorAndEmptyStateButtonModifier + ) + } + secondaryButton?.let { +@@ -85,7 +85,7 @@ + WooPosOutlinedButton( + text = it.text, + onClick = it.click, +- modifier = WooPosButtonModifier ++ modifier = WooPosErrorAndEmptyStateButtonModifier + ) + } + Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt (date 1759845553866) +@@ -21,6 +21,7 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing +@@ -28,7 +29,6 @@ + import com.woocommerce.android.ui.woopos.home.items.WooPosItemList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState.Product +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator + import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState + import com.woocommerce.android.ui.woopos.home.items.WooPosProductsViewState +@@ -113,7 +113,7 @@ + modifier = Modifier.padding(top = WooPosSpacing.Large.value) + ) + +- is WooPosProductsViewState.Empty -> WooPosItemsEmptyList( ++ is WooPosProductsViewState.Empty -> WooPosEmptyScreen( + modifier = Modifier.fillMaxSize(), + title = stringResource(id = R.string.woopos_products_empty_list_title), + message = stringResource(id = R.string.woopos_products_empty_list_message), +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt (date 1759845553868) +@@ -22,6 +22,7 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing +@@ -29,7 +30,6 @@ + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding + import com.woocommerce.android.ui.woopos.home.items.WooPosItemList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator + import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState + import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState +@@ -98,7 +98,7 @@ + } + + WooPosItemsSearchViewState.Empty::class.java -> { +- WooPosItemsEmptyList( ++ WooPosEmptyScreen( + modifier = Modifier + .fillMaxSize() + .padding( +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt (date 1759845553869) +@@ -22,6 +22,7 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing +@@ -29,7 +30,6 @@ + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding + import com.woocommerce.android.ui.woopos.home.items.WooPosItemList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator + + @Composable +@@ -96,7 +96,7 @@ + } + + WooPosCouponsSearchViewState.Empty::class.java -> { +- WooPosItemsEmptyList( ++ WooPosEmptyScreen( + modifier = Modifier + .fillMaxSize() + .padding( +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt +new file mode 100644 +--- /dev/null (date 1759845892434) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt (date 1759845892434) +@@ -0,0 +1,133 @@ ++package com.woocommerce.android.ui.woopos.common.composeui.component ++ ++import androidx.compose.foundation.Image ++import androidx.compose.foundation.layout.Arrangement ++import androidx.compose.foundation.layout.Box ++import androidx.compose.foundation.layout.Column ++import androidx.compose.foundation.layout.Spacer ++import androidx.compose.foundation.layout.fillMaxSize ++import androidx.compose.foundation.layout.height ++import androidx.compose.foundation.layout.size ++import androidx.compose.foundation.rememberScrollState ++import androidx.compose.foundation.verticalScroll ++import androidx.compose.runtime.Composable ++import androidx.compose.ui.Alignment ++import androidx.compose.ui.Modifier ++import androidx.compose.ui.graphics.painter.Painter ++import androidx.compose.ui.res.painterResource ++import androidx.compose.ui.text.font.FontWeight ++import androidx.compose.ui.text.style.TextAlign ++import androidx.compose.ui.unit.dp ++import com.woocommerce.android.R ++import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview ++import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing ++import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme ++import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography ++import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding ++ ++@Composable ++fun WooPosEmptyScreen( ++ modifier: Modifier = Modifier, ++ title: String, ++ message: String, ++ contentDescription: String, ++ icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), ++) { ++ WooPosItemsEmptyListInternal( ++ modifier = modifier, ++ title = title, ++ message = message, ++ contentDescription = contentDescription, ++ icon = icon, ++ actionLabel = null, ++ onActionClicked = null ++ ) ++} ++ ++@Composable ++fun WooPosEmptyScreen( ++ modifier: Modifier = Modifier, ++ title: String, ++ message: String, ++ contentDescription: String, ++ icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), ++ actionLabel: String, ++ onActionClicked: (() -> Unit), ++) { ++ WooPosItemsEmptyListInternal( ++ modifier = modifier, ++ title = title, ++ message = message, ++ contentDescription = contentDescription, ++ icon = icon, ++ actionLabel = actionLabel, ++ onActionClicked = onActionClicked ++ ) ++} ++ ++@Composable ++private fun WooPosItemsEmptyListInternal( ++ modifier: Modifier = Modifier, ++ title: String, ++ message: String, ++ contentDescription: String, ++ icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), ++ actionLabel: String?, ++ onActionClicked: (() -> Unit)? = null, ++) { ++ Box( ++ modifier = modifier.verticalScroll(rememberScrollState()), ++ contentAlignment = Alignment.Center ++ ) { ++ Column( ++ horizontalAlignment = Alignment.CenterHorizontally, ++ verticalArrangement = Arrangement.Center ++ ) { ++ Image( ++ modifier = Modifier.size(148.dp), ++ painter = icon, ++ contentDescription = contentDescription, ++ ) ++ ++ Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) ++ ++ WooPosText( ++ text = title, ++ style = WooPosTypography.Heading, ++ fontWeight = FontWeight.Bold, ++ ) ++ ++ Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) ++ ++ WooPosText( ++ text = message, ++ style = WooPosTypography.BodyLarge, ++ fontWeight = FontWeight.Normal, ++ textAlign = TextAlign.Center ++ ) ++ ++ Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) ++ ++ if (onActionClicked != null && actionLabel != null) { ++ WooPosButton( ++ text = actionLabel, ++ onClick = onActionClicked, ++ modifier = WooPosErrorAndEmptyStateButtonModifier ++ ) ++ } ++ } ++ } ++} ++ ++@WooPosPreview ++@Composable ++fun WooPosEmptyScreenPreview() { ++ WooPosTheme { ++ WooPosEmptyScreen( ++ modifier = Modifier.fillMaxSize(), ++ title = "Empty List", ++ message = "This list is empty", ++ contentDescription = "" ++ ) ++ } ++} +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt (date 1759845553871) +@@ -45,6 +45,7 @@ + import com.woocommerce.android.R + import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview + import com.woocommerce.android.ui.woopos.common.composeui.component.Button ++import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator + import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInput +@@ -56,7 +57,6 @@ + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme + import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography +-import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList + import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState + import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState + import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent +@@ -347,7 +347,7 @@ + fun OrdersEmpty( + onActionClicked: () -> Unit + ) { +- WooPosItemsEmptyList( ++ WooPosEmptyScreen( + modifier = Modifier.fillMaxSize(), + icon = painterResource(id = R.drawable.ic_woo_pos_orders_empty), + title = stringResource(id = R.string.woopos_orders_empty_list_title), +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt +rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt +rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt (date 1759845594029) +@@ -5,6 +5,6 @@ + import androidx.compose.ui.Modifier + import androidx.compose.ui.unit.dp + +-val WooPosButtonModifier = Modifier ++val WooPosErrorAndEmptyStateButtonModifier = Modifier + .fillMaxWidth(0.3f) + .height(80.dp) +Index: WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +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 +--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt (revision 2ce1e360549f234c3ec4d92b1d8ffb507ea0b551) ++++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt (date 1759845553861) +@@ -11,7 +11,6 @@ + import androidx.compose.foundation.layout.Row + import androidx.compose.foundation.layout.Spacer + import androidx.compose.foundation.layout.fillMaxHeight +-import androidx.compose.foundation.layout.fillMaxSize + import androidx.compose.foundation.layout.fillMaxWidth + import androidx.compose.foundation.layout.height + import androidx.compose.foundation.layout.heightIn +@@ -21,9 +20,7 @@ + import androidx.compose.foundation.layout.wrapContentHeight + import androidx.compose.foundation.lazy.LazyListState + import androidx.compose.foundation.lazy.items +-import androidx.compose.foundation.rememberScrollState + import androidx.compose.foundation.shape.RoundedCornerShape +-import androidx.compose.foundation.verticalScroll + import androidx.compose.material.icons.Icons + import androidx.compose.material.icons.outlined.LocalOffer + import androidx.compose.material3.MaterialTheme +@@ -36,7 +33,6 @@ + import androidx.compose.ui.Modifier + import androidx.compose.ui.draw.clip + import androidx.compose.ui.graphics.ColorFilter +-import androidx.compose.ui.graphics.painter.Painter + import androidx.compose.ui.graphics.vector.ImageVector + import androidx.compose.ui.layout.ContentScale + import androidx.compose.ui.platform.LocalContext +@@ -46,7 +42,6 @@ + import androidx.compose.ui.semantics.clearAndSetSemantics + import androidx.compose.ui.semantics.contentDescription + import androidx.compose.ui.text.font.FontWeight +-import androidx.compose.ui.text.style.TextAlign + import androidx.compose.ui.text.style.TextOverflow + import androidx.compose.ui.unit.dp + import coil.compose.AsyncImage +@@ -54,8 +49,6 @@ + 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.WooPosButtonModifier + 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 +@@ -534,100 +527,6 @@ + } + } + +-@Composable +-fun WooPosItemsEmptyList( +- modifier: Modifier = Modifier, +- title: String, +- message: String, +- contentDescription: String, +- icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), +-) { +- WooPosItemsEmptyListInternal( +- modifier = modifier, +- title = title, +- message = message, +- contentDescription = contentDescription, +- icon = icon, +- actionLabel = null, +- onActionClicked = null +- ) +-} +- +-@Composable +-fun WooPosItemsEmptyList( +- modifier: Modifier = Modifier, +- title: String, +- message: String, +- contentDescription: String, +- icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), +- actionLabel: String, +- onActionClicked: (() -> Unit), +-) { +- WooPosItemsEmptyListInternal( +- modifier = modifier, +- title = title, +- message = message, +- contentDescription = contentDescription, +- icon = icon, +- actionLabel = actionLabel, +- onActionClicked = onActionClicked +- ) +-} +- +-@Composable +-private fun WooPosItemsEmptyListInternal( +- modifier: Modifier = Modifier, +- title: String, +- message: String, +- contentDescription: String, +- icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), +- actionLabel: String?, +- onActionClicked: (() -> Unit)? = null, +-) { +- Box( +- modifier = modifier.verticalScroll(rememberScrollState()), +- contentAlignment = Alignment.Center +- ) { +- Column( +- horizontalAlignment = Alignment.CenterHorizontally, +- verticalArrangement = Arrangement.Center +- ) { +- Image( +- modifier = Modifier.size(148.dp), +- painter = icon, +- contentDescription = contentDescription, +- ) +- +- Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) +- +- WooPosText( +- text = title, +- style = WooPosTypography.Heading, +- fontWeight = FontWeight.Bold, +- ) +- +- Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) +- +- WooPosText( +- text = message, +- style = WooPosTypography.BodyLarge, +- fontWeight = FontWeight.Normal, +- textAlign = TextAlign.Center +- ) +- +- Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) +- +- if (onActionClicked != null && actionLabel != null) { +- WooPosButton( +- text = actionLabel, +- onClick = onActionClicked, +- modifier = WooPosButtonModifier +- ) +- } +- } +- } +-} +- + @Composable + private fun InfiniteListHandler( + listState: LazyListState, +@@ -701,19 +600,6 @@ + } + } + +-@WooPosPreview +-@Composable +-fun EmptyListPreview() { +- WooPosTheme { +- WooPosItemsEmptyList( +- modifier = Modifier.fillMaxSize(), +- title = "Empty List", +- message = "This list is empty", +- contentDescription = "" +- ) +- } +-} +- + @WooPosPreview + @Composable + fun LoadingListPreview() { diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt new file mode 100644 index 00000000000..0ab34748f94 --- /dev/null +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosEmptyScreen.kt @@ -0,0 +1,133 @@ +package com.woocommerce.android.ui.woopos.common.composeui.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.woocommerce.android.R +import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview +import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing +import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme +import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography +import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding + +@Composable +fun WooPosEmptyScreen( + modifier: Modifier = Modifier, + title: String, + message: String, + contentDescription: String, + icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), +) { + WooPosItemsEmptyListInternal( + modifier = modifier, + title = title, + message = message, + contentDescription = contentDescription, + icon = icon, + actionLabel = null, + onActionClicked = null + ) +} + +@Composable +fun WooPosEmptyScreen( + modifier: Modifier = Modifier, + title: String, + message: String, + contentDescription: String, + icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), + actionLabel: String, + onActionClicked: (() -> Unit), +) { + WooPosItemsEmptyListInternal( + modifier = modifier, + title = title, + message = message, + contentDescription = contentDescription, + icon = icon, + actionLabel = actionLabel, + onActionClicked = onActionClicked + ) +} + +@Composable +private fun WooPosItemsEmptyListInternal( + modifier: Modifier = Modifier, + title: String, + message: String, + contentDescription: String, + icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), + actionLabel: String?, + onActionClicked: (() -> Unit)? = null, +) { + Box( + modifier = modifier.verticalScroll(rememberScrollState()), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Image( + modifier = Modifier.size(148.dp), + painter = icon, + contentDescription = contentDescription, + ) + + Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) + + WooPosText( + text = title, + style = WooPosTypography.Heading, + fontWeight = FontWeight.Bold, + ) + + Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) + + WooPosText( + text = message, + style = WooPosTypography.BodyLarge, + fontWeight = FontWeight.Normal, + textAlign = TextAlign.Center + ) + + Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) + + if (onActionClicked != null && actionLabel != null) { + WooPosButton( + text = actionLabel, + onClick = onActionClicked, + modifier = WooPosErrorAndEmptyStateButtonModifier + ) + } + } + } +} + +@WooPosPreview +@Composable +fun WooPosEmptyScreenPreview() { + WooPosTheme { + WooPosEmptyScreen( + modifier = Modifier.fillMaxSize(), + title = "Empty List", + message = "This list is empty", + contentDescription = "" + ) + } +} diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt similarity index 84% rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt index 2d004d5c574..0603ffd7efa 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosButtonModifier.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorAndEmptyStateButtonModifier.kt @@ -5,6 +5,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -val WooPosButtonModifier = Modifier +val WooPosErrorAndEmptyStateButtonModifier = Modifier .fillMaxWidth(0.3f) .height(80.dp) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt index c1aaced6064..306b4cc2c33 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/composeui/component/WooPosErrorScreen.kt @@ -77,7 +77,7 @@ fun WooPosErrorScreen( WooPosButton( text = it.text, onClick = it.click, - modifier = WooPosButtonModifier + modifier = WooPosErrorAndEmptyStateButtonModifier ) } secondaryButton?.let { @@ -85,7 +85,7 @@ fun WooPosErrorScreen( WooPosOutlinedButton( text = it.text, onClick = it.click, - modifier = WooPosButtonModifier + modifier = WooPosErrorAndEmptyStateButtonModifier ) } Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) 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 15f0bafe6e9..c20c1f1b0cf 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 @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn @@ -21,9 +20,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.LocalOffer import androidx.compose.material3.MaterialTheme @@ -36,7 +33,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext @@ -46,7 +42,6 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import coil.compose.AsyncImage @@ -54,8 +49,6 @@ 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.WooPosButtonModifier 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 @@ -534,100 +527,6 @@ private fun ItemsLoadingItem() { } } -@Composable -fun WooPosItemsEmptyList( - modifier: Modifier = Modifier, - title: String, - message: String, - contentDescription: String, - icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), -) { - WooPosItemsEmptyListInternal( - modifier = modifier, - title = title, - message = message, - contentDescription = contentDescription, - icon = icon, - actionLabel = null, - onActionClicked = null - ) -} - -@Composable -fun WooPosItemsEmptyList( - modifier: Modifier = Modifier, - title: String, - message: String, - contentDescription: String, - icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), - actionLabel: String, - onActionClicked: (() -> Unit), -) { - WooPosItemsEmptyListInternal( - modifier = modifier, - title = title, - message = message, - contentDescription = contentDescription, - icon = icon, - actionLabel = actionLabel, - onActionClicked = onActionClicked - ) -} - -@Composable -private fun WooPosItemsEmptyListInternal( - modifier: Modifier = Modifier, - title: String, - message: String, - contentDescription: String, - icon: Painter = painterResource(R.drawable.ic_woo_pos_not_found), - actionLabel: String?, - onActionClicked: (() -> Unit)? = null, -) { - Box( - modifier = modifier.verticalScroll(rememberScrollState()), - contentAlignment = Alignment.Center - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Image( - modifier = Modifier.size(148.dp), - painter = icon, - contentDescription = contentDescription, - ) - - Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) - - WooPosText( - text = title, - style = WooPosTypography.Heading, - fontWeight = FontWeight.Bold, - ) - - Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) - - WooPosText( - text = message, - style = WooPosTypography.BodyLarge, - fontWeight = FontWeight.Normal, - textAlign = TextAlign.Center - ) - - Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding())) - - if (onActionClicked != null && actionLabel != null) { - WooPosButton( - text = actionLabel, - onClick = onActionClicked, - modifier = WooPosButtonModifier - ) - } - } - } -} - @Composable private fun InfiniteListHandler( listState: LazyListState, @@ -701,19 +600,6 @@ fun ItemListPreview() { } } -@WooPosPreview -@Composable -fun EmptyListPreview() { - WooPosTheme { - WooPosItemsEmptyList( - modifier = Modifier.fillMaxSize(), - title = "Empty List", - message = "This list is empty", - contentDescription = "" - ) - } -} - @WooPosPreview @Composable fun LoadingListPreview() { 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 dc8b22cc5af..0c4edbe4226 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 @@ -19,6 +19,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing @@ -26,7 +27,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosThe import com.woocommerce.android.ui.woopos.home.items.WooPosCouponsViewState import com.woocommerce.android.ui.woopos.home.items.WooPosItemList import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState @@ -92,7 +92,7 @@ private fun WooPosCouponsScreen( modifier = Modifier.padding(top = WooPosSpacing.Large.value) ) - is WooPosCouponsViewState.Empty -> WooPosItemsEmptyList( + is WooPosCouponsViewState.Empty -> WooPosEmptyScreen( modifier = Modifier.fillMaxSize(), icon = painterResource(id = R.drawable.img_empty_coupon_list), title = stringResource(id = R.string.woopos_coupons_empty_list_title), diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt index fb44d6f92b2..b1fef0230d1 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/search/WooPosCouponsSearchScreen.kt @@ -22,6 +22,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing @@ -29,7 +30,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosThe import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding import com.woocommerce.android.ui.woopos.home.items.WooPosItemList import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator @Composable @@ -96,7 +96,7 @@ private fun WooPosCouponsSearchScreen( } WooPosCouponsSearchViewState.Empty::class.java -> { - WooPosItemsEmptyList( + WooPosEmptyScreen( modifier = Modifier .fillMaxSize() .padding( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt index 397ac5d9952..ecf88856b4d 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsScreen.kt @@ -21,6 +21,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing @@ -28,7 +29,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosThe import com.woocommerce.android.ui.woopos.home.items.WooPosItemList import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState.Product -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosProductsViewState @@ -113,7 +113,7 @@ private fun ProductsList( modifier = Modifier.padding(top = WooPosSpacing.Large.value) ) - is WooPosProductsViewState.Empty -> WooPosItemsEmptyList( + is WooPosProductsViewState.Empty -> WooPosEmptyScreen( modifier = Modifier.fillMaxSize(), title = stringResource(id = R.string.woopos_products_empty_list_title), message = stringResource(id = R.string.woopos_products_empty_list_message), diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt index e9cc791a938..96a2f018ee3 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchScreen.kt @@ -22,6 +22,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing @@ -29,7 +30,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosThe import com.woocommerce.android.ui.woopos.common.composeui.designsystem.toAdaptivePadding import com.woocommerce.android.ui.woopos.home.items.WooPosItemList import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState @@ -98,7 +98,7 @@ private fun WooPosItemsSearchScreen( } WooPosItemsSearchViewState.Empty::class.java -> { - WooPosItemsEmptyList( + WooPosEmptyScreen( modifier = Modifier .fillMaxSize() .padding( diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt index 5c63c77faa5..0a9aa6b42ee 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt @@ -22,13 +22,13 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme import com.woocommerce.android.ui.woopos.home.items.WooPosItemList import com.woocommerce.android.ui.woopos.home.items.WooPosItemSelectionViewState -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosItemsLoadingIndicator import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState import com.woocommerce.android.ui.woopos.home.items.WooPosVariationsViewState @@ -138,7 +138,7 @@ private fun WooPosVariationsScreens( } is WooPosVariationsViewState.Empty -> { - WooPosItemsEmptyList( + WooPosEmptyScreen( modifier = Modifier.fillMaxSize() .padding(top = WooPosSpacing.Large.value), title = stringResource(id = R.string.woopos_variations_empty_list_title), diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt index e2caed5b56b..0483c9d6750 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt @@ -45,6 +45,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import com.woocommerce.android.R import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview import com.woocommerce.android.ui.woopos.common.composeui.component.Button +import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosEmptyScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosPaginationErrorIndicator import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInput @@ -56,7 +57,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosToolba import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosSpacing import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTheme import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTypography -import com.woocommerce.android.ui.woopos.home.items.WooPosItemsEmptyList import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent @@ -347,7 +347,7 @@ private fun OrdersPaginationLoadingRow() { fun OrdersEmpty( onActionClicked: () -> Unit ) { - WooPosItemsEmptyList( + WooPosEmptyScreen( modifier = Modifier.fillMaxSize(), icon = painterResource(id = R.drawable.ic_woo_pos_orders_empty), title = stringResource(id = R.string.woopos_orders_empty_list_title),