Skip to content

Commit 7e8d0aa

Browse files
committed
Fix: #4846 - Products: add the variation number to the variations list and details
1 parent dc04c34 commit 7e8d0aa

File tree

7 files changed

+38
-30
lines changed

7 files changed

+38
-30
lines changed

WooCommerce.xcworkspace/contents.xcworkspacedata

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

WooCommerce/Classes/ViewRelated/Products/Cells/ProductsTabProductTableViewCell.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ extension ProductsTabProductTableViewCell: SearchResultCell {
6565
extension ProductsTabProductTableViewCell {
6666
func update(viewModel: ProductsTabProductViewModel, imageService: ImageService) {
6767

68-
// TODO: #update Documentation here...
69-
// TODO: Add Localization
7068
if let variationID = viewModel.productVariation?.productVariationID {
71-
nameLabel.text = "#\(variationID)\n\(viewModel.name)"
69+
// Add product variation ID with name
70+
// See more: https://github.com/woocommerce/woocommerce-ios/issues/4846
71+
nameLabel.text = "\(Localization.variationID(variationID: "\(variationID)"))\n\(viewModel.name)"
7272
}
7373
else {
7474
nameLabel.text = viewModel.name
@@ -163,7 +163,7 @@ private extension ProductsTabProductTableViewCell {
163163

164164
func configureNameLabel() {
165165
nameLabel.applyBodyStyle()
166-
nameLabel.numberOfLines = 2
166+
nameLabel.numberOfLines = 3
167167
}
168168

169169
func configureDetailsLabel() {
@@ -238,6 +238,13 @@ private extension ProductsTabProductTableViewCell {
238238
}
239239
}
240240

241+
private enum Localization {
242+
static func variationID(variationID: String) -> String {
243+
let titleFormat = NSLocalizedString("#%1$@", comment: "Variation ID. Parameters: %1$@ - Product variation ID")
244+
return String.localizedStringWithFormat(titleFormat, variationID)
245+
}
246+
}
247+
241248
#if canImport(SwiftUI) && DEBUG
242249

243250
import SwiftUI

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewController.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ final class ProductFormViewController<ViewModel: ProductFormViewModelProtocol>:
6060
currency: String = ServiceLocator.currencySettings.symbol(from: ServiceLocator.currencySettings.currencyCode),
6161
presentationStyle: ProductFormPresentationStyle) {
6262
self.viewModel = viewModel
63-
6463
self.eventLogger = eventLogger
6564
self.currency = currency
6665
self.presentationStyle = presentationStyle
@@ -98,9 +97,12 @@ final class ProductFormViewController<ViewModel: ProductFormViewModelProtocol>:
9897
override func viewDidLoad() {
9998
super.viewDidLoad()
10099
configurePresentationStyle()
101-
// TODO: #update
102-
if let variationID = self.viewModel.getProductVariationID() {
103-
configureNavigationBar(title: "Variation #\(variationID)")
100+
101+
// If the page opens from product variation,
102+
// product variation ID will show on navigation bar title along with text `Variation`
103+
// See more: https://github.com/woocommerce/woocommerce-ios/issues/4846
104+
if let variationID = self.viewModel.productionVariationID {
105+
configureNavigationBar(title: Localization.variationViewTitle(variationID: "\(variationID)"))
104106
}
105107
else {
106108
configureNavigationBar()
@@ -172,7 +174,7 @@ final class ProductFormViewController<ViewModel: ProductFormViewModelProtocol>:
172174

173175
@objc func saveProductAndLogEvent() {
174176
eventLogger.logUpdateButtonTapped()
175-
saveProduct(status: self.viewModel.getProductVariationID() != nil ? .custom("variation") : nil)
177+
saveProduct()
176178
}
177179

178180
@objc func publishProduct() {
@@ -1453,6 +1455,11 @@ private enum Localization {
14531455
comment: "Navigation bar title for editing linked products for a grouped product")
14541456
static let unnamedProduct = NSLocalizedString("Unnamed product",
14551457
comment: "Back button title when the product doesn't have a name")
1458+
1459+
static func variationViewTitle(variationID: String) -> String {
1460+
let titleFormat = NSLocalizedString("Variation #%1$@", comment: "Navigation bar title for variation. Parameters: %1$@ - Product variation ID")
1461+
return String.localizedStringWithFormat(titleFormat, variationID)
1462+
}
14561463
}
14571464

14581465
private enum ActionSheetStrings {

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,10 @@ import protocol Storage.StorageManagerType
55

66
/// Provides data for product form UI, and handles product editing actions.
77
final class ProductFormViewModel: ProductFormViewModelProtocol {
8-
98
typealias ProductModel = EditableProductModel
109

11-
// TODO: #update
12-
func getProductVariationID() -> Int64? {
13-
return nil
14-
}
10+
/// Production variation ID only for Product Variation not for product
11+
var productionVariationID: Int64? = nil
1512

1613
/// Emits product on change, except when the product name is the only change (`productName` is emitted for this case).
1714
var observableProduct: Observable<EditableProductModel> {
@@ -43,8 +40,6 @@ final class ProductFormViewModel: ProductFormViewModelProtocol {
4340
originalProduct
4441
}
4542

46-
var isVariation: Bool = false
47-
4843
/// The form type could change from .add to .edit after creation.
4944
private(set) var formType: ProductFormType
5045

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModelProtocol.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,8 @@ protocol ProductFormViewModelProtocol {
5858
/// The action buttons that should be rendered in the navigation bar.
5959
var actionButtons: [ActionButtonType] { get }
6060

61-
// //TODO: #update
62-
// var isVariation: Bool { get }
63-
64-
func getProductVariationID() -> Int64?
61+
/// The product variation ID
62+
var productionVariationID: Int64? { get }
6563

6664
// Unsaved changes
6765

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductVariationFormViewModel.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ final class ProductVariationFormViewModel: ProductFormViewModelProtocol {
66

77
typealias ProductModel = EditableProductVariationModel
88

9-
//TODO: #update
10-
func getProductVariationID() -> Int64? {
11-
return productVariation.productVariation.productVariationID
12-
}
13-
149
/// Emits product variation on change.
1510
var observableProduct: Observable<EditableProductVariationModel> {
1611
productVariationSubject
@@ -31,6 +26,11 @@ final class ProductVariationFormViewModel: ProductFormViewModelProtocol {
3126
isUpdateEnabledSubject
3227
}
3328

29+
/// The product variation ID
30+
var productionVariationID: Int64? {
31+
productVariation.productVariation.productVariationID
32+
}
33+
3434
/// Emits a void value informing when there is a new variation price state available
3535
var newVariationsPrice: Observable<Void> = PublishSubject<Void>()
3636

@@ -99,7 +99,6 @@ final class ProductVariationFormViewModel: ProductFormViewModelProtocol {
9999
private let storesManager: StoresManager
100100
private var cancellable: ObservationToken?
101101

102-
103102
init(productVariation: EditableProductVariationModel,
104103
allAttributes: [ProductAttribute],
105104
parentProductSKU: String?,
@@ -282,6 +281,10 @@ extension ProductVariationFormViewModel {
282281
func updateProductVariations(from product: Product) {
283282
//no-op
284283
}
284+
285+
// func getProductVariationID() -> Int64? {
286+
// return productVariation.productVariation.productVariationID
287+
// }
285288
}
286289

287290
// MARK: Remote actions

WooCommerce/Classes/ViewRelated/Products/Variations/ProductVariationsViewController.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,6 @@ extension ProductVariationsViewController: UITableViewDataSource {
368368

369369
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
370370
let cell = tableView.dequeueReusableCell(ProductsTabProductTableViewCell.self, for: indexPath)
371-
372371
let productVariation = resultsController.object(at: indexPath)
373372
let model = EditableProductVariationModel(productVariation: productVariation,
374373
allAttributes: allAttributes,
@@ -377,7 +376,6 @@ extension ProductVariationsViewController: UITableViewDataSource {
377376
cell.update(viewModel: viewModel, imageService: imageService)
378377
cell.selectionStyle = .none
379378
cell.accessoryType = .disclosureIndicator
380-
381379
return cell
382380
}
383381
}

0 commit comments

Comments
 (0)