Skip to content

Commit 0e8b24c

Browse files
committed
feat: implement getEmbeddedMessages method. not working -- giving back empty array
1 parent 35b74d4 commit 0e8b24c

4 files changed

Lines changed: 150 additions & 9 deletions

File tree

example/src/components/Embedded/Embedded.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
import styles from './Embedded.styles';
1010

1111
export const Embedded = () => {
12-
const [placementIds, setPlacementIds] = useState<number[]>([]);
12+
const [placementIds] = useState<number[]>([10, 2112]);
1313
const [embeddedMessages, setEmbeddedMessages] = useState<
1414
IterableEmbeddedMessage[]
1515
>([]);
@@ -19,11 +19,11 @@ export const Embedded = () => {
1919
}, []);
2020

2121
const getPlacementIds = useCallback(() => {
22-
return Iterable.embeddedManager.getPlacementIds().then((ids: unknown) => {
23-
console.log(ids);
24-
setPlacementIds(ids as number[]);
25-
return ids;
26-
});
22+
// return Iterable.embeddedManager.getPlacementIds().then((ids: unknown) => {
23+
// console.log(ids);
24+
// setPlacementIds(ids as number[]);
25+
// return ids;
26+
// });
2727
}, []);
2828

2929
const startEmbeddedSession = useCallback(() => {
@@ -41,13 +41,19 @@ export const Embedded = () => {
4141
}, []);
4242

4343
const getEmbeddedMessages = useCallback(() => {
44-
getPlacementIds()
45-
.then((ids: number[]) => Iterable.embeddedManager.getMessages(ids))
44+
Iterable.embeddedManager
45+
.getMessages(placementIds)
4646
.then((messages: IterableEmbeddedMessage[]) => {
4747
setEmbeddedMessages(messages);
4848
console.log(messages);
4949
});
50-
}, [getPlacementIds]);
50+
// getPlacementIds()
51+
// .then((ids: number[]) => Iterable.embeddedManager.getMessages(ids))
52+
// .then((messages: IterableEmbeddedMessage[]) => {
53+
// setEmbeddedMessages(messages);
54+
// console.log(messages);
55+
// });
56+
}, [placementIds]);
5157

5258
const startEmbeddedImpression = useCallback(
5359
(message: IterableEmbeddedMessage) => {

ios/RNIterableAPI/RNIterableAPI.mm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ - (void)syncEmbeddedMessages {
281281
[_swiftAPI syncEmbeddedMessages];
282282
}
283283

284+
- (void)getEmbeddedMessages:(NSArray *_Nullable)placementIds
285+
resolve:(RCTPromiseResolveBlock)resolve
286+
reject:(RCTPromiseRejectBlock)reject {
287+
[_swiftAPI getEmbeddedMessages:placementIds resolver:resolve rejecter:reject];
288+
}
289+
284290
- (void)wakeApp {
285291
// Placeholder function -- this method is only used in Android
286292
}
@@ -515,6 +521,11 @@ - (void)wakeApp {
515521
[_swiftAPI syncEmbeddedMessages];
516522
}
517523

524+
RCT_EXPORT_METHOD(getEmbeddedMessages : (NSArray *_Nullable)placementIds resolve : (RCTPromiseResolveBlock)
525+
resolve reject : (RCTPromiseRejectBlock)reject) {
526+
[_swiftAPI getEmbeddedMessages:placementIds resolver:resolve rejecter:reject];
527+
}
528+
518529
RCT_EXPORT_METHOD(wakeApp) {
519530
// Placeholder function -- this method is only used in Android
520531
}

ios/RNIterableAPI/ReactIterableAPI.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,37 @@ import React
496496
IterableAPI.embeddedManager.syncMessages(completion: {})
497497
}
498498

499+
@objc(getEmbeddedMessages:resolver:rejecter:)
500+
public func getEmbeddedMessages(
501+
placementIds: [NSNumber]?,
502+
resolver: RCTPromiseResolveBlock,
503+
rejecter: RCTPromiseRejectBlock
504+
) {
505+
ITBInfo()
506+
ITBInfo("getEmbeddedMessages called with placementIds: \(String(describing: placementIds))")
507+
var allMessages: [IterableEmbeddedMessage] = []
508+
509+
if let placementIds = placementIds, !placementIds.isEmpty {
510+
// Get messages for each specified placement ID
511+
ITBInfo("Getting messages for \(placementIds.count) placement IDs")
512+
for placementId in placementIds {
513+
ITBInfo("Getting messages for placement ID: \(placementId.intValue)")
514+
let messages = IterableAPI.embeddedManager.getMessages(for: placementId.intValue)
515+
ITBInfo("Found \(messages.count) messages for placement ID: \(placementId.intValue)")
516+
allMessages.append(contentsOf: messages)
517+
}
518+
} else {
519+
// Get messages for all placements by getting placement IDs first
520+
ITBInfo("Getting all messages (no placement IDs specified)")
521+
let messages = IterableAPI.embeddedManager.getMessages()
522+
ITBInfo("Found \(messages.count) total messages")
523+
allMessages.append(contentsOf: messages)
524+
}
525+
526+
ITBInfo("Returning \(allMessages.count) total embedded messages")
527+
resolver(allMessages.map { $0.toDict() })
528+
}
529+
499530
// MARK: Private
500531
private var shouldEmit = false
501532
private let _methodQueue = DispatchQueue(label: String(describing: ReactIterableAPI.self))

ios/RNIterableAPI/Serialization.swift

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,3 +273,96 @@ extension InboxImpressionTracker.RowInfo {
273273
return rows.compactMap(InboxImpressionTracker.RowInfo.from(dict:))
274274
}
275275
}
276+
277+
extension IterableEmbeddedMessage {
278+
func toDict() -> [AnyHashable: Any] {
279+
var dict = [AnyHashable: Any]()
280+
281+
// Metadata
282+
var metadata = [AnyHashable: Any]()
283+
metadata["messageId"] = self.metadata.messageId
284+
metadata["placementId"] = self.metadata.placementId
285+
if let campaignId = self.metadata.campaignId {
286+
metadata["campaignId"] = campaignId
287+
}
288+
if let isProof = self.metadata.isProof {
289+
metadata["isProof"] = isProof
290+
}
291+
dict["metadata"] = metadata
292+
293+
// Elements
294+
if let elements = self.elements {
295+
var elementsDict = [AnyHashable: Any]()
296+
297+
if let title = elements.title {
298+
elementsDict["title"] = title
299+
}
300+
301+
if let body = elements.body {
302+
elementsDict["body"] = body
303+
}
304+
305+
if let mediaUrl = elements.mediaUrl {
306+
elementsDict["mediaUrl"] = mediaUrl
307+
}
308+
309+
if let mediaUrlCaption = elements.mediaUrlCaption {
310+
elementsDict["mediaUrlCaption"] = mediaUrlCaption
311+
}
312+
313+
if let defaultAction = elements.defaultAction {
314+
var actionDict = [AnyHashable: Any]()
315+
actionDict["type"] = defaultAction.type
316+
if let data = defaultAction.data {
317+
actionDict["data"] = data
318+
}
319+
elementsDict["defaultAction"] = actionDict
320+
}
321+
322+
if let buttons = elements.buttons {
323+
var buttonsArray = [[AnyHashable: Any]]()
324+
for button in buttons {
325+
var buttonDict = [AnyHashable: Any]()
326+
buttonDict["id"] = button.id
327+
if let title = button.title {
328+
buttonDict["title"] = title
329+
}
330+
if let action = button.action {
331+
var actionDict = [AnyHashable: Any]()
332+
actionDict["type"] = action.type
333+
if let data = action.data {
334+
actionDict["data"] = data
335+
}
336+
buttonDict["action"] = actionDict
337+
} else {
338+
buttonDict["action"] = NSNull()
339+
}
340+
buttonsArray.append(buttonDict)
341+
}
342+
elementsDict["buttons"] = buttonsArray
343+
}
344+
345+
if let text = elements.text {
346+
var textArray = [[AnyHashable: Any]]()
347+
for textElement in text {
348+
var textDict = [AnyHashable: Any]()
349+
textDict["id"] = textElement.id
350+
if let textValue = textElement.text {
351+
textDict["text"] = textValue
352+
}
353+
textArray.append(textDict)
354+
}
355+
elementsDict["text"] = textArray
356+
}
357+
358+
dict["elements"] = elementsDict
359+
}
360+
361+
// Payload
362+
if let payload = self.payload {
363+
dict["payload"] = payload
364+
}
365+
366+
return dict
367+
}
368+
}

0 commit comments

Comments
 (0)