@@ -3,23 +3,18 @@ package com.woocommerce.android.ui.orders.wooshippinglabels
3
3
import com.woocommerce.android.model.Order
4
4
import com.woocommerce.android.model.getNonRefundedProducts
5
5
import com.woocommerce.android.ui.orders.details.OrderDetailRepository
6
- import com.woocommerce.android.ui.orders.wooshippinglabels.datasource.WooShippingConfigDataStore
7
6
import com.woocommerce.android.ui.orders.wooshippinglabels.models.ShipmentUIModel
8
7
import com.woocommerce.android.ui.orders.wooshippinglabels.models.ShippableItemModel
8
+ import com.woocommerce.android.ui.orders.wooshippinglabels.models.ShippingLabelModel
9
9
import com.woocommerce.android.ui.orders.wooshippinglabels.models.ShippingLabelStatus
10
- import com.woocommerce.android.ui.orders.wooshippinglabels.networking.ShippingLabelDTO
11
- import com.woocommerce.android.ui.orders.wooshippinglabels.networking.WooShippingNetworkingMapper
12
- import com.woocommerce.android.ui.orders.wooshippinglabels.rates.networking.DestinationAddressDTO
13
- import com.woocommerce.android.ui.orders.wooshippinglabels.rates.networking.OriginAddressDTO
10
+ import com.woocommerce.android.ui.orders.wooshippinglabels.networking.WooShippingLabelRepository
14
11
import com.woocommerce.android.ui.products.details.ProductDetailRepository
15
- import kotlinx.coroutines.flow.first
16
12
import javax.inject.Inject
17
13
18
14
class GetShipments @Inject constructor(
15
+ private val wooShippingLabelRepository : WooShippingLabelRepository ,
19
16
private val orderDetailRepository : OrderDetailRepository ,
20
- private val productDetailRepository : ProductDetailRepository ,
21
- private val configDataStore : WooShippingConfigDataStore ,
22
- private val mapper : WooShippingNetworkingMapper ,
17
+ private val productDetailRepository : ProductDetailRepository
23
18
) {
24
19
suspend operator fun invoke (order : Order ): List <ShipmentUIModel > {
25
20
val refunds = orderDetailRepository.getOrderRefunds(order.id)
@@ -46,11 +41,10 @@ class GetShipments @Inject constructor(
46
41
}
47
42
}
48
43
49
- val config = configDataStore.observeConfig(order.id).first()
44
+ val shipments = wooShippingLabelRepository.getShipments(order.id)
45
+ val labels = wooShippingLabelRepository.getLabels(order.id)
50
46
51
- val shipments = config?.shipments
52
-
53
- var shipmentUIModelList = if (shipments.isNullOrEmpty()) {
47
+ var shipmentUIModelList = if (shipments.isEmpty()) {
54
48
listOf (ShipmentUIModel (localId = " 0" , items = orderItems))
55
49
} else {
56
50
shipments.map { (shipmentId, shipmentItems) ->
@@ -64,55 +58,23 @@ class GetShipments @Inject constructor(
64
58
}
65
59
}.sortedBy { it.localId.toLong() }
66
60
67
- config?.shippingLabelData?.let { data ->
68
- // If there are purchased labels, merge their data into the result list
69
- data.currentOrderLabels?.let { labels ->
70
- shipmentUIModelList = mergePurchaseData(shipmentUIModelList, labels)
71
- }
72
-
73
- // If there are stored addresses, merge them into the result list
74
- data.storedData?.let { storedData ->
75
- shipmentUIModelList = mergeAddresses(
76
- shipmentUIModelList,
77
- storedData.selectedOrigin,
78
- storedData.selectedDestination
79
- )
80
- }
81
- }
61
+ // If there are purchased labels, merge their data into the result list
62
+ shipmentUIModelList = mergePurchaseData(shipmentUIModelList, labels)
82
63
83
64
return shipmentUIModelList
84
65
}
85
66
86
67
private fun mergePurchaseData (
87
68
shipmentUIModelList : List <ShipmentUIModel >,
88
- currentOrderLabels : List <ShippingLabelDTO >
69
+ currentOrderLabels : List <ShippingLabelModel >
89
70
) = shipmentUIModelList.map { shipmentUIModel ->
90
71
val purchasedNonRefundedLabel = currentOrderLabels.find {
91
72
it.shipmentId == shipmentUIModel.remoteId && it.status == ShippingLabelStatus .PURCHASED && it.refund == null
92
73
}
93
74
if (purchasedNonRefundedLabel == null ) {
94
75
shipmentUIModel
95
76
} else {
96
- shipmentUIModel.copy(purchased = true , label = mapper.invoke( purchasedNonRefundedLabel) )
77
+ shipmentUIModel.copy(purchased = true , label = purchasedNonRefundedLabel)
97
78
}
98
79
}
99
-
100
- private fun mergeAddresses (
101
- shipmentUIModelList : List <ShipmentUIModel >,
102
- originAddresses : Map <String , OriginAddressDTO >? ,
103
- destinationAddresses : Map <String , DestinationAddressDTO >?
104
- ): List <ShipmentUIModel > = shipmentUIModelList.map { shipmentUIModel ->
105
- val remoteId = shipmentUIModel.remoteId ? : return @map shipmentUIModel
106
- val key = getStoredDataKey(remoteId)
107
-
108
- val updatedLabel = shipmentUIModel.label?.copy(
109
- originAddress = originAddresses?.get(key)?.let { mapper(it) }
110
- ? : shipmentUIModel.label.originAddress,
111
- destinationAddress = destinationAddresses?.get(key)?.let { mapper(it) }
112
- ? : shipmentUIModel.label.destinationAddress
113
- )
114
- shipmentUIModel.copy(label = updatedLabel)
115
- }
116
-
117
- private fun getStoredDataKey (shipmentId : String ) = " shipment_$shipmentId "
118
80
}
0 commit comments