Skip to content

Commit a3d744e

Browse files
committed
fix: resolve file URLs when previewing messages
1 parent 89cf0b2 commit a3d744e

File tree

4 files changed

+63
-13
lines changed

4 files changed

+63
-13
lines changed

dist/leanplum.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/leanplum.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Messages.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import ValueTransforms from './ValueTransforms'
1313
type MessageId = string
1414
type Timestamp = number
1515
type MessageHash = { [key: string]: Message }
16-
// TODO: validation
1716
export type ActionContext = {
1817
// matches the ActionContext API in Android/iOS
1918
// https://docs.leanplum.com/reference#section-android-custom-templates
@@ -202,10 +201,10 @@ export default class Messages {
202201
this.handleMessage({
203202
isPreview: true,
204203

205-
message: {
204+
message: this.addDefaults({
206205
messageId: message.messageId,
207206
...vars,
208-
},
207+
}),
209208

210209
context,
211210
})
@@ -455,26 +454,35 @@ export default class Messages {
455454
}
456455

457456
private addDefaults(vars: MessageVariables): MessageVariables {
458-
const kinds = this.getMessages().actionDefinitions || {}
459-
const defaults = kinds[vars.__name__]
457+
const definitions = this.getMessages().actionDefinitions || {}
458+
const definition = definitions[vars.__name__]
459+
const kinds = definition?.kinds
460460

461-
if (!defaults) {
461+
if (!definition) {
462462
return vars
463463
}
464464

465-
function useDefaults(obj: MessageVariables, defaultValues: MessageVariables): MessageVariables {
465+
const useDefaults = (
466+
obj: MessageVariables,
467+
defaultValues: MessageVariables,
468+
path = ''
469+
): MessageVariables => {
466470
for (const key of Object.keys(defaultValues)) {
467471
const value = defaultValues[key]
468472
if (typeof value === 'object') {
469-
obj[key] = useDefaults(obj[key] || {}, value)
473+
obj[key] = useDefaults(obj[key] || {}, value, `${path}${key}.`)
470474
} else if (typeof obj[key] === 'undefined') {
471475
obj[key] = value
472476
}
477+
478+
if (kinds[`${path}${key}`] === 'FILE') {
479+
obj[key] = this.getFileUrl(obj[key])
480+
}
473481
}
474482
return obj
475483
}
476484

477-
return useDefaults({ ...vars }, defaults.values)
485+
return useDefaults({ ...vars }, definition.values)
478486
}
479487

480488
private resolveFiles(vars: MessageVariables): MessageVariables {

test/specs/Messages.test.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ describe(Messages, () => {
9393
expect(secondMessage).toHaveProperty('Title', 'Confirm again')
9494
})
9595

96-
it('triggers showMessage for chained message', () => {
96+
it('triggers chained registerForPush', () => {
9797
const registerForPush = jest.fn()
9898
events.on('registerForPush', registerForPush)
9999

@@ -1073,6 +1073,48 @@ describe(Messages, () => {
10731073
expect(message).toHaveProperty('Green Color', 'rgba(0,255,0,1)')
10741074
expect(message).toHaveProperty('White Color', 'rgba(255,255,255,1)')
10751075
})
1076+
1077+
it('resolves file URLs', () => {
1078+
const fileUrl = 'https://api.leanplum.com/api?appId'
1079+
1080+
getFileUrl.mockReturnValue(fileUrl)
1081+
1082+
const actionDefinitions = {
1083+
Confirm: {
1084+
"kind": 3,
1085+
"kinds": {
1086+
"Image": "FILE",
1087+
"Button": "GROUP",
1088+
"Button.Image": "FILE"
1089+
},
1090+
"values": {
1091+
"Image": "",
1092+
"Button": {
1093+
"Image": ""
1094+
}
1095+
}
1096+
}
1097+
}
1098+
events.emit('messagesReceived', {
1099+
actionDefinitions
1100+
})
1101+
1102+
events.emit('previewRequest', {
1103+
messageId: 123,
1104+
action: {
1105+
__name__: 'Confirm',
1106+
Image: 'example.png',
1107+
Button: {
1108+
Image: 'button.png',
1109+
}
1110+
}
1111+
})
1112+
1113+
const message = showMessage.mock.calls[0][0].message
1114+
expect(message).toHaveProperty('Image')
1115+
expect(message.Image).toContain('https://api.leanplum.com/api?appId')
1116+
expect(message.Button.Image).toContain('https://api.leanplum.com/api?appId')
1117+
})
10761118
})
10771119

10781120
describe("rich in-app message rendering", () => {

0 commit comments

Comments
 (0)