Skip to content

Commit 9c4326a

Browse files
committed
feat: add support for embedded messaging disabled callback and event handling
1 parent 66937c6 commit 9c4326a

4 files changed

Lines changed: 54 additions & 7 deletions

File tree

ios/RNIterableAPI/ReactIterableAPI.swift

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import React
3434
case handleAuthSuccessCalled
3535
case handleAuthFailureCalled
3636
case handleEmbeddedMessageUpdateCalled
37+
case handleEmbeddedMessagingDisabledCalled
3738
}
3839

3940
@objc public static var supportedEvents: [String] {
@@ -651,11 +652,12 @@ import React
651652
}
652653

653654
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-
{
655+
656+
// Add embedded update listener if any callback is present
657+
let onEmbeddedMessageUpdatePresent = configDict["onEmbeddedMessageUpdatePresent"] as? Bool ?? false
658+
let onEmbeddedMessagingDisabledPresent = configDict["onEmbeddedMessagingDisabledPresent"] as? Bool ?? false
659+
660+
if onEmbeddedMessageUpdatePresent || onEmbeddedMessagingDisabledPresent {
659661
IterableAPI.embeddedManager.addUpdateListener(self)
660662
}
661663
}
@@ -826,9 +828,14 @@ extension ReactIterableAPI: IterableEmbeddedUpdateDelegate {
826828
withName: EventName.handleEmbeddedMessageUpdateCalled.rawValue,
827829
body: nil as Any?)
828830
}
829-
831+
830832
public func onEmbeddedMessagingDisabled() {
831833
ITBInfo()
832-
// This is called when embedded messaging is disabled, we don't need to do anything here for now
834+
guard shouldEmit else {
835+
return
836+
}
837+
delegate?.sendEvent(
838+
withName: EventName.handleEmbeddedMessagingDisabledCalled.rawValue,
839+
body: nil as Any?)
833840
}
834841
}

src/core/classes/Iterable.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,9 @@ export class Iterable {
953953
RNEventEmitter.removeAllListeners(
954954
IterableEventName.handleEmbeddedMessageUpdateCalled
955955
);
956+
RNEventEmitter.removeAllListeners(
957+
IterableEventName.handleEmbeddedMessagingDisabledCalled
958+
);
956959
}
957960

958961
/**
@@ -1095,6 +1098,15 @@ export class Iterable {
10951098
}
10961099
);
10971100
}
1101+
1102+
if (Iterable.savedConfig.onEmbeddedMessagingDisabled) {
1103+
RNEventEmitter.addListener(
1104+
IterableEventName.handleEmbeddedMessagingDisabledCalled,
1105+
() => {
1106+
Iterable.savedConfig.onEmbeddedMessagingDisabled?.();
1107+
}
1108+
);
1109+
}
10981110
}
10991111

11001112
/**

src/core/classes/IterableConfig.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,24 @@ export class IterableConfig {
357357
*/
358358
onEmbeddedMessageUpdate?: () => void;
359359

360+
/**
361+
* A callback function that is called when embedded messaging is disabled.
362+
*
363+
* This callback is triggered when embedded messaging becomes unavailable,
364+
* which can happen due to configuration issues or API errors.
365+
*
366+
* @example
367+
* ```typescript
368+
* const config = new IterableConfig();
369+
* config.onEmbeddedMessagingDisabled = () => {
370+
* console.warn('Embedded messaging has been disabled');
371+
* // Hide embedded message UI or show error state
372+
* };
373+
* Iterable.initialize('<YOUR_API_KEY>', config);
374+
* ```
375+
*/
376+
onEmbeddedMessagingDisabled?: () => void;
377+
360378
/**
361379
* Converts the IterableConfig instance to a dictionary object.
362380
*
@@ -402,6 +420,14 @@ export class IterableConfig {
402420
*/
403421
// eslint-disable-next-line eqeqeq
404422
onEmbeddedMessageUpdatePresent: this.onEmbeddedMessageUpdate != undefined,
423+
/**
424+
* A boolean indicating if an embedded messaging disabled callback is present.
425+
*
426+
* TODO: Figure out if this is purposeful
427+
*/
428+
// eslint-disable-next-line eqeqeq
429+
onEmbeddedMessagingDisabledPresent:
430+
this.onEmbeddedMessagingDisabled != undefined,
405431
/** The log level for the SDK. */
406432
logLevel: this.logLevel,
407433
expiringAuthTokenRefreshPeriod: this.expiringAuthTokenRefreshPeriod,

src/core/enums/IterableEventName.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ export enum IterableEventName {
2121
handleAuthFailureCalled = 'handleAuthFailureCalled',
2222
/** Event that fires when embedded messages are updated */
2323
handleEmbeddedMessageUpdateCalled = 'handleEmbeddedMessageUpdateCalled',
24+
/** Event that fires when embedded messaging is disabled */
25+
handleEmbeddedMessagingDisabledCalled = 'handleEmbeddedMessagingDisabledCalled',
2426
}

0 commit comments

Comments
 (0)