Skip to content

Commit

Permalink
Merge pull request #13491 from woocommerce/issue/13490-2-pane-order-bug
Browse files Browse the repository at this point in the history
[Order List]Ensure First Order is Selected When Filtering is Active
  • Loading branch information
AnirudhBhat authored Feb 11, 2025
2 parents b1a251e + dad102d commit db73dcc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
1 change: 1 addition & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
21.8
-----
- [**] Improved accessibility support (handling of increased text size) in in-person payment flows [https://github.com/woocommerce/woocommerce-android/pull/13414]
- [*] Automatically select the first available order when filtering is active in the two-pane layout.[https://github.com/woocommerce/woocommerce-android/pull/13491]


21.7
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -543,13 +543,37 @@ class OrderListFragment :
}

viewModel.pagedListData.observe(viewLifecycleOwner) {
updateOrderSelectedStatus()
updatePagedListData(it)
if (requireContext().isTwoPanesShouldBeUsed) {
when {
// A specific order is set to be opened
viewModel.orderId.value != -1L -> {
openSpecificOrder(viewModel.orderId.value)
clearSelectedOrderIdInViewModel()
}
// Open the first order when filtering is active, but only if no order is explicitly selected by
// the user. If a user enables filtering, selects an order, and then pulls to refresh, we should
// retain the selected order instead of automatically selecting the first order.
viewModel.viewState.isFilteringActive &&
selectedOrder.selectedOrderId.value == null ||
selectedOrder.selectedOrderId.value == -1L -> {
handler.postDelayed({
val firstOrder = it
.filterIsInstance<OrderListItemUIType.OrderListItemUI>()
.firstOrNull()

firstOrder?.let { firstOrder ->
openFirstOrder()
selectedOrder.selectOrder(firstOrder.orderId)
}
}, HANDLER_DELAY)
}

selectedOrder.selectedOrderId.value != null &&
selectedOrder.selectedOrderId.value != -1L -> {
openSpecificOrder(selectedOrder.selectedOrderId.value)
}
// No order selected and no specific order to open, or no specific condition met
selectedOrder.selectedOrderId.value == null || selectedOrder.selectedOrderId.value == -1L -> {
// The first time the user logs in, we need to add some delay
Expand All @@ -560,8 +584,6 @@ class OrderListFragment :
}
}
}
updateOrderSelectedStatus()
updatePagedListData(it)
}

viewModel.event.observe(viewLifecycleOwner) { event ->
Expand Down Expand Up @@ -851,6 +873,7 @@ class OrderListFragment :

private fun initializeResultHandlers() {
handleResult<String>(FILTER_CHANGE_NOTICE_KEY) {
selectedOrder.selectOrder(-1L)
viewModel.loadOrders()
}
handleResult<CodeScannerStatus>(KEY_BARCODE_SCANNING_SCAN_STATUS) { status ->
Expand Down

0 comments on commit db73dcc

Please sign in to comment.