Skip to content

Commit 6deb101

Browse files
committed
Merge branch 'master' into version-6.3.2
2 parents c12a429 + d6c398f commit 6deb101

16 files changed

+307
-112
lines changed

swift-sdk/CommerceItem.swift

+10-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ import UIKit
3636
/// each category is a breadcrumb in list form
3737
public var categories: [String]?
3838

39+
/// data fields for this product
40+
public var dataFields: [AnyHashable: Any]?
41+
3942
/// Creates a `CommerceItem` with the specified properties
4043
///
4144
/// - Parameters:
@@ -58,7 +61,8 @@ import UIKit
5861
description: String? = nil,
5962
url: String? = nil,
6063
imageUrl: String? = nil,
61-
categories: [String]? = nil) {
64+
categories: [String]? = nil,
65+
dataFields: [AnyHashable: Any]? = nil) {
6266
self.id = id
6367
self.name = name
6468
self.price = price
@@ -68,6 +72,7 @@ import UIKit
6872
self.url = url
6973
self.imageUrl = imageUrl
7074
self.categories = categories
75+
self.dataFields = dataFields
7176
}
7277

7378
/// A `Dictionary` representation of this item
@@ -99,6 +104,10 @@ import UIKit
99104
dictionary[JsonKey.CommerceItem.categories] = categories
100105
}
101106

107+
if let dataFields = dataFields {
108+
dictionary[JsonKey.CommerceItem.dataFields] = dataFields
109+
}
110+
102111
return dictionary
103112
}
104113
}

swift-sdk/Constants.swift

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ enum Const {
2222
}
2323

2424
enum Path {
25+
static let updateCart = "commerce/updateCart"
2526
static let trackPurchase = "commerce/trackPurchase"
2627
static let disableDevice = "users/disableDevice"
2728
static let getInAppMessages = "inApp/getMessages"
@@ -169,6 +170,7 @@ enum JsonKey {
169170
static let imageUrl = "imageUrl"
170171
static let url = "url"
171172
static let categories = "categories"
173+
static let dataFields = "dataFields"
172174
}
173175

174176
enum Device {

swift-sdk/Internal/ApiClient.swift

+30-22
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ApiClient {
3131
guard let authProvider = authProvider else {
3232
return nil
3333
}
34+
3435
let currentDate = dateProvider.currentDate
3536
let apiCallRequest = IterableAPICallRequest(apiKey: apiKey,
3637
endPoint: endPoint,
@@ -48,7 +49,7 @@ class ApiClient {
4849
return SendRequestError.createErroredFuture(reason: iterableError.localizedDescription)
4950
}
5051
}
51-
52+
5253
func send<T>(iterableRequestResult result: Result<IterableRequest, IterableError>) -> Future<T, SendRequestError> where T: Decodable {
5354
switch result {
5455
case let .success(iterableRequest):
@@ -57,7 +58,7 @@ class ApiClient {
5758
return SendRequestError.createErroredFuture(reason: iterableError.localizedDescription)
5859
}
5960
}
60-
61+
6162
func send(iterableRequest: IterableRequest) -> Future<SendRequestValue, SendRequestError> {
6263
guard let urlRequest = convertToURLRequest(iterableRequest: iterableRequest) else {
6364
return SendRequestError.createErroredFuture()
@@ -70,7 +71,7 @@ class ApiClient {
7071
guard let urlRequest = convertToURLRequest(iterableRequest: iterableRequest) else {
7172
return SendRequestError.createErroredFuture()
7273
}
73-
74+
7475
return RequestSender.sendRequest(urlRequest, usingSession: networkSession)
7576
}
7677

@@ -97,13 +98,13 @@ class ApiClient {
9798
extension ApiClient: ApiClientProtocol {
9899
func register(registerTokenInfo: RegisterTokenInfo, notificationsEnabled: Bool) -> Future<SendRequestValue, SendRequestError> {
99100
let result = createRequestCreator().flatMap { $0.createRegisterTokenRequest(registerTokenInfo: registerTokenInfo,
100-
notificationsEnabled: notificationsEnabled) }
101+
notificationsEnabled: notificationsEnabled) }
101102
return send(iterableRequestResult: result)
102103
}
103104

104105
func updateUser(_ dataFields: [AnyHashable: Any], mergeNestedObjects: Bool) -> Future<SendRequestValue, SendRequestError> {
105106
let result = createRequestCreator().flatMap { $0.createUpdateUserRequest(dataFields: dataFields,
106-
mergeNestedObjects: mergeNestedObjects) }
107+
mergeNestedObjects: mergeNestedObjects) }
107108
return send(iterableRequestResult: result)
108109
}
109110

@@ -119,28 +120,35 @@ extension ApiClient: ApiClientProtocol {
119120

120121
func disableDevice(forAllUsers allUsers: Bool, hexToken: String) -> Future<SendRequestValue, SendRequestError> {
121122
let result = createRequestCreator().flatMap { $0.createDisableDeviceRequest(forAllUsers: allUsers,
122-
hexToken: hexToken) }
123+
hexToken: hexToken) }
124+
return send(iterableRequestResult: result)
125+
}
126+
127+
func updateCart(items: [CommerceItem]) -> Future<SendRequestValue, SendRequestError> {
128+
let result = createRequestCreator().flatMap { $0.createUpdateCartRequest(items: items) }
129+
123130
return send(iterableRequestResult: result)
124131
}
125132

126133
func track(purchase total: NSNumber, items: [CommerceItem], dataFields: [AnyHashable: Any]?) -> Future<SendRequestValue, SendRequestError> {
127-
let result = createRequestCreator().flatMap { $0.createTrackPurchaseRequest(total, items: items,
128-
dataFields: dataFields) }
134+
let result = createRequestCreator().flatMap { $0.createTrackPurchaseRequest(total,
135+
items: items,
136+
dataFields: dataFields) }
129137
return send(iterableRequestResult: result)
130138
}
131139

132140
func track(pushOpen campaignId: NSNumber, templateId: NSNumber?, messageId: String, appAlreadyRunning: Bool, dataFields: [AnyHashable: Any]?) -> Future<SendRequestValue, SendRequestError> {
133141
let result = createRequestCreator().flatMap { $0.createTrackPushOpenRequest(campaignId,
134-
templateId: templateId,
135-
messageId: messageId,
136-
appAlreadyRunning: appAlreadyRunning,
137-
dataFields: dataFields) }
142+
templateId: templateId,
143+
messageId: messageId,
144+
appAlreadyRunning: appAlreadyRunning,
145+
dataFields: dataFields) }
138146
return send(iterableRequestResult: result)
139147
}
140148

141149
func track(event eventName: String, dataFields: [AnyHashable: Any]?) -> Future<SendRequestValue, SendRequestError> {
142150
let result = createRequestCreator().flatMap { $0.createTrackEventRequest(eventName,
143-
dataFields: dataFields) }
151+
dataFields: dataFields) }
144152
return send(iterableRequestResult: result)
145153
}
146154

@@ -151,11 +159,11 @@ extension ApiClient: ApiClientProtocol {
151159
campaignId: NSNumber? = nil,
152160
templateId: NSNumber? = nil) -> Future<SendRequestValue, SendRequestError> {
153161
let result = createRequestCreator().flatMap { $0.createUpdateSubscriptionsRequest(emailListIds,
154-
unsubscribedChannelIds: unsubscribedChannelIds,
155-
unsubscribedMessageTypeIds: unsubscribedMessageTypeIds,
156-
subscribedMessageTypeIds: subscribedMessageTypeIds,
157-
campaignId: campaignId,
158-
templateId: templateId) }
162+
unsubscribedChannelIds: unsubscribedChannelIds,
163+
unsubscribedMessageTypeIds: unsubscribedMessageTypeIds,
164+
subscribedMessageTypeIds: subscribedMessageTypeIds,
165+
campaignId: campaignId,
166+
templateId: templateId) }
159167
return send(iterableRequestResult: result)
160168
}
161169

@@ -166,14 +174,14 @@ extension ApiClient: ApiClientProtocol {
166174

167175
func track(inAppClick inAppMessageContext: InAppMessageContext, clickedUrl: String) -> Future<SendRequestValue, SendRequestError> {
168176
let result = createRequestCreator().flatMap { $0.createTrackInAppClickRequest(inAppMessageContext: inAppMessageContext,
169-
clickedUrl: clickedUrl) }
177+
clickedUrl: clickedUrl) }
170178
return send(iterableRequestResult: result)
171179
}
172180

173181
func track(inAppClose inAppMessageContext: InAppMessageContext, source: InAppCloseSource?, clickedUrl: String?) -> Future<SendRequestValue, SendRequestError> {
174182
let result = createRequestCreator().flatMap { $0.createTrackInAppCloseRequest(inAppMessageContext: inAppMessageContext,
175-
source: source,
176-
clickedUrl: clickedUrl) }
183+
source: source,
184+
clickedUrl: clickedUrl) }
177185
return send(iterableRequestResult: result)
178186
}
179187

@@ -194,7 +202,7 @@ extension ApiClient: ApiClientProtocol {
194202

195203
func inAppConsume(inAppMessageContext: InAppMessageContext, source: InAppDeleteSource?) -> Future<SendRequestValue, SendRequestError> {
196204
let result = createRequestCreator().flatMap { $0.createTrackInAppConsumeRequest(inAppMessageContext: inAppMessageContext,
197-
source: source) }
205+
source: source) }
198206
return send(iterableRequestResult: result)
199207
}
200208

swift-sdk/Internal/ApiClientProtocol.swift

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ protocol ApiClientProtocol: AnyObject {
1111

1212
func updateEmail(newEmail: String) -> Future<SendRequestValue, SendRequestError>
1313

14+
func updateCart(items: [CommerceItem]) -> Future<SendRequestValue, SendRequestError>
15+
1416
func track(purchase total: NSNumber, items: [CommerceItem], dataFields: [AnyHashable: Any]?) -> Future<SendRequestValue, SendRequestError>
1517

1618
func track(pushOpen campaignId: NSNumber, templateId: NSNumber?, messageId: String, appAlreadyRunning: Bool, dataFields: [AnyHashable: Any]?) -> Future<SendRequestValue, SendRequestError>

swift-sdk/Internal/InternalIterableAPI.swift

+7
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,13 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
206206
}
207207
}
208208

209+
@discardableResult
210+
func updateCart(items: [CommerceItem],
211+
onSuccess: OnSuccessHandler? = nil,
212+
onFailure: OnFailureHandler? = nil) -> Future<SendRequestValue, SendRequestError> {
213+
requestHandler.updateCart(items: items, onSuccess: onSuccess, onFailure: onFailure)
214+
}
215+
209216
@discardableResult
210217
func trackPurchase(_ total: NSNumber,
211218
items: [CommerceItem],

swift-sdk/Internal/LegacyRequestHandler.swift

+7
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ class LegacyRequestHandler: RequestHandlerProtocol {
7878
forResult: apiClient.updateEmail(newEmail: newEmail))
7979
}
8080

81+
@discardableResult
82+
func updateCart(items: [CommerceItem],
83+
onSuccess: OnSuccessHandler?,
84+
onFailure: OnFailureHandler?) -> Future<SendRequestValue, SendRequestError> {
85+
applyCallbacks(successHandler: onSuccess, andFailureHandler: onFailure, withIdentifier: "updateCart", forResult: apiClient.updateCart(items: items))
86+
}
87+
8188
@discardableResult
8289
func trackPurchase(_ total: NSNumber,
8390
items: [CommerceItem],

swift-sdk/Internal/OfflineRequestProcessor.swift

+14
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,20 @@ struct OfflineRequestProcessor: RequestProcessorProtocol {
3636
taskRunner.stop()
3737
}
3838

39+
@discardableResult
40+
func updateCart(items: [CommerceItem],
41+
onSuccess: OnSuccessHandler?,
42+
onFailure: OnFailureHandler?) -> Future<SendRequestValue, SendRequestError> {
43+
let requestGenerator = { (requestCreator: RequestCreator) in
44+
requestCreator.createUpdateCartRequest(items: items)
45+
}
46+
47+
return sendIterableRequest(requestGenerator: requestGenerator,
48+
successHandler: onSuccess,
49+
failureHandler: onFailure,
50+
identifier: #function)
51+
}
52+
3953
@discardableResult
4054
func trackPurchase(_ total: NSNumber,
4155
items: [CommerceItem],

swift-sdk/Internal/OnlineRequestProcessor.swift

+10
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ struct OnlineRequestProcessor: RequestProcessorProtocol {
6868
forResult: apiClient.updateEmail(newEmail: newEmail))
6969
}
7070

71+
@discardableResult
72+
func updateCart(items: [CommerceItem],
73+
onSuccess: OnSuccessHandler? = nil,
74+
onFailure: OnFailureHandler? = nil) -> Future<SendRequestValue, SendRequestError> {
75+
applyCallbacks(successHandler: onSuccess,
76+
andFailureHandler: onFailure,
77+
withIdentifier: "updateCart",
78+
forResult: apiClient.updateCart(items: items))
79+
}
80+
7181
@discardableResult
7282
func trackPurchase(_ total: NSNumber,
7383
items: [CommerceItem],

0 commit comments

Comments
 (0)