@thoughtspot/visual-embed-sdk 1.44.3 → 1.44.4-HE-beta.1
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/README.md +1 -1
- package/cjs/package.json +1 -1
- package/cjs/src/embed/app.d.ts +44 -32
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +7 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +9 -0
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +20 -3
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js +6 -1
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +18 -18
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +7 -7
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +10 -4
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +12 -2
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +1 -1
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +7 -0
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +9 -0
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +7 -0
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +9 -0
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +7 -0
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +9 -0
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +9 -3
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +41 -8
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +156 -24
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.d.ts +1 -0
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +1 -0
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +5 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/types.d.ts +142 -45
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +91 -16
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/logger.spec.d.ts +20 -5
- package/cjs/src/utils/logger.spec.d.ts.map +1 -1
- package/cjs/src/utils/processTrigger.d.ts +3 -2
- package/cjs/src/utils/processTrigger.d.ts.map +1 -1
- package/cjs/src/utils/processTrigger.js +4 -2
- package/cjs/src/utils/processTrigger.js.map +1 -1
- package/cjs/src/utils.d.ts +5 -1
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +10 -2
- package/cjs/src/utils.js.map +1 -1
- package/dist/index-BFdRRz03.js +7371 -0
- package/dist/index-BUfrYJ3w.js +7371 -0
- package/dist/index-CI6s4VMY.js +7371 -0
- package/dist/{index-D0n5LIka.js → index-CWQnMX2L.js} +1 -1
- package/dist/index-CaW-1mu5.js +7371 -0
- package/dist/index-CcSgNJVi.js +7371 -0
- package/dist/index-Djtv-y7A.js +7371 -0
- package/dist/index-UY-4yjBN.js +7371 -0
- package/dist/src/embed/app.d.ts +44 -32
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +7 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts +20 -3
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +10 -4
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +7 -0
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +7 -0
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +7 -0
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +9 -3
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +142 -45
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/logger.spec.d.ts +20 -5
- package/dist/src/utils/logger.spec.d.ts.map +1 -1
- package/dist/src/utils/processTrigger.d.ts +3 -2
- package/dist/src/utils/processTrigger.d.ts.map +1 -1
- package/dist/src/utils.d.ts +5 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +218 -50
- package/dist/tsembed-react.js +217 -49
- package/dist/tsembed.es.js +219 -51
- package/dist/tsembed.js +244 -76
- package/dist/visual-embed-sdk-react-full.d.ts +245 -82
- package/dist/visual-embed-sdk-react.d.ts +251 -90
- package/dist/visual-embed-sdk.d.ts +298 -92
- package/lib/package.json +1 -1
- package/lib/src/embed/app.d.ts +44 -32
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +7 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +9 -0
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +20 -3
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js +5 -0
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +18 -18
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +7 -7
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +10 -4
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +12 -2
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +1 -1
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +7 -0
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +9 -0
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +7 -0
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +9 -0
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +7 -0
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +9 -0
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +9 -3
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +41 -8
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +156 -24
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +1 -0
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +1 -0
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- 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/types.d.ts +142 -45
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +90 -15
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/logger.spec.d.ts +20 -5
- package/lib/src/utils/logger.spec.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.d.ts +3 -2
- package/lib/src/utils/processTrigger.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.js +4 -2
- package/lib/src/utils/processTrigger.js.map +1 -1
- package/lib/src/utils.d.ts +5 -1
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +8 -1
- package/lib/src/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/embed/app.ts +45 -32
- package/src/embed/conversation.ts +11 -0
- package/src/embed/hostEventClient/contracts.ts +23 -4
- package/src/embed/hostEventClient/host-event-client.spec.ts +7 -1
- package/src/embed/hostEventClient/host-event-client.ts +22 -11
- package/src/embed/liveboard.spec.ts +1 -1
- package/src/embed/liveboard.ts +18 -5
- package/src/embed/sage.ts +11 -0
- package/src/embed/search-bar.tsx +11 -0
- package/src/embed/search.ts +11 -0
- package/src/embed/ts-embed.spec.ts +205 -18
- package/src/embed/ts-embed.ts +45 -9
- package/src/errors.ts +1 -0
- package/src/index.ts +6 -0
- package/src/types.ts +146 -43
- package/src/utils/processTrigger.ts +6 -3
- package/src/utils.ts +10 -1
|
@@ -204,6 +204,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
204
204
|
parameters: payload,
|
|
205
205
|
type: UIPassthroughEvent.PinAnswerToLiveboard,
|
|
206
206
|
},
|
|
207
|
+
undefined,
|
|
207
208
|
);
|
|
208
209
|
});
|
|
209
210
|
});
|
|
@@ -224,6 +225,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
224
225
|
HostEvent.Save,
|
|
225
226
|
'http://tshost',
|
|
226
227
|
{},
|
|
228
|
+
undefined,
|
|
227
229
|
);
|
|
228
230
|
});
|
|
229
231
|
});
|
|
@@ -245,6 +247,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
245
247
|
HostEvent.Save,
|
|
246
248
|
'http://tshost',
|
|
247
249
|
false,
|
|
250
|
+
undefined,
|
|
248
251
|
);
|
|
249
252
|
});
|
|
250
253
|
});
|
|
@@ -1331,6 +1334,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1331
1334
|
HostEvent.InfoSuccess,
|
|
1332
1335
|
'http://tshost',
|
|
1333
1336
|
expect.objectContaining({ info: expect.any(Object) }),
|
|
1337
|
+
undefined,
|
|
1334
1338
|
);
|
|
1335
1339
|
});
|
|
1336
1340
|
});
|
|
@@ -1467,6 +1471,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1467
1471
|
HostEvent.InfoSuccess,
|
|
1468
1472
|
'http://tshost',
|
|
1469
1473
|
expect.objectContaining({ info: expect.any(Object) }),
|
|
1474
|
+
undefined,
|
|
1470
1475
|
);
|
|
1471
1476
|
});
|
|
1472
1477
|
});
|
|
@@ -1481,6 +1486,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1481
1486
|
HostEvent.InfoSuccess,
|
|
1482
1487
|
'http://tshost',
|
|
1483
1488
|
expect.objectContaining({ info: expect.any(Object) }),
|
|
1489
|
+
undefined,
|
|
1484
1490
|
);
|
|
1485
1491
|
});
|
|
1486
1492
|
});
|
|
@@ -1495,6 +1501,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1495
1501
|
HostEvent.InfoSuccess,
|
|
1496
1502
|
'http://tshost',
|
|
1497
1503
|
expect.objectContaining({ info: expect.any(Object) }),
|
|
1504
|
+
undefined,
|
|
1498
1505
|
);
|
|
1499
1506
|
});
|
|
1500
1507
|
});
|
|
@@ -1509,6 +1516,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1509
1516
|
HostEvent.InfoSuccess,
|
|
1510
1517
|
'http://tshost',
|
|
1511
1518
|
expect.objectContaining({ info: expect.any(Object) }),
|
|
1519
|
+
undefined,
|
|
1512
1520
|
);
|
|
1513
1521
|
});
|
|
1514
1522
|
});
|
|
@@ -2483,6 +2491,44 @@ describe('Unit test case for ts embed', () => {
|
|
|
2483
2491
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
2484
2492
|
});
|
|
2485
2493
|
|
|
2494
|
+
it('should set overflow:hidden when hidePreRender and remove when showPreRender', async () => {
|
|
2495
|
+
createRootEleForEmbed();
|
|
2496
|
+
|
|
2497
|
+
(window as any).ResizeObserver = window.ResizeObserver
|
|
2498
|
+
|| jest.fn().mockImplementation(() => ({
|
|
2499
|
+
disconnect: jest.fn(),
|
|
2500
|
+
observe: jest.fn(),
|
|
2501
|
+
unobserve: jest.fn(),
|
|
2502
|
+
}));
|
|
2503
|
+
|
|
2504
|
+
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
2505
|
+
preRenderId: 'overflow-test',
|
|
2506
|
+
liveboardId: 'myLiveboardId',
|
|
2507
|
+
});
|
|
2508
|
+
|
|
2509
|
+
await libEmbed.preRender();
|
|
2510
|
+
await waitFor(() => !!getIFrameEl());
|
|
2511
|
+
|
|
2512
|
+
const preRenderIds = libEmbed.getPreRenderIds();
|
|
2513
|
+
const preRenderWrapper = document.getElementById(preRenderIds.wrapper);
|
|
2514
|
+
|
|
2515
|
+
// After preRender (calls hidePreRender by default)
|
|
2516
|
+
// should have overflow:hidden
|
|
2517
|
+
expect(preRenderWrapper.style.overflow).toBe('hidden');
|
|
2518
|
+
expect(preRenderWrapper.style.opacity).toBe('0');
|
|
2519
|
+
|
|
2520
|
+
// After showPreRender, overflow should be removed
|
|
2521
|
+
// to inherit from CSS
|
|
2522
|
+
libEmbed.showPreRender();
|
|
2523
|
+
expect(preRenderWrapper.style.overflow).toBe('');
|
|
2524
|
+
expect(preRenderWrapper.style.opacity).toBe('');
|
|
2525
|
+
|
|
2526
|
+
// After hidePreRender again, overflow should be hidden
|
|
2527
|
+
libEmbed.hidePreRender();
|
|
2528
|
+
expect(preRenderWrapper.style.overflow).toBe('hidden');
|
|
2529
|
+
expect(preRenderWrapper.style.opacity).toBe('0');
|
|
2530
|
+
});
|
|
2531
|
+
|
|
2486
2532
|
it('it should connect with another object', async () => {
|
|
2487
2533
|
createRootEleForEmbed();
|
|
2488
2534
|
mockMessageChannel();
|
|
@@ -4017,7 +4063,7 @@ describe('Destroy error handling', () => {
|
|
|
4017
4063
|
}).not.toThrow();
|
|
4018
4064
|
|
|
4019
4065
|
expect(logSpy).toHaveBeenCalledWith('Error destroying TS Embed', expect.any(Error));
|
|
4020
|
-
logSpy.
|
|
4066
|
+
logSpy.mockReset();
|
|
4021
4067
|
});
|
|
4022
4068
|
});
|
|
4023
4069
|
|
|
@@ -4060,11 +4106,12 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
4060
4106
|
document.dispatchEvent(event);
|
|
4061
4107
|
|
|
4062
4108
|
await executeAfterWait(() => {
|
|
4063
|
-
expect(mockProcessTrigger).
|
|
4109
|
+
expect(mockProcessTrigger).toHaveBeenLastCalledWith(
|
|
4064
4110
|
expect.any(Object),
|
|
4065
4111
|
HostEvent.ExitPresentMode,
|
|
4066
4112
|
expect.any(String),
|
|
4067
4113
|
expect.any(Object),
|
|
4114
|
+
undefined,
|
|
4068
4115
|
);
|
|
4069
4116
|
});
|
|
4070
4117
|
});
|
|
@@ -4107,19 +4154,7 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
4107
4154
|
});
|
|
4108
4155
|
|
|
4109
4156
|
describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
4110
|
-
|
|
4111
|
-
init({
|
|
4112
|
-
thoughtSpotHost: 'tshost',
|
|
4113
|
-
authType: AuthType.None,
|
|
4114
|
-
});
|
|
4115
|
-
});
|
|
4116
|
-
|
|
4117
|
-
afterEach(() => {
|
|
4118
|
-
const rootEle = document.getElementById('myRoot');
|
|
4119
|
-
rootEle?.remove();
|
|
4120
|
-
});
|
|
4121
|
-
|
|
4122
|
-
test('should trigger UpdateEmbedParams when showPreRender connects to existing prerendered component', async () => {
|
|
4157
|
+
const setupPreRenderTest = async (preRenderId: string, initialConfig: Partial<LiveboardViewConfig>) => {
|
|
4123
4158
|
createRootEleForEmbed();
|
|
4124
4159
|
mockMessageChannel();
|
|
4125
4160
|
|
|
@@ -4131,8 +4166,8 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
4131
4166
|
}));
|
|
4132
4167
|
|
|
4133
4168
|
const embed1 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4134
|
-
preRenderId
|
|
4135
|
-
|
|
4169
|
+
preRenderId,
|
|
4170
|
+
...initialConfig,
|
|
4136
4171
|
});
|
|
4137
4172
|
|
|
4138
4173
|
await embed1.preRender();
|
|
@@ -4143,6 +4178,24 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
4143
4178
|
mockProcessTrigger.mockClear();
|
|
4144
4179
|
mockProcessTrigger.mockResolvedValue({});
|
|
4145
4180
|
|
|
4181
|
+
return embed1;
|
|
4182
|
+
};
|
|
4183
|
+
|
|
4184
|
+
beforeAll(() => {
|
|
4185
|
+
init({
|
|
4186
|
+
thoughtSpotHost: 'tshost',
|
|
4187
|
+
authType: AuthType.None,
|
|
4188
|
+
});
|
|
4189
|
+
});
|
|
4190
|
+
|
|
4191
|
+
afterEach(() => {
|
|
4192
|
+
const rootEle = document.getElementById('myRoot');
|
|
4193
|
+
rootEle?.remove();
|
|
4194
|
+
});
|
|
4195
|
+
|
|
4196
|
+
test('should trigger UpdateEmbedParams when showPreRender connects to existing prerendered component', async () => {
|
|
4197
|
+
await setupPreRenderTest('update-params-test', { liveboardId: 'original-lb' });
|
|
4198
|
+
|
|
4146
4199
|
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4147
4200
|
preRenderId: 'update-params-test',
|
|
4148
4201
|
liveboardId: 'updated-lb',
|
|
@@ -4151,14 +4204,148 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
4151
4204
|
embed2.showPreRender();
|
|
4152
4205
|
|
|
4153
4206
|
await executeAfterWait(() => {
|
|
4154
|
-
expect(mockProcessTrigger).
|
|
4207
|
+
expect(mockProcessTrigger).toHaveBeenLastCalledWith(
|
|
4155
4208
|
expect.any(Object),
|
|
4156
4209
|
HostEvent.UpdateEmbedParams,
|
|
4157
4210
|
expect.any(String),
|
|
4158
4211
|
expect.objectContaining({
|
|
4159
4212
|
liveboardId: 'updated-lb',
|
|
4160
4213
|
}),
|
|
4214
|
+
undefined,
|
|
4161
4215
|
);
|
|
4162
4216
|
});
|
|
4163
4217
|
});
|
|
4218
|
+
|
|
4219
|
+
test('should trigger UpdateEmbedParams with runtime filters and visible vizs', async () => {
|
|
4220
|
+
await setupPreRenderTest('url-param-test', { liveboardId: 'original-lb' });
|
|
4221
|
+
|
|
4222
|
+
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4223
|
+
preRenderId: 'url-param-test',
|
|
4224
|
+
liveboardId: 'original-lb',
|
|
4225
|
+
visibleVizs: ['viz-1'],
|
|
4226
|
+
runtimeFilters: [
|
|
4227
|
+
{
|
|
4228
|
+
columnName: 'Color',
|
|
4229
|
+
operator: RuntimeFilterOp.IN,
|
|
4230
|
+
values: ['red', 'blue'],
|
|
4231
|
+
},
|
|
4232
|
+
{
|
|
4233
|
+
columnName: 'Region',
|
|
4234
|
+
operator: RuntimeFilterOp.EQ,
|
|
4235
|
+
values: ['North'],
|
|
4236
|
+
},
|
|
4237
|
+
],
|
|
4238
|
+
});
|
|
4239
|
+
|
|
4240
|
+
embed2.showPreRender();
|
|
4241
|
+
|
|
4242
|
+
await executeAfterWait(() => {
|
|
4243
|
+
expect(mockProcessTrigger).toHaveBeenLastCalledWith(
|
|
4244
|
+
expect.any(Object),
|
|
4245
|
+
HostEvent.UpdateEmbedParams,
|
|
4246
|
+
expect.any(String),
|
|
4247
|
+
expect.objectContaining({
|
|
4248
|
+
liveboardId: 'original-lb',
|
|
4249
|
+
visibleVizs: ['viz-1'],
|
|
4250
|
+
runtimeFilters: [
|
|
4251
|
+
{
|
|
4252
|
+
columnName: 'Color',
|
|
4253
|
+
operator: RuntimeFilterOp.IN,
|
|
4254
|
+
values: ['red', 'blue'],
|
|
4255
|
+
},
|
|
4256
|
+
{
|
|
4257
|
+
columnName: 'Region',
|
|
4258
|
+
operator: RuntimeFilterOp.EQ,
|
|
4259
|
+
values: ['North'],
|
|
4260
|
+
},
|
|
4261
|
+
],
|
|
4262
|
+
}),
|
|
4263
|
+
undefined,
|
|
4264
|
+
);
|
|
4265
|
+
});
|
|
4266
|
+
});
|
|
4267
|
+
|
|
4268
|
+
test('should trigger UpdateEmbedParams with updated config', async () => {
|
|
4269
|
+
await setupPreRenderTest('preserve-config-test', {
|
|
4270
|
+
liveboardId: 'original-lb',
|
|
4271
|
+
runtimeFilters: [
|
|
4272
|
+
{
|
|
4273
|
+
columnName: 'Color',
|
|
4274
|
+
operator: RuntimeFilterOp.IN,
|
|
4275
|
+
values: ['red', 'blue'],
|
|
4276
|
+
},
|
|
4277
|
+
],
|
|
4278
|
+
});
|
|
4279
|
+
|
|
4280
|
+
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4281
|
+
preRenderId: 'preserve-config-test',
|
|
4282
|
+
liveboardId: 'original-lb',
|
|
4283
|
+
visibleVizs: ['viz-1', 'viz-2'],
|
|
4284
|
+
runtimeFilters: [
|
|
4285
|
+
{
|
|
4286
|
+
columnName: 'Region',
|
|
4287
|
+
operator: RuntimeFilterOp.EQ,
|
|
4288
|
+
values: ['North'],
|
|
4289
|
+
},
|
|
4290
|
+
],
|
|
4291
|
+
});
|
|
4292
|
+
|
|
4293
|
+
embed2.showPreRender();
|
|
4294
|
+
|
|
4295
|
+
await executeAfterWait(() => {
|
|
4296
|
+
expect(mockProcessTrigger).toHaveBeenLastCalledWith(
|
|
4297
|
+
expect.any(Object),
|
|
4298
|
+
HostEvent.UpdateEmbedParams,
|
|
4299
|
+
expect.any(String),
|
|
4300
|
+
expect.objectContaining({
|
|
4301
|
+
liveboardId: 'original-lb',
|
|
4302
|
+
visibleVizs: ['viz-1', 'viz-2'],
|
|
4303
|
+
runtimeFilters: [
|
|
4304
|
+
{
|
|
4305
|
+
columnName: 'Region',
|
|
4306
|
+
operator: RuntimeFilterOp.EQ,
|
|
4307
|
+
values: ['North'],
|
|
4308
|
+
},
|
|
4309
|
+
],
|
|
4310
|
+
}),
|
|
4311
|
+
undefined,
|
|
4312
|
+
);
|
|
4313
|
+
});
|
|
4314
|
+
});
|
|
4315
|
+
|
|
4316
|
+
test('should handle error when getUpdateEmbedParamsObject fails during showPreRender', async () => {
|
|
4317
|
+
await setupPreRenderTest('error-test', { liveboardId: 'original-lb' });
|
|
4318
|
+
|
|
4319
|
+
const handleErrorSpy = jest.spyOn(LiveboardEmbed.prototype as any, 'handleError');
|
|
4320
|
+
|
|
4321
|
+
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4322
|
+
preRenderId: 'error-test',
|
|
4323
|
+
liveboardId: 'updated-lb',
|
|
4324
|
+
});
|
|
4325
|
+
|
|
4326
|
+
const mockError = new Error('Failed to get params');
|
|
4327
|
+
jest.spyOn(embed2 as any, 'getUpdateEmbedParamsObject').mockRejectedValue(mockError);
|
|
4328
|
+
|
|
4329
|
+
embed2.showPreRender();
|
|
4330
|
+
|
|
4331
|
+
await executeAfterWait(() => {
|
|
4332
|
+
expect(handleErrorSpy).toHaveBeenCalledWith(
|
|
4333
|
+
expect.objectContaining({
|
|
4334
|
+
errorType: ErrorDetailsTypes.API,
|
|
4335
|
+
message: 'Failed to get params',
|
|
4336
|
+
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
4337
|
+
error: 'Failed to get params',
|
|
4338
|
+
}),
|
|
4339
|
+
);
|
|
4340
|
+
|
|
4341
|
+
expect(mockProcessTrigger).not.toHaveBeenCalledWith(
|
|
4342
|
+
expect.any(Object),
|
|
4343
|
+
HostEvent.UpdateEmbedParams,
|
|
4344
|
+
expect.any(String),
|
|
4345
|
+
expect.any(Object),
|
|
4346
|
+
);
|
|
4347
|
+
});
|
|
4348
|
+
|
|
4349
|
+
handleErrorSpy.mockRestore();
|
|
4350
|
+
});
|
|
4164
4351
|
});
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
EmbedErrorDetailsEvent,
|
|
61
61
|
ErrorDetailsTypes,
|
|
62
62
|
EmbedErrorCodes,
|
|
63
|
+
ContextType,
|
|
63
64
|
} from '../types';
|
|
64
65
|
import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
|
|
65
66
|
import { processEventData, processAuthFailure } from '../utils/processData';
|
|
@@ -75,6 +76,7 @@ import { ERROR_MESSAGE } from '../errors';
|
|
|
75
76
|
import { getPreauthInfo } from '../utils/sessionInfoService';
|
|
76
77
|
import { HostEventClient } from './hostEventClient/host-event-client';
|
|
77
78
|
import { getInterceptInitData, handleInterceptEvent, processApiInterceptResponse, processLegacyInterceptResponse } from '../api-intercept';
|
|
79
|
+
import { getHostEventsConfig } from '../utils';
|
|
78
80
|
|
|
79
81
|
const { version } = pkgInfo;
|
|
80
82
|
|
|
@@ -480,6 +482,7 @@ export class TsEmbed {
|
|
|
480
482
|
hiddenListColumns: this.viewConfig.hiddenListColumns || [],
|
|
481
483
|
customActions: customActionsResult.actions,
|
|
482
484
|
...getInterceptInitData(this.viewConfig),
|
|
485
|
+
...getHostEventsConfig(this.viewConfig),
|
|
483
486
|
};
|
|
484
487
|
|
|
485
488
|
return baseInitData;
|
|
@@ -592,9 +595,11 @@ export class TsEmbed {
|
|
|
592
595
|
return `${basePath}#`;
|
|
593
596
|
}
|
|
594
597
|
|
|
595
|
-
protected getUpdateEmbedParamsObject() {
|
|
598
|
+
protected async getUpdateEmbedParamsObject() {
|
|
596
599
|
let queryParams = this.getEmbedParamsObject();
|
|
597
|
-
|
|
600
|
+
const appInitData = await this.getAppInitData();
|
|
601
|
+
queryParams = { ...this.viewConfig, ...queryParams, ...appInitData };
|
|
602
|
+
|
|
598
603
|
return queryParams;
|
|
599
604
|
}
|
|
600
605
|
|
|
@@ -957,6 +962,8 @@ export class TsEmbed {
|
|
|
957
962
|
preRenderWrapper.id = preRenderIds.wrapper;
|
|
958
963
|
const initialPreRenderWrapperStyle = {
|
|
959
964
|
position: 'absolute',
|
|
965
|
+
top: '0',
|
|
966
|
+
left: '0',
|
|
960
967
|
width: '100vw',
|
|
961
968
|
height: '100vh',
|
|
962
969
|
};
|
|
@@ -1343,10 +1350,11 @@ export class TsEmbed {
|
|
|
1343
1350
|
* @param {any} data The payload to send with the message
|
|
1344
1351
|
* @returns A promise that resolves with the response from the embedded app
|
|
1345
1352
|
*/
|
|
1346
|
-
public async trigger<HostEventT extends HostEvent, PayloadT>(
|
|
1353
|
+
public async trigger<HostEventT extends HostEvent, PayloadT, ContextT extends ContextType>(
|
|
1347
1354
|
messageType: HostEventT,
|
|
1348
1355
|
data: TriggerPayload<PayloadT, HostEventT> = {} as any,
|
|
1349
|
-
|
|
1356
|
+
context?: ContextT,
|
|
1357
|
+
): Promise<TriggerResponse<PayloadT, HostEventT, ContextT>> {
|
|
1350
1358
|
uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`);
|
|
1351
1359
|
|
|
1352
1360
|
if (!this.isRendered) {
|
|
@@ -1379,7 +1387,7 @@ export class TsEmbed {
|
|
|
1379
1387
|
}
|
|
1380
1388
|
|
|
1381
1389
|
// send an empty object, this is needed for liveboard default handlers
|
|
1382
|
-
return this.hostEventClient.triggerHostEvent(messageType, data);
|
|
1390
|
+
return this.hostEventClient.triggerHostEvent(messageType, data, context);
|
|
1383
1391
|
}
|
|
1384
1392
|
|
|
1385
1393
|
/**
|
|
@@ -1421,6 +1429,20 @@ export class TsEmbed {
|
|
|
1421
1429
|
return this.render();
|
|
1422
1430
|
}
|
|
1423
1431
|
|
|
1432
|
+
/**
|
|
1433
|
+
* Get the current context of the embedded TS component.
|
|
1434
|
+
* @returns The current context object containing the page type and object ids.
|
|
1435
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
1436
|
+
*/
|
|
1437
|
+
public async getCurrentContext(): Promise<any> {
|
|
1438
|
+
return new Promise((resolve) => {
|
|
1439
|
+
this.executeAfterEmbedContainerLoaded(async () => {
|
|
1440
|
+
const context = await this.trigger(HostEvent.GetPageContext, {});
|
|
1441
|
+
resolve(context);
|
|
1442
|
+
});
|
|
1443
|
+
});
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1424
1446
|
/**
|
|
1425
1447
|
* Creates the preRender shell
|
|
1426
1448
|
* @param showPreRenderByDefault - Show the preRender after render, hidden by default
|
|
@@ -1574,8 +1596,19 @@ export class TsEmbed {
|
|
|
1574
1596
|
}
|
|
1575
1597
|
this.validatePreRenderViewConfig(this.viewConfig);
|
|
1576
1598
|
logger.debug('triggering UpdateEmbedParams', this.viewConfig);
|
|
1577
|
-
this.executeAfterEmbedContainerLoaded(() => {
|
|
1578
|
-
|
|
1599
|
+
this.executeAfterEmbedContainerLoaded(async () => {
|
|
1600
|
+
try {
|
|
1601
|
+
const params = await this.getUpdateEmbedParamsObject();
|
|
1602
|
+
this.trigger(HostEvent.UpdateEmbedParams, params);
|
|
1603
|
+
} catch (error) {
|
|
1604
|
+
logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
1605
|
+
this.handleError({
|
|
1606
|
+
errorType: ErrorDetailsTypes.API,
|
|
1607
|
+
message: error?.message || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
1608
|
+
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
1609
|
+
error: error?.message || error,
|
|
1610
|
+
});
|
|
1611
|
+
}
|
|
1579
1612
|
});
|
|
1580
1613
|
}
|
|
1581
1614
|
|
|
@@ -1598,7 +1631,7 @@ export class TsEmbed {
|
|
|
1598
1631
|
}
|
|
1599
1632
|
}
|
|
1600
1633
|
|
|
1601
|
-
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
|
|
1634
|
+
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events', 'overflow']);
|
|
1602
1635
|
|
|
1603
1636
|
this.subscribeToEvents();
|
|
1604
1637
|
|
|
@@ -1647,7 +1680,10 @@ export class TsEmbed {
|
|
|
1647
1680
|
opacity: '0',
|
|
1648
1681
|
pointerEvents: 'none',
|
|
1649
1682
|
zIndex: '-1000',
|
|
1650
|
-
position: 'absolute
|
|
1683
|
+
position: 'absolute',
|
|
1684
|
+
top: '0',
|
|
1685
|
+
left: '0',
|
|
1686
|
+
overflow: 'hidden',
|
|
1651
1687
|
};
|
|
1652
1688
|
setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
|
|
1653
1689
|
|
package/src/errors.ts
CHANGED
|
@@ -28,6 +28,7 @@ export const ERROR_MESSAGE = {
|
|
|
28
28
|
LOGIN_FAILED: 'Login failed',
|
|
29
29
|
ERROR_PARSING_API_INTERCEPT_BODY: 'Error parsing api intercept body',
|
|
30
30
|
SSR_ENVIRONMENT_ERROR: 'SSR environment detected. This function cannot be called in SSR environment.',
|
|
31
|
+
UPDATE_PARAMS_FAILED: 'Failed to update embed parameters',
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
export const CUSTOM_ACTIONS_ERROR_MESSAGE = {
|
package/src/index.ts
CHANGED
|
@@ -66,6 +66,9 @@ import {
|
|
|
66
66
|
CustomActionsPosition,
|
|
67
67
|
CustomActionTarget,
|
|
68
68
|
InterceptedApiType,
|
|
69
|
+
EmbedErrorCodes,
|
|
70
|
+
ErrorDetailsTypes,
|
|
71
|
+
ContextType,
|
|
69
72
|
} from './types';
|
|
70
73
|
import { CustomCssVariables } from './css-variables';
|
|
71
74
|
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
@@ -119,6 +122,7 @@ export {
|
|
|
119
122
|
RuntimeFilterOp,
|
|
120
123
|
EmbedEvent,
|
|
121
124
|
HostEvent,
|
|
125
|
+
ContextType,
|
|
122
126
|
DataSourceVisualMode,
|
|
123
127
|
Action,
|
|
124
128
|
ContextMenuTriggerOptions,
|
|
@@ -156,6 +160,8 @@ export {
|
|
|
156
160
|
CustomActionsPosition,
|
|
157
161
|
CustomActionTarget,
|
|
158
162
|
InterceptedApiType,
|
|
163
|
+
EmbedErrorCodes,
|
|
164
|
+
ErrorDetailsTypes,
|
|
159
165
|
};
|
|
160
166
|
|
|
161
167
|
export { resetCachedAuthToken } from './authToken';
|