diff --git a/Modules/Sources/NetworkingCore/Model/Order.swift b/Modules/Sources/NetworkingCore/Model/Order.swift index c774a7b2680..e88d265c792 100644 --- a/Modules/Sources/NetworkingCore/Model/Order.swift +++ b/Modules/Sources/NetworkingCore/Model/Order.swift @@ -69,6 +69,11 @@ public struct Order: Decodable, Sendable, GeneratedCopiable, GeneratedFakeable { /// public let createdVia: String? + public var salesChannel: SalesChannel? { + guard let createdVia else { return nil } + return SalesChannel(rawValue: createdVia) + } + /// Order struct initializer. /// public init(siteID: Int64, diff --git a/Modules/Sources/NetworkingCore/Model/SalesChannel.swift b/Modules/Sources/NetworkingCore/Model/SalesChannel.swift new file mode 100644 index 00000000000..7c8127724e6 --- /dev/null +++ b/Modules/Sources/NetworkingCore/Model/SalesChannel.swift @@ -0,0 +1,32 @@ +import Foundation + +public enum SalesChannel { + case pointOfSale +} + +extension SalesChannel: RawRepresentable { + public init?(rawValue: String) { + switch rawValue { + case "pos-rest-api": + self = .pointOfSale + default: + return nil + } + } + + public var rawValue: String { + switch self { + case .pointOfSale: + return description + } + } + + public var description: String { + switch self { + case .pointOfSale: + return NSLocalizedString("salesChannel.pos.description", + value: "POS", + comment: "The acronym for 'Point of Sale'.") + } + } +} diff --git a/WooCommerce/Classes/ViewRelated/Orders/Cells/OrderListCellViewModel.swift b/WooCommerce/Classes/ViewRelated/Orders/Cells/OrderListCellViewModel.swift index 9221b386d92..014a9dd8117 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/Cells/OrderListCellViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/Cells/OrderListCellViewModel.swift @@ -79,16 +79,7 @@ struct OrderListCellViewModel { /// Textual representation of the sales channel /// var salesChannel: String? { - guard let createdVia = order.createdVia else { - return nil - } - - switch createdVia { - case "pos-rest-api": - return Localization.salesChannelPOSText - default: - return nil - } + order.salesChannel?.description } /// The localized unabbreviated total for a given order item, which includes the currency. @@ -128,9 +119,5 @@ extension OrderListCellViewModel { "orderlistcellviewmodel.customerName.guestName", value: "Guest", comment: "In Order List, the name of the billed person when there are no first and last name.") - static let salesChannelPOSText = NSLocalizedString( - "orderlistcellviewmodel.salesChannel.salesChannelPOSText", - value: "POS", - comment: "In Order List, the acronym for 'Point of Sale' that is shown as a badge for certain orders.") } } diff --git a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCell.swift b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCell.swift index 08ac33c5730..fc8af08b230 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCell.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCell.swift @@ -31,7 +31,7 @@ final class SummaryTableViewCell: UITableViewCell { func configure(_ viewModel: SummaryTableViewCellViewModel) { titleLabel.text = viewModel.billedPersonName subtitleLabel.text = viewModel.subtitle - salesChannelLabel.text = viewModel.formattedSalesChannel + salesChannelLabel.text = viewModel.salesChannel salesChannelLabel.isHidden = (salesChannelLabel.text == nil) display(presentation: viewModel.presentation) } diff --git a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCellViewModel.swift b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCellViewModel.swift index 4d30c0fa662..8cfe47f2ae3 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCellViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/SummaryTableViewCellViewModel.swift @@ -9,7 +9,7 @@ struct SummaryTableViewCellViewModel { private let billingAddress: Address? private let dateCreated: Date - private let salesChannel: String? + private(set) var salesChannel: String? let presentation: OrderStatusPresentation @@ -21,7 +21,7 @@ struct SummaryTableViewCellViewModel { billingAddress = order.billingAddress dateCreated = order.dateCreated - salesChannel = order.createdVia + salesChannel = order.salesChannel?.description presentation = OrderStatusPresentation( style: status?.status ?? order.status, @@ -48,20 +48,6 @@ struct SummaryTableViewCellViewModel { formatter.timeZone = .siteTimezone return formatter.string(from: dateCreated) } - - /// Textual representation of the sales channel - /// - var formattedSalesChannel: String? { - guard let salesChannel = salesChannel else { - return nil - } - switch salesChannel { - case "pos-rest-api": - return "POS" - default: - return nil - } - } } private extension SummaryTableViewCellViewModel { diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Orders/OrderListCellViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Orders/OrderListCellViewModelTests.swift index 678621356b7..bf687ee4612 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Orders/OrderListCellViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Orders/OrderListCellViewModelTests.swift @@ -70,7 +70,7 @@ final class OrderListCellViewModelTests: XCTestCase { let viewModel = OrderListCellViewModel(order: order, currencySettings: ServiceLocator.currencySettings) // Then - XCTAssertEqual(viewModel.salesChannel, OrderListCellViewModel.Localization.salesChannelPOSText) + XCTAssertEqual(viewModel.salesChannel, "POS") } func test_salesChannel_when_createdVia_is_nil_then_returns_nil() {