@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.
- package/cjs/package.json +1 -1
- package/cjs/src/embed/app.d.ts +1 -3
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +2 -8
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +8 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +3 -3
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +26 -9
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +56 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +1 -3
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +2 -8
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search.d.ts +1 -4
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +2 -9
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +54 -18
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +134 -93
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +102 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +6 -2
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/index.d.ts +103 -5
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +81 -1
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +22 -0
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +18 -0
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils.d.ts +27 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +31 -0
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.d.ts +0 -3
- package/cjs/src/utils.spec.d.ts.map +1 -1
- package/cjs/src/utils.spec.js +59 -6
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/src/embed/app.d.ts +1 -3
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +3 -3
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +1 -3
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +1 -4
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +54 -18
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +103 -5
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +18 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +27 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.spec.d.ts +0 -3
- package/dist/src/utils.spec.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +17590 -243
- package/dist/tsembed-react.js +17590 -242
- package/dist/tsembed.es.js +17519 -252
- package/dist/tsembed.js +17519 -252
- package/dist/visual-embed-sdk-react-full.d.ts +187 -32
- package/dist/visual-embed-sdk-react.d.ts +187 -32
- package/dist/visual-embed-sdk.d.ts +84 -27
- package/lib/package.json +1 -1
- package/lib/src/embed/app.d.ts +1 -3
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +2 -8
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +8 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +3 -3
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +25 -9
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +57 -1
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +1 -3
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +2 -8
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search.d.ts +1 -4
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +2 -9
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +54 -18
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +134 -93
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +102 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/react/index.d.ts +103 -5
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +80 -0
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +23 -1
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +18 -0
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +27 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +31 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.d.ts +0 -3
- package/lib/src/utils.spec.d.ts.map +1 -1
- package/lib/src/utils.spec.js +60 -7
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +84 -27
- package/package.json +1 -1
- package/src/embed/app.spec.ts +8 -0
- package/src/embed/app.ts +6 -11
- package/src/embed/liveboard.spec.ts +76 -1
- package/src/embed/liveboard.ts +28 -12
- package/src/embed/sage.ts +2 -11
- package/src/embed/search.ts +2 -12
- package/src/embed/ts-embed.spec.ts +127 -0
- package/src/embed/ts-embed.ts +169 -123
- package/src/react/all-types-export.ts +5 -1
- package/src/react/index.spec.tsx +42 -1
- package/src/react/index.tsx +120 -17
- package/src/types.ts +19 -0
- package/src/utils.spec.ts +78 -7
- 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 {
|
|
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(
|
|
363
|
+
public render(): AppEmbed {
|
|
363
364
|
super.render();
|
|
364
365
|
const src = this.getIFrameSrc();
|
|
365
|
-
this.renderV1Embed(src
|
|
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 {
|
|
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
|
});
|
package/src/embed/liveboard.ts
CHANGED
|
@@ -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(
|
|
310
|
+
public render(): LiveboardEmbed {
|
|
289
311
|
super.render();
|
|
290
312
|
|
|
291
313
|
const src = this.getIFrameSrc();
|
|
292
|
-
this.renderV1Embed(src
|
|
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.
|
|
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(
|
|
173
|
+
public render(): SageEmbed {
|
|
175
174
|
super.render();
|
|
176
175
|
|
|
177
176
|
const src = this.getIFrameSrc();
|
|
178
|
-
this.renderV1Embed(src
|
|
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
|
}
|
package/src/embed/search.ts
CHANGED
|
@@ -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(
|
|
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
|
|
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
|
});
|