@thoughtspot/visual-embed-sdk 1.35.5 → 1.35.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/embed/search-bar.d.ts +24 -1
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +13 -2
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +26 -1
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +16 -2
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +49 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js +104 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/cjs/src/embed/ts-embed.d.ts +4 -1
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +49 -31
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +187 -108
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/hostEventsTypeMapping.d.ts +2 -0
- package/cjs/src/hostEventsTypeMapping.d.ts.map +1 -0
- package/cjs/src/hostEventsTypeMapping.js +4 -0
- package/cjs/src/hostEventsTypeMapping.js.map +1 -0
- package/cjs/src/types.d.ts +27 -0
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/embedApi/contracts.d.ts +101 -0
- package/cjs/src/utils/embedApi/contracts.d.ts.map +1 -0
- package/cjs/src/utils/embedApi/contracts.js +17 -0
- package/cjs/src/utils/embedApi/contracts.js.map +1 -0
- package/cjs/src/utils/embedApi/embedApiClient.d.ts +12 -0
- package/cjs/src/utils/embedApi/embedApiClient.d.ts.map +1 -0
- package/cjs/src/utils/embedApi/embedApiClient.js +46 -0
- package/cjs/src/utils/embedApi/embedApiClient.js.map +1 -0
- package/cjs/src/utils/embedApi/processEmbedApi.d.ts +9 -0
- package/cjs/src/utils/embedApi/processEmbedApi.d.ts.map +1 -0
- package/cjs/src/utils/embedApi/processEmbedApi.js +18 -0
- package/cjs/src/utils/embedApi/processEmbedApi.js.map +1 -0
- package/dist/{index-FKywZXHG.js → index-BBBimG1x.js} +1 -1
- package/dist/index-CENLvayL.js +7370 -0
- package/dist/index-CbltIawo.js +7370 -0
- package/dist/index-CoQfqaHj.js +7370 -0
- package/dist/index-CzwzS0P4.js +7370 -0
- package/dist/index-DFwi_pV_.js +7370 -0
- package/dist/index-DOIjN0N_.js +7370 -0
- package/dist/index-DYBx8SuE.js +7370 -0
- package/dist/index-DaLHJaLd.js +7370 -0
- package/dist/index-DnJX-gN2.js +7370 -0
- package/dist/index-nWevLycs.js +7370 -0
- package/dist/src/embed/search-bar.d.ts +24 -1
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +26 -1
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/dist/src/embed/ts-embed.d.ts +4 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/hostEventsTypeMapping.d.ts +2 -0
- package/dist/src/hostEventsTypeMapping.d.ts.map +1 -0
- package/dist/src/types.d.ts +27 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/embedApi/contracts.d.ts +101 -0
- package/dist/src/utils/embedApi/contracts.d.ts.map +1 -0
- package/dist/src/utils/embedApi/embedApiClient.d.ts +12 -0
- package/dist/src/utils/embedApi/embedApiClient.d.ts.map +1 -0
- package/dist/src/utils/embedApi/processEmbedApi.d.ts +9 -0
- package/dist/src/utils/embedApi/processEmbedApi.d.ts.map +1 -0
- package/dist/tsembed-react.es.js +81 -38
- package/dist/tsembed-react.js +80 -37
- package/dist/tsembed.es.js +81 -38
- package/dist/tsembed.js +80 -37
- package/dist/visual-embed-sdk-react-full.d.ts +78 -0
- package/dist/visual-embed-sdk-react.d.ts +78 -0
- package/dist/visual-embed-sdk.d.ts +78 -0
- package/lib/package.json +1 -1
- package/lib/src/embed/search-bar.d.ts +24 -1
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +13 -2
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +26 -1
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +16 -2
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +51 -2
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js +101 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/lib/src/embed/ts-embed.d.ts +4 -1
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +49 -31
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +187 -108
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/hostEventsTypeMapping.d.ts +2 -0
- package/lib/src/hostEventsTypeMapping.d.ts.map +1 -0
- package/lib/src/hostEventsTypeMapping.js +2 -0
- package/lib/src/hostEventsTypeMapping.js.map +1 -0
- package/lib/src/types.d.ts +27 -0
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/embedApi/contracts.d.ts +101 -0
- package/lib/src/utils/embedApi/contracts.d.ts.map +1 -0
- package/lib/src/utils/embedApi/contracts.js +14 -0
- package/lib/src/utils/embedApi/contracts.js.map +1 -0
- package/lib/src/utils/embedApi/embedApiClient.d.ts +12 -0
- package/lib/src/utils/embedApi/embedApiClient.d.ts.map +1 -0
- package/lib/src/utils/embedApi/embedApiClient.js +42 -0
- package/lib/src/utils/embedApi/embedApiClient.js.map +1 -0
- package/lib/src/utils/embedApi/processEmbedApi.d.ts +9 -0
- package/lib/src/utils/embedApi/processEmbedApi.d.ts.map +1 -0
- package/lib/src/utils/embedApi/processEmbedApi.js +14 -0
- package/lib/src/utils/embedApi/processEmbedApi.js.map +1 -0
- package/lib/src/visual-embed-sdk.d.ts +81 -3
- package/package.json +1 -1
- package/src/embed/search-bar.tsx +36 -2
- package/src/embed/search.spec.ts +66 -1
- package/src/embed/search.ts +38 -1
- package/src/embed/ts-embed.spec.ts +205 -113
- package/src/embed/ts-embed.ts +52 -30
- package/src/types.ts +28 -0
|
@@ -96,6 +96,11 @@ const customisationsView = {
|
|
|
96
96
|
},
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
+
const customVariablesForThirdPartyTools = {
|
|
100
|
+
key1: '!@#',
|
|
101
|
+
key2: '*%^',
|
|
102
|
+
};
|
|
103
|
+
|
|
99
104
|
describe('Unit test case for ts embed', () => {
|
|
100
105
|
const mockMixPanelEvent = jest.spyOn(mixpanelInstance, 'uploadMixpanelEvent');
|
|
101
106
|
beforeEach(() => {
|
|
@@ -148,11 +153,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
148
153
|
mockProcessTrigger.mockResolvedValue({ session: 'test' });
|
|
149
154
|
await executeAfterWait(async () => {
|
|
150
155
|
const payload = { newVizName: 'test' };
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
payload,
|
|
155
|
-
),
|
|
156
|
+
await searchEmbed.triggerUIPassThrough(
|
|
157
|
+
UIPassthroughEvent.PinAnswerToLiveboard,
|
|
158
|
+
payload,
|
|
156
159
|
);
|
|
157
160
|
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
158
161
|
getIFrameEl(),
|
|
@@ -166,6 +169,26 @@ describe('Unit test case for ts embed', () => {
|
|
|
166
169
|
});
|
|
167
170
|
});
|
|
168
171
|
|
|
172
|
+
test('Host event with empty param', async () => {
|
|
173
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
174
|
+
liveboardId: '123',
|
|
175
|
+
...defaultViewConfig,
|
|
176
|
+
});
|
|
177
|
+
liveboardEmbed.render();
|
|
178
|
+
mockProcessTrigger.mockResolvedValue({ session: 'test' });
|
|
179
|
+
await executeAfterWait(async () => {
|
|
180
|
+
await liveboardEmbed.trigger(
|
|
181
|
+
HostEvent.Save,
|
|
182
|
+
);
|
|
183
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
184
|
+
getIFrameEl(),
|
|
185
|
+
HostEvent.Save,
|
|
186
|
+
'http://tshost',
|
|
187
|
+
{},
|
|
188
|
+
);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
|
|
169
192
|
test('should set proper height, width and min-height to iframe', async () => {
|
|
170
193
|
// we dont have origin specific policies so just checking if
|
|
171
194
|
// policies are ending with ;
|
|
@@ -227,6 +250,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
227
250
|
thoughtSpotHost: 'tshost',
|
|
228
251
|
authType: AuthType.None,
|
|
229
252
|
customizations: customisations,
|
|
253
|
+
customVariablesForThirdPartyTools,
|
|
230
254
|
});
|
|
231
255
|
});
|
|
232
256
|
|
|
@@ -244,18 +268,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
244
268
|
const iframe = getIFrameEl();
|
|
245
269
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
246
270
|
});
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
271
|
+
await executeAfterWait(() => {
|
|
272
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
273
|
+
type: EmbedEvent.APP_INIT,
|
|
274
|
+
data: {
|
|
275
|
+
customisations,
|
|
276
|
+
authToken: '',
|
|
277
|
+
runtimeFilterParams: null,
|
|
278
|
+
runtimeParameterParams: null,
|
|
279
|
+
hiddenHomeLeftNavItems: [],
|
|
280
|
+
hiddenHomepageModules: [],
|
|
281
|
+
hostConfig: undefined,
|
|
282
|
+
reorderedHomepageModules: [],
|
|
283
|
+
customVariablesForThirdPartyTools,
|
|
284
|
+
},
|
|
285
|
+
});
|
|
259
286
|
});
|
|
260
287
|
});
|
|
261
288
|
|
|
@@ -276,18 +303,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
276
303
|
const iframe = getIFrameEl();
|
|
277
304
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
278
305
|
});
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
306
|
+
await executeAfterWait(() => {
|
|
307
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
308
|
+
type: EmbedEvent.APP_INIT,
|
|
309
|
+
data: {
|
|
310
|
+
customisations: customisationsView,
|
|
311
|
+
authToken: '',
|
|
312
|
+
runtimeFilterParams: null,
|
|
313
|
+
runtimeParameterParams: null,
|
|
314
|
+
hiddenHomeLeftNavItems: [],
|
|
315
|
+
hiddenHomepageModules: [],
|
|
316
|
+
hostConfig: undefined,
|
|
317
|
+
reorderedHomepageModules: [],
|
|
318
|
+
customVariablesForThirdPartyTools,
|
|
319
|
+
},
|
|
320
|
+
});
|
|
291
321
|
});
|
|
292
322
|
});
|
|
293
323
|
|
|
@@ -313,18 +343,58 @@ describe('Unit test case for ts embed', () => {
|
|
|
313
343
|
const iframe = getIFrameEl();
|
|
314
344
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
315
345
|
});
|
|
316
|
-
|
|
346
|
+
await executeAfterWait(() => {
|
|
347
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
348
|
+
type: EmbedEvent.APP_INIT,
|
|
349
|
+
data: {
|
|
350
|
+
customisations,
|
|
351
|
+
authToken: '',
|
|
352
|
+
hostConfig: undefined,
|
|
353
|
+
runtimeFilterParams: null,
|
|
354
|
+
runtimeParameterParams: null,
|
|
355
|
+
hiddenHomeLeftNavItems: [],
|
|
356
|
+
hiddenHomepageModules: [HomepageModule.MyLibrary, HomepageModule.Learning],
|
|
357
|
+
reorderedHomepageModules: [],
|
|
358
|
+
customVariablesForThirdPartyTools,
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
test('customVariablesForThirdPartyTools should be part of the app_init payload', async () => {
|
|
365
|
+
const mockEmbedEventPayload = {
|
|
317
366
|
type: EmbedEvent.APP_INIT,
|
|
318
|
-
data: {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
367
|
+
data: {},
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
const searchEmbed = new AppEmbed(getRootEl(), {
|
|
371
|
+
...defaultViewConfig,
|
|
372
|
+
});
|
|
373
|
+
searchEmbed.render();
|
|
374
|
+
|
|
375
|
+
const mockPort: any = {
|
|
376
|
+
postMessage: jest.fn(),
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
await executeAfterWait(() => {
|
|
380
|
+
const iframe = getIFrameEl();
|
|
381
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
382
|
+
});
|
|
383
|
+
await executeAfterWait(() => {
|
|
384
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
385
|
+
type: EmbedEvent.APP_INIT,
|
|
386
|
+
data: {
|
|
387
|
+
customisations,
|
|
388
|
+
authToken: '',
|
|
389
|
+
hostConfig: undefined,
|
|
390
|
+
runtimeFilterParams: null,
|
|
391
|
+
runtimeParameterParams: null,
|
|
392
|
+
hiddenHomeLeftNavItems: [],
|
|
393
|
+
hiddenHomepageModules: [],
|
|
394
|
+
reorderedHomepageModules: [],
|
|
395
|
+
customVariablesForThirdPartyTools,
|
|
396
|
+
},
|
|
397
|
+
});
|
|
328
398
|
});
|
|
329
399
|
});
|
|
330
400
|
|
|
@@ -350,18 +420,22 @@ describe('Unit test case for ts embed', () => {
|
|
|
350
420
|
const iframe = getIFrameEl();
|
|
351
421
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
352
422
|
});
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
423
|
+
await executeAfterWait(() => {
|
|
424
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
425
|
+
type: EmbedEvent.APP_INIT,
|
|
426
|
+
data: {
|
|
427
|
+
customisations,
|
|
428
|
+
authToken: '',
|
|
429
|
+
hostConfig: undefined,
|
|
430
|
+
runtimeFilterParams: null,
|
|
431
|
+
runtimeParameterParams: null,
|
|
432
|
+
hiddenHomeLeftNavItems: [],
|
|
433
|
+
hiddenHomepageModules: [],
|
|
434
|
+
reorderedHomepageModules:
|
|
435
|
+
[HomepageModule.MyLibrary, HomepageModule.Watchlist],
|
|
436
|
+
customVariablesForThirdPartyTools,
|
|
437
|
+
},
|
|
438
|
+
});
|
|
365
439
|
});
|
|
366
440
|
});
|
|
367
441
|
|
|
@@ -390,18 +464,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
390
464
|
const iframe = getIFrameEl();
|
|
391
465
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
392
466
|
});
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
467
|
+
await executeAfterWait(() => {
|
|
468
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
469
|
+
type: EmbedEvent.APP_INIT,
|
|
470
|
+
data: {
|
|
471
|
+
customisations,
|
|
472
|
+
authToken: '',
|
|
473
|
+
runtimeFilterParams: null,
|
|
474
|
+
runtimeParameterParams: 'param1=color¶mVal1=blue',
|
|
475
|
+
hiddenHomeLeftNavItems: [],
|
|
476
|
+
hiddenHomepageModules: [],
|
|
477
|
+
hostConfig: undefined,
|
|
478
|
+
reorderedHomepageModules: [],
|
|
479
|
+
customVariablesForThirdPartyTools,
|
|
480
|
+
},
|
|
481
|
+
});
|
|
405
482
|
});
|
|
406
483
|
});
|
|
407
484
|
|
|
@@ -431,18 +508,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
431
508
|
const iframe = getIFrameEl();
|
|
432
509
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
433
510
|
});
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
511
|
+
await executeAfterWait(() => {
|
|
512
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
513
|
+
type: EmbedEvent.APP_INIT,
|
|
514
|
+
data: {
|
|
515
|
+
customisations,
|
|
516
|
+
authToken: '',
|
|
517
|
+
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
518
|
+
runtimeParameterParams: null,
|
|
519
|
+
hiddenHomeLeftNavItems: [],
|
|
520
|
+
hiddenHomepageModules: [],
|
|
521
|
+
hostConfig: undefined,
|
|
522
|
+
reorderedHomepageModules: [],
|
|
523
|
+
customVariablesForThirdPartyTools,
|
|
524
|
+
},
|
|
525
|
+
});
|
|
446
526
|
});
|
|
447
527
|
});
|
|
448
528
|
|
|
@@ -471,18 +551,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
471
551
|
const iframe = getIFrameEl();
|
|
472
552
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
473
553
|
});
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
554
|
+
await executeAfterWait(() => {
|
|
555
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
556
|
+
type: EmbedEvent.APP_INIT,
|
|
557
|
+
data: {
|
|
558
|
+
customisations,
|
|
559
|
+
authToken: '',
|
|
560
|
+
runtimeFilterParams: null,
|
|
561
|
+
runtimeParameterParams: null,
|
|
562
|
+
hiddenHomeLeftNavItems: [],
|
|
563
|
+
hiddenHomepageModules: [],
|
|
564
|
+
hostConfig: undefined,
|
|
565
|
+
reorderedHomepageModules: [],
|
|
566
|
+
customVariablesForThirdPartyTools,
|
|
567
|
+
},
|
|
568
|
+
});
|
|
486
569
|
});
|
|
487
570
|
});
|
|
488
571
|
|
|
@@ -512,18 +595,21 @@ describe('Unit test case for ts embed', () => {
|
|
|
512
595
|
const iframe = getIFrameEl();
|
|
513
596
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
514
597
|
});
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
598
|
+
await executeAfterWait(() => {
|
|
599
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
600
|
+
type: EmbedEvent.APP_INIT,
|
|
601
|
+
data: {
|
|
602
|
+
customisations,
|
|
603
|
+
authToken: '',
|
|
604
|
+
runtimeFilterParams: null,
|
|
605
|
+
runtimeParameterParams: null,
|
|
606
|
+
hiddenHomeLeftNavItems: [],
|
|
607
|
+
hiddenHomepageModules: [],
|
|
608
|
+
hostConfig: undefined,
|
|
609
|
+
reorderedHomepageModules: [],
|
|
610
|
+
customVariablesForThirdPartyTools,
|
|
611
|
+
},
|
|
612
|
+
});
|
|
527
613
|
});
|
|
528
614
|
});
|
|
529
615
|
|
|
@@ -549,19 +635,23 @@ describe('Unit test case for ts embed', () => {
|
|
|
549
635
|
const iframe = getIFrameEl();
|
|
550
636
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
551
637
|
});
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
638
|
+
|
|
639
|
+
await executeAfterWait(() => {
|
|
640
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
641
|
+
type: EmbedEvent.APP_INIT,
|
|
642
|
+
data: {
|
|
643
|
+
customisations,
|
|
644
|
+
authToken: '',
|
|
645
|
+
hostConfig: undefined,
|
|
646
|
+
runtimeFilterParams: null,
|
|
647
|
+
runtimeParameterParams: null,
|
|
648
|
+
hiddenHomeLeftNavItems:
|
|
649
|
+
[HomeLeftNavItem.Home, HomeLeftNavItem.MonitorSubscription],
|
|
650
|
+
hiddenHomepageModules: [],
|
|
651
|
+
reorderedHomepageModules: [],
|
|
652
|
+
customVariablesForThirdPartyTools,
|
|
653
|
+
},
|
|
654
|
+
});
|
|
565
655
|
});
|
|
566
656
|
});
|
|
567
657
|
|
|
@@ -727,6 +817,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
727
817
|
hiddenHomepageModules: [],
|
|
728
818
|
hostConfig: undefined,
|
|
729
819
|
reorderedHomepageModules: [],
|
|
820
|
+
customVariablesForThirdPartyTools: {},
|
|
730
821
|
},
|
|
731
822
|
});
|
|
732
823
|
});
|
|
@@ -744,6 +835,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
744
835
|
authType: AuthType.TrustedAuthTokenCookieless,
|
|
745
836
|
getAuthToken: () => Promise.reject(),
|
|
746
837
|
});
|
|
838
|
+
jest.spyOn(logger, 'error').mockResolvedValue(true);
|
|
747
839
|
});
|
|
748
840
|
|
|
749
841
|
afterEach(() => {
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
FrameParams,
|
|
61
61
|
ContextMenuTriggerOptions,
|
|
62
62
|
RuntimeFilter,
|
|
63
|
+
DefaultAppInitData,
|
|
63
64
|
} from '../types';
|
|
64
65
|
import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
|
|
65
66
|
import { processEventData, processAuthFailure } from '../utils/processData';
|
|
@@ -319,41 +320,62 @@ export class TsEmbed {
|
|
|
319
320
|
});
|
|
320
321
|
}
|
|
321
322
|
|
|
323
|
+
protected async getAuthTokenForCookielessInit() {
|
|
324
|
+
let authToken = '';
|
|
325
|
+
if (this.embedConfig.authType !== AuthType.TrustedAuthTokenCookieless) return authToken;
|
|
326
|
+
|
|
327
|
+
try {
|
|
328
|
+
authToken = await getAuthenticationToken(this.embedConfig);
|
|
329
|
+
} catch (e) {
|
|
330
|
+
processAuthFailure(e, this.isPreRendered ? this.preRenderWrapper : this.el);
|
|
331
|
+
throw e;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return authToken;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
protected async getDefaultAppInitData(): Promise<DefaultAppInitData> {
|
|
338
|
+
const authToken = await this.getAuthTokenForCookielessInit();
|
|
339
|
+
return {
|
|
340
|
+
customisations: getCustomisations(this.embedConfig, this.viewConfig),
|
|
341
|
+
authToken,
|
|
342
|
+
runtimeFilterParams: this.viewConfig.excludeRuntimeFiltersfromURL
|
|
343
|
+
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
344
|
+
: null,
|
|
345
|
+
runtimeParameterParams: this.viewConfig.excludeRuntimeParametersfromURL
|
|
346
|
+
? getRuntimeParameters(this.viewConfig.runtimeParameters || [])
|
|
347
|
+
: null,
|
|
348
|
+
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
349
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
350
|
+
hostConfig: this.embedConfig.hostConfig,
|
|
351
|
+
hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
|
|
352
|
+
? this.viewConfig?.hiddenHomeLeftNavItems
|
|
353
|
+
: [],
|
|
354
|
+
customVariablesForThirdPartyTools:
|
|
355
|
+
this.embedConfig.customVariablesForThirdPartyTools || {},
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
protected async getAppInitData() {
|
|
360
|
+
return this.getDefaultAppInitData();
|
|
361
|
+
}
|
|
362
|
+
|
|
322
363
|
/**
|
|
323
364
|
* Send Custom style as part of payload of APP_INIT
|
|
324
365
|
* @param _
|
|
325
366
|
* @param responder
|
|
326
367
|
*/
|
|
327
368
|
private appInitCb = async (_: any, responder: any) => {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
369
|
+
try {
|
|
370
|
+
const appInitData = await this.getAppInitData();
|
|
371
|
+
this.isAppInitialized = true;
|
|
372
|
+
responder({
|
|
373
|
+
type: EmbedEvent.APP_INIT,
|
|
374
|
+
data: appInitData,
|
|
375
|
+
});
|
|
376
|
+
} catch (e) {
|
|
377
|
+
logger.error(`AppInit failed, Error : ${e?.message}`);
|
|
336
378
|
}
|
|
337
|
-
this.isAppInitialized = true;
|
|
338
|
-
responder({
|
|
339
|
-
type: EmbedEvent.APP_INIT,
|
|
340
|
-
data: {
|
|
341
|
-
customisations: getCustomisations(this.embedConfig, this.viewConfig),
|
|
342
|
-
authToken,
|
|
343
|
-
runtimeFilterParams: this.viewConfig.excludeRuntimeFiltersfromURL
|
|
344
|
-
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
345
|
-
: null,
|
|
346
|
-
runtimeParameterParams: this.viewConfig.excludeRuntimeParametersfromURL
|
|
347
|
-
? getRuntimeParameters(this.viewConfig.runtimeParameters || [])
|
|
348
|
-
: null,
|
|
349
|
-
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
350
|
-
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
351
|
-
hostConfig: this.embedConfig.hostConfig,
|
|
352
|
-
hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
|
|
353
|
-
? this.viewConfig?.hiddenHomeLeftNavItems
|
|
354
|
-
: [],
|
|
355
|
-
},
|
|
356
|
-
});
|
|
357
379
|
};
|
|
358
380
|
|
|
359
381
|
/**
|
|
@@ -1024,8 +1046,8 @@ export class TsEmbed {
|
|
|
1024
1046
|
this.handleError('Host event type is undefined');
|
|
1025
1047
|
return null;
|
|
1026
1048
|
}
|
|
1027
|
-
|
|
1028
|
-
return this.hostEventClient.triggerHostEvent(messageType, data);
|
|
1049
|
+
// send an empty object, this is needed for liveboard default handlers
|
|
1050
|
+
return this.hostEventClient.triggerHostEvent(messageType, data || {});
|
|
1029
1051
|
}
|
|
1030
1052
|
|
|
1031
1053
|
/**
|
package/src/types.ts
CHANGED
|
@@ -608,6 +608,22 @@ export interface EmbedConfig {
|
|
|
608
608
|
* @version SDK: 1.33.5 | ThoughtSpot: *
|
|
609
609
|
*/
|
|
610
610
|
additionalFlags?: { [key: string]: string | number | boolean };
|
|
611
|
+
/**
|
|
612
|
+
* This is an object (key/val) for customVariables being
|
|
613
|
+
* used by the third party tool's script.
|
|
614
|
+
* @example
|
|
615
|
+
* ```js
|
|
616
|
+
* const embed = new LiveboardEmbed('#embed', {
|
|
617
|
+
* ... // other liveboard view config
|
|
618
|
+
* customVariablesForThirdPartyTools: {
|
|
619
|
+
* key1: 'value1',
|
|
620
|
+
* key2: 'value2'
|
|
621
|
+
* }
|
|
622
|
+
* });
|
|
623
|
+
* ```
|
|
624
|
+
* @version SDK 1.37.0 | Thoughtspot: 10.7.0.cl
|
|
625
|
+
*/
|
|
626
|
+
customVariablesForThirdPartyTools?: Record< string, any >;
|
|
611
627
|
}
|
|
612
628
|
|
|
613
629
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
@@ -4608,3 +4624,15 @@ export enum LogLevel {
|
|
|
4608
4624
|
*/
|
|
4609
4625
|
TRACE = 'TRACE',
|
|
4610
4626
|
}
|
|
4627
|
+
|
|
4628
|
+
export interface DefaultAppInitData {
|
|
4629
|
+
customisations: CustomisationsInterface;
|
|
4630
|
+
authToken: string;
|
|
4631
|
+
runtimeFilterParams: string | null;
|
|
4632
|
+
runtimeParameterParams: string | null;
|
|
4633
|
+
hiddenHomepageModules: HomepageModule[];
|
|
4634
|
+
reorderedHomepageModules: string[];
|
|
4635
|
+
hostConfig: Record<string, any>;
|
|
4636
|
+
hiddenHomeLeftNavItems: string[];
|
|
4637
|
+
customVariablesForThirdPartyTools: Record<string, any>;
|
|
4638
|
+
}
|