Skip to content

Commit 79d7817

Browse files
authored
Merge pull request #378 from Iterable/jay/MOB-4449-update-email-with-token
[MOB-4449] update email with token
2 parents 8814c75 + 69fa289 commit 79d7817

File tree

6 files changed

+73
-18
lines changed

6 files changed

+73
-18
lines changed

android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java

+22
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,27 @@ public void setEmail(@Nullable String email) {
112112
IterableApi.getInstance().setEmail(email);
113113
}
114114

115+
@ReactMethod
116+
public void setEmail(@Nullable String email, @Nullable String authToken) {
117+
IterableLogger.d(TAG, "setEmail: " + email + " authToken: " + authToken);
118+
119+
IterableApi.getInstance().setEmail(email, authToken);
120+
}
121+
115122
@ReactMethod
116123
public void updateEmail(String email) {
117124
IterableLogger.d(TAG, "updateEmail: " + email);
125+
118126
IterableApi.getInstance().updateEmail(email);
119127
}
120128

129+
@ReactMethod
130+
public void updateEmail(String email, @Nullable String authToken) {
131+
IterableLogger.d(TAG, "updateEmail: " + email + " authToken: " + authToken);
132+
133+
IterableApi.getInstance().updateEmail(email, authToken);
134+
}
135+
121136
@ReactMethod
122137
public void getEmail(Promise promise) {
123138
promise.resolve(RNIterableInternal.getEmail());
@@ -135,6 +150,13 @@ public void setUserId(@Nullable String userId) {
135150
IterableApi.getInstance().setUserId(userId);
136151
}
137152

153+
@ReactMethod
154+
public void setUserId(@Nullable String userId, @Nullable String authToken) {
155+
IterableLogger.d(TAG, "setUserId: " + userId + " authToken: " + authToken);
156+
157+
IterableApi.getInstance().setUserId(userId, authToken);
158+
}
159+
138160
@ReactMethod
139161
public void updateUser(ReadableMap dataFields, Boolean mergeNestedObjects) {
140162
IterableLogger.v(TAG, "updateUser");

ios/RNIterableAPI/RNIterableAPI.m

+6-3
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ @interface RCT_EXTERN_REMAP_MODULE(RNIterableAPI, ReactIterableAPI, NSObject)
2222
resolver: (RCTPromiseResolveBlock) resolve
2323
rejecter: (RCTPromiseRejectBlock) reject)
2424

25-
RCT_EXTERN_METHOD(setEmail: (NSString *) email)
25+
RCT_EXTERN_METHOD(setEmail: (NSString *) email
26+
authToken: (NSString *) authToken)
2627

2728
RCT_EXTERN_METHOD(getEmail: (RCTPromiseResolveBlock) resolve
2829
rejecter: (RCTPromiseRejectBlock) reject)
2930

30-
RCT_EXTERN_METHOD(setUserId: (NSString *) userId)
31+
RCT_EXTERN_METHOD(setUserId: (NSString *) userId
32+
authToken: (NSString *) authToken)
3133

3234
RCT_EXTERN_METHOD(getUserId: (RCTPromiseResolveBlock) resolve
3335
rejecter: (RCTPromiseRejectBlock) reject)
@@ -80,7 +82,8 @@ @interface RCT_EXTERN_REMAP_MODULE(RNIterableAPI, ReactIterableAPI, NSObject)
8082
RCT_EXTERN_METHOD(updateUser: (nonnull NSDictionary *) dataFields
8183
mergeNestedObjects: (BOOL) mergeNestedObjects)
8284

83-
RCT_EXTERN_METHOD(updateEmail: (nonnull NSString *) email)
85+
RCT_EXTERN_METHOD(updateEmail: (nonnull NSString *) email
86+
authToken: (NSString *) authToken)
8487

8588
RCT_EXTERN_METHOD(handleAppLink: (nonnull NSString *) appLink
8689
resolver: (RCTPromiseResolveBlock) resolve

ios/RNIterableAPI/ReactIterableAPI.swift

+21-3
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ class ReactIterableAPI: RCTEventEmitter {
9797

9898
IterableAPI.email = email
9999
}
100+
101+
@objc(setEmail:authToken:)
102+
func set(email: String?, authToken: String?) {
103+
ITBInfo()
104+
105+
IterableAPI.setEmail(email, authToken)
106+
}
100107

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

112119
IterableAPI.userId = userId
113120
}
121+
122+
@objc(setUserId:authToken:)
123+
func set(userId: String?, authToken: String?) {
124+
ITBInfo()
125+
126+
IterableAPI.setUserId(userId, authToken)
127+
}
114128

115129
@objc(getUserId:rejecter:)
116130
func getUserId(resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
@@ -301,11 +315,15 @@ class ReactIterableAPI: RCTEventEmitter {
301315
IterableAPI.updateUser(dataFields, mergeNestedObjects: mergeNestedObjects)
302316
}
303317

304-
@objc(updateEmail:)
305-
func updateEmail(email: String) {
318+
@objc(updateEmail:authToken:)
319+
func updateEmail(email: String, with authToken: String?) {
306320
ITBInfo()
307321

308-
IterableAPI.updateEmail(email, onSuccess: nil, onFailure: nil)
322+
if let authToken = authToken {
323+
IterableAPI.updateEmail(email, withToken: authToken, onSuccess: nil, onFailure: nil)
324+
} else {
325+
IterableAPI.updateEmail(email, onSuccess: nil, onFailure: nil)
326+
}
309327
}
310328

311329
@objc(handleAppLink:resolver:rejecter:)

ts/Iterable.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,10 @@ class Iterable {
167167
* Set the user of the SDK by email address
168168
* @param {string | undefined} email the email address of the user
169169
*/
170-
static setEmail(email: string | undefined) {
170+
static setEmail(email: string | undefined, authToken?: string | undefined) {
171171
Iterable.logger.log("setEmail: " + email)
172172

173-
RNIterableAPI.setEmail(email)
173+
RNIterableAPI.setEmail(email, authToken)
174174
}
175175

176176
/**
@@ -186,10 +186,10 @@ class Iterable {
186186
* Set the user of the SDK by ID
187187
* @param {string | undefined} userId the ID of the user
188188
*/
189-
static setUserId(userId: string | undefined) {
189+
static setUserId(userId: string | undefined, authToken?: string | undefined) {
190190
Iterable.logger.log("setUserId: " + userId)
191191

192-
RNIterableAPI.setUserId(userId)
192+
RNIterableAPI.setUserId(userId, authToken)
193193
}
194194

195195
/**
@@ -362,11 +362,12 @@ class Iterable {
362362
/**
363363
*
364364
* @param email the new email to set
365+
* @param authToken the new auth token (JWT) to set with the new email, optional - if null/undefined, no JWT related action will be taken
365366
*/
366-
static updateEmail(email: string) {
367+
static updateEmail(email: string, authToken?: string | undefined) {
367368
Iterable.logger.log("updateEmail")
368369

369-
RNIterableAPI.updateEmail(email)
370+
RNIterableAPI.updateEmail(email, authToken)
370371
}
371372

372373
/**

ts/__mocks__/MockRNIterableAPI.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ export class MockRNIterableAPI {
1313
})
1414
}
1515

16-
static setEmail(email?: string) {
16+
static setEmail(email: string, authToken?: string | undefined) {
1717
MockRNIterableAPI.email = email
18+
MockRNIterableAPI.token = authToken
1819
}
1920

2021
static getUserId(): Promise<string> {
@@ -23,8 +24,9 @@ export class MockRNIterableAPI {
2324
})
2425
}
2526

26-
static setUserId(userId?: string) {
27+
static setUserId(userId: string, authToken?: string | undefined) {
2728
MockRNIterableAPI.userId = userId
29+
MockRNIterableAPI.token = authToken
2830
}
2931

3032
static disableDeviceForCurrentUser = jest.fn()

ts/__tests__/Iterable.spec.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ beforeEach(() => {
2424
Iterable.logger = new IterableLogger(new IterableConfig())
2525
})
2626

27-
test("set/get email", () => {
27+
test("set/get email (no token)", () => {
2828
Iterable.setEmail("[email protected]")
2929

3030
return Iterable.getEmail().then(email => {
3131
expect(email).toBe("[email protected]")
3232
})
3333
})
3434

35-
test("set/get userId", () => {
35+
test("set/get userId (no token)", () => {
3636
Iterable.setUserId("user1")
3737

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

139-
test("update email", () => {
139+
test("update email (no token)", () => {
140140
const newEmail = "[email protected]"
141141

142142
Iterable.updateEmail(newEmail)
143143

144-
expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail)
144+
expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail, undefined)
145+
})
146+
147+
test("update email (with token)", () => {
148+
const newEmail = "[email protected]"
149+
const newToken = "token2"
150+
151+
Iterable.updateEmail(newEmail, newToken)
152+
153+
expect(MockRNIterableAPI.updateEmail).toBeCalledWith(newEmail, newToken)
145154
})
146155

147156
test("default config values", () => {

0 commit comments

Comments
 (0)