@@ -32,10 +32,12 @@ import androidx.compose.material.IconButton
3232import androidx.compose.material.MaterialTheme
3333import androidx.compose.material.Text
3434import androidx.compose.material.pullrefresh.PullRefreshIndicator
35+ import androidx.compose.material.pullrefresh.PullRefreshState
3536import androidx.compose.material.pullrefresh.pullRefresh
3637import androidx.compose.material.pullrefresh.rememberPullRefreshState
3738import androidx.compose.runtime.Composable
3839import androidx.compose.runtime.LaunchedEffect
40+ import androidx.compose.runtime.State
3941import androidx.compose.runtime.collectAsState
4042import androidx.compose.runtime.derivedStateOf
4143import androidx.compose.runtime.remember
@@ -73,7 +75,6 @@ import com.woocommerce.android.ui.woopos.common.composeui.toAdaptivePadding
7375import com.woocommerce.android.ui.woopos.home.items.WooPosItem.SimpleProduct
7476import com.woocommerce.android.ui.woopos.home.items.WooPosItem.VariableProduct
7577import com.woocommerce.android.ui.woopos.home.items.WooPosItemsUIEvent.EndOfItemsListReached
76- import com.woocommerce.android.ui.woopos.home.items.WooPosItemsUIEvent.ItemClicked
7778import com.woocommerce.android.ui.woopos.home.items.WooPosItemsUIEvent.ProductsLoadingErrorRetryButtonClicked
7879import com.woocommerce.android.ui.woopos.home.items.WooPosItemsUIEvent.PullToRefreshTriggered
7980import kotlinx.coroutines.flow.MutableStateFlow
@@ -83,12 +84,18 @@ import kotlinx.coroutines.flow.filter
8384
8485@OptIn(ExperimentalMaterialApi ::class )
8586@Composable
86- fun WooPosItemsScreen (modifier : Modifier = Modifier ) {
87+ fun WooPosItemsScreen (
88+ modifier : Modifier = Modifier ,
89+ listState : LazyListState ,
90+ ) {
8791 val productsViewModel: WooPosItemsViewModel = hiltViewModel()
8892 WooPosItemsScreen (
8993 modifier = modifier,
9094 itemsStateFlow = productsViewModel.viewState,
91- onItemClicked = { productsViewModel.onUIEvent(ItemClicked (it)) },
95+ listState,
96+ onItemClicked = { item ->
97+ productsViewModel.onUIEvent(WooPosItemsUIEvent .ItemClicked (item))
98+ },
9299 onEndOfItemListReached = { productsViewModel.onUIEvent(EndOfItemsListReached ) },
93100 onPullToRefresh = { productsViewModel.onUIEvent(PullToRefreshTriggered ) },
94101 onRetryClicked = { productsViewModel.onUIEvent(ProductsLoadingErrorRetryButtonClicked ) },
@@ -109,6 +116,7 @@ fun WooPosItemsScreen(modifier: Modifier = Modifier) {
109116private fun WooPosItemsScreen (
110117 modifier : Modifier = Modifier ,
111118 itemsStateFlow : StateFlow <WooPosItemsViewState >,
119+ listState : LazyListState ,
112120 onItemClicked : (item: WooPosItem ) -> Unit ,
113121 onEndOfItemListReached : () -> Unit ,
114122 onPullToRefresh : () -> Unit ,
@@ -119,6 +127,35 @@ private fun WooPosItemsScreen(
119127) {
120128 val state = itemsStateFlow.collectAsState()
121129 val pullToRefreshState = rememberPullRefreshState(state.value.reloadingProductsWithPullToRefresh, onPullToRefresh)
130+
131+ MainItemsList (
132+ modifier = modifier,
133+ pullToRefreshState = pullToRefreshState,
134+ state = state,
135+ listState = listState,
136+ onToolbarInfoIconClicked = onToolbarInfoIconClicked,
137+ onSimpleProductsBannerLearnMoreClicked = onSimpleProductsBannerLearnMoreClicked,
138+ onSimpleProductsBannerClosed = onSimpleProductsBannerClosed,
139+ onItemClicked = onItemClicked,
140+ onEndOfItemListReached = onEndOfItemListReached,
141+ onRetryClicked = onRetryClicked
142+ )
143+ }
144+
145+ @ExperimentalMaterialApi
146+ @Composable
147+ private fun MainItemsList (
148+ modifier : Modifier ,
149+ pullToRefreshState : PullRefreshState ,
150+ state : State <WooPosItemsViewState >,
151+ listState : LazyListState ,
152+ onToolbarInfoIconClicked : () -> Unit ,
153+ onSimpleProductsBannerLearnMoreClicked : () -> Unit ,
154+ onSimpleProductsBannerClosed : () -> Unit ,
155+ onItemClicked : (item: WooPosItem ) -> Unit ,
156+ onEndOfItemListReached : () -> Unit ,
157+ onRetryClicked : () -> Unit
158+ ) {
122159 Box (
123160 modifier = modifier
124161 .fillMaxSize()
@@ -154,6 +191,7 @@ private fun WooPosItemsScreen(
154191 )
155192 ItemsList (
156193 itemsState,
194+ listState,
157195 onItemClicked,
158196 onEndOfItemListReached,
159197 )
@@ -249,10 +287,10 @@ private fun SimpleProductsBanner(
249287@Composable
250288private fun ItemsList (
251289 state : WooPosItemsViewState .Content ,
290+ listState : LazyListState ,
252291 onItemClicked : (item: WooPosItem ) -> Unit ,
253292 onEndOfProductsListReached : () -> Unit ,
254293) {
255- val listState = rememberLazyListState()
256294 WooPosLazyColumn (
257295 verticalArrangement = Arrangement .spacedBy(8 .dp),
258296 contentPadding = PaddingValues (2 .dp),
@@ -614,6 +652,7 @@ fun WooPosItemsScreenPreview(modifier: Modifier = Modifier) {
614652 WooPosItemsScreen (
615653 modifier = modifier,
616654 itemsStateFlow = productState,
655+ listState = rememberLazyListState(),
617656 onItemClicked = {},
618657 onEndOfItemListReached = {},
619658 onPullToRefresh = {},
@@ -638,6 +677,7 @@ fun WooPosItemsScreenLoadingPreview() {
638677 WooPosTheme {
639678 WooPosItemsScreen (
640679 itemsStateFlow = productState,
680+ listState = rememberLazyListState(),
641681 onItemClicked = {},
642682 onEndOfItemListReached = {},
643683 onPullToRefresh = {},
@@ -657,6 +697,7 @@ fun WooPosProductsScreenEmptyListPreview() {
657697 WooPosTheme {
658698 WooPosItemsScreen (
659699 itemsStateFlow = productState,
700+ listState = rememberLazyListState(),
660701 onItemClicked = {},
661702 onEndOfItemListReached = {},
662703 onPullToRefresh = {},
@@ -676,6 +717,7 @@ fun WooPosProductsScreenErrorPreview() {
676717 WooPosTheme {
677718 WooPosItemsScreen (
678719 itemsStateFlow = productState,
720+ listState = rememberLazyListState(),
679721 onItemClicked = {},
680722 onEndOfItemListReached = {},
681723 onPullToRefresh = {},
@@ -728,6 +770,7 @@ fun WooPosHomeScreenItemsWithSimpleProductsOnlyBannerPreview() {
728770 WooPosTheme {
729771 WooPosItemsScreen (
730772 itemsStateFlow = productState,
773+ listState = rememberLazyListState(),
731774 onItemClicked = {},
732775 onEndOfItemListReached = {},
733776 onPullToRefresh = {},
@@ -780,6 +823,7 @@ fun WooPosHomeScreenItemsWithInfoIconInToolbarPreview() {
780823 WooPosTheme {
781824 WooPosItemsScreen (
782825 itemsStateFlow = productState,
826+ listState = rememberLazyListState(),
783827 onItemClicked = {},
784828 onEndOfItemListReached = {},
785829 onPullToRefresh = {},
0 commit comments