diff --git a/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java index acc4d5e01..27634ad75 100644 --- a/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java +++ b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java @@ -144,6 +144,23 @@ public void trackEvent(String name, ReadableMap dataFields) { } } + @ReactMethod + public void updateCart(ReadableArray items, ReadableMap dataFields) { + IterableLogger.v(TAG, "UpdateCart API"); + + JSONObject dataFieldsJson = null; + + try { + if (dataFields != null) { + dataFieldsJson = Serialization.convertMapToJson(dataFields); + } + } catch (JSONException e) { + IterableLogger.e(TAG, "Failed converting JSON to object"); + } + + IterableApi.getInstance().updateCart(Serialization.commerceItemsFromReadableArray(items), dataFieldsJson); + } + @ReactMethod public void trackPurchase(Double total, ReadableArray items, ReadableMap dataFields) { IterableLogger.v(TAG, "TrackPurchase API"); diff --git a/ios/RNIterableAPI/RNIterableAPI.m b/ios/RNIterableAPI/RNIterableAPI.m index bbebb9f4c..10e133137 100644 --- a/ios/RNIterableAPI/RNIterableAPI.m +++ b/ios/RNIterableAPI/RNIterableAPI.m @@ -50,6 +50,9 @@ @interface RCT_EXTERN_REMAP_MODULE(RNIterableAPI, ReactIterableAPI, NSObject) appAlreadyRunning: (BOOL) appAlreadyRunning dataFields: (NSDictionary *) dataFields) +RCT_EXTERN_METHOD(updateCart: (NSArray *) items + dataFields: (NSDictionary *) dataFields) + RCT_EXTERN_METHOD(trackPurchase: (nonnull NSNumber *) total items: (NSArray *) items dataFields: (NSDictionary *) dataFields) diff --git a/ios/RNIterableAPI/ReactIterableAPI.swift b/ios/RNIterableAPI/ReactIterableAPI.swift index 30b29b2fa..31b4813a6 100644 --- a/ios/RNIterableAPI/ReactIterableAPI.swift +++ b/ios/RNIterableAPI/ReactIterableAPI.swift @@ -166,6 +166,15 @@ class ReactIterableAPI: RCTEventEmitter { appAlreadyRunning: appAlreadyRunning, dataFields: dataFields) } + + @objc(updateCart:dataFields:) + func updateCart(items: [[AnyHashable: Any]], + dataFields: [AnyHashable: Any]?) { + ITBInfo() + + IterableAPI.updateCart(items: items.compactMap(CommerceItem.from(dict:)), + dataFields: dataFields) + } @objc(trackPurchase:items:dataFields:) func trackPurchase(total: NSNumber, diff --git a/ts/Iterable.ts b/ts/Iterable.ts index 3be08087b..c00cac193 100644 --- a/ts/Iterable.ts +++ b/ts/Iterable.ts @@ -302,6 +302,11 @@ class Iterable { RNIterableAPI.trackPushOpenWithCampaignId(campaignId, templateId, messageId, appAlreadyRunning, dataFields) } + static updateCart(items: Array, dataFields: any | undefined) { + console.log("updateCart") + RNIterableAPI.updateCart(items, dataFields) + } + /** * * @param {number} total diff --git a/ts/__mocks__/MockRNIterableAPI.ts b/ts/__mocks__/MockRNIterableAPI.ts index cf036a1cd..4015cf672 100644 --- a/ts/__mocks__/MockRNIterableAPI.ts +++ b/ts/__mocks__/MockRNIterableAPI.ts @@ -31,6 +31,8 @@ export class MockRNIterableAPI { static trackPushOpenWithCampaignId = jest.fn() + static updateCart = jest.fn() + static trackPurchase = jest.fn() static trackInAppOpen = jest.fn() diff --git a/ts/__tests__/Iterable.spec.ts b/ts/__tests__/Iterable.spec.ts index 4c851b507..6c4d4c0c5 100644 --- a/ts/__tests__/Iterable.spec.ts +++ b/ts/__tests__/Iterable.spec.ts @@ -57,6 +57,14 @@ test("trackPushOpenWithCampaignId", () => { ) }) +test("updateCart", () => { + Iterable.updateCart([new IterableCommerceItem("id1", "Boba Tea", 18, 26)], { "dataFieldKey": "dataFieldValue" }) + + expect(MockRNIterableAPI.updateCart).toBeCalledWith( + [new IterableCommerceItem("id1", "Boba Tea", 18, 26)], { "dataFieldKey": "dataFieldValue" } + ) +}) + test("trackPurchase", () => { Iterable.trackPurchase( 10,