Skip to content

Commit d629f55

Browse files
authored
Merge pull request #14905 from woocommerce/fix/pos-historical-orders-loading-improvements
[POS Orders] Improve loading by doing it lazily
2 parents 3532e3f + 851b4db commit d629f55

File tree

4 files changed

+142
-79
lines changed

4 files changed

+142
-79
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersDetails.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTyp
4545
@Composable
4646
fun WooPosOrderDetails(
4747
modifier: Modifier = Modifier,
48-
details: OrderDetailsViewState,
48+
details: OrderDetailsViewState.Computed.Details,
4949
onEmailReceiptButtonClicked: (Long) -> Unit
5050
) {
5151
Column(
@@ -89,7 +89,7 @@ fun WooPosOrderDetails(
8989
}
9090

9191
@Composable
92-
private fun OrdersHeader(details: OrderDetailsViewState) {
92+
private fun OrdersHeader(details: OrderDetailsViewState.Computed.Details) {
9393
Column(modifier = Modifier.fillMaxWidth()) {
9494
WooPosText(
9595
text = details.dateTime,
@@ -113,7 +113,7 @@ private fun OrdersHeader(details: OrderDetailsViewState) {
113113
}
114114

115115
@Composable
116-
private fun OrdersProducts(lineItems: List<OrderDetailsViewState.LineItemRow>) {
116+
private fun OrdersProducts(lineItems: List<OrderDetailsViewState.Computed.Details.LineItemRow>) {
117117
WooPosCard(shadowType = ShadowType.Soft) {
118118
Column(Modifier.padding(WooPosSpacing.Medium.value)) {
119119
WooPosText(
@@ -137,7 +137,7 @@ private fun OrdersProducts(lineItems: List<OrderDetailsViewState.LineItemRow>) {
137137

138138
@Composable
139139
@Suppress("DestructuringDeclarationWithTooManyEntries")
140-
private fun OrderProductItem(row: OrderDetailsViewState.LineItemRow) {
140+
private fun OrderProductItem(row: OrderDetailsViewState.Computed.Details.LineItemRow) {
141141
ConstraintLayout(
142142
modifier = Modifier
143143
.fillMaxWidth()
@@ -189,7 +189,7 @@ private fun OrderProductItem(row: OrderDetailsViewState.LineItemRow) {
189189
}
190190

191191
@Composable
192-
private fun OrdersTotals(details: OrderDetailsViewState) {
192+
private fun OrdersTotals(details: OrderDetailsViewState.Computed.Details) {
193193
WooPosCard(shadowType = ShadowType.Soft) {
194194
Column(Modifier.padding(WooPosSpacing.Medium.value)) {
195195
WooPosText(
@@ -348,18 +348,18 @@ private fun DividerWithSpacing() {
348348
@WooPosPreview
349349
@Composable
350350
fun WooPosOrderDetailsPreview() {
351-
val orderDetails = OrderDetailsViewState(
351+
val orderDetails = OrderDetailsViewState.Computed.Details(
352352
id = 1L,
353353
number = "#014",
354354
dateTime = "Aug 28, 2025 at 10:31 AM",
355355
customerEmail = "[email protected]",
356356
status = PosOrderStatus(text = "Completed", colorKey = OrderStatusColorKey.COMPLETED),
357357
lineItems = listOf(
358-
OrderDetailsViewState.LineItemRow(101, "Cup", "2 x $4.00", "$8.00", null),
359-
OrderDetailsViewState.LineItemRow(102, "Coffee Container", "1 x $10.00", "$10.00", null),
360-
OrderDetailsViewState.LineItemRow(103, "Paper Filter", "1 x $5.00", "$5.00", null)
358+
OrderDetailsViewState.Computed.Details.LineItemRow(101, "Cup", "2 x $4.00", "$8.00", null),
359+
OrderDetailsViewState.Computed.Details.LineItemRow(102, "Coffee Container", "1 x $10.00", "$10.00", null),
360+
OrderDetailsViewState.Computed.Details.LineItemRow(103, "Paper Filter", "1 x $5.00", "$5.00", null)
361361
),
362-
breakdown = OrderDetailsViewState.TotalsBreakdown(
362+
breakdown = OrderDetailsViewState.Computed.Details.TotalsBreakdown(
363363
products = "$23.00",
364364
discount = "-$5.00",
365365
discountCode = "SAVE5",

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersScreen.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -524,8 +524,8 @@ fun WooPosOrdersScreenPreview() {
524524
state = WooPosOrdersState.Content(
525525
items = WooPosOrdersState.Content.Items.Loaded(
526526
items = mapOf(
527-
item1 to details1,
528-
item2 to details2
527+
item1 to OrderDetailsViewState.Computed(orderId = 1L, details = details1),
528+
item2 to OrderDetailsViewState.Computed(orderId = 2L, details = details2)
529529
)
530530
),
531531
pullToRefreshState = WooPosPullToRefreshState.Enabled,
@@ -617,18 +617,18 @@ fun WooPosOrdersNothingFoundStatePreview() {
617617
private fun sampleOrderDetails(
618618
id: Long = 1L,
619619
number: String = "#014"
620-
) = OrderDetailsViewState(
620+
) = OrderDetailsViewState.Computed.Details(
621621
id = id,
622622
number = number,
623623
dateTime = "Aug 28, 2025 at 10:31 AM",
624624
customerEmail = "[email protected]",
625625
status = PosOrderStatus(text = "Completed", colorKey = OrderStatusColorKey.COMPLETED),
626626
lineItems = listOf(
627-
OrderDetailsViewState.LineItemRow(101, "Cup", "1 x $8.50", "$15.00", null),
628-
OrderDetailsViewState.LineItemRow(102, "Coffee Container", "1 x $10.00", "$8.00", null),
629-
OrderDetailsViewState.LineItemRow(103, "Paper Filter", "1 x $4.50", "$8.00", null)
627+
OrderDetailsViewState.Computed.Details.LineItemRow(101, "Cup", "1 x $8.50", "$15.00", null),
628+
OrderDetailsViewState.Computed.Details.LineItemRow(102, "Coffee Container", "1 x $10.00", "$8.00", null),
629+
OrderDetailsViewState.Computed.Details.LineItemRow(103, "Paper Filter", "1 x $4.50", "$8.00", null)
630630
),
631-
breakdown = OrderDetailsViewState.TotalsBreakdown(
631+
breakdown = OrderDetailsViewState.Computed.Details.TotalsBreakdown(
632632
products = "$23.00",
633633
discount = "-$5.00",
634634
discountCode = "8qew4mnq",

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersState.kt

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,62 @@
11
package com.woocommerce.android.ui.woopos.orders
22

33
import androidx.compose.runtime.Immutable
4+
import com.woocommerce.android.model.Order
45
import com.woocommerce.android.model.Order.Status
56
import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInputState
67
import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState
78
import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState
89

910
@Immutable
10-
data class OrderDetailsViewState(
11-
val id: Long,
12-
val number: String,
13-
val dateTime: String,
14-
val customerEmail: String?,
15-
val status: PosOrderStatus,
11+
sealed class OrderDetailsViewState {
12+
abstract val orderId: Long
1613

17-
val lineItems: List<LineItemRow>,
18-
val breakdown: TotalsBreakdown,
19-
val total: String,
20-
val totalPaid: String,
21-
val paymentMethodTitle: String?,
22-
) {
2314
@Immutable
24-
data class LineItemRow(
25-
val id: Long,
26-
val name: String,
27-
val qtyAndUnitPrice: String,
28-
val lineTotal: String,
29-
val imageUrl: String?,
30-
)
15+
data class Lazy(
16+
override val orderId: Long,
17+
val order: Order
18+
) : OrderDetailsViewState()
3119

3220
@Immutable
33-
data class TotalsBreakdown(
34-
val products: String,
35-
val discount: String?,
36-
val discountCode: String?,
37-
val taxes: String,
38-
val shipping: String?,
39-
val refunds: List<String>,
40-
val netPayment: String?
41-
)
21+
data class Computed(
22+
override val orderId: Long,
23+
val details: Details
24+
) : OrderDetailsViewState() {
25+
@Immutable
26+
data class Details(
27+
val id: Long,
28+
val number: String,
29+
val dateTime: String,
30+
val customerEmail: String?,
31+
val status: PosOrderStatus,
32+
33+
val lineItems: List<LineItemRow>,
34+
val breakdown: TotalsBreakdown,
35+
val total: String,
36+
val totalPaid: String,
37+
val paymentMethodTitle: String?,
38+
) {
39+
@Immutable
40+
data class LineItemRow(
41+
val id: Long,
42+
val name: String,
43+
val qtyAndUnitPrice: String,
44+
val lineTotal: String,
45+
val imageUrl: String?,
46+
)
47+
48+
@Immutable
49+
data class TotalsBreakdown(
50+
val products: String,
51+
val discount: String?,
52+
val discountCode: String?,
53+
val taxes: String,
54+
val shipping: String?,
55+
val refunds: List<String>,
56+
val netPayment: String?
57+
)
58+
}
59+
}
4260
}
4361

4462
@Immutable
@@ -64,7 +82,7 @@ sealed class WooPosOrdersState {
6482
val items: Items,
6583
override val pullToRefreshState: WooPosPullToRefreshState,
6684
override val searchInputState: WooPosSearchInputState,
67-
val selectedDetails: OrderDetailsViewState,
85+
val selectedDetails: OrderDetailsViewState.Computed.Details,
6886
val paginationState: WooPosPaginationState
6987
) : WooPosOrdersState() {
7088
sealed class Items {

0 commit comments

Comments
 (0)