Skip to content

Commit 314e23d

Browse files
First version of serializing/deserializing in-app classes
1 parent 5db16e7 commit 314e23d

File tree

5 files changed

+340
-41
lines changed

5 files changed

+340
-41
lines changed

InAppClasses.ts

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
'use strict';
2+
3+
enum IterableInAppTriggerType {
4+
immediate = 0,
5+
event = 1,
6+
never = 2,
7+
}
8+
9+
class IterableInAppTrigger {
10+
type: IterableInAppTriggerType
11+
dict: any
12+
13+
constructor(type: IterableInAppTriggerType, dict: any) {
14+
this.type = type
15+
this.dict = dict
16+
}
17+
18+
static fromDict(dict: any): IterableInAppTrigger {
19+
const type = dict["type"] as IterableInAppTriggerType
20+
if (type) {
21+
return new IterableInAppTrigger(type, dict)
22+
} else {
23+
return new IterableInAppTrigger(IterableInAppTriggerType.immediate, dict)
24+
}
25+
}
26+
}
27+
28+
enum IterableInAppContentType {
29+
html = 0,
30+
alert = 1,
31+
banner = 2,
32+
}
33+
34+
class IterableEdgeInsets {
35+
top: number
36+
left: number
37+
bottom: number
38+
right: number
39+
40+
constructor(top: number, left: number, bottom: number, right: number) {
41+
this.top = top
42+
this.left = left
43+
this.bottom = bottom
44+
this.right = right
45+
}
46+
47+
static fromDict(dict: any): IterableEdgeInsets {
48+
return new IterableEdgeInsets(dict["top"] as number, dict["left"] as number, dict["bottom"] as number, dict["right"] as number)
49+
}
50+
}
51+
52+
interface IterableInAppContent {
53+
type: IterableInAppContentType
54+
}
55+
56+
class IterableHtmlInAppContent implements IterableInAppContent {
57+
type: IterableInAppContentType = IterableInAppContentType.html
58+
edgeInsets: IterableEdgeInsets
59+
backgroundAlpha: number
60+
html: String
61+
62+
constructor(edgeInsets: IterableEdgeInsets, backgroundAlpha: number, html: String) {
63+
this.edgeInsets = edgeInsets
64+
this.backgroundAlpha = backgroundAlpha
65+
this.html = html
66+
}
67+
68+
static fromDict(dict: any): IterableHtmlInAppContent {
69+
return new IterableHtmlInAppContent(
70+
IterableEdgeInsets.fromDict(dict["edgeInsets"]),
71+
dict["backgroundAlpha"] as number,
72+
dict["html"] as String)
73+
}
74+
}
75+
76+
class IterableInboxMetadata {
77+
title?: String
78+
subTitle?: String
79+
icon?: String
80+
81+
constructor(title: String | undefined, subTitle: String | undefined, icon: String | undefined) {
82+
this.title = title
83+
this.subTitle = subTitle
84+
this.icon = icon
85+
}
86+
87+
static fromDict(dict: any): IterableInboxMetadata {
88+
return new IterableInboxMetadata(dict["title"], dict["subtitle"], dict["icon"])
89+
}
90+
}
91+
92+
class IterableInAppMessage {
93+
readonly messageId: String
94+
readonly campaignId: String
95+
readonly trigger: IterableInAppTrigger
96+
readonly createdAt?: Date
97+
readonly expiresAt?: Date
98+
readonly content: IterableInAppContent
99+
readonly saveToInbox: Boolean
100+
readonly inboxMetadata: IterableInboxMetadata
101+
readonly customPayload?: any
102+
readonly read: Boolean
103+
104+
constructor(messageId: String,
105+
campaignId: String,
106+
trigger: IterableInAppTrigger,
107+
createdAt: Date | undefined,
108+
expiresAt: Date | undefined,
109+
content: IterableInAppContent,
110+
saveToInbox: Boolean,
111+
inboxMetadata: IterableInboxMetadata,
112+
customPayload: any | undefined,
113+
read: Boolean) {
114+
this.campaignId = campaignId
115+
this.messageId = messageId
116+
this.trigger = trigger
117+
this.createdAt = createdAt
118+
this.expiresAt = expiresAt
119+
this.content = content
120+
this.saveToInbox = saveToInbox
121+
this.inboxMetadata = inboxMetadata
122+
this.customPayload = customPayload
123+
this.read = read
124+
}
125+
126+
isSilentInbox(): Boolean {
127+
return this.saveToInbox && this.trigger.type == IterableInAppTriggerType.never
128+
}
129+
130+
static fromDict(dict: any): IterableInAppMessage {
131+
const messageId = dict["messageId"] as String
132+
const campaignId = dict["campaignId"] as String
133+
const trigger = IterableInAppTrigger.fromDict(dict["trigger"])
134+
let createdAt = dict["createdAt"]
135+
if (createdAt) {
136+
createdAt = new Date(createdAt as number)
137+
}
138+
let expiresAt = dict["expiresAt"]
139+
if (expiresAt) {
140+
expiresAt = new Date(expiresAt as number)
141+
}
142+
let content = IterableHtmlInAppContent.fromDict(dict["content"])
143+
let saveToInbox = dict["saveToInbox"] as Boolean
144+
let inboxMetadata = IterableInboxMetadata.fromDict(dict["inboxMetadata"])
145+
let customPayload = dict["customPayload"]
146+
let read = dict["read"] as Boolean
147+
148+
return new IterableInAppMessage(
149+
messageId,
150+
campaignId,
151+
trigger,
152+
createdAt,
153+
expiresAt,
154+
content,
155+
saveToInbox,
156+
inboxMetadata,
157+
customPayload,
158+
read
159+
)
160+
}
161+
}
162+
163+
export { IterableInAppMessage }

Iterable.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
import { NativeModules, NativeEventEmitter } from 'react-native';
4+
import { IterableInAppMessage } from './InAppClasses'
45

56
const RNIterableAPI = NativeModules.RNIterableAPI
67
const RNEventEmitter = new NativeEventEmitter(RNIterableAPI)
@@ -232,14 +233,10 @@ class Iterable {
232233
RNIterableAPI.trackPurchaseWithTotal(total, items, dataFields)
233234
}
234235

235-
static async getInAppMessages() {
236+
static getInAppMessages(): Promise<Array<IterableInAppMessage>> {
236237
console.log("getInAppMessages");
237-
try {
238-
var messages = await RNIterableAPI.getInAppMessages();
239-
console.log(messages);
240-
} catch (e) {
241-
console.error(e);
242-
}
238+
return RNIterableAPI.getInAppMessages().then((messages: Array<any>) => messages.map (message => {return IterableInAppMessage.fromDict(message)}))
243239
}
244240
}
241+
245242
export { Iterable, IterableConfig, PushServicePlatform, IterableAction, IterableActionContext, IterableAttributionInfo, IterableCommerceItem };

index.d.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,90 @@ export class IterableCommerceItem {
7070

7171
constructor(id: String, name: String, price: number, quantity: number)
7272
}
73+
74+
export enum IterableInAppTriggerType {
75+
immediate = 0,
76+
event = 1,
77+
never = 2,
78+
}
79+
80+
export class IterableInAppTrigger {
81+
type: IterableInAppTriggerType
82+
dict: any
83+
84+
constructor(type: IterableInAppTriggerType, dict: any)
85+
86+
static fromDict(dict: any): IterableInAppTrigger
87+
}
88+
89+
export enum IterableInAppContentType {
90+
html = 0,
91+
alert = 1,
92+
banner = 2,
93+
}
94+
95+
export class IterableEdgeInsets {
96+
top: number
97+
left: number
98+
bottom: number
99+
right: number
100+
101+
constructor(top: number, left: number, bottom: number, right: number)
102+
103+
static fromDict(dict: any): IterableEdgeInsets
104+
}
105+
106+
export interface IterableInAppContent {
107+
type: IterableInAppContentType
108+
}
109+
110+
export class IterableHtmlInAppContent implements IterableInAppContent {
111+
type: IterableInAppContentType
112+
edgeInsets: IterableEdgeInsets
113+
backgroundAlpha: number
114+
html: String
115+
116+
constructor(edgeInsets: IterableEdgeInsets, backgroundAlpha: number, html: String)
117+
118+
static fromDict(dict: any): IterableHtmlInAppContent
119+
}
120+
121+
export class IterableInboxMetadata {
122+
title?: String
123+
subTitle?: String
124+
icon?: String
125+
126+
constructor(title: String | undefined, subTitle: String | undefined, icon: String | undefined)
127+
128+
static fromDict(dict: any): IterableInboxMetadata
129+
}
130+
131+
export class IterableInAppMessage {
132+
readonly messageId: String
133+
readonly campaignId: String
134+
readonly trigger: IterableInAppTrigger
135+
readonly createdAt?: Date
136+
readonly expiresAt?: Date
137+
readonly content: IterableInAppContent
138+
readonly saveToInbox: Boolean
139+
readonly inboxMetadata: IterableInboxMetadata
140+
readonly customPayload?: any
141+
readonly read: Boolean
142+
143+
constructor(messageId: String,
144+
campaignId: String,
145+
trigger: IterableInAppTrigger,
146+
createdAt: Date | undefined,
147+
expiresAt: Date | undefined,
148+
content: IterableInAppContent,
149+
saveToInbox: Boolean,
150+
inboxMetadata: IterableInboxMetadata,
151+
customPayload: any | undefined,
152+
read: Boolean)
153+
154+
isSilentInbox(): Boolean {
155+
return this.saveToInbox && this.trigger.type == IterableInAppTriggerType.never
156+
}
157+
158+
static fromDict(dict: any): IterableInAppMessage
159+
}

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
*/
88

99
import { Iterable, IterableConfig, PushServicePlatform, IterableAction, IterableActionContext, IterableAttributionInfo, IterableCommerceItem } from './Iterable';
10+
import { IterableInAppMessage } from './InAppClasses'
1011

11-
export { Iterable, IterableConfig, PushServicePlatform, IterableAction, IterableActionContext, IterableAttributionInfo, IterableCommerceItem };
12+
export { Iterable, IterableConfig, PushServicePlatform, IterableAction, IterableActionContext, IterableAttributionInfo, IterableCommerceItem, IterableInAppMessage };

0 commit comments

Comments
 (0)