@@ -114,16 +114,49 @@ public class SiteSettingsRemote: Remote {
114114 let mapper = SiteSettingMapper ( siteID: siteID, settingsGroup: . advanced)
115115 let response = try await enqueue ( request, mapper: mapper)
116116 switch response. value {
117- case " yes " :
117+ case Constants . featureEnabledValue :
118118 return true
119- case " no " :
119+ case Constants . featureDisabledValue:
120+ return false
121+ default :
122+ throw SiteSettingsRemoteError . invalidResponse
123+ }
124+ }
125+
126+ /// Enables or disables a specific feature in the site WC settings.
127+ ///
128+ /// - Parameters:
129+ /// - siteID: Site for which we'll update the feature status.
130+ /// - feature: The feature to enable or disable.
131+ /// - enabled: Whether the feature should be enabled (true) or disabled (false).
132+ /// - Returns: A boolean indicating the updated feature status.
133+ /// - Throws: Error if the request fails.
134+ ///
135+ public func setFeature( for siteID: Int64 , feature: SiteSettingsFeature , enabled: Bool ) async throws -> Bool {
136+ let value = enabled ? Constants . featureEnabledValue : Constants . featureDisabledValue
137+ let parameters : [ String : Any ] = [ Constants . valueParameter: value]
138+ let path = Constants . siteSettingsPath + Constants. advancedSettingsGroup + " /woocommerce_feature_ \( feature. rawValue) _enabled "
139+ let request = JetpackRequest ( wooApiVersion: . mark3,
140+ method: . put,
141+ siteID: siteID,
142+ path: path,
143+ parameters: parameters,
144+ availableAsRESTRequest: true )
145+ let mapper = SiteSettingMapper ( siteID: siteID, settingsGroup: . advanced)
146+ let response = try await enqueue ( request, mapper: mapper)
147+ switch response. value {
148+ case Constants . featureEnabledValue:
149+ return true
150+ case Constants . featureDisabledValue:
120151 return false
121152 default :
122153 throw SiteSettingsRemoteError . invalidResponse
123154 }
124155 }
125156}
126157
158+ extension SiteSettingsRemote : SiteSettingsRemoteProtocol { }
159+
127160public extension SiteSettingsFeature {
128161 var rawValue : String {
129162 switch self {
@@ -142,6 +175,8 @@ private extension SiteSettingsRemote {
142175 static let productSettingsGroup : String = " products "
143176 static let advancedSettingsGroup : String = " advanced "
144177 static let valueParameter : String = " value "
178+ static let featureEnabledValue : String = " yes "
179+ static let featureDisabledValue : String = " no "
145180 }
146181}
147182
0 commit comments