Skip to content

Commit b70396c

Browse files
committed
Refactor to better readability
1 parent 9713b6d commit b70396c

File tree

2 files changed

+52
-46
lines changed

2 files changed

+52
-46
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ sealed class WooPosOrdersState {
2121
val items: List<OrderItemViewState>,
2222
val pullToRefreshState: WooPosPullToRefreshState,
2323
val paginationState: WooPosPaginationState,
24-
val selectedOrderId: Long?,
25-
val listError: String? = null,
24+
val selectedOrderId: Long?
2625
) : WooPosOrdersState()
2726

2827
@Immutable

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

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,11 @@ class WooPosOrdersViewModel @Inject constructor(
2424
private var orders: List<Order> = emptyList()
2525
private var selectedId: Long? = null
2626

27-
init {
28-
loadOrders()
29-
}
27+
init { loadOrders() }
3028

3129
fun onOrderSelected(orderId: Long) {
3230
selectedId = orderId
33-
val s = _state.value
34-
if (s is WooPosOrdersState.Content) {
31+
(state.value as? WooPosOrdersState.Content)?.let { s ->
3532
_state.value = s.copy(
3633
items = orders.toOrderItems(selectedId),
3734
selectedOrderId = selectedId
@@ -40,8 +37,7 @@ class WooPosOrdersViewModel @Inject constructor(
4037
}
4138

4239
fun refresh() {
43-
val s = _state.value
44-
_state.value = when (s) {
40+
_state.value = when (val s = _state.value) {
4541
is WooPosOrdersState.Content -> s.copy(pullToRefreshState = WooPosPullToRefreshState.Refreshing)
4642
else -> WooPosOrdersState.Loading
4743
}
@@ -53,50 +49,61 @@ class WooPosOrdersViewModel @Inject constructor(
5349
viewModelScope.launch {
5450
ordersDataSource.loadOrders().collect { result ->
5551
when (result) {
56-
is LoadOrdersResult.Error -> {
57-
_state.value = WooPosOrdersState.Error(message = result.message)
58-
}
59-
60-
is LoadOrdersResult.SuccessCache,
61-
is LoadOrdersResult.SuccessRemote -> {
62-
val newOrders = when (result) {
63-
is LoadOrdersResult.SuccessCache -> result.orders
64-
is LoadOrdersResult.SuccessRemote -> result.orders
65-
else -> emptyList()
66-
}
67-
68-
orders = newOrders
69-
selectedId = chooseSelectedId(selectedId, newOrders)
70-
71-
_state.value = if (newOrders.isEmpty()) {
72-
toStateForEmpty(result)
73-
} else {
74-
WooPosOrdersState.Content(
75-
items = newOrders.toOrderItems(selectedId),
76-
selectedOrderId = selectedId,
77-
pullToRefreshState = WooPosPullToRefreshState.Enabled,
78-
paginationState = WooPosPaginationState.None,
79-
listError = null
80-
)
81-
}
82-
}
52+
is LoadOrdersResult.Error ->
53+
handleError(result.message)
54+
55+
is LoadOrdersResult.SuccessCache ->
56+
handleSuccess(result.orders, isCache = true)
57+
58+
is LoadOrdersResult.SuccessRemote ->
59+
handleSuccess(result.orders, isCache = false)
8360
}
8461
}
8562
}
8663
}
8764

88-
private fun chooseSelectedId(
89-
current: Long?,
90-
newOrders: List<Order>
91-
): Long? {
92-
return current?.takeIf { id -> newOrders.any { it.id == id } }
93-
?: newOrders.firstOrNull()?.id
65+
private fun handleError(message: String) {
66+
_state.value = WooPosOrdersState.Error(message)
9467
}
9568

96-
private fun toStateForEmpty(result: LoadOrdersResult): WooPosOrdersState = when (result) {
97-
is LoadOrdersResult.SuccessCache -> WooPosOrdersState.Loading
98-
is LoadOrdersResult.SuccessRemote -> WooPosOrdersState.Empty
99-
is LoadOrdersResult.Error -> WooPosOrdersState.Error(result.message)
69+
private fun handleSuccess(newOrders: List<Order>, isCache: Boolean) {
70+
applySelection(newOrders)
71+
72+
if (newOrders.isEmpty()) {
73+
handleEmpty(isCache)
74+
} else {
75+
setContent(newOrders)
76+
}
77+
}
78+
79+
private fun handleEmpty(isCache: Boolean) {
80+
if (isCache && isRefreshing() && _state.value is WooPosOrdersState.Content) {
81+
return
82+
}
83+
_state.value = if (isCache) WooPosOrdersState.Loading else WooPosOrdersState.Empty
84+
}
85+
86+
private fun setContent(newOrders: List<Order>) {
87+
_state.value = WooPosOrdersState.Content(
88+
items = newOrders.toOrderItems(selectedId),
89+
selectedOrderId = selectedId,
90+
pullToRefreshState = WooPosPullToRefreshState.Enabled,
91+
paginationState = WooPosPaginationState.None
92+
)
93+
}
94+
95+
private fun applySelection(newOrders: List<Order>) {
96+
orders = newOrders
97+
selectedId = chooseSelectedId(selectedId, newOrders)
98+
}
99+
100+
private fun isRefreshing(): Boolean =
101+
(state.value as? WooPosOrdersState.Content)
102+
?.pullToRefreshState == WooPosPullToRefreshState.Refreshing
103+
104+
private fun chooseSelectedId(current: Long?, newOrders: List<Order>): Long? {
105+
return current?.takeIf { id -> newOrders.any { it.id == id } }
106+
?: newOrders.firstOrNull()?.id
100107
}
101108
}
102109

0 commit comments

Comments
 (0)