Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,27 @@ public void setEmail(@Nullable String email) {
IterableApi.getInstance().setEmail(email);
}

@ReactMethod
public void setEmail(@Nullable String email, @Nullable String authToken) {
IterableLogger.d(TAG, "setEmail: " + email + " authToken: " + authToken);

IterableApi.getInstance().setEmail(email, authToken);
}

@ReactMethod
public void updateEmail(String email) {
IterableLogger.d(TAG, "updateEmail: " + email);

IterableApi.getInstance().updateEmail(email);
}

@ReactMethod
public void updateEmail(String email, @Nullable String authToken) {
IterableLogger.d(TAG, "updateEmail: " + email + " authToken: " + authToken);

IterableApi.getInstance().updateEmail(email, authToken);
Comment thread
roninopf marked this conversation as resolved.
}

@ReactMethod
public void getEmail(Promise promise) {
promise.resolve(RNIterableInternal.getEmail());
Expand All @@ -135,6 +150,13 @@ public void setUserId(@Nullable String userId) {
IterableApi.getInstance().setUserId(userId);
}

@ReactMethod
public void setUserId(@Nullable String userId, @Nullable String authToken) {
IterableLogger.d(TAG, "setUserId: " + userId + " authToken: " + authToken);

IterableApi.getInstance().setUserId(userId, authToken);
}

@ReactMethod
public void updateUser(ReadableMap dataFields, Boolean mergeNestedObjects) {
IterableLogger.v(TAG, "updateUser");
Expand Down
9 changes: 6 additions & 3 deletions ios/RNIterableAPI/RNIterableAPI.m
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ @interface RCT_EXTERN_REMAP_MODULE(RNIterableAPI, ReactIterableAPI, NSObject)
resolver: (RCTPromiseResolveBlock) resolve
rejecter: (RCTPromiseRejectBlock) reject)

RCT_EXTERN_METHOD(setEmail: (NSString *) email)
RCT_EXTERN_METHOD(setEmail: (NSString *) email
authToken: (NSString *) authToken)

RCT_EXTERN_METHOD(getEmail: (RCTPromiseResolveBlock) resolve
rejecter: (RCTPromiseRejectBlock) reject)

RCT_EXTERN_METHOD(setUserId: (NSString *) userId)
RCT_EXTERN_METHOD(setUserId: (NSString *) userId
authToken: (NSString *) authToken)

RCT_EXTERN_METHOD(getUserId: (RCTPromiseResolveBlock) resolve
rejecter: (RCTPromiseRejectBlock) reject)
Expand Down Expand Up @@ -80,7 +82,8 @@ @interface RCT_EXTERN_REMAP_MODULE(RNIterableAPI, ReactIterableAPI, NSObject)
RCT_EXTERN_METHOD(updateUser: (nonnull NSDictionary *) dataFields
mergeNestedObjects: (BOOL) mergeNestedObjects)

RCT_EXTERN_METHOD(updateEmail: (nonnull NSString *) email)
RCT_EXTERN_METHOD(updateEmail: (nonnull NSString *) email
authToken: (NSString *) authToken)
Comment thread
roninopf marked this conversation as resolved.

RCT_EXTERN_METHOD(handleAppLink: (nonnull NSString *) appLink
resolver: (RCTPromiseResolveBlock) resolve
Expand Down
24 changes: 21 additions & 3 deletions ios/RNIterableAPI/ReactIterableAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ class ReactIterableAPI: RCTEventEmitter {

IterableAPI.email = email
}

@objc(setEmail:authToken:)
func set(email: String?, authToken: String?) {
ITBInfo()
Comment thread
roninopf marked this conversation as resolved.

IterableAPI.setEmail(email, authToken)
}

@objc(getEmail:rejecter:)
func getEmail(resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
Expand All @@ -111,6 +118,13 @@ class ReactIterableAPI: RCTEventEmitter {

IterableAPI.userId = userId
}

@objc(setUserId:authToken:)
func set(userId: String?, authToken: String?) {
ITBInfo()

IterableAPI.setUserId(userId, authToken)
}

@objc(getUserId:rejecter:)
func getUserId(resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
Expand Down Expand Up @@ -301,11 +315,15 @@ class ReactIterableAPI: RCTEventEmitter {
IterableAPI.updateUser(dataFields, mergeNestedObjects: mergeNestedObjects)
}

@objc(updateEmail:)
func updateEmail(email: String) {
@objc(updateEmail:authToken:)
func updateEmail(email: String, with authToken: String?) {
Comment thread
roninopf marked this conversation as resolved.
ITBInfo()

IterableAPI.updateEmail(email, onSuccess: nil, onFailure: nil)
if let authToken = authToken {
IterableAPI.updateEmail(email, withToken: authToken, onSuccess: nil, onFailure: nil)
} else {
IterableAPI.updateEmail(email, onSuccess: nil, onFailure: nil)
}
}

@objc(handleAppLink:resolver:rejecter:)
Expand Down
13 changes: 7 additions & 6 deletions ts/Iterable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,10 @@ class Iterable {
* Set the user of the SDK by email address
* @param {string | undefined} email the email address of the user
*/
static setEmail(email: string | undefined) {
static setEmail(email: string | undefined, authToken?: string | undefined) {
Comment thread
roninopf marked this conversation as resolved.
Iterable.logger.log("setEmail: " + email)

RNIterableAPI.setEmail(email)
RNIterableAPI.setEmail(email, authToken)
}

/**
Expand All @@ -186,10 +186,10 @@ class Iterable {
* Set the user of the SDK by ID
* @param {string | undefined} userId the ID of the user
*/
static setUserId(userId: string | undefined) {
static setUserId(userId: string | undefined, authToken?: string | undefined) {
Iterable.logger.log("setUserId: " + userId)

RNIterableAPI.setUserId(userId)
RNIterableAPI.setUserId(userId, authToken)
}

/**
Expand Down Expand Up @@ -362,11 +362,12 @@ class Iterable {
/**
*
* @param email the new email to set
* @param authToken the new auth token (JWT) to set with the new email, optional - if null/undefined, no JWT related action will be taken
*/
static updateEmail(email: string) {
static updateEmail(email: string, authToken?: string | undefined) {
Iterable.logger.log("updateEmail")

RNIterableAPI.updateEmail(email)
RNIterableAPI.updateEmail(email, authToken)
Comment thread
roninopf marked this conversation as resolved.
}

/**
Expand Down
6 changes: 4 additions & 2 deletions ts/__mocks__/MockRNIterableAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ export class MockRNIterableAPI {
})
}

static setEmail(email?: string) {
static setEmail(email: string, authToken?: string | undefined) {
MockRNIterableAPI.email = email
MockRNIterableAPI.token = authToken
}

static getUserId(): Promise<string> {
Expand All @@ -23,8 +24,9 @@ export class MockRNIterableAPI {
})
}

static setUserId(userId?: string) {
static setUserId(userId: string, authToken?: string | undefined) {
MockRNIterableAPI.userId = userId
MockRNIterableAPI.token = authToken
}

static disableDeviceForCurrentUser = jest.fn()
Expand Down
17 changes: 13 additions & 4 deletions ts/__tests__/Iterable.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ beforeEach(() => {
Iterable.logger = new IterableLogger(new IterableConfig())
})

test("set/get email", () => {
test("set/get email (no token)", () => {
Iterable.setEmail("user@example.com")

return Iterable.getEmail().then(email => {
expect(email).toBe("user@example.com")
})
})

test("set/get userId", () => {
test("set/get userId (no token)", () => {
Iterable.setUserId("user1")

return Iterable.getUserId().then(userId => {
Expand Down Expand Up @@ -136,12 +136,21 @@ test("update user", () => {
expect(MockRNIterableAPI.updateUser).toBeCalledWith(dataFields, false)
})

test("update email", () => {
test("update email (no token)", () => {
const newEmail = "woo@newemail.com"

Iterable.updateEmail(newEmail)

expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail)
expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail, undefined)
})

test("update email (with token)", () => {
const newEmail = "woo@newemail.com"
const newToken = "token2"

Iterable.updateEmail(newEmail, newToken)

expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail, newToken)
})
Comment thread
roninopf marked this conversation as resolved.

test("default config values", () => {
Expand Down