@@ -114,10 +114,10 @@ final class NewOrderViewModel: ObservableObject {
114114 ///
115115 @Published private( set) var productRows : [ ProductRowViewModel ] = [ ]
116116
117- /// Item selected from the list of products in the order .
117+ /// Selected product view model to render .
118118 /// Used to open the product details in `ProductInOrder`.
119119 ///
120- @Published var selectedOrderItem : NewOrderItem ? = nil
120+ @Published var selectedProductViewModel : ProductInOrderViewModel ? = nil
121121
122122 // MARK: Payment properties
123123
@@ -171,18 +171,19 @@ final class NewOrderViewModel: ObservableObject {
171171 configurePaymentDataViewModel ( )
172172 }
173173
174- /// Selects an order item.
174+ /// Selects an order item by setting the `selectedProductViewModel` .
175175 ///
176176 /// - Parameter id: ID of the order item to select
177- func selectOrderItem( _ id: String ) {
178- selectedOrderItem = orderDetails . items . first ( where : { $0 . id == id } )
177+ func selectOrderItem( _ id: Int64 ) {
178+ selectedProductViewModel = createSelectedProductViewModel ( itemID : id )
179179 }
180180
181181 /// Removes an item from the order.
182182 ///
183183 /// - Parameter item: Item to remove from the order
184- func removeItemFromOrder( _ item: NewOrderItem ) {
185- orderDetails. items. removeAll ( where: { $0 == item } )
184+ func removeItemFromOrder( _ item: OrderItem ) {
185+ guard let input = createUpdateProductInput ( item: item, quantity: 0 ) else { return }
186+ orderSynchronizer. setProduct. send ( input)
186187 configureProductRowViewModels ( )
187188 }
188189
@@ -581,6 +582,23 @@ private extension NewOrderViewModel {
581582 // Return a new input with the new quantity but with the same item id to properly reference the update.
582583 return OrderSyncProductInput ( id: item. itemID, product: product, quantity: quantity)
583584 }
585+
586+ /// Creates a `ProductInOrderViewModel` based on the provided order item id.
587+ ///
588+ func createSelectedProductViewModel( itemID: Int64 ) -> ProductInOrderViewModel ? {
589+ // Find order item based on the provided id.
590+ // Creates the product row view model needed for `ProductInOrderViewModel`.
591+ guard
592+ let orderItem = orderSynchronizer. order. items. first ( where: { $0. itemID == itemID } ) ,
593+ let rowViewModel = createProductRowViewModel ( for: orderItem, canChangeQuantity: false )
594+ else {
595+ return nil
596+ }
597+
598+ return ProductInOrderViewModel ( productRowViewModel: rowViewModel) { [ weak self] in
599+ self ? . removeItemFromOrder ( orderItem)
600+ }
601+ }
584602}
585603
586604private extension NewOrderViewModel {
0 commit comments