Skip to content

Commit afa9730

Browse files
authored
Merge pull request #8703 from woocommerce/feat/8453-product-password-protected-visibility
2 parents 03bed3e + fae9beb commit afa9730

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

WooCommerce/Classes/ViewRelated/Products/Edit Product/Product Settings/ProductSettingsRows.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,18 @@ enum ProductSettingsRows {
102102
}
103103

104104
func handleTap(sourceViewController: UIViewController, onCompletion: @escaping (ProductSettings) -> Void) {
105-
// If the password was not fetched, the cell is not selectable
106-
guard settings.password != nil else {
105+
let passwordProtectedAvailable = ServiceLocator.stores.isAuthenticatedWithoutWPCom == false
106+
/// If the password was not fetched for user authenticated with WPCom,
107+
/// the cell is not selectable
108+
if settings.password == nil && passwordProtectedAvailable {
107109
return
108110
}
109111

110112
ServiceLocator.analytics.track(.productSettingsVisibilityTapped)
111-
let viewController = ProductVisibilityViewController(settings: settings) { (productSettings) in
113+
let viewController = ProductVisibilityViewController(
114+
settings: settings,
115+
showsPasswordProtectedVisibility: passwordProtectedAvailable
116+
) { (productSettings) in
112117
self.settings.password = productSettings.password
113118
self.settings.status = productSettings.status
114119
onCompletion(self.settings)

WooCommerce/Classes/ViewRelated/Products/Edit Product/Product Settings/ProductSettingsViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ final class ProductSettingsViewModel {
4444
sections = Self.configureSections(productSettings,
4545
productType: product.productType)
4646
/// If nil, we fetch the password from site post API because it was never fetched
47-
if password == nil {
47+
/// Skip this if the user is not authenticated with WPCom.
48+
if password == nil && ServiceLocator.stores.isAuthenticatedWithoutWPCom == false {
4849
retrieveProductPassword(siteID: product.siteID, productID: product.productID) { [weak self] (password, error) in
4950
guard let self = self else {
5051
return

WooCommerce/Classes/ViewRelated/Products/Edit Product/Product Settings/Visibility/ProductVisibilityViewController.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ final class ProductVisibilityViewController: UIViewController {
1313
private let onCompletion: Completion
1414

1515
private let productSettings: ProductSettings
16+
private let showsPasswordProtectedVisibility: Bool
1617

1718
private var visibility: ProductVisibility = .public
1819

@@ -25,9 +26,10 @@ final class ProductVisibilityViewController: UIViewController {
2526

2627
/// Init
2728
///
28-
init(settings: ProductSettings, completion: @escaping Completion) {
29+
init(settings: ProductSettings, showsPasswordProtectedVisibility: Bool, completion: @escaping Completion) {
2930
productSettings = settings
3031
onCompletion = completion
32+
self.showsPasswordProtectedVisibility = showsPasswordProtectedVisibility
3133
super.init(nibName: nil, bundle: nil)
3234
}
3335

@@ -65,9 +67,10 @@ final class ProductVisibilityViewController: UIViewController {
6567
private func reloadSections() {
6668
if visibility == .passwordProtected {
6769
sections = [Section(rows: [.publicVisibility, .passwordVisibility, .passwordField, .privateVisibility])]
68-
}
69-
else {
70+
} else if showsPasswordProtectedVisibility {
7071
sections = [Section(rows: [.publicVisibility, .passwordVisibility, .privateVisibility])]
72+
} else {
73+
sections = [Section(rows: [.publicVisibility, .privateVisibility])]
7174
}
7275
tableView.reloadData()
7376
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,9 @@ private extension ProductFormRemoteActionUseCase {
240240
func updatePasswordRemotely(product: EditableProductModel,
241241
password: String?,
242242
onCompletion: @escaping (Result<String?, Error>) -> Void) {
243-
// Only update product password if available.
244-
guard let updatedPassword = password else {
243+
// Only update product password if available and user is authenticated with WPCom.
244+
guard let updatedPassword = password,
245+
stores.isAuthenticatedWithoutWPCom == false else {
245246
onCompletion(.success(password))
246247
return
247248
}

0 commit comments

Comments
 (0)