Skip to content

Commit 0db2770

Browse files
committed
Add support to remove products
1 parent 57b629c commit 0db2770

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/Synchronizer/LocalOrderSynchronizer.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private extension LocalOrderSynchronizer {
6767

6868
setProduct.withLatestFrom(orderPublisher)
6969
.map { productInput, order in
70-
ProductInputTransformer.addOrReplace(input: productInput, on: order)
70+
ProductInputTransformer.update(input: productInput, on: order)
7171
}
7272
.assign(to: &$order)
7373
}
@@ -85,9 +85,12 @@ private struct ProductInputTransformer {
8585
}
8686
}
8787

88-
static func addOrReplace(input: OrderSyncProductInput, on order: Order) -> Order {
89-
let newItem = createOrderItem(using: input)
88+
static func update(input: OrderSyncProductInput, on order: Order) -> Order {
89+
guard input.quantity > 0 else {
90+
return remove(input: input, from: order)
91+
}
9092

93+
let newItem = createOrderItem(using: input)
9194
var items = order.items
9295
if let itemIndex = order.items.firstIndex(where: { $0.itemID == newItem.itemID }) {
9396
items[itemIndex] = newItem
@@ -98,6 +101,12 @@ private struct ProductInputTransformer {
98101
return order.copy(items: items)
99102
}
100103

104+
static func remove(input: OrderSyncProductInput, from order: Order) -> Order {
105+
var items = order.items
106+
items.removeAll { $0.itemID == input.id.hashValue }
107+
return order.copy(items: items)
108+
}
109+
101110
static func createOrderItem(using input: OrderSyncProductInput) -> OrderItem {
102111
let quantity = Decimal(input.quantity)
103112
let parameters: OrderItemParameters = {

0 commit comments

Comments
 (0)