Skip to content

Commit 215ddb8

Browse files
committed
feat: add embedded message update listener and callback support in Iterable API
1 parent badcd2d commit 215ddb8

4 files changed

Lines changed: 64 additions & 0 deletions

File tree

ios/RNIterableAPI/ReactIterableAPI.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import React
3333
case receivedIterableInboxChanged
3434
case handleAuthSuccessCalled
3535
case handleAuthFailureCalled
36+
case handleEmbeddedMessageUpdateCalled
3637
}
3738

3839
@objc public static var supportedEvents: [String] {
@@ -650,6 +651,13 @@ import React
650651
}
651652

652653
IterableAPI.setDeviceAttribute(name: "reactNativeSDKVersion", value: version)
654+
655+
// Add embedded update listener if callback is present
656+
if let onEmbeddedMessageUpdatePresent = configDict["onEmbeddedMessageUpdatePresent"] as? Bool,
657+
onEmbeddedMessageUpdatePresent == true
658+
{
659+
IterableAPI.embeddedManager.addUpdateListener(self)
660+
}
653661
}
654662
}
655663

@@ -807,3 +815,20 @@ extension ReactIterableAPI: IterableAuthDelegate {
807815
public func onTokenRegistrationFailed(_ reason: String?) {
808816
}
809817
}
818+
819+
extension ReactIterableAPI: IterableEmbeddedUpdateDelegate {
820+
public func onMessagesUpdated() {
821+
ITBInfo()
822+
guard shouldEmit else {
823+
return
824+
}
825+
delegate?.sendEvent(
826+
withName: EventName.handleEmbeddedMessageUpdateCalled.rawValue,
827+
body: nil as Any?)
828+
}
829+
830+
public func onEmbeddedMessagingDisabled() {
831+
ITBInfo()
832+
// This is called when embedded messaging is disabled, we don't need to do anything here for now
833+
}
834+
}

src/core/classes/Iterable.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,9 @@ export class Iterable {
950950
RNEventEmitter.removeAllListeners(
951951
IterableEventName.handleAuthFailureCalled
952952
);
953+
RNEventEmitter.removeAllListeners(
954+
IterableEventName.handleEmbeddedMessageUpdateCalled
955+
);
953956
}
954957

955958
/**
@@ -1083,6 +1086,15 @@ export class Iterable {
10831086
}
10841087
);
10851088
}
1089+
1090+
if (Iterable.savedConfig.onEmbeddedMessageUpdate) {
1091+
RNEventEmitter.addListener(
1092+
IterableEventName.handleEmbeddedMessageUpdateCalled,
1093+
() => {
1094+
Iterable.savedConfig.onEmbeddedMessageUpdate?.();
1095+
}
1096+
);
1097+
}
10861098
}
10871099

10881100
/**

src/core/classes/IterableConfig.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,24 @@ export class IterableConfig {
339339
*/
340340
enableEmbeddedMessaging = false;
341341

342+
/**
343+
* A callback function that is called when embedded messages are updated.
344+
*
345+
* This callback is triggered when the local cache of embedded messages changes,
346+
* such as when new messages arrive or existing messages are removed.
347+
*
348+
* @example
349+
* ```typescript
350+
* const config = new IterableConfig();
351+
* config.onEmbeddedMessageUpdate = () => {
352+
* console.log('Embedded messages updated!');
353+
* // Refresh your UI to display the latest messages
354+
* };
355+
* Iterable.initialize('<YOUR_API_KEY>', config);
356+
* ```
357+
*/
358+
onEmbeddedMessageUpdate?: () => void;
359+
342360
/**
343361
* Converts the IterableConfig instance to a dictionary object.
344362
*
@@ -377,6 +395,13 @@ export class IterableConfig {
377395
*/
378396
// eslint-disable-next-line eqeqeq
379397
authHandlerPresent: this.authHandler != undefined,
398+
/**
399+
* A boolean indicating if an embedded message update callback is present.
400+
*
401+
* TODO: Figure out if this is purposeful
402+
*/
403+
// eslint-disable-next-line eqeqeq
404+
onEmbeddedMessageUpdatePresent: this.onEmbeddedMessageUpdate != undefined,
380405
/** The log level for the SDK. */
381406
logLevel: this.logLevel,
382407
expiringAuthTokenRefreshPeriod: this.expiringAuthTokenRefreshPeriod,

src/core/enums/IterableEventName.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ export enum IterableEventName {
1919
handleAuthSuccessCalled = 'handleAuthSuccessCalled',
2020
/** Event that fires when authentication with Iterable fails */
2121
handleAuthFailureCalled = 'handleAuthFailureCalled',
22+
/** Event that fires when embedded messages are updated */
23+
handleEmbeddedMessageUpdateCalled = 'handleEmbeddedMessageUpdateCalled',
2224
}

0 commit comments

Comments
 (0)