@thoughtspot/visual-embed-sdk 1.51.0 → 1.51.2
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/config.d.ts +1 -0
- package/cjs/src/config.d.ts.map +1 -1
- package/cjs/src/config.js +2 -1
- package/cjs/src/config.js.map +1 -1
- package/cjs/src/css-variables.d.ts +27 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +43 -12
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +29 -3
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +253 -1
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/base.d.ts +1 -1
- package/cjs/src/embed/base.js +1 -1
- package/cjs/src/embed/conversation.d.ts +171 -1
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +4 -2
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +125 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/events.spec.js +3 -0
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/host-events.spec.js +36 -0
- package/cjs/src/embed/host-events.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +18 -0
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +40 -13
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +25 -4
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +349 -2
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search.spec.js +28 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +8 -1
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +15 -1
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-utils.spec.js +68 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +9 -10
- package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +97 -9
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +76 -35
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +537 -3
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +3 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -2
- package/cjs/src/index.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 +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/all-types-export.parity.spec.d.ts +2 -0
- package/cjs/src/react/all-types-export.parity.spec.d.ts.map +1 -0
- package/cjs/src/react/all-types-export.parity.spec.js +194 -0
- package/cjs/src/react/all-types-export.parity.spec.js.map +1 -0
- package/cjs/src/react/index.d.ts +66 -32
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +5 -3
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +101 -0
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +330 -18
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +182 -12
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils.d.ts +5 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +19 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +37 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-aBzH5ZwF.js → index-D8_Zs-Nr.js} +1 -1
- package/dist/src/config.d.ts +1 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +27 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +43 -12
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +1 -1
- package/dist/src/embed/conversation.d.ts +171 -1
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +40 -13
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +8 -1
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +9 -10
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +97 -9
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.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/all-types-export.parity.spec.d.ts +2 -0
- package/dist/src/react/all-types-export.parity.spec.d.ts.map +1 -0
- package/dist/src/react/index.d.ts +66 -32
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +330 -18
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +5 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +354 -64
- package/dist/tsembed-react.js +353 -63
- package/dist/tsembed.es.js +414 -126
- package/dist/tsembed.js +416 -128
- package/dist/visual-embed-sdk-react-full.d.ts +777 -90
- package/dist/visual-embed-sdk-react.d.ts +773 -89
- package/dist/visual-embed-sdk.d.ts +713 -60
- package/lib/package.json +1 -1
- package/lib/src/config.d.ts +1 -0
- package/lib/src/config.d.ts.map +1 -1
- package/lib/src/config.js +1 -0
- package/lib/src/config.js.map +1 -1
- package/lib/src/css-variables.d.ts +27 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +43 -12
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +30 -4
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +253 -1
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +1 -1
- package/lib/src/embed/base.js +1 -1
- package/lib/src/embed/conversation.d.ts +171 -1
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +5 -3
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +125 -0
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +3 -0
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/host-events.spec.js +36 -0
- package/lib/src/embed/host-events.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +18 -0
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +40 -13
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +25 -4
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +349 -2
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search.spec.js +28 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +8 -1
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +13 -0
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-utils.spec.js +69 -1
- package/lib/src/embed/spotter-utils.spec.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +9 -10
- package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-viz-utils.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +97 -9
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +77 -36
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +537 -3
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +3 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.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/all-types-export.parity.spec.d.ts +2 -0
- package/lib/src/react/all-types-export.parity.spec.d.ts.map +1 -0
- package/lib/src/react/all-types-export.parity.spec.js +191 -0
- package/lib/src/react/all-types-export.parity.spec.js.map +1 -0
- package/lib/src/react/index.d.ts +66 -32
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +5 -3
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +102 -1
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +330 -18
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +182 -12
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +5 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +17 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +38 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +713 -60
- package/package.json +1 -1
- package/src/config.ts +1 -0
- package/src/css-variables.ts +32 -0
- package/src/embed/app.spec.ts +335 -1
- package/src/embed/app.ts +71 -13
- package/src/embed/base.ts +1 -1
- package/src/embed/conversation.spec.ts +136 -0
- package/src/embed/conversation.ts +181 -3
- package/src/embed/events.spec.ts +4 -0
- package/src/embed/host-events.spec.ts +48 -0
- package/src/embed/hostEventClient/host-event-client.spec.ts +34 -0
- package/src/embed/hostEventClient/host-event-client.ts +2 -2
- package/src/embed/liveboard.spec.ts +457 -2
- package/src/embed/liveboard.ts +74 -15
- package/src/embed/search.spec.ts +31 -0
- package/src/embed/spotter-utils.spec.ts +72 -0
- package/src/embed/spotter-utils.ts +21 -1
- package/src/embed/spotter-viz-utils.ts +9 -10
- package/src/embed/ts-embed.spec.ts +699 -3
- package/src/embed/ts-embed.ts +91 -41
- package/src/index.ts +43 -2
- package/src/react/all-types-export.parity.spec.ts +208 -0
- package/src/react/all-types-export.ts +22 -0
- package/src/react/index.spec.tsx +158 -0
- package/src/react/index.tsx +70 -33
- package/src/types.ts +329 -16
- package/src/utils.spec.ts +49 -0
- package/src/utils.ts +16 -0
|
@@ -155,6 +155,7 @@ describe('App embed tests', () => {
|
|
|
155
155
|
[app_1.Page.SpotIQ]: 'insights/results',
|
|
156
156
|
[app_1.Page.Monitor]: 'insights/monitor-alerts',
|
|
157
157
|
[app_1.Page.Collections]: 'collections',
|
|
158
|
+
[app_1.Page.LiveboardSchedules]: 'home/liveboard-schedules',
|
|
158
159
|
};
|
|
159
160
|
const pageIds = Object.keys(pageRouteMap);
|
|
160
161
|
for (let i = 0; i < pageIds.length; i++) {
|
|
@@ -182,6 +183,7 @@ describe('App embed tests', () => {
|
|
|
182
183
|
[app_1.Page.SpotIQ]: 'home/spotiq-analysis',
|
|
183
184
|
[app_1.Page.Monitor]: 'home/monitor-alerts',
|
|
184
185
|
[app_1.Page.Collections]: 'collections',
|
|
186
|
+
[app_1.Page.LiveboardSchedules]: 'home/liveboard-schedules',
|
|
185
187
|
};
|
|
186
188
|
const pageIdsForModularHomes = Object.keys(pageRouteMapForModularHome);
|
|
187
189
|
for (let i = 0; i < pageIdsForModularHomes.length; i++) {
|
|
@@ -289,6 +291,16 @@ describe('App embed tests', () => {
|
|
|
289
291
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&enable2ColumnLayout=true&navigationVersion=v3&homepageVersion=v3${defaultParamsPost}#/home`);
|
|
290
292
|
});
|
|
291
293
|
});
|
|
294
|
+
test('should set isLiveboardAlwaysOn12ColLayout to true in url', async () => {
|
|
295
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
296
|
+
...defaultViewConfig,
|
|
297
|
+
isLiveboardAlwaysOn12ColLayout: true,
|
|
298
|
+
});
|
|
299
|
+
appEmbed.render();
|
|
300
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
301
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&isLiveboardAlwaysOn12ColLayout=true&navigationVersion=v3&homepageVersion=v3${defaultParamsPost}#/home`);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
292
304
|
test('should set coverAndFilterOptionInPDF to false in url', async () => {
|
|
293
305
|
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
294
306
|
...defaultViewConfig,
|
|
@@ -309,6 +321,16 @@ describe('App embed tests', () => {
|
|
|
309
321
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&isLiveboardStylingAndGroupingEnabled=true&navigationVersion=v3&homepageVersion=v3${defaultParamsPost}#/home`);
|
|
310
322
|
});
|
|
311
323
|
});
|
|
324
|
+
test('should set liveboardGutter in url', async () => {
|
|
325
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
326
|
+
...defaultViewConfig,
|
|
327
|
+
liveboardGutter: 8,
|
|
328
|
+
});
|
|
329
|
+
appEmbed.render();
|
|
330
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
331
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&liveboardGutter=8&navigationVersion=v3&homepageVersion=v3${defaultParamsPost}#/home`);
|
|
332
|
+
});
|
|
333
|
+
});
|
|
312
334
|
test('should set isThisPeriodInDateFiltersEnabled to true in url', async () => {
|
|
313
335
|
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
314
336
|
...defaultViewConfig,
|
|
@@ -549,6 +571,33 @@ describe('App embed tests', () => {
|
|
|
549
571
|
});
|
|
550
572
|
});
|
|
551
573
|
});
|
|
574
|
+
test('should include starterPrompts in APP_INIT embedParams', async () => {
|
|
575
|
+
const starterPrompts = {
|
|
576
|
+
enable: true,
|
|
577
|
+
quick: {
|
|
578
|
+
label: 'Quick',
|
|
579
|
+
questions: [
|
|
580
|
+
{ label: 'Q1', prompt: 'P1' },
|
|
581
|
+
{ label: 'Q2', prompt: 'P2' },
|
|
582
|
+
],
|
|
583
|
+
},
|
|
584
|
+
research: { label: 'Research' },
|
|
585
|
+
};
|
|
586
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
587
|
+
...defaultViewConfig,
|
|
588
|
+
spotterChatConfig: { starterPrompts },
|
|
589
|
+
});
|
|
590
|
+
(0, test_utils_1.mockMessageChannel)();
|
|
591
|
+
appEmbed.render();
|
|
592
|
+
const mockPort = { postMessage: jest.fn() };
|
|
593
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
594
|
+
(0, test_utils_1.postMessageToParent)((0, test_utils_1.getIFrameEl)().contentWindow, { type: types_1.EmbedEvent.APP_INIT, data: {} }, mockPort);
|
|
595
|
+
});
|
|
596
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
597
|
+
expect(mockPort.postMessage.mock.calls[0][0].data.embedParams.starterPrompts)
|
|
598
|
+
.toEqual(starterPrompts);
|
|
599
|
+
});
|
|
600
|
+
});
|
|
552
601
|
test('should pass brandHeadline through spotterVizConfig in APP_INIT', async () => {
|
|
553
602
|
const spotterViz = { brandName: 'MyBrand', brandHeadline: "Hi, there! I'm" };
|
|
554
603
|
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -725,7 +774,41 @@ describe('App embed tests', () => {
|
|
|
725
774
|
});
|
|
726
775
|
appEmbed.render();
|
|
727
776
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
728
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&enableStarterPrompts=true${defaultParamsPost}#/home`);
|
|
777
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&enableStarterPrompts=true&navigationVersion=v3&homepageVersion=v3${defaultParamsPost}#/home`);
|
|
778
|
+
});
|
|
779
|
+
});
|
|
780
|
+
test('should set openSpotterOnLiveboardByDefault to true in url', async () => {
|
|
781
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
782
|
+
...defaultViewConfig,
|
|
783
|
+
spotterChatConfig: { openSpotterOnLiveboardByDefault: true },
|
|
784
|
+
});
|
|
785
|
+
appEmbed.render();
|
|
786
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
787
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
788
|
+
openSpotterOnLiveboardByDefault: 'true',
|
|
789
|
+
});
|
|
790
|
+
});
|
|
791
|
+
});
|
|
792
|
+
test('should set openSpotterOnLiveboardByDefault to false when explicitly disabled', async () => {
|
|
793
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
794
|
+
...defaultViewConfig,
|
|
795
|
+
spotterChatConfig: { openSpotterOnLiveboardByDefault: false },
|
|
796
|
+
});
|
|
797
|
+
appEmbed.render();
|
|
798
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
799
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
800
|
+
openSpotterOnLiveboardByDefault: 'false',
|
|
801
|
+
});
|
|
802
|
+
});
|
|
803
|
+
});
|
|
804
|
+
test('should not set openSpotterOnLiveboardByDefault when it is not configured', async () => {
|
|
805
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
806
|
+
...defaultViewConfig,
|
|
807
|
+
spotterChatConfig: { enableStarterPrompts: true },
|
|
808
|
+
});
|
|
809
|
+
appEmbed.render();
|
|
810
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
811
|
+
expect((0, test_utils_1.getIFrameSrc)()).not.toContain('openSpotterOnLiveboardByDefault');
|
|
729
812
|
});
|
|
730
813
|
});
|
|
731
814
|
test('should set spotterFileUploadFileTypes in url', async () => {
|
|
@@ -1502,6 +1585,175 @@ describe('App embed tests', () => {
|
|
|
1502
1585
|
expect(iframeSrc).toContain('isFullHeightPinboard=true');
|
|
1503
1586
|
}, 100);
|
|
1504
1587
|
});
|
|
1588
|
+
test('should default lazy loading flags to true when fullHeight is enabled', async () => {
|
|
1589
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1590
|
+
...defaultViewConfig,
|
|
1591
|
+
fullHeight: true,
|
|
1592
|
+
});
|
|
1593
|
+
expect(appEmbed.viewConfig.lazyLoadingForFullHeight).toBe(true);
|
|
1594
|
+
expect(appEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(true);
|
|
1595
|
+
expect(appEmbed.viewConfig.lazyLoadingMargin).toBe('500px 0px');
|
|
1596
|
+
await appEmbed.render();
|
|
1597
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1598
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1599
|
+
expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
|
|
1600
|
+
expect(iframeSrc).toContain('isFullHeightPinboard=true');
|
|
1601
|
+
expect(iframeSrc).toContain('rootMarginForLazyLoad=500px%200px');
|
|
1602
|
+
}, 100);
|
|
1603
|
+
});
|
|
1604
|
+
test('should not default lazy loading flags when fullHeight is not enabled', async () => {
|
|
1605
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1606
|
+
...defaultViewConfig,
|
|
1607
|
+
});
|
|
1608
|
+
expect(appEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1609
|
+
expect(appEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1610
|
+
expect(appEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1611
|
+
});
|
|
1612
|
+
test('should not write the defaults back onto the caller view config', async () => {
|
|
1613
|
+
const callerViewConfig = {
|
|
1614
|
+
...defaultViewConfig,
|
|
1615
|
+
fullHeight: true,
|
|
1616
|
+
};
|
|
1617
|
+
new app_1.AppEmbed((0, test_utils_1.getRootEl)(), callerViewConfig);
|
|
1618
|
+
expect(callerViewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1619
|
+
expect(callerViewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1620
|
+
expect(callerViewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1621
|
+
});
|
|
1622
|
+
test('should not default lazy loading flags when fullHeight is explicitly false', async () => {
|
|
1623
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1624
|
+
...defaultViewConfig,
|
|
1625
|
+
fullHeight: false,
|
|
1626
|
+
});
|
|
1627
|
+
expect(appEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1628
|
+
expect(appEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1629
|
+
expect(appEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1630
|
+
});
|
|
1631
|
+
test('should default lazyLoadingMargin when lazyLoadingForFullHeight is set explicitly', async () => {
|
|
1632
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1633
|
+
...defaultViewConfig,
|
|
1634
|
+
fullHeight: true,
|
|
1635
|
+
lazyLoadingForFullHeight: true,
|
|
1636
|
+
});
|
|
1637
|
+
expect(appEmbed.viewConfig.lazyLoadingMargin).toBe(config.DEFAULT_LAZY_LOADING_MARGIN);
|
|
1638
|
+
await appEmbed.render();
|
|
1639
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1640
|
+
expect((0, test_utils_1.getIFrameSrc)()).toContain('rootMarginForLazyLoad=500px%200px');
|
|
1641
|
+
}, 100);
|
|
1642
|
+
});
|
|
1643
|
+
test('should let an explicit lazyLoadingMargin win over the default', async () => {
|
|
1644
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1645
|
+
...defaultViewConfig,
|
|
1646
|
+
fullHeight: true,
|
|
1647
|
+
lazyLoadingMargin: '250px',
|
|
1648
|
+
});
|
|
1649
|
+
await appEmbed.render();
|
|
1650
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1651
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1652
|
+
expect(iframeSrc).toContain('rootMarginForLazyLoad=250px');
|
|
1653
|
+
expect(iframeSrc).not.toContain('rootMarginForLazyLoad=500px%200px');
|
|
1654
|
+
}, 100);
|
|
1655
|
+
});
|
|
1656
|
+
test('should drop an invalid lazyLoadingMargin and log an error', async () => {
|
|
1657
|
+
const loggerErrorSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => undefined);
|
|
1658
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1659
|
+
...defaultViewConfig,
|
|
1660
|
+
fullHeight: true,
|
|
1661
|
+
lazyLoadingMargin: 'not-a-margin',
|
|
1662
|
+
});
|
|
1663
|
+
await appEmbed.render();
|
|
1664
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1665
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1666
|
+
expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
|
|
1667
|
+
expect(iframeSrc).not.toContain('rootMarginForLazyLoad');
|
|
1668
|
+
expect(loggerErrorSpy).toHaveBeenCalledWith('Please provide a valid lazyLoadingMargin value (e.g., "10px")');
|
|
1669
|
+
}, 100);
|
|
1670
|
+
});
|
|
1671
|
+
test('should track scrollable ancestors by default when only fullHeight is set', async () => {
|
|
1672
|
+
const scrollContainer = (0, test_utils_1.getRootEl)();
|
|
1673
|
+
scrollContainer.style.overflow = 'auto';
|
|
1674
|
+
const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
|
|
1675
|
+
const resizeObserveSpy = jest.fn();
|
|
1676
|
+
const resizeDisconnectSpy = jest.fn();
|
|
1677
|
+
window.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
1678
|
+
observe: resizeObserveSpy,
|
|
1679
|
+
disconnect: resizeDisconnectSpy,
|
|
1680
|
+
}));
|
|
1681
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1682
|
+
...defaultViewConfig,
|
|
1683
|
+
fullHeight: true,
|
|
1684
|
+
});
|
|
1685
|
+
await appEmbed.render();
|
|
1686
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1687
|
+
expect(scrollContainerSpy).toHaveBeenCalledWith('scroll', expect.any(Function));
|
|
1688
|
+
expect(resizeObserveSpy).toHaveBeenCalledWith(scrollContainer);
|
|
1689
|
+
}, 100);
|
|
1690
|
+
appEmbed.destroy();
|
|
1691
|
+
expect(resizeDisconnectSpy).toHaveBeenCalled();
|
|
1692
|
+
scrollContainer.style.overflow = '';
|
|
1693
|
+
window.ResizeObserver = originalResizeObserver;
|
|
1694
|
+
});
|
|
1695
|
+
test('should skip ancestor tracking when enableScrollableContainerLazyLoading is false', async () => {
|
|
1696
|
+
const scrollContainer = (0, test_utils_1.getRootEl)();
|
|
1697
|
+
scrollContainer.style.overflow = 'auto';
|
|
1698
|
+
const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
|
|
1699
|
+
const windowSpy = jest.spyOn(window, 'addEventListener');
|
|
1700
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1701
|
+
...defaultViewConfig,
|
|
1702
|
+
fullHeight: true,
|
|
1703
|
+
enableScrollableContainerLazyLoading: false,
|
|
1704
|
+
});
|
|
1705
|
+
await appEmbed.render();
|
|
1706
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1707
|
+
expect(windowSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
|
|
1708
|
+
expect(scrollContainerSpy).not.toHaveBeenCalledWith('scroll', expect.any(Function));
|
|
1709
|
+
}, 100);
|
|
1710
|
+
appEmbed.destroy();
|
|
1711
|
+
scrollContainer.style.overflow = '';
|
|
1712
|
+
});
|
|
1713
|
+
test('should wire the window scroll listener to the coordinates sender by default', async () => {
|
|
1714
|
+
const addEventListenerSpy = jest.spyOn(window, 'addEventListener');
|
|
1715
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1716
|
+
...defaultViewConfig,
|
|
1717
|
+
fullHeight: true,
|
|
1718
|
+
});
|
|
1719
|
+
const mockTrigger = jest
|
|
1720
|
+
.spyOn(appEmbed, 'trigger')
|
|
1721
|
+
.mockImplementation(() => Promise.resolve(undefined));
|
|
1722
|
+
await appEmbed.render();
|
|
1723
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1724
|
+
const scrollCall = addEventListenerSpy.mock.calls.find(([eventName, , capture]) => eventName === 'scroll' && capture === true);
|
|
1725
|
+
expect(scrollCall).toBeDefined();
|
|
1726
|
+
// Call the handler the way a real scroll event would.
|
|
1727
|
+
scrollCall[1]();
|
|
1728
|
+
expect(mockTrigger).toHaveBeenCalledWith(types_1.HostEvent.VisibleEmbedCoordinates, expect.objectContaining({ top: expect.any(Number) }));
|
|
1729
|
+
}, 100);
|
|
1730
|
+
appEmbed.destroy();
|
|
1731
|
+
addEventListenerSpy.mockRestore();
|
|
1732
|
+
});
|
|
1733
|
+
test('should remove listeners on destroy when the flags come from defaults', async () => {
|
|
1734
|
+
const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener');
|
|
1735
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1736
|
+
...defaultViewConfig,
|
|
1737
|
+
fullHeight: true,
|
|
1738
|
+
});
|
|
1739
|
+
await appEmbed.render();
|
|
1740
|
+
appEmbed.destroy();
|
|
1741
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.anything());
|
|
1742
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
|
|
1743
|
+
removeEventListenerSpy.mockRestore();
|
|
1744
|
+
});
|
|
1745
|
+
test('should keep an explicit false for the lazy loading flags', async () => {
|
|
1746
|
+
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1747
|
+
...defaultViewConfig,
|
|
1748
|
+
fullHeight: true,
|
|
1749
|
+
lazyLoadingForFullHeight: false,
|
|
1750
|
+
enableScrollableContainerLazyLoading: false,
|
|
1751
|
+
lazyLoadingMargin: '0px',
|
|
1752
|
+
});
|
|
1753
|
+
expect(appEmbed.viewConfig.lazyLoadingForFullHeight).toBe(false);
|
|
1754
|
+
expect(appEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(false);
|
|
1755
|
+
expect(appEmbed.viewConfig.lazyLoadingMargin).toBe('0px');
|
|
1756
|
+
});
|
|
1505
1757
|
test('should not set lazyLoadingForEmbed when lazyLoadingForFullHeight is enabled but fullHeight is false', async () => {
|
|
1506
1758
|
const appEmbed = new app_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1507
1759
|
...defaultViewConfig,
|