@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.
Files changed (192) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +1 -1
  3. package/cjs/src/embed/app.d.ts +44 -32
  4. package/cjs/src/embed/app.d.ts.map +1 -1
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/conversation.d.ts +7 -0
  7. package/cjs/src/embed/conversation.d.ts.map +1 -1
  8. package/cjs/src/embed/conversation.js +9 -0
  9. package/cjs/src/embed/conversation.js.map +1 -1
  10. package/cjs/src/embed/hostEventClient/contracts.d.ts +20 -3
  11. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  12. package/cjs/src/embed/hostEventClient/contracts.js +6 -1
  13. package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
  14. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +8 -8
  15. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  16. package/cjs/src/embed/hostEventClient/host-event-client.js +18 -18
  17. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  18. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +7 -7
  19. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  20. package/cjs/src/embed/liveboard.d.ts +10 -4
  21. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  22. package/cjs/src/embed/liveboard.js +12 -2
  23. package/cjs/src/embed/liveboard.js.map +1 -1
  24. package/cjs/src/embed/liveboard.spec.js +1 -1
  25. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  26. package/cjs/src/embed/sage.d.ts +7 -0
  27. package/cjs/src/embed/sage.d.ts.map +1 -1
  28. package/cjs/src/embed/sage.js +9 -0
  29. package/cjs/src/embed/sage.js.map +1 -1
  30. package/cjs/src/embed/search-bar.d.ts +7 -0
  31. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  32. package/cjs/src/embed/search-bar.js +9 -0
  33. package/cjs/src/embed/search-bar.js.map +1 -1
  34. package/cjs/src/embed/search.d.ts +7 -0
  35. package/cjs/src/embed/search.d.ts.map +1 -1
  36. package/cjs/src/embed/search.js +9 -0
  37. package/cjs/src/embed/search.js.map +1 -1
  38. package/cjs/src/embed/ts-embed.d.ts +9 -3
  39. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  40. package/cjs/src/embed/ts-embed.js +41 -8
  41. package/cjs/src/embed/ts-embed.js.map +1 -1
  42. package/cjs/src/embed/ts-embed.spec.js +156 -24
  43. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  44. package/cjs/src/errors.d.ts +1 -0
  45. package/cjs/src/errors.d.ts.map +1 -1
  46. package/cjs/src/errors.js +1 -0
  47. package/cjs/src/errors.js.map +1 -1
  48. package/cjs/src/index.d.ts +2 -2
  49. package/cjs/src/index.d.ts.map +1 -1
  50. package/cjs/src/index.js +5 -1
  51. package/cjs/src/index.js.map +1 -1
  52. package/cjs/src/types.d.ts +142 -45
  53. package/cjs/src/types.d.ts.map +1 -1
  54. package/cjs/src/types.js +91 -16
  55. package/cjs/src/types.js.map +1 -1
  56. package/cjs/src/utils/logger.spec.d.ts +20 -5
  57. package/cjs/src/utils/logger.spec.d.ts.map +1 -1
  58. package/cjs/src/utils/processTrigger.d.ts +3 -2
  59. package/cjs/src/utils/processTrigger.d.ts.map +1 -1
  60. package/cjs/src/utils/processTrigger.js +4 -2
  61. package/cjs/src/utils/processTrigger.js.map +1 -1
  62. package/cjs/src/utils.d.ts +5 -1
  63. package/cjs/src/utils.d.ts.map +1 -1
  64. package/cjs/src/utils.js +10 -2
  65. package/cjs/src/utils.js.map +1 -1
  66. package/dist/index-BFdRRz03.js +7371 -0
  67. package/dist/index-BUfrYJ3w.js +7371 -0
  68. package/dist/index-CI6s4VMY.js +7371 -0
  69. package/dist/{index-D0n5LIka.js → index-CWQnMX2L.js} +1 -1
  70. package/dist/index-CaW-1mu5.js +7371 -0
  71. package/dist/index-CcSgNJVi.js +7371 -0
  72. package/dist/index-Djtv-y7A.js +7371 -0
  73. package/dist/index-UY-4yjBN.js +7371 -0
  74. package/dist/src/embed/app.d.ts +44 -32
  75. package/dist/src/embed/app.d.ts.map +1 -1
  76. package/dist/src/embed/conversation.d.ts +7 -0
  77. package/dist/src/embed/conversation.d.ts.map +1 -1
  78. package/dist/src/embed/hostEventClient/contracts.d.ts +20 -3
  79. package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  80. package/dist/src/embed/hostEventClient/host-event-client.d.ts +8 -8
  81. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  82. package/dist/src/embed/liveboard.d.ts +10 -4
  83. package/dist/src/embed/liveboard.d.ts.map +1 -1
  84. package/dist/src/embed/sage.d.ts +7 -0
  85. package/dist/src/embed/sage.d.ts.map +1 -1
  86. package/dist/src/embed/search-bar.d.ts +7 -0
  87. package/dist/src/embed/search-bar.d.ts.map +1 -1
  88. package/dist/src/embed/search.d.ts +7 -0
  89. package/dist/src/embed/search.d.ts.map +1 -1
  90. package/dist/src/embed/ts-embed.d.ts +9 -3
  91. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  92. package/dist/src/errors.d.ts +1 -0
  93. package/dist/src/errors.d.ts.map +1 -1
  94. package/dist/src/index.d.ts +2 -2
  95. package/dist/src/index.d.ts.map +1 -1
  96. package/dist/src/types.d.ts +142 -45
  97. package/dist/src/types.d.ts.map +1 -1
  98. package/dist/src/utils/logger.spec.d.ts +20 -5
  99. package/dist/src/utils/logger.spec.d.ts.map +1 -1
  100. package/dist/src/utils/processTrigger.d.ts +3 -2
  101. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  102. package/dist/src/utils.d.ts +5 -1
  103. package/dist/src/utils.d.ts.map +1 -1
  104. package/dist/tsembed-react.es.js +218 -50
  105. package/dist/tsembed-react.js +217 -49
  106. package/dist/tsembed.es.js +219 -51
  107. package/dist/tsembed.js +244 -76
  108. package/dist/visual-embed-sdk-react-full.d.ts +245 -82
  109. package/dist/visual-embed-sdk-react.d.ts +251 -90
  110. package/dist/visual-embed-sdk.d.ts +298 -92
  111. package/lib/package.json +1 -1
  112. package/lib/src/embed/app.d.ts +44 -32
  113. package/lib/src/embed/app.d.ts.map +1 -1
  114. package/lib/src/embed/app.js.map +1 -1
  115. package/lib/src/embed/conversation.d.ts +7 -0
  116. package/lib/src/embed/conversation.d.ts.map +1 -1
  117. package/lib/src/embed/conversation.js +9 -0
  118. package/lib/src/embed/conversation.js.map +1 -1
  119. package/lib/src/embed/hostEventClient/contracts.d.ts +20 -3
  120. package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  121. package/lib/src/embed/hostEventClient/contracts.js +5 -0
  122. package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
  123. package/lib/src/embed/hostEventClient/host-event-client.d.ts +8 -8
  124. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  125. package/lib/src/embed/hostEventClient/host-event-client.js +18 -18
  126. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  127. package/lib/src/embed/hostEventClient/host-event-client.spec.js +7 -7
  128. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  129. package/lib/src/embed/liveboard.d.ts +10 -4
  130. package/lib/src/embed/liveboard.d.ts.map +1 -1
  131. package/lib/src/embed/liveboard.js +12 -2
  132. package/lib/src/embed/liveboard.js.map +1 -1
  133. package/lib/src/embed/liveboard.spec.js +1 -1
  134. package/lib/src/embed/liveboard.spec.js.map +1 -1
  135. package/lib/src/embed/sage.d.ts +7 -0
  136. package/lib/src/embed/sage.d.ts.map +1 -1
  137. package/lib/src/embed/sage.js +9 -0
  138. package/lib/src/embed/sage.js.map +1 -1
  139. package/lib/src/embed/search-bar.d.ts +7 -0
  140. package/lib/src/embed/search-bar.d.ts.map +1 -1
  141. package/lib/src/embed/search-bar.js +9 -0
  142. package/lib/src/embed/search-bar.js.map +1 -1
  143. package/lib/src/embed/search.d.ts +7 -0
  144. package/lib/src/embed/search.d.ts.map +1 -1
  145. package/lib/src/embed/search.js +9 -0
  146. package/lib/src/embed/search.js.map +1 -1
  147. package/lib/src/embed/ts-embed.d.ts +9 -3
  148. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  149. package/lib/src/embed/ts-embed.js +41 -8
  150. package/lib/src/embed/ts-embed.js.map +1 -1
  151. package/lib/src/embed/ts-embed.spec.js +156 -24
  152. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  153. package/lib/src/errors.d.ts +1 -0
  154. package/lib/src/errors.d.ts.map +1 -1
  155. package/lib/src/errors.js +1 -0
  156. package/lib/src/errors.js.map +1 -1
  157. package/lib/src/index.d.ts +2 -2
  158. package/lib/src/index.d.ts.map +1 -1
  159. package/lib/src/index.js +2 -2
  160. package/lib/src/index.js.map +1 -1
  161. package/lib/src/types.d.ts +142 -45
  162. package/lib/src/types.d.ts.map +1 -1
  163. package/lib/src/types.js +90 -15
  164. package/lib/src/types.js.map +1 -1
  165. package/lib/src/utils/logger.spec.d.ts +20 -5
  166. package/lib/src/utils/logger.spec.d.ts.map +1 -1
  167. package/lib/src/utils/processTrigger.d.ts +3 -2
  168. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  169. package/lib/src/utils/processTrigger.js +4 -2
  170. package/lib/src/utils/processTrigger.js.map +1 -1
  171. package/lib/src/utils.d.ts +5 -1
  172. package/lib/src/utils.d.ts.map +1 -1
  173. package/lib/src/utils.js +8 -1
  174. package/lib/src/utils.js.map +1 -1
  175. package/package.json +1 -1
  176. package/src/embed/app.ts +45 -32
  177. package/src/embed/conversation.ts +11 -0
  178. package/src/embed/hostEventClient/contracts.ts +23 -4
  179. package/src/embed/hostEventClient/host-event-client.spec.ts +7 -1
  180. package/src/embed/hostEventClient/host-event-client.ts +22 -11
  181. package/src/embed/liveboard.spec.ts +1 -1
  182. package/src/embed/liveboard.ts +18 -5
  183. package/src/embed/sage.ts +11 -0
  184. package/src/embed/search-bar.tsx +11 -0
  185. package/src/embed/search.ts +11 -0
  186. package/src/embed/ts-embed.spec.ts +205 -18
  187. package/src/embed/ts-embed.ts +45 -9
  188. package/src/errors.ts +1 -0
  189. package/src/index.ts +6 -0
  190. package/src/types.ts +146 -43
  191. package/src/utils/processTrigger.ts +6 -3
  192. 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.mockRestore();
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).toHaveBeenCalledWith(
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
- beforeAll(() => {
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: 'update-params-test',
4135
- liveboardId: 'original-lb',
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).toHaveBeenCalledWith(
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
  });
@@ -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
- queryParams = { ...this.viewConfig, ...queryParams, ...this.getAppInitData() };
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
- ): Promise<TriggerResponse<PayloadT, HostEventT>> {
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
- this.trigger(HostEvent.UpdateEmbedParams, this.getUpdateEmbedParamsObject());
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';