Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import com.woocommerce.android.ui.woopos.common.composeui.designsystem.WooPosTyp
@Composable
fun WooPosOrderDetails(
modifier: Modifier = Modifier,
details: OrderDetailsViewState,
details: OrderDetailsViewState.Computed.Details,
onEmailReceiptButtonClicked: (Long) -> Unit
) {
Column(
Expand Down Expand Up @@ -89,7 +89,7 @@ fun WooPosOrderDetails(
}

@Composable
private fun OrdersHeader(details: OrderDetailsViewState) {
private fun OrdersHeader(details: OrderDetailsViewState.Computed.Details) {
Column(modifier = Modifier.fillMaxWidth()) {
WooPosText(
text = details.dateTime,
Expand All @@ -113,7 +113,7 @@ private fun OrdersHeader(details: OrderDetailsViewState) {
}

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

@Composable
@Suppress("DestructuringDeclarationWithTooManyEntries")
private fun OrderProductItem(row: OrderDetailsViewState.LineItemRow) {
private fun OrderProductItem(row: OrderDetailsViewState.Computed.Details.LineItemRow) {
ConstraintLayout(
modifier = Modifier
.fillMaxWidth()
Expand Down Expand Up @@ -189,7 +189,7 @@ private fun OrderProductItem(row: OrderDetailsViewState.LineItemRow) {
}

@Composable
private fun OrdersTotals(details: OrderDetailsViewState) {
private fun OrdersTotals(details: OrderDetailsViewState.Computed.Details) {
WooPosCard(shadowType = ShadowType.Soft) {
Column(Modifier.padding(WooPosSpacing.Medium.value)) {
WooPosText(
Expand Down Expand Up @@ -348,18 +348,18 @@ private fun DividerWithSpacing() {
@WooPosPreview
@Composable
fun WooPosOrderDetailsPreview() {
val orderDetails = OrderDetailsViewState(
val orderDetails = OrderDetailsViewState.Computed.Details(
id = 1L,
number = "#014",
dateTime = "Aug 28, 2025 at 10:31 AM",
customerEmail = "[email protected]",
status = PosOrderStatus(text = "Completed", colorKey = OrderStatusColorKey.COMPLETED),
lineItems = listOf(
OrderDetailsViewState.LineItemRow(101, "Cup", "2 x $4.00", "$8.00", null),
OrderDetailsViewState.LineItemRow(102, "Coffee Container", "1 x $10.00", "$10.00", null),
OrderDetailsViewState.LineItemRow(103, "Paper Filter", "1 x $5.00", "$5.00", null)
OrderDetailsViewState.Computed.Details.LineItemRow(101, "Cup", "2 x $4.00", "$8.00", null),
OrderDetailsViewState.Computed.Details.LineItemRow(102, "Coffee Container", "1 x $10.00", "$10.00", null),
OrderDetailsViewState.Computed.Details.LineItemRow(103, "Paper Filter", "1 x $5.00", "$5.00", null)
),
breakdown = OrderDetailsViewState.TotalsBreakdown(
breakdown = OrderDetailsViewState.Computed.Details.TotalsBreakdown(
products = "$23.00",
discount = "-$5.00",
discountCode = "SAVE5",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -524,8 +524,8 @@ fun WooPosOrdersScreenPreview() {
state = WooPosOrdersState.Content(
items = WooPosOrdersState.Content.Items.Loaded(
items = mapOf(
item1 to details1,
item2 to details2
item1 to OrderDetailsViewState.Computed(orderId = 1L, details = details1),
item2 to OrderDetailsViewState.Computed(orderId = 2L, details = details2)
)
),
pullToRefreshState = WooPosPullToRefreshState.Enabled,
Expand Down Expand Up @@ -617,18 +617,18 @@ fun WooPosOrdersNothingFoundStatePreview() {
private fun sampleOrderDetails(
id: Long = 1L,
number: String = "#014"
) = OrderDetailsViewState(
) = OrderDetailsViewState.Computed.Details(
id = id,
number = number,
dateTime = "Aug 28, 2025 at 10:31 AM",
customerEmail = "[email protected]",
status = PosOrderStatus(text = "Completed", colorKey = OrderStatusColorKey.COMPLETED),
lineItems = listOf(
OrderDetailsViewState.LineItemRow(101, "Cup", "1 x $8.50", "$15.00", null),
OrderDetailsViewState.LineItemRow(102, "Coffee Container", "1 x $10.00", "$8.00", null),
OrderDetailsViewState.LineItemRow(103, "Paper Filter", "1 x $4.50", "$8.00", null)
OrderDetailsViewState.Computed.Details.LineItemRow(101, "Cup", "1 x $8.50", "$15.00", null),
OrderDetailsViewState.Computed.Details.LineItemRow(102, "Coffee Container", "1 x $10.00", "$8.00", null),
OrderDetailsViewState.Computed.Details.LineItemRow(103, "Paper Filter", "1 x $4.50", "$8.00", null)
),
breakdown = OrderDetailsViewState.TotalsBreakdown(
breakdown = OrderDetailsViewState.Computed.Details.TotalsBreakdown(
products = "$23.00",
discount = "-$5.00",
discountCode = "8qew4mnq",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,62 @@
package com.woocommerce.android.ui.woopos.orders

import androidx.compose.runtime.Immutable
import com.woocommerce.android.model.Order
import com.woocommerce.android.model.Order.Status
import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosSearchInputState
import com.woocommerce.android.ui.woopos.home.items.WooPosPaginationState
import com.woocommerce.android.ui.woopos.home.items.WooPosPullToRefreshState

@Immutable
data class OrderDetailsViewState(
val id: Long,
val number: String,
val dateTime: String,
val customerEmail: String?,
val status: PosOrderStatus,
sealed class OrderDetailsViewState {
abstract val orderId: Long

val lineItems: List<LineItemRow>,
val breakdown: TotalsBreakdown,
val total: String,
val totalPaid: String,
val paymentMethodTitle: String?,
) {
@Immutable
data class LineItemRow(
val id: Long,
val name: String,
val qtyAndUnitPrice: String,
val lineTotal: String,
val imageUrl: String?,
)
data class Lazy(
override val orderId: Long,
val order: Order
) : OrderDetailsViewState()

@Immutable
data class TotalsBreakdown(
val products: String,
val discount: String?,
val discountCode: String?,
val taxes: String,
val shipping: String?,
val refunds: List<String>,
val netPayment: String?
)
data class Computed(
override val orderId: Long,
val details: Details
) : OrderDetailsViewState() {
@Immutable
data class Details(
val id: Long,
val number: String,
val dateTime: String,
val customerEmail: String?,
val status: PosOrderStatus,

val lineItems: List<LineItemRow>,
val breakdown: TotalsBreakdown,
val total: String,
val totalPaid: String,
val paymentMethodTitle: String?,
) {
@Immutable
data class LineItemRow(
val id: Long,
val name: String,
val qtyAndUnitPrice: String,
val lineTotal: String,
val imageUrl: String?,
)

@Immutable
data class TotalsBreakdown(
val products: String,
val discount: String?,
val discountCode: String?,
val taxes: String,
val shipping: String?,
val refunds: List<String>,
val netPayment: String?
)
}
}
}

@Immutable
Expand All @@ -64,7 +82,7 @@ sealed class WooPosOrdersState {
val items: Items,
override val pullToRefreshState: WooPosPullToRefreshState,
override val searchInputState: WooPosSearchInputState,
val selectedDetails: OrderDetailsViewState,
val selectedDetails: OrderDetailsViewState.Computed.Details,
val paginationState: WooPosPaginationState
) : WooPosOrdersState() {
sealed class Items {
Expand Down
Loading
Loading