@thoughtspot/visual-embed-sdk 1.24.0-preRender.2 → 1.24.0-preRender.4

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.
Files changed (139) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/embed/app.d.ts +1 -3
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +2 -8
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/app.spec.js +8 -0
  7. package/cjs/src/embed/app.spec.js.map +1 -1
  8. package/cjs/src/embed/liveboard.d.ts +3 -3
  9. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  10. package/cjs/src/embed/liveboard.js +26 -9
  11. package/cjs/src/embed/liveboard.js.map +1 -1
  12. package/cjs/src/embed/liveboard.spec.js +56 -0
  13. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  14. package/cjs/src/embed/sage.d.ts +1 -3
  15. package/cjs/src/embed/sage.d.ts.map +1 -1
  16. package/cjs/src/embed/sage.js +2 -8
  17. package/cjs/src/embed/sage.js.map +1 -1
  18. package/cjs/src/embed/search.d.ts +1 -4
  19. package/cjs/src/embed/search.d.ts.map +1 -1
  20. package/cjs/src/embed/search.js +2 -9
  21. package/cjs/src/embed/search.js.map +1 -1
  22. package/cjs/src/embed/ts-embed.d.ts +54 -18
  23. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  24. package/cjs/src/embed/ts-embed.js +134 -93
  25. package/cjs/src/embed/ts-embed.js.map +1 -1
  26. package/cjs/src/embed/ts-embed.spec.js +102 -0
  27. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  28. package/cjs/src/react/all-types-export.d.ts +1 -1
  29. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  30. package/cjs/src/react/all-types-export.js +6 -2
  31. package/cjs/src/react/all-types-export.js.map +1 -1
  32. package/cjs/src/react/index.d.ts +103 -5
  33. package/cjs/src/react/index.d.ts.map +1 -1
  34. package/cjs/src/react/index.js +81 -1
  35. package/cjs/src/react/index.js.map +1 -1
  36. package/cjs/src/react/index.spec.js +22 -0
  37. package/cjs/src/react/index.spec.js.map +1 -1
  38. package/cjs/src/types.d.ts +18 -0
  39. package/cjs/src/types.d.ts.map +1 -1
  40. package/cjs/src/types.js.map +1 -1
  41. package/cjs/src/utils.d.ts +27 -0
  42. package/cjs/src/utils.d.ts.map +1 -1
  43. package/cjs/src/utils.js +31 -0
  44. package/cjs/src/utils.js.map +1 -1
  45. package/cjs/src/utils.spec.d.ts +0 -3
  46. package/cjs/src/utils.spec.d.ts.map +1 -1
  47. package/cjs/src/utils.spec.js +59 -6
  48. package/cjs/src/utils.spec.js.map +1 -1
  49. package/dist/src/embed/app.d.ts +1 -3
  50. package/dist/src/embed/app.d.ts.map +1 -1
  51. package/dist/src/embed/liveboard.d.ts +3 -3
  52. package/dist/src/embed/liveboard.d.ts.map +1 -1
  53. package/dist/src/embed/sage.d.ts +1 -3
  54. package/dist/src/embed/sage.d.ts.map +1 -1
  55. package/dist/src/embed/search.d.ts +1 -4
  56. package/dist/src/embed/search.d.ts.map +1 -1
  57. package/dist/src/embed/ts-embed.d.ts +54 -18
  58. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  59. package/dist/src/react/all-types-export.d.ts +1 -1
  60. package/dist/src/react/all-types-export.d.ts.map +1 -1
  61. package/dist/src/react/index.d.ts +103 -5
  62. package/dist/src/react/index.d.ts.map +1 -1
  63. package/dist/src/types.d.ts +18 -0
  64. package/dist/src/types.d.ts.map +1 -1
  65. package/dist/src/utils.d.ts +27 -0
  66. package/dist/src/utils.d.ts.map +1 -1
  67. package/dist/src/utils.spec.d.ts +0 -3
  68. package/dist/src/utils.spec.d.ts.map +1 -1
  69. package/dist/tsembed-react.es.js +17590 -243
  70. package/dist/tsembed-react.js +17590 -242
  71. package/dist/tsembed.es.js +17519 -252
  72. package/dist/tsembed.js +17519 -252
  73. package/dist/visual-embed-sdk-react-full.d.ts +187 -32
  74. package/dist/visual-embed-sdk-react.d.ts +187 -32
  75. package/dist/visual-embed-sdk.d.ts +84 -27
  76. package/lib/package.json +1 -1
  77. package/lib/src/embed/app.d.ts +1 -3
  78. package/lib/src/embed/app.d.ts.map +1 -1
  79. package/lib/src/embed/app.js +2 -8
  80. package/lib/src/embed/app.js.map +1 -1
  81. package/lib/src/embed/app.spec.js +8 -0
  82. package/lib/src/embed/app.spec.js.map +1 -1
  83. package/lib/src/embed/liveboard.d.ts +3 -3
  84. package/lib/src/embed/liveboard.d.ts.map +1 -1
  85. package/lib/src/embed/liveboard.js +25 -9
  86. package/lib/src/embed/liveboard.js.map +1 -1
  87. package/lib/src/embed/liveboard.spec.js +57 -1
  88. package/lib/src/embed/liveboard.spec.js.map +1 -1
  89. package/lib/src/embed/sage.d.ts +1 -3
  90. package/lib/src/embed/sage.d.ts.map +1 -1
  91. package/lib/src/embed/sage.js +2 -8
  92. package/lib/src/embed/sage.js.map +1 -1
  93. package/lib/src/embed/search.d.ts +1 -4
  94. package/lib/src/embed/search.d.ts.map +1 -1
  95. package/lib/src/embed/search.js +2 -9
  96. package/lib/src/embed/search.js.map +1 -1
  97. package/lib/src/embed/ts-embed.d.ts +54 -18
  98. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  99. package/lib/src/embed/ts-embed.js +134 -93
  100. package/lib/src/embed/ts-embed.js.map +1 -1
  101. package/lib/src/embed/ts-embed.spec.js +102 -0
  102. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  103. package/lib/src/react/all-types-export.d.ts +1 -1
  104. package/lib/src/react/all-types-export.d.ts.map +1 -1
  105. package/lib/src/react/all-types-export.js +1 -1
  106. package/lib/src/react/all-types-export.js.map +1 -1
  107. package/lib/src/react/index.d.ts +103 -5
  108. package/lib/src/react/index.d.ts.map +1 -1
  109. package/lib/src/react/index.js +80 -0
  110. package/lib/src/react/index.js.map +1 -1
  111. package/lib/src/react/index.spec.js +23 -1
  112. package/lib/src/react/index.spec.js.map +1 -1
  113. package/lib/src/types.d.ts +18 -0
  114. package/lib/src/types.d.ts.map +1 -1
  115. package/lib/src/types.js.map +1 -1
  116. package/lib/src/utils.d.ts +27 -0
  117. package/lib/src/utils.d.ts.map +1 -1
  118. package/lib/src/utils.js +31 -0
  119. package/lib/src/utils.js.map +1 -1
  120. package/lib/src/utils.spec.d.ts +0 -3
  121. package/lib/src/utils.spec.d.ts.map +1 -1
  122. package/lib/src/utils.spec.js +60 -7
  123. package/lib/src/utils.spec.js.map +1 -1
  124. package/lib/src/visual-embed-sdk.d.ts +84 -27
  125. package/package.json +1 -1
  126. package/src/embed/app.spec.ts +8 -0
  127. package/src/embed/app.ts +6 -11
  128. package/src/embed/liveboard.spec.ts +76 -1
  129. package/src/embed/liveboard.ts +28 -12
  130. package/src/embed/sage.ts +2 -11
  131. package/src/embed/search.ts +2 -12
  132. package/src/embed/ts-embed.spec.ts +127 -0
  133. package/src/embed/ts-embed.ts +169 -123
  134. package/src/react/all-types-export.ts +5 -1
  135. package/src/react/index.spec.tsx +42 -1
  136. package/src/react/index.tsx +120 -17
  137. package/src/types.ts +19 -0
  138. package/src/utils.spec.ts +78 -7
  139. package/src/utils.ts +29 -1
package/src/embed/app.ts CHANGED
@@ -259,7 +259,7 @@ export class AppEmbed extends V1Embed {
259
259
  */
260
260
  protected updateIFrameHeight = (data: MessagePayload) => {
261
261
  this.setIFrameHeight(Math.max(data.data, this.iFrame?.scrollHeight));
262
- };
262
+ }
263
263
 
264
264
  private embedIframeCenter = (data: MessagePayload, responder: any) => {
265
265
  const obj = this.getIframeCenter();
@@ -267,7 +267,9 @@ export class AppEmbed extends V1Embed {
267
267
  };
268
268
 
269
269
  private setIframeHeightForNonEmbedLiveboard = (data: MessagePayload) => {
270
- const { height: frameHeight, ...restParams } = this.viewConfig.frameParams || {};
270
+ const {
271
+ height: frameHeight, ...restParams
272
+ } = this.viewConfig.frameParams || {};
271
273
  if (!data.data.currentPath.startsWith('/pinboard/')) {
272
274
  this.setIFrameHeight(frameHeight || this.defaultHeight);
273
275
  }
@@ -357,19 +359,12 @@ export class AppEmbed extends V1Embed {
357
359
  *
358
360
  * @param renderOptions An object containing the page ID
359
361
  * to be embedded.
360
- * @param showPreRenderByDefault
361
362
  */
362
- public render(showPreRenderByDefault = false): AppEmbed {
363
+ public render(): AppEmbed {
363
364
  super.render();
364
365
  const src = this.getIFrameSrc();
365
- this.renderV1Embed(src, showPreRenderByDefault);
366
-
367
- return this;
368
- }
366
+ this.renderV1Embed(src);
369
367
 
370
- public preRender(showPreRenderByDefault = false): AppEmbed {
371
- super.preRender(showPreRenderByDefault);
372
- this.render(showPreRenderByDefault);
373
368
  return this;
374
369
  }
375
370
  }
@@ -1,4 +1,4 @@
1
- import { LiveboardEmbed, LiveboardViewConfig } from './liveboard';
1
+ import { LiveboardViewConfig, LiveboardEmbed } from './liveboard';
2
2
  import { init } from '../index';
3
3
  import {
4
4
  Action,
@@ -19,6 +19,7 @@ import {
19
19
  postMessageToParent,
20
20
  getIFrameEl,
21
21
  mockMessageChannel,
22
+ waitFor,
22
23
  } from '../test/test-utils';
23
24
  import * as tsEmbed from './ts-embed';
24
25
  import * as processTriggerInstance from '../utils/processTrigger';
@@ -392,4 +393,78 @@ describe('Liveboard/viz embed tests', () => {
392
393
  );
393
394
  });
394
395
  });
396
+
397
+ describe('PreRender flow for liveboard embed', () => {
398
+ test('it should preRender generic with liveboard id is not passed', (done) => {
399
+ const consoleSpy = jest.spyOn(console, 'error');
400
+ const libEmbed = new LiveboardEmbed(getRootEl(), {
401
+ preRenderId: 'testPreRender',
402
+ });
403
+ const prerenderGenericSpy = jest.spyOn(libEmbed, 'prerenderGeneric');
404
+ libEmbed.preRender();
405
+ executeAfterWait(() => {
406
+ const iFrame = document.getElementById(
407
+ libEmbed.getPreRenderIds().child,
408
+ ) as HTMLIFrameElement;
409
+
410
+ // should render the generic link
411
+ expect(prerenderGenericSpy).toHaveBeenCalledTimes(1);
412
+ expect(iFrame.src).toMatch(/http:\/\/tshost\/.*&isLiveboardEmbed=true#$/);
413
+
414
+ expect(consoleSpy).toHaveBeenCalledTimes(0);
415
+
416
+ done();
417
+ });
418
+ });
419
+
420
+ test('it should preRender generic with liveboard id is not passed', async (done) => {
421
+ mockMessageChannel();
422
+ const consoleSpy = jest.spyOn(console, 'error');
423
+ const testPreRenderId = 'testPreRender';
424
+ const libEmbed = new LiveboardEmbed(getRootEl(), {
425
+ preRenderId: testPreRenderId,
426
+ });
427
+
428
+ let resizeObserverCb: any;
429
+ (window as any).ResizeObserver = window.ResizeObserver
430
+ || jest.fn().mockImplementation((resizeObserverCbParam) => {
431
+ resizeObserverCb = resizeObserverCbParam;
432
+ return ({
433
+ disconnect: jest.fn(),
434
+ observe: jest.fn(),
435
+ unobserve: jest.fn(),
436
+ });
437
+ });
438
+
439
+ libEmbed.preRender();
440
+
441
+ await waitFor(() => !!getIFrameEl());
442
+
443
+ const ts = '__tsEmbed';
444
+ expect(document.getElementById(libEmbed.getPreRenderIds().wrapper)[ts])
445
+ .toEqual(libEmbed);
446
+
447
+ const testLiveboardId = 'testLiveboardId';
448
+ const newLibEmbed = new LiveboardEmbed(getRootEl(), {
449
+ preRenderId: testPreRenderId,
450
+ liveboardId: testLiveboardId,
451
+ });
452
+ const navigateToLiveboardSpy = jest.spyOn(newLibEmbed, 'navigateToLiveboard');
453
+ newLibEmbed.showPreRender();
454
+
455
+ executeAfterWait(() => {
456
+ const iFrame = document.getElementById(
457
+ libEmbed.getPreRenderIds().child,
458
+ ) as HTMLIFrameElement;
459
+
460
+ // should render the generic link
461
+ expect(navigateToLiveboardSpy).toHaveBeenCalledWith(testLiveboardId);
462
+ expect(iFrame.src).toMatch(/http:\/\/tshost\/.*&isLiveboardEmbed=true#$/);
463
+
464
+ expect(consoleSpy).toHaveBeenCalledTimes(0);
465
+
466
+ done();
467
+ });
468
+ });
469
+ });
395
470
  });
@@ -9,6 +9,7 @@
9
9
  * @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
10
10
  */
11
11
 
12
+ import _ from 'lodash';
12
13
  import { ERROR_MESSAGE } from '../errors';
13
14
  import {
14
15
  EmbedEvent,
@@ -260,6 +261,28 @@ export class LiveboardEmbed extends V1Embed {
260
261
  }
261
262
  }
262
263
 
264
+ protected beforePrerenderVisible(): void {
265
+ const embedObj = this.insertedDomEl[this.embedNodeKey] as LiveboardEmbed;
266
+
267
+ if (_.isUndefined(embedObj)) return;
268
+
269
+ const showDifferentLib = this.viewConfig.liveboardId
270
+ && embedObj.viewConfig.liveboardId !== this.viewConfig.liveboardId;
271
+
272
+ if (showDifferentLib) {
273
+ const libId = this.viewConfig.liveboardId;
274
+ this.navigateToLiveboard(libId);
275
+ }
276
+ }
277
+
278
+ protected handleRenderForPrerender(): void {
279
+ if (_.isUndefined(this.viewConfig.liveboardId)) {
280
+ this.prerenderGeneric();
281
+ return;
282
+ }
283
+ super.handleRenderForPrerender();
284
+ }
285
+
263
286
  /**
264
287
  * Triggers an event to the embedded app
265
288
  *
@@ -283,21 +306,12 @@ export class LiveboardEmbed extends V1Embed {
283
306
  *
284
307
  * @param renderOptions An object specifying the Liveboard ID,
285
308
  * visualization ID and the runtime filters.
286
- * @param showPreRenderByDefault
287
309
  */
288
- public render(showPreRenderByDefault = false): LiveboardEmbed {
310
+ public render(): LiveboardEmbed {
289
311
  super.render();
290
312
 
291
313
  const src = this.getIFrameSrc();
292
- this.renderV1Embed(src, showPreRenderByDefault);
293
-
294
- return this;
295
- }
296
-
297
- public preRender(showPreRenderByDefault = false): LiveboardEmbed {
298
- super.preRender();
299
-
300
- this.render(showPreRenderByDefault);
314
+ this.renderV1Embed(src);
301
315
 
302
316
  return this;
303
317
  }
@@ -307,8 +321,10 @@ export class LiveboardEmbed extends V1Embed {
307
321
  this.viewConfig.liveboardId = liveboardId;
308
322
  this.viewConfig.activeTabId = activeTabId;
309
323
  this.viewConfig.vizId = vizId;
310
- if (this.isAppInitialized) {
324
+ if (this.isRendered) {
311
325
  this.trigger(HostEvent.Navigate, path.substring(1));
326
+ } else if (this.viewConfig.preRenderId) {
327
+ this.preRender(true);
312
328
  } else {
313
329
  this.render();
314
330
  }
package/src/embed/sage.ts CHANGED
@@ -168,22 +168,13 @@ export class SageEmbed extends V1Embed {
168
168
  /**
169
169
  * Render the embedded ThoughtSpot Sage
170
170
  *
171
- * @param showPreRenderByDefault
172
171
  * @returns {SageEmbed} Eureka/Sage embed
173
172
  */
174
- public render(showPreRenderByDefault = false): SageEmbed {
173
+ public render(): SageEmbed {
175
174
  super.render();
176
175
 
177
176
  const src = this.getIFrameSrc();
178
- this.renderV1Embed(src, showPreRenderByDefault);
179
-
180
- return this;
181
- }
182
-
183
- public preRender(showPreRenderByDefault = false): SageEmbed {
184
- super.preRender(showPreRenderByDefault);
185
-
186
- this.render(showPreRenderByDefault);
177
+ this.renderV1Embed(src);
187
178
 
188
179
  return this;
189
180
  }
@@ -259,15 +259,13 @@ export class SearchEmbed extends TsEmbed {
259
259
 
260
260
  /**
261
261
  * Render the embedded ThoughtSpot search
262
- *
263
- * @param showPreRenderByDefault
264
262
  */
265
- public render(showPreRenderByDefault = false): SearchEmbed {
263
+ public render(): SearchEmbed {
266
264
  super.render();
267
265
  const { answerId } = this.viewConfig;
268
266
 
269
267
  const src = this.getIFrameSrc(answerId);
270
- this.renderIFrame(src, showPreRenderByDefault);
268
+ this.renderIFrame(src);
271
269
  getAuthPromise().then(() => {
272
270
  if (
273
271
  checkReleaseVersionInBeta(
@@ -280,12 +278,4 @@ export class SearchEmbed extends TsEmbed {
280
278
  });
281
279
  return this;
282
280
  }
283
-
284
- public preRender(showPreRenderByDefault = false): SearchEmbed {
285
- super.preRender();
286
-
287
- this.render(showPreRenderByDefault);
288
-
289
- return this;
290
- }
291
281
  }
@@ -1258,4 +1258,131 @@ describe('Unit test case for ts embed', () => {
1258
1258
  });
1259
1259
  });
1260
1260
  });
1261
+
1262
+ describe('validate preRender flow', () => {
1263
+ beforeAll(() => {
1264
+ init({
1265
+ thoughtSpotHost: 'tshost',
1266
+ authType: AuthType.None,
1267
+ });
1268
+ });
1269
+
1270
+ afterAll(() => {
1271
+ const rootEle = document.getElementById('myRoot');
1272
+ rootEle.remove();
1273
+ });
1274
+
1275
+ const createRootEleForEmbed = () => {
1276
+ const rootEle = document.createElement('div');
1277
+ rootEle.id = 'myRoot';
1278
+ const tsEmbedDiv = document.createElement('div');
1279
+ tsEmbedDiv.id = 'tsEmbedDiv';
1280
+ rootEle.appendChild(tsEmbedDiv);
1281
+ document.body.appendChild(rootEle);
1282
+ };
1283
+
1284
+ it('should preRender and hide the iframe', async () => {
1285
+ createRootEleForEmbed();
1286
+
1287
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1288
+ preRenderId: 'i-am-preRendered',
1289
+ liveboardId: 'myLiveboardId',
1290
+ });
1291
+
1292
+ libEmbed.preRender();
1293
+
1294
+ await waitFor(() => !!getIFrameEl());
1295
+
1296
+ const preRenderIds = libEmbed.getPreRenderIds();
1297
+ const preRenderWrapper = document.getElementById(preRenderIds.wrapper);
1298
+ expect(preRenderWrapper.style.opacity).toBe('0');
1299
+ expect(preRenderWrapper.style.pointerEvents).toBe('none');
1300
+ expect(preRenderWrapper.style.zIndex).toBe('-1000');
1301
+
1302
+ const preRenderChild = (document
1303
+ .getElementById(preRenderIds.child) as HTMLIFrameElement);
1304
+ expect(preRenderWrapper.children[0]).toEqual(preRenderChild);
1305
+ expect(preRenderChild).toBeInstanceOf(HTMLIFrameElement);
1306
+ expect(preRenderChild.src).toMatch(/^http:\/\/tshost.*\/myLiveboardId/);
1307
+
1308
+ const tsEmbedDiv = document.getElementById('tsEmbedDiv');
1309
+ tsEmbedDiv.style.width = '100px';
1310
+ tsEmbedDiv.style.height = '100px';
1311
+
1312
+ let resizeObserverCb: any;
1313
+ (window as any).ResizeObserver = window.ResizeObserver
1314
+ || jest.fn().mockImplementation((resizeObserverCbParam) => {
1315
+ resizeObserverCb = resizeObserverCbParam;
1316
+ return ({
1317
+ disconnect: jest.fn(),
1318
+ observe: jest.fn(),
1319
+ unobserve: jest.fn(),
1320
+ });
1321
+ });
1322
+
1323
+ // show preRender
1324
+ libEmbed.showPreRender();
1325
+
1326
+ resizeObserverCb([{
1327
+ target: tsEmbedDiv,
1328
+ contentRect: { height: 297, width: 987 },
1329
+ }]);
1330
+
1331
+ expect(preRenderWrapper.style.height).toEqual(`${297}px`);
1332
+ expect(preRenderWrapper.style.width).toEqual(`${987}px`);
1333
+
1334
+ expect(preRenderWrapper.style.opacity).toBe('');
1335
+ expect(preRenderWrapper.style.pointerEvents).toBe('');
1336
+ expect(preRenderWrapper.style.zIndex).toBe('');
1337
+
1338
+ libEmbed.hidePreRender();
1339
+ expect(preRenderWrapper.style.opacity).toBe('0');
1340
+ expect(preRenderWrapper.style.pointerEvents).toBe('none');
1341
+ expect(preRenderWrapper.style.zIndex).toBe('-1000');
1342
+
1343
+ libEmbed.destroy();
1344
+ expect(document.getElementById(preRenderIds.wrapper)).toBe(null);
1345
+ });
1346
+
1347
+ it('preRender called without preRenderId should log error ', () => {
1348
+ createRootEleForEmbed();
1349
+
1350
+ spyOn(console, 'error');
1351
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1352
+ liveboardId: 'myLiveboardId',
1353
+ });
1354
+ libEmbed.preRender();
1355
+
1356
+ expect(console.error).toHaveBeenCalledWith('PreRender id is required for preRender');
1357
+ });
1358
+
1359
+ it('showPreRender should preRender if not available', async () => {
1360
+ createRootEleForEmbed();
1361
+
1362
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1363
+ preRenderId: 'i-am-preRendered',
1364
+ liveboardId: 'myLiveboardId',
1365
+ });
1366
+ const preRenderIds = libEmbed.getPreRenderIds();
1367
+ libEmbed.showPreRender();
1368
+ await waitFor(() => !!getIFrameEl());
1369
+ const preRenderWrapper = document.getElementById(preRenderIds.wrapper);
1370
+
1371
+ expect(preRenderWrapper.style.opacity).toBe('');
1372
+ expect(preRenderWrapper.style.pointerEvents).toBe('');
1373
+ expect(preRenderWrapper.style.zIndex).toBe('');
1374
+ });
1375
+
1376
+ it('hidePreRender should not preRender if not available', async () => {
1377
+ createRootEleForEmbed();
1378
+
1379
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1380
+ preRenderId: 'i-am-preRendered',
1381
+ liveboardId: 'myLiveboardId',
1382
+ });
1383
+ spyOn(libEmbed, 'preRender');
1384
+ libEmbed.hidePreRender();
1385
+ expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
1386
+ });
1387
+ });
1261
1388
  });