@@ -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