@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
|
@@ -10,6 +10,8 @@ const processTriggerInstance = tslib_1.__importStar(require("../utils/processTri
|
|
|
10
10
|
const auth = tslib_1.__importStar(require("../auth"));
|
|
11
11
|
const previewService = tslib_1.__importStar(require("../utils/graphql/preview-service"));
|
|
12
12
|
const SessionInfoService = tslib_1.__importStar(require("../utils/sessionInfoService"));
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const config_1 = require("../config");
|
|
13
15
|
const defaultViewConfig = {
|
|
14
16
|
frameParams: {
|
|
15
17
|
width: 1280,
|
|
@@ -109,6 +111,22 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
109
111
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&${test_utils_1.defaultParamsWithoutHiddenActions}&hideAction=[%22${types_1.Action.ReportError}%22,%22${types_1.Action.DownloadAsCsv}%22,%22${types_1.Action.DownloadAsPdf}%22,%22${types_1.Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${liveboardId}`);
|
|
110
112
|
});
|
|
111
113
|
});
|
|
114
|
+
test('should hide and disable the Spotter button on the Liveboard header', async () => {
|
|
115
|
+
expect(types_1.Action.SpotterOnLiveboard).toBe('spotterOnLiveboard');
|
|
116
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
117
|
+
hiddenActions: [types_1.Action.SpotterOnLiveboard],
|
|
118
|
+
disabledActions: [types_1.Action.SpotterOnLiveboard],
|
|
119
|
+
...defaultViewConfig,
|
|
120
|
+
liveboardId,
|
|
121
|
+
});
|
|
122
|
+
liveboardEmbed.render();
|
|
123
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
124
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
125
|
+
hideAction: JSON.stringify([types_1.Action.ReportError, types_1.Action.SpotterOnLiveboard]),
|
|
126
|
+
disableAction: JSON.stringify([types_1.Action.SpotterOnLiveboard]),
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
112
130
|
test('should set visible actions', async () => {
|
|
113
131
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
114
132
|
visibleActions: [types_1.Action.DownloadAsCsv, types_1.Action.DownloadAsPdf, types_1.Action.DownloadAsXlsx],
|
|
@@ -144,6 +162,17 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
144
162
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}&enable2ColumnLayout=true${prefixParams}#/embed/viz/${liveboardId}`);
|
|
145
163
|
});
|
|
146
164
|
});
|
|
165
|
+
test('should set isLiveboardAlwaysOn12ColLayout to true in url', async () => {
|
|
166
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
167
|
+
isLiveboardAlwaysOn12ColLayout: true,
|
|
168
|
+
...defaultViewConfig,
|
|
169
|
+
liveboardId,
|
|
170
|
+
});
|
|
171
|
+
liveboardEmbed.render();
|
|
172
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
173
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}&isLiveboardAlwaysOn12ColLayout=true${prefixParams}#/embed/viz/${liveboardId}`);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
147
176
|
test('should set isLiveboardStylingAndGroupingEnabled to true in url (deprecated, use isLiveboardMasterpiecesEnabled)', async () => {
|
|
148
177
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
149
178
|
isLiveboardStylingAndGroupingEnabled: true,
|
|
@@ -155,6 +184,28 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
155
184
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}&isLiveboardStylingAndGroupingEnabled=true${prefixParams}#/embed/viz/${liveboardId}`);
|
|
156
185
|
});
|
|
157
186
|
});
|
|
187
|
+
test('should set liveboardGutter in url', async () => {
|
|
188
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
189
|
+
...defaultViewConfig,
|
|
190
|
+
liveboardId,
|
|
191
|
+
liveboardGutter: 8,
|
|
192
|
+
});
|
|
193
|
+
liveboardEmbed.render();
|
|
194
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
195
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}&liveboardGutter=8${prefixParams}#/embed/viz/${liveboardId}`);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
test('should set liveboardGutter to 0 in url', async () => {
|
|
199
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
200
|
+
...defaultViewConfig,
|
|
201
|
+
liveboardId,
|
|
202
|
+
liveboardGutter: 0,
|
|
203
|
+
});
|
|
204
|
+
liveboardEmbed.render();
|
|
205
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
206
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}&liveboardGutter=0${prefixParams}#/embed/viz/${liveboardId}`);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
158
209
|
test('should set isThisPeriodInDateFiltersEnabled to true in url', async () => {
|
|
159
210
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
160
211
|
...defaultViewConfig,
|
|
@@ -972,6 +1023,37 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
972
1023
|
expect(onSpy).toHaveBeenCalledWith(types_1.HostEvent.Navigate, 'embed/viz/lb1/viz1');
|
|
973
1024
|
}, 1002);
|
|
974
1025
|
});
|
|
1026
|
+
test('navigateToLiveboard should call preRender when preRenderConfig.preRenderId is set', () => {
|
|
1027
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1028
|
+
...defaultViewConfig,
|
|
1029
|
+
liveboardId,
|
|
1030
|
+
preRenderConfig: {
|
|
1031
|
+
preRenderId: 'config-pre-render-id',
|
|
1032
|
+
},
|
|
1033
|
+
});
|
|
1034
|
+
const preRenderSpy = jest
|
|
1035
|
+
.spyOn(liveboardEmbed, 'preRender')
|
|
1036
|
+
.mockResolvedValue(liveboardEmbed);
|
|
1037
|
+
liveboardEmbed.navigateToLiveboard('lb1');
|
|
1038
|
+
expect(preRenderSpy).toHaveBeenCalledTimes(1);
|
|
1039
|
+
expect(preRenderSpy).toHaveBeenCalledWith(true);
|
|
1040
|
+
});
|
|
1041
|
+
test('navigateToLiveboard should prefer preRenderConfig.preRenderId over top-level preRenderId', () => {
|
|
1042
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1043
|
+
...defaultViewConfig,
|
|
1044
|
+
liveboardId,
|
|
1045
|
+
preRenderId: 'top-level-id',
|
|
1046
|
+
preRenderConfig: {
|
|
1047
|
+
preRenderId: 'config-level-id',
|
|
1048
|
+
},
|
|
1049
|
+
});
|
|
1050
|
+
const preRenderSpy = jest
|
|
1051
|
+
.spyOn(liveboardEmbed, 'preRender')
|
|
1052
|
+
.mockResolvedValue(liveboardEmbed);
|
|
1053
|
+
liveboardEmbed.navigateToLiveboard('lb1');
|
|
1054
|
+
expect(preRenderSpy).toHaveBeenCalledTimes(1);
|
|
1055
|
+
expect(preRenderSpy).toHaveBeenCalledWith(true);
|
|
1056
|
+
});
|
|
975
1057
|
test('should set runtime parametere values in url params', async () => {
|
|
976
1058
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
977
1059
|
...defaultViewConfig,
|
|
@@ -1022,6 +1104,43 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1022
1104
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}${prefixParams}&enableStarterPrompts=true#/embed/viz/${liveboardId}`);
|
|
1023
1105
|
});
|
|
1024
1106
|
});
|
|
1107
|
+
test('should set openSpotterOnLiveboardByDefault parameter in url params', async () => {
|
|
1108
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1109
|
+
...defaultViewConfig,
|
|
1110
|
+
liveboardId,
|
|
1111
|
+
spotterChatConfig: { openSpotterOnLiveboardByDefault: true },
|
|
1112
|
+
});
|
|
1113
|
+
await liveboardEmbed.render();
|
|
1114
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1115
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
1116
|
+
openSpotterOnLiveboardByDefault: 'true',
|
|
1117
|
+
});
|
|
1118
|
+
});
|
|
1119
|
+
});
|
|
1120
|
+
test('should set openSpotterOnLiveboardByDefault to false when explicitly disabled', async () => {
|
|
1121
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1122
|
+
...defaultViewConfig,
|
|
1123
|
+
liveboardId,
|
|
1124
|
+
spotterChatConfig: { openSpotterOnLiveboardByDefault: false },
|
|
1125
|
+
});
|
|
1126
|
+
await liveboardEmbed.render();
|
|
1127
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1128
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
1129
|
+
openSpotterOnLiveboardByDefault: 'false',
|
|
1130
|
+
});
|
|
1131
|
+
});
|
|
1132
|
+
});
|
|
1133
|
+
test('should not set openSpotterOnLiveboardByDefault when it is not configured', async () => {
|
|
1134
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1135
|
+
...defaultViewConfig,
|
|
1136
|
+
liveboardId,
|
|
1137
|
+
spotterChatConfig: { enableStarterPrompts: true },
|
|
1138
|
+
});
|
|
1139
|
+
await liveboardEmbed.render();
|
|
1140
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1141
|
+
expect((0, test_utils_1.getIFrameSrc)()).not.toContain('openSpotterOnLiveboardByDefault');
|
|
1142
|
+
});
|
|
1143
|
+
});
|
|
1025
1144
|
test('should set spotterFileUploadFileTypes parameter in url params', async () => {
|
|
1026
1145
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1027
1146
|
...defaultViewConfig,
|
|
@@ -1139,6 +1258,34 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1139
1258
|
});
|
|
1140
1259
|
});
|
|
1141
1260
|
});
|
|
1261
|
+
test('should include starterPrompts in APP_INIT embedParams', async () => {
|
|
1262
|
+
const starterPrompts = {
|
|
1263
|
+
enable: true,
|
|
1264
|
+
quick: {
|
|
1265
|
+
label: 'Quick',
|
|
1266
|
+
questions: [
|
|
1267
|
+
{ label: 'Q1', prompt: 'P1' },
|
|
1268
|
+
{ label: 'Q2', prompt: 'P2' },
|
|
1269
|
+
],
|
|
1270
|
+
},
|
|
1271
|
+
research: { label: 'Research' },
|
|
1272
|
+
};
|
|
1273
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1274
|
+
...defaultViewConfig,
|
|
1275
|
+
liveboardId,
|
|
1276
|
+
spotterChatConfig: { starterPrompts },
|
|
1277
|
+
});
|
|
1278
|
+
(0, test_utils_1.mockMessageChannel)();
|
|
1279
|
+
await liveboardEmbed.render();
|
|
1280
|
+
const mockPort = { postMessage: jest.fn() };
|
|
1281
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1282
|
+
(0, test_utils_1.postMessageToParent)((0, test_utils_1.getIFrameEl)().contentWindow, { type: types_1.EmbedEvent.APP_INIT, data: {} }, mockPort);
|
|
1283
|
+
});
|
|
1284
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1285
|
+
expect(mockPort.postMessage.mock.calls[0][0].data.embedParams.starterPrompts)
|
|
1286
|
+
.toEqual(starterPrompts);
|
|
1287
|
+
});
|
|
1288
|
+
});
|
|
1142
1289
|
test('should pass brandHeadline through spotterVizConfig in APP_INIT', async () => {
|
|
1143
1290
|
const spotterViz = { brandName: 'MyBrand', brandHeadline: "Hi, there! I'm" };
|
|
1144
1291
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1461,6 +1608,188 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1461
1608
|
expect(iframeSrc).toContain('isFullHeightPinboard=true');
|
|
1462
1609
|
}, 100);
|
|
1463
1610
|
});
|
|
1611
|
+
test('should default lazy loading flags to true when fullHeight is enabled', async () => {
|
|
1612
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1613
|
+
...defaultViewConfig,
|
|
1614
|
+
liveboardId,
|
|
1615
|
+
fullHeight: true,
|
|
1616
|
+
});
|
|
1617
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBe(true);
|
|
1618
|
+
expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(true);
|
|
1619
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe('500px 0px');
|
|
1620
|
+
await liveboardEmbed.render();
|
|
1621
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1622
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1623
|
+
expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
|
|
1624
|
+
expect(iframeSrc).toContain('isFullHeightPinboard=true');
|
|
1625
|
+
expect(iframeSrc).toContain('rootMarginForLazyLoad=500px%200px');
|
|
1626
|
+
}, 100);
|
|
1627
|
+
});
|
|
1628
|
+
test('should not default lazy loading flags when fullHeight is not enabled', async () => {
|
|
1629
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1630
|
+
...defaultViewConfig,
|
|
1631
|
+
liveboardId,
|
|
1632
|
+
});
|
|
1633
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1634
|
+
expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1635
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1636
|
+
});
|
|
1637
|
+
test('should not write the defaults back onto the caller view config', async () => {
|
|
1638
|
+
const callerViewConfig = {
|
|
1639
|
+
...defaultViewConfig,
|
|
1640
|
+
liveboardId,
|
|
1641
|
+
fullHeight: true,
|
|
1642
|
+
};
|
|
1643
|
+
new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), callerViewConfig);
|
|
1644
|
+
expect(callerViewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1645
|
+
expect(callerViewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1646
|
+
expect(callerViewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1647
|
+
});
|
|
1648
|
+
test('should not default lazy loading flags when fullHeight is explicitly false', async () => {
|
|
1649
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1650
|
+
...defaultViewConfig,
|
|
1651
|
+
liveboardId,
|
|
1652
|
+
fullHeight: false,
|
|
1653
|
+
});
|
|
1654
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
|
|
1655
|
+
expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
|
|
1656
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
|
|
1657
|
+
});
|
|
1658
|
+
test('should default lazyLoadingMargin when lazyLoadingForFullHeight is set explicitly', async () => {
|
|
1659
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1660
|
+
...defaultViewConfig,
|
|
1661
|
+
liveboardId,
|
|
1662
|
+
fullHeight: true,
|
|
1663
|
+
lazyLoadingForFullHeight: true,
|
|
1664
|
+
});
|
|
1665
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe(config_1.DEFAULT_LAZY_LOADING_MARGIN);
|
|
1666
|
+
await liveboardEmbed.render();
|
|
1667
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1668
|
+
expect((0, test_utils_1.getIFrameSrc)()).toContain('rootMarginForLazyLoad=500px%200px');
|
|
1669
|
+
}, 100);
|
|
1670
|
+
});
|
|
1671
|
+
test('should let an explicit lazyLoadingMargin win over the default', async () => {
|
|
1672
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1673
|
+
...defaultViewConfig,
|
|
1674
|
+
liveboardId,
|
|
1675
|
+
fullHeight: true,
|
|
1676
|
+
lazyLoadingMargin: '250px',
|
|
1677
|
+
});
|
|
1678
|
+
await liveboardEmbed.render();
|
|
1679
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1680
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1681
|
+
expect(iframeSrc).toContain('rootMarginForLazyLoad=250px');
|
|
1682
|
+
expect(iframeSrc).not.toContain('rootMarginForLazyLoad=500px%200px');
|
|
1683
|
+
}, 100);
|
|
1684
|
+
});
|
|
1685
|
+
test('should drop an invalid lazyLoadingMargin and log an error', async () => {
|
|
1686
|
+
const loggerErrorSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => undefined);
|
|
1687
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1688
|
+
...defaultViewConfig,
|
|
1689
|
+
liveboardId,
|
|
1690
|
+
fullHeight: true,
|
|
1691
|
+
lazyLoadingMargin: 'not-a-margin',
|
|
1692
|
+
});
|
|
1693
|
+
await liveboardEmbed.render();
|
|
1694
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1695
|
+
const iframeSrc = (0, test_utils_1.getIFrameSrc)();
|
|
1696
|
+
expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
|
|
1697
|
+
expect(iframeSrc).not.toContain('rootMarginForLazyLoad');
|
|
1698
|
+
expect(loggerErrorSpy).toHaveBeenCalledWith('Please provide a valid lazyLoadingMargin value (e.g., "10px")');
|
|
1699
|
+
}, 100);
|
|
1700
|
+
});
|
|
1701
|
+
test('should track scrollable ancestors by default when only fullHeight is set', async () => {
|
|
1702
|
+
const scrollContainer = (0, test_utils_1.getRootEl)();
|
|
1703
|
+
scrollContainer.style.overflow = 'auto';
|
|
1704
|
+
const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
|
|
1705
|
+
const resizeObserveSpy = jest.fn();
|
|
1706
|
+
const resizeDisconnectSpy = jest.fn();
|
|
1707
|
+
const originalResizeObserver = window.ResizeObserver;
|
|
1708
|
+
window.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
1709
|
+
observe: resizeObserveSpy,
|
|
1710
|
+
disconnect: resizeDisconnectSpy,
|
|
1711
|
+
}));
|
|
1712
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1713
|
+
...defaultViewConfig,
|
|
1714
|
+
liveboardId,
|
|
1715
|
+
fullHeight: true,
|
|
1716
|
+
});
|
|
1717
|
+
await liveboardEmbed.render();
|
|
1718
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1719
|
+
expect(scrollContainerSpy).toHaveBeenCalledWith('scroll', expect.any(Function));
|
|
1720
|
+
expect(resizeObserveSpy).toHaveBeenCalledWith(scrollContainer);
|
|
1721
|
+
}, 100);
|
|
1722
|
+
liveboardEmbed.destroy();
|
|
1723
|
+
expect(resizeDisconnectSpy).toHaveBeenCalled();
|
|
1724
|
+
scrollContainer.style.overflow = '';
|
|
1725
|
+
window.ResizeObserver = originalResizeObserver;
|
|
1726
|
+
});
|
|
1727
|
+
test('should skip ancestor tracking when enableScrollableContainerLazyLoading is false', async () => {
|
|
1728
|
+
const scrollContainer = (0, test_utils_1.getRootEl)();
|
|
1729
|
+
scrollContainer.style.overflow = 'auto';
|
|
1730
|
+
const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
|
|
1731
|
+
const windowSpy = jest.spyOn(window, 'addEventListener');
|
|
1732
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1733
|
+
...defaultViewConfig,
|
|
1734
|
+
liveboardId,
|
|
1735
|
+
fullHeight: true,
|
|
1736
|
+
enableScrollableContainerLazyLoading: false,
|
|
1737
|
+
});
|
|
1738
|
+
await liveboardEmbed.render();
|
|
1739
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1740
|
+
expect(windowSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
|
|
1741
|
+
expect(scrollContainerSpy).not.toHaveBeenCalledWith('scroll', expect.any(Function));
|
|
1742
|
+
}, 100);
|
|
1743
|
+
liveboardEmbed.destroy();
|
|
1744
|
+
scrollContainer.style.overflow = '';
|
|
1745
|
+
});
|
|
1746
|
+
test('should wire the window scroll listener to the coordinates sender by default', async () => {
|
|
1747
|
+
const addEventListenerSpy = jest.spyOn(window, 'addEventListener');
|
|
1748
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1749
|
+
...defaultViewConfig,
|
|
1750
|
+
liveboardId,
|
|
1751
|
+
fullHeight: true,
|
|
1752
|
+
});
|
|
1753
|
+
const mockTrigger = jest
|
|
1754
|
+
.spyOn(liveboardEmbed, 'trigger')
|
|
1755
|
+
.mockImplementation(() => Promise.resolve(undefined));
|
|
1756
|
+
await liveboardEmbed.render();
|
|
1757
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1758
|
+
const scrollCall = addEventListenerSpy.mock.calls.find(([eventName, , capture]) => eventName === 'scroll' && capture === true);
|
|
1759
|
+
expect(scrollCall).toBeDefined();
|
|
1760
|
+
// Call the handler the way a real scroll event would.
|
|
1761
|
+
scrollCall[1]();
|
|
1762
|
+
expect(mockTrigger).toHaveBeenCalledWith(types_1.HostEvent.VisibleEmbedCoordinates, expect.objectContaining({ top: expect.any(Number) }));
|
|
1763
|
+
}, 100);
|
|
1764
|
+
liveboardEmbed.destroy();
|
|
1765
|
+
addEventListenerSpy.mockRestore();
|
|
1766
|
+
});
|
|
1767
|
+
test('should remove listeners on destroy when the flags come from defaults', async () => {
|
|
1768
|
+
const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener');
|
|
1769
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1770
|
+
...defaultViewConfig,
|
|
1771
|
+
liveboardId,
|
|
1772
|
+
fullHeight: true,
|
|
1773
|
+
});
|
|
1774
|
+
await liveboardEmbed.render();
|
|
1775
|
+
liveboardEmbed.destroy();
|
|
1776
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.anything());
|
|
1777
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
|
|
1778
|
+
removeEventListenerSpy.mockRestore();
|
|
1779
|
+
});
|
|
1780
|
+
test('should keep an explicit false for the lazy loading flags', async () => {
|
|
1781
|
+
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1782
|
+
...defaultViewConfig,
|
|
1783
|
+
liveboardId,
|
|
1784
|
+
fullHeight: true,
|
|
1785
|
+
lazyLoadingForFullHeight: false,
|
|
1786
|
+
enableScrollableContainerLazyLoading: false,
|
|
1787
|
+
lazyLoadingMargin: '0px',
|
|
1788
|
+
});
|
|
1789
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBe(false);
|
|
1790
|
+
expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(false);
|
|
1791
|
+
expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe('0px');
|
|
1792
|
+
});
|
|
1464
1793
|
test('should not set lazyLoadingForEmbed when lazyLoadingForFullHeight is enabled but fullHeight is false', async () => {
|
|
1465
1794
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1466
1795
|
...defaultViewConfig,
|
|
@@ -1525,7 +1854,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1525
1854
|
width: 650,
|
|
1526
1855
|
});
|
|
1527
1856
|
});
|
|
1528
|
-
test('should send
|
|
1857
|
+
test('should send visible data when fullHeight is enabled and lazyLoadingForFullHeight is omitted', async () => {
|
|
1529
1858
|
const liveboardEmbed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1530
1859
|
...defaultViewConfig,
|
|
1531
1860
|
liveboardId,
|
|
@@ -1536,7 +1865,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1536
1865
|
await liveboardEmbed.render();
|
|
1537
1866
|
// Trigger the lazy load data calculation
|
|
1538
1867
|
liveboardEmbed.sendFullHeightLazyLoadData();
|
|
1539
|
-
expect(mockTrigger).
|
|
1868
|
+
expect(mockTrigger).toHaveBeenCalledWith(types_1.HostEvent.VisibleEmbedCoordinates, {
|
|
1540
1869
|
top: 0,
|
|
1541
1870
|
height: 500,
|
|
1542
1871
|
left: 0,
|
|
@@ -1867,5 +2196,23 @@ describe('LiveboardEmbed updatedSpotterExperience tests', () => {
|
|
|
1867
2196
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true${test_utils_1.defaultParams}${prefixParams}&updatedSpotterExperience=false#/embed/viz/${liveboardId}`);
|
|
1868
2197
|
});
|
|
1869
2198
|
});
|
|
2199
|
+
describe('trigger typing contracts (compile-time)', () => {
|
|
2200
|
+
it('infers typed response for no-payload calls through the LiveboardEmbed override', () => {
|
|
2201
|
+
const embed = new liveboard_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
2202
|
+
liveboardId: 'test-liveboard-id',
|
|
2203
|
+
});
|
|
2204
|
+
const getTabs = () => embed.trigger(types_1.HostEvent.GetTabs);
|
|
2205
|
+
const tabsIsTyped = false;
|
|
2206
|
+
const tabsHasContractFields = true;
|
|
2207
|
+
const probeUnknownField = (r) =>
|
|
2208
|
+
// @ts-expect-error — field not on the GetTabs contract (was silent when `any`)
|
|
2209
|
+
r.tabCount;
|
|
2210
|
+
void probeUnknownField;
|
|
2211
|
+
const reload = () => embed.trigger(types_1.HostEvent.Reload);
|
|
2212
|
+
const reloadStaysAny = true;
|
|
2213
|
+
expect([tabsIsTyped, tabsHasContractFields, reloadStaysAny])
|
|
2214
|
+
.toEqual([false, true, true]);
|
|
2215
|
+
});
|
|
2216
|
+
});
|
|
1870
2217
|
});
|
|
1871
2218
|
//# sourceMappingURL=liveboard.spec.js.map
|