@thoughtspot/visual-embed-sdk 1.28.0-preRender → 1.28.0

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 (216) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +3 -4
  3. package/cjs/src/auth.d.ts +16 -1
  4. package/cjs/src/auth.d.ts.map +1 -1
  5. package/cjs/src/auth.js +7 -3
  6. package/cjs/src/auth.js.map +1 -1
  7. package/cjs/src/auth.spec.d.ts.map +1 -1
  8. package/cjs/src/auth.spec.js +9 -0
  9. package/cjs/src/auth.spec.js.map +1 -1
  10. package/cjs/src/embed/app.d.ts +150 -7
  11. package/cjs/src/embed/app.d.ts.map +1 -1
  12. package/cjs/src/embed/app.js +5 -5
  13. package/cjs/src/embed/app.js.map +1 -1
  14. package/cjs/src/embed/app.spec.js +19 -1
  15. package/cjs/src/embed/app.spec.js.map +1 -1
  16. package/cjs/src/embed/base.d.ts +1 -1
  17. package/cjs/src/embed/base.d.ts.map +1 -1
  18. package/cjs/src/embed/base.js +5 -8
  19. package/cjs/src/embed/base.js.map +1 -1
  20. package/cjs/src/embed/base.spec.js +1 -1
  21. package/cjs/src/embed/base.spec.js.map +1 -1
  22. package/cjs/src/embed/embed.spec.js +0 -15
  23. package/cjs/src/embed/embed.spec.js.map +1 -1
  24. package/cjs/src/embed/liveboard.d.ts +113 -4
  25. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  26. package/cjs/src/embed/liveboard.js +2 -2
  27. package/cjs/src/embed/liveboard.js.map +1 -1
  28. package/cjs/src/embed/liveboard.spec.js +20 -1
  29. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  30. package/cjs/src/embed/pinboard.spec.js +20 -1
  31. package/cjs/src/embed/pinboard.spec.js.map +1 -1
  32. package/cjs/src/embed/sage.d.ts +1 -1
  33. package/cjs/src/embed/sage.d.ts.map +1 -1
  34. package/cjs/src/embed/sage.js +2 -2
  35. package/cjs/src/embed/sage.js.map +1 -1
  36. package/cjs/src/embed/search-bar.d.ts +37 -6
  37. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  38. package/cjs/src/embed/search-bar.js +2 -2
  39. package/cjs/src/embed/search-bar.js.map +1 -1
  40. package/cjs/src/embed/search.d.ts +85 -2
  41. package/cjs/src/embed/search.d.ts.map +1 -1
  42. package/cjs/src/embed/search.js +6 -6
  43. package/cjs/src/embed/search.js.map +1 -1
  44. package/cjs/src/embed/search.spec.js +25 -1
  45. package/cjs/src/embed/search.spec.js.map +1 -1
  46. package/cjs/src/embed/ts-embed-trigger.spec.d.ts +2 -0
  47. package/cjs/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
  48. package/cjs/src/embed/ts-embed-trigger.spec.js +34 -0
  49. package/cjs/src/embed/ts-embed-trigger.spec.js.map +1 -0
  50. package/cjs/src/embed/ts-embed.d.ts +2 -2
  51. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  52. package/cjs/src/embed/ts-embed.js +18 -13
  53. package/cjs/src/embed/ts-embed.js.map +1 -1
  54. package/cjs/src/embed/ts-embed.spec.js +64 -25
  55. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  56. package/cjs/src/index.d.ts +2 -1
  57. package/cjs/src/index.d.ts.map +1 -1
  58. package/cjs/src/index.js +3 -1
  59. package/cjs/src/index.js.map +1 -1
  60. package/cjs/src/react/index.spec.js +13 -1
  61. package/cjs/src/react/index.spec.js.map +1 -1
  62. package/cjs/src/test/test-utils.d.ts +1 -0
  63. package/cjs/src/test/test-utils.d.ts.map +1 -1
  64. package/cjs/src/test/test-utils.js +10 -1
  65. package/cjs/src/test/test-utils.js.map +1 -1
  66. package/cjs/src/tokenizedFetch.d.ts +9 -0
  67. package/cjs/src/tokenizedFetch.d.ts.map +1 -1
  68. package/cjs/src/tokenizedFetch.js +9 -0
  69. package/cjs/src/tokenizedFetch.js.map +1 -1
  70. package/cjs/src/types.d.ts +279 -43
  71. package/cjs/src/types.d.ts.map +1 -1
  72. package/cjs/src/types.js +95 -20
  73. package/cjs/src/types.js.map +1 -1
  74. package/cjs/src/utils/authService/authService.d.ts.map +1 -1
  75. package/cjs/src/utils/authService/authService.js +9 -3
  76. package/cjs/src/utils/authService/authService.js.map +1 -1
  77. package/cjs/src/utils/authService/authService.spec.js +22 -0
  78. package/cjs/src/utils/authService/authService.spec.js.map +1 -1
  79. package/dist/src/auth.d.ts +16 -1
  80. package/dist/src/auth.d.ts.map +1 -1
  81. package/dist/src/auth.spec.d.ts.map +1 -1
  82. package/dist/src/embed/app.d.ts +150 -7
  83. package/dist/src/embed/app.d.ts.map +1 -1
  84. package/dist/src/embed/base.d.ts +1 -1
  85. package/dist/src/embed/base.d.ts.map +1 -1
  86. package/dist/src/embed/liveboard.d.ts +113 -4
  87. package/dist/src/embed/liveboard.d.ts.map +1 -1
  88. package/dist/src/embed/sage.d.ts +1 -1
  89. package/dist/src/embed/sage.d.ts.map +1 -1
  90. package/dist/src/embed/search-bar.d.ts +37 -6
  91. package/dist/src/embed/search-bar.d.ts.map +1 -1
  92. package/dist/src/embed/search.d.ts +85 -2
  93. package/dist/src/embed/search.d.ts.map +1 -1
  94. package/dist/src/embed/ts-embed-trigger.spec.d.ts +2 -0
  95. package/dist/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
  96. package/dist/src/embed/ts-embed.d.ts +2 -2
  97. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  98. package/dist/src/index.d.ts +2 -1
  99. package/dist/src/index.d.ts.map +1 -1
  100. package/dist/src/test/test-utils.d.ts +1 -0
  101. package/dist/src/test/test-utils.d.ts.map +1 -1
  102. package/dist/src/tokenizedFetch.d.ts +9 -0
  103. package/dist/src/tokenizedFetch.d.ts.map +1 -1
  104. package/dist/src/types.d.ts +279 -43
  105. package/dist/src/types.d.ts.map +1 -1
  106. package/dist/src/utils/authService/authService.d.ts.map +1 -1
  107. package/dist/tsembed-react.es.js +1543 -1445
  108. package/dist/tsembed-react.js +6614 -6529
  109. package/dist/tsembed.es.js +1921 -1826
  110. package/dist/tsembed.js +15342 -15259
  111. package/dist/visual-embed-sdk-react-full.d.ts +692 -64
  112. package/dist/visual-embed-sdk-react.d.ts +692 -64
  113. package/dist/visual-embed-sdk.d.ts +692 -64
  114. package/lib/package.json +3 -4
  115. package/lib/src/auth.d.ts +16 -1
  116. package/lib/src/auth.d.ts.map +1 -1
  117. package/lib/src/auth.js +8 -4
  118. package/lib/src/auth.js.map +1 -1
  119. package/lib/src/auth.spec.d.ts.map +1 -1
  120. package/lib/src/auth.spec.js +9 -0
  121. package/lib/src/auth.spec.js.map +1 -1
  122. package/lib/src/embed/app.d.ts +150 -7
  123. package/lib/src/embed/app.d.ts.map +1 -1
  124. package/lib/src/embed/app.js +5 -5
  125. package/lib/src/embed/app.js.map +1 -1
  126. package/lib/src/embed/app.spec.js +19 -1
  127. package/lib/src/embed/app.spec.js.map +1 -1
  128. package/lib/src/embed/base.d.ts +1 -1
  129. package/lib/src/embed/base.d.ts.map +1 -1
  130. package/lib/src/embed/base.js +5 -8
  131. package/lib/src/embed/base.js.map +1 -1
  132. package/lib/src/embed/base.spec.js +2 -2
  133. package/lib/src/embed/base.spec.js.map +1 -1
  134. package/lib/src/embed/embed.spec.js +2 -17
  135. package/lib/src/embed/embed.spec.js.map +1 -1
  136. package/lib/src/embed/liveboard.d.ts +113 -4
  137. package/lib/src/embed/liveboard.d.ts.map +1 -1
  138. package/lib/src/embed/liveboard.js +3 -3
  139. package/lib/src/embed/liveboard.js.map +1 -1
  140. package/lib/src/embed/liveboard.spec.js +20 -1
  141. package/lib/src/embed/liveboard.spec.js.map +1 -1
  142. package/lib/src/embed/pinboard.spec.js +20 -1
  143. package/lib/src/embed/pinboard.spec.js.map +1 -1
  144. package/lib/src/embed/sage.d.ts +1 -1
  145. package/lib/src/embed/sage.d.ts.map +1 -1
  146. package/lib/src/embed/sage.js +2 -2
  147. package/lib/src/embed/sage.js.map +1 -1
  148. package/lib/src/embed/search-bar.d.ts +37 -6
  149. package/lib/src/embed/search-bar.d.ts.map +1 -1
  150. package/lib/src/embed/search-bar.js +2 -2
  151. package/lib/src/embed/search-bar.js.map +1 -1
  152. package/lib/src/embed/search.d.ts +85 -2
  153. package/lib/src/embed/search.d.ts.map +1 -1
  154. package/lib/src/embed/search.js +7 -7
  155. package/lib/src/embed/search.js.map +1 -1
  156. package/lib/src/embed/search.spec.js +25 -1
  157. package/lib/src/embed/search.spec.js.map +1 -1
  158. package/lib/src/embed/ts-embed-trigger.spec.d.ts +2 -0
  159. package/lib/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
  160. package/lib/src/embed/ts-embed-trigger.spec.js +32 -0
  161. package/lib/src/embed/ts-embed-trigger.spec.js.map +1 -0
  162. package/lib/src/embed/ts-embed.d.ts +2 -2
  163. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  164. package/lib/src/embed/ts-embed.js +21 -16
  165. package/lib/src/embed/ts-embed.js.map +1 -1
  166. package/lib/src/embed/ts-embed.spec.js +57 -18
  167. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  168. package/lib/src/index.d.ts +2 -1
  169. package/lib/src/index.d.ts.map +1 -1
  170. package/lib/src/index.js +2 -1
  171. package/lib/src/index.js.map +1 -1
  172. package/lib/src/react/index.spec.js +13 -1
  173. package/lib/src/react/index.spec.js.map +1 -1
  174. package/lib/src/test/test-utils.d.ts +1 -0
  175. package/lib/src/test/test-utils.d.ts.map +1 -1
  176. package/lib/src/test/test-utils.js +8 -0
  177. package/lib/src/test/test-utils.js.map +1 -1
  178. package/lib/src/tokenizedFetch.d.ts +9 -0
  179. package/lib/src/tokenizedFetch.d.ts.map +1 -1
  180. package/lib/src/tokenizedFetch.js +9 -0
  181. package/lib/src/tokenizedFetch.js.map +1 -1
  182. package/lib/src/types.d.ts +279 -43
  183. package/lib/src/types.d.ts.map +1 -1
  184. package/lib/src/types.js +95 -20
  185. package/lib/src/types.js.map +1 -1
  186. package/lib/src/utils/authService/authService.d.ts.map +1 -1
  187. package/lib/src/utils/authService/authService.js +9 -3
  188. package/lib/src/utils/authService/authService.js.map +1 -1
  189. package/lib/src/utils/authService/authService.spec.js +23 -1
  190. package/lib/src/utils/authService/authService.spec.js.map +1 -1
  191. package/lib/src/visual-embed-sdk.d.ts +699 -68
  192. package/package.json +3 -4
  193. package/src/auth.spec.ts +10 -0
  194. package/src/auth.ts +27 -8
  195. package/src/embed/app.spec.ts +24 -1
  196. package/src/embed/app.ts +154 -13
  197. package/src/embed/base.spec.ts +3 -3
  198. package/src/embed/base.ts +13 -17
  199. package/src/embed/embed.spec.ts +0 -18
  200. package/src/embed/liveboard.spec.ts +24 -1
  201. package/src/embed/liveboard.ts +121 -15
  202. package/src/embed/pinboard.spec.ts +24 -1
  203. package/src/embed/sage.ts +2 -2
  204. package/src/embed/search-bar.tsx +38 -7
  205. package/src/embed/search.spec.ts +29 -1
  206. package/src/embed/search.ts +93 -9
  207. package/src/embed/ts-embed-trigger.spec.ts +39 -0
  208. package/src/embed/ts-embed.spec.ts +71 -30
  209. package/src/embed/ts-embed.ts +48 -45
  210. package/src/index.ts +2 -0
  211. package/src/react/index.spec.tsx +30 -0
  212. package/src/test/test-utils.ts +9 -0
  213. package/src/tokenizedFetch.ts +9 -0
  214. package/src/types.ts +288 -50
  215. package/src/utils/authService/authService.spec.ts +31 -4
  216. package/src/utils/authService/authService.ts +14 -13
@@ -1,38 +1,39 @@
1
1
  /* eslint-disable dot-notation */
2
+ import * as authInstance from '../auth';
2
3
  import { resetCachedAuthToken } from '../authToken';
4
+ import * as config from '../config';
3
5
  import {
6
+ AppEmbed,
4
7
  AuthType,
5
- init,
6
8
  EmbedEvent,
7
- SearchEmbed,
8
- PinboardEmbed,
9
- LiveboardViewConfig,
10
- AppEmbed,
11
9
  LiveboardEmbed,
10
+ LiveboardViewConfig,
11
+ PinboardEmbed,
12
+ SearchEmbed,
13
+ init,
12
14
  } from '../index';
15
+ import * as mixpanelInstance from '../mixpanel-service';
16
+ import { MIXPANEL_EVENT } from '../mixpanel-service';
13
17
  import {
14
- Action, HomeLeftNavItem, RuntimeFilter, RuntimeFilterOp, HomepageModule,
15
- } from '../types';
16
- import {
18
+ createRootEleForEmbed,
19
+ defaultParamsForPinboardEmbed,
17
20
  executeAfterWait,
21
+ expectUrlMatchesWithParams,
18
22
  getDocumentBody,
19
23
  getIFrameEl,
20
24
  getIFrameSrc,
21
25
  getRootEl,
26
+ mockMessageChannel,
22
27
  postMessageToParent,
23
- defaultParamsForPinboardEmbed,
24
28
  waitFor,
25
- expectUrlMatchesWithParams,
26
- mockMessageChannel,
27
29
  } from '../test/test-utils';
28
- import * as config from '../config';
29
- import * as tsEmbedInstance from './ts-embed';
30
- import * as mixpanelInstance from '../mixpanel-service';
31
- import * as authInstance from '../auth';
32
- import * as baseInstance from './base';
33
- import { MIXPANEL_EVENT } from '../mixpanel-service';
30
+ import {
31
+ Action, HomeLeftNavItem, HomepageModule, RuntimeFilter, RuntimeFilterOp,
32
+ } from '../types';
34
33
  import * as authService from '../utils/authService/authService';
35
34
  import { logger } from '../utils/logger';
35
+ import * as baseInstance from './base';
36
+ import * as tsEmbedInstance from './ts-embed';
36
37
 
37
38
  const defaultViewConfig = {
38
39
  frameParams: {
@@ -47,15 +48,6 @@ const tabId2 = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
47
48
  const thoughtSpotHost = 'tshost';
48
49
  const defaultParamsPost = '';
49
50
 
50
- const createRootEleForEmbed = () => {
51
- const rootEle = document.createElement('div');
52
- rootEle.id = 'myRoot';
53
- const tsEmbedDiv = document.createElement('div');
54
- tsEmbedDiv.id = 'tsEmbedDiv';
55
- rootEle.appendChild(tsEmbedDiv);
56
- document.body.appendChild(rootEle);
57
- };
58
-
59
51
  beforeAll(() => {
60
52
  spyOn(window, 'alert');
61
53
  });
@@ -317,6 +309,46 @@ describe('Unit test case for ts embed', () => {
317
309
  });
318
310
  });
319
311
 
312
+ test('Runtime filters from view Config should be part of app_init payload when excludeRuntimeFiltersfromURL is undefined', async () => {
313
+ const mockEmbedEventPayload = {
314
+ type: EmbedEvent.APP_INIT,
315
+ data: {},
316
+ };
317
+ const mockRuntimeFilters: RuntimeFilter[] = [
318
+ {
319
+ columnName: 'color',
320
+ operator: RuntimeFilterOp.EQ,
321
+ values: ['blue'],
322
+ },
323
+ ];
324
+
325
+ const searchEmbed = new SearchEmbed(getRootEl(), {
326
+ ...defaultViewConfig,
327
+ excludeRuntimeFiltersfromURL: true,
328
+ runtimeFilters: mockRuntimeFilters,
329
+ });
330
+ searchEmbed.render();
331
+ const mockPort: any = {
332
+ postMessage: jest.fn(),
333
+ };
334
+ await executeAfterWait(() => {
335
+ const iframe = getIFrameEl();
336
+ postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
337
+ });
338
+ expect(mockPort.postMessage).toHaveBeenCalledWith({
339
+ type: EmbedEvent.APP_INIT,
340
+ data: {
341
+ customisations,
342
+ authToken: '',
343
+ runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
344
+ hiddenHomeLeftNavItems: [],
345
+ hiddenHomepageModules: [],
346
+ hostConfig: undefined,
347
+ reorderedHomepageModules: [],
348
+ },
349
+ });
350
+ });
351
+
320
352
  test('Runtime filters from view Config should not be part of app_init payload when excludeRuntimeFiltersfromURL is false', async () => {
321
353
  const mockEmbedEventPayload = {
322
354
  type: EmbedEvent.APP_INIT,
@@ -364,7 +396,7 @@ describe('Unit test case for ts embed', () => {
364
396
  };
365
397
  const mockedHiddenHomeLeftNavItems: HomeLeftNavItem[] = [
366
398
  HomeLeftNavItem.Home,
367
- HomeLeftNavItem.Documentation,
399
+ HomeLeftNavItem.MonitorSubscription,
368
400
  ];
369
401
 
370
402
  const searchEmbed = new AppEmbed(getRootEl(), {
@@ -386,7 +418,10 @@ describe('Unit test case for ts embed', () => {
386
418
  authToken: '',
387
419
  hostConfig: undefined,
388
420
  runtimeFilterParams: null,
389
- hiddenHomeLeftNavItems: [HomeLeftNavItem.Home, HomeLeftNavItem.Documentation],
421
+ hiddenHomeLeftNavItems: [
422
+ HomeLeftNavItem.Home,
423
+ HomeLeftNavItem.MonitorSubscription,
424
+ ],
390
425
  hiddenHomepageModules: [],
391
426
  reorderedHomepageModules: [],
392
427
  },
@@ -615,7 +650,10 @@ describe('Unit test case for ts embed', () => {
615
650
  type: EmbedEvent.APP_INIT,
616
651
  data: {},
617
652
  };
618
- const searchEmbed = new SearchEmbed(getRootEl(), { ...defaultViewConfig, preRenderId: 'test' });
653
+ const searchEmbed = new SearchEmbed(getRootEl(), {
654
+ ...defaultViewConfig,
655
+ preRenderId: 'test',
656
+ });
619
657
  searchEmbed.preRender();
620
658
  const mockPort: any = {
621
659
  postMessage: jest.fn(),
@@ -672,7 +710,10 @@ describe('Unit test case for ts embed', () => {
672
710
  type: EmbedEvent.AuthExpire,
673
711
  data: {},
674
712
  };
675
- const searchEmbed = new SearchEmbed(getRootEl(), { ...defaultViewConfig, preRenderId: 'test' });
713
+ const searchEmbed = new SearchEmbed(getRootEl(), {
714
+ ...defaultViewConfig,
715
+ preRenderId: 'test',
716
+ });
676
717
  jest.spyOn(baseInstance, 'notifyAuthFailure');
677
718
  searchEmbed.preRender();
678
719
  const mockPort: any = {
@@ -8,57 +8,54 @@
8
8
  */
9
9
 
10
10
  import isEqual from 'lodash/isEqual';
11
- import { logger } from '../utils/logger';
11
+ import pkgInfo from '../../package.json';
12
+ import { AuthFailureType } from '../auth';
12
13
  import { getAuthenticationToken } from '../authToken';
13
- import { AnswerService } from '../utils/graphql/answerService/answerService';
14
14
  import {
15
- getEncodedQueryParamsString,
16
- getCssDimension,
17
- getOffsetTop,
18
- embedEventStatus,
19
- setAttributes,
20
- getCustomisations,
21
- getRuntimeFilters,
22
- getDOMNode,
23
- getFilterQuery,
24
- getQueryParamString,
25
- getRuntimeParameters,
26
- setStyleProperties,
27
- removeStyleProperties,
28
- isUndefined,
29
- } from '../utils';
30
- import {
31
- getThoughtSpotHost,
32
- URL_MAX_LENGTH,
33
- DEFAULT_EMBED_WIDTH,
34
15
  DEFAULT_EMBED_HEIGHT,
16
+ DEFAULT_EMBED_WIDTH,
17
+ URL_MAX_LENGTH,
18
+ getThoughtSpotHost,
35
19
  getV2BasePath,
36
20
  } from '../config';
21
+ import { MIXPANEL_EVENT, uploadMixpanelEvent } from '../mixpanel-service';
37
22
  import {
23
+ Action,
38
24
  AuthType,
25
+ ContextMenuTriggerOptions,
39
26
  DOMSelector,
40
- HostEvent,
27
+ EmbedConfig,
41
28
  EmbedEvent,
29
+ HostEvent,
42
30
  MessageCallback,
43
- Action,
44
- Param,
45
- EmbedConfig,
46
- MessageOptions,
47
- MessagePayload,
48
31
  MessageCallbackObj,
32
+ MessageOptions,
33
+ Param,
49
34
  ViewConfig,
50
- FrameParams,
51
- ContextMenuTriggerOptions,
52
- RuntimeFilter,
53
35
  } from '../types';
54
- import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
55
- import { processEventData, processAuthFailure } from '../utils/processData';
36
+ import {
37
+ embedEventStatus,
38
+ getCssDimension,
39
+ getCustomisations,
40
+ getDOMNode,
41
+ getEncodedQueryParamsString,
42
+ getFilterQuery,
43
+ getOffsetTop,
44
+ getQueryParamString,
45
+ getRuntimeFilters,
46
+ getRuntimeParameters,
47
+ isUndefined,
48
+ removeStyleProperties,
49
+ setAttributes,
50
+ setStyleProperties,
51
+ } from '../utils';
52
+ import { AnswerService } from '../utils/graphql/answerService/answerService';
53
+ import { logger } from '../utils/logger';
54
+ import { processAuthFailure, processEventData } from '../utils/processData';
56
55
  import { processTrigger } from '../utils/processTrigger';
57
- import pkgInfo from '../../package.json';
58
56
  import {
59
- getAuthPromise, renderInQueue, handleAuth, notifyAuthFailure,
57
+ getAuthPromise, handleAuth, notifyAuthFailure, renderInQueue,
60
58
  } from './base';
61
- import { AuthFailureType } from '../auth';
62
59
  import { getEmbedConfig } from './embedConfig';
63
60
 
64
61
  const { version } = pkgInfo;
@@ -170,7 +167,7 @@ export class TsEmbed {
170
167
  this.thoughtSpotV2Base = getV2BasePath(this.embedConfig);
171
168
  this.eventHandlerMap = new Map();
172
169
  this.isError = false;
173
- this.viewConfig = viewConfig;
170
+ this.viewConfig = { excludeRuntimeFiltersfromURL: true, ...viewConfig };
174
171
  this.shouldEncodeUrlQueryParams = this.embedConfig.shouldEncodeUrlQueryParams;
175
172
  this.registerAppInit();
176
173
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
@@ -518,10 +515,7 @@ export class TsEmbed {
518
515
  const queryParams = this.shouldEncodeUrlQueryParams
519
516
  ? `?base64UrlEncodedFlags=${getEncodedQueryParamsString(queryString)}`
520
517
  : `?${queryString}`;
521
- let host = this.thoughtSpotHost;
522
- if (!isUndefined(this.embedConfig.enableReactShell)) {
523
- host = this.embedConfig.enableReactShell as boolean ? '/v2' : '/v1';
524
- }
518
+ const host = this.thoughtSpotHost;
525
519
  const path = `${host}/${queryParams}#`;
526
520
  return path;
527
521
  }
@@ -559,8 +553,7 @@ export class TsEmbed {
559
553
 
560
554
  const {
561
555
  height: frameHeight,
562
- width: frameWidth,
563
- ...restParams
556
+ width: frameWidth, ...restParams
564
557
  } = this.viewConfig.frameParams || {};
565
558
  const width = getCssDimension(frameWidth || DEFAULT_EMBED_WIDTH);
566
559
  const height = getCssDimension(frameHeight || DEFAULT_EMBED_HEIGHT);
@@ -682,7 +675,7 @@ export class TsEmbed {
682
675
  protected connectPreRendered(): boolean {
683
676
  const preRenderIds = this.getPreRenderIds();
684
677
  this.preRenderWrapper = this.preRenderWrapper
685
- || document.getElementById(preRenderIds.wrapper);
678
+ || document.getElementById(preRenderIds.wrapper);
686
679
 
687
680
  this.preRenderChild = this.preRenderChild || document.getElementById(preRenderIds.child);
688
681
 
@@ -968,6 +961,16 @@ export class TsEmbed {
968
961
  */
969
962
  public trigger(messageType: HostEvent, data: any = {}): Promise<any> {
970
963
  uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`);
964
+
965
+ if (!this.isRendered) {
966
+ this.handleError('Please call render before triggering events');
967
+ return null;
968
+ }
969
+
970
+ if (!messageType) {
971
+ this.handleError('Host event type is undefined');
972
+ return null;
973
+ }
971
974
  return processTrigger(this.iFrame, messageType, this.thoughtSpotHost, data);
972
975
  }
973
976
 
@@ -978,7 +981,7 @@ export class TsEmbed {
978
981
  *
979
982
  * @param args
980
983
  */
981
- public render(): TsEmbed {
984
+ public async render(): Promise<TsEmbed> {
982
985
  this.isRendered = true;
983
986
 
984
987
  return this;
@@ -1236,7 +1239,7 @@ export class V1Embed extends TsEmbed {
1236
1239
 
1237
1240
  constructor(domSelector: DOMSelector, viewConfig: ViewConfig) {
1238
1241
  super(domSelector, viewConfig);
1239
- this.viewConfig = viewConfig;
1242
+ this.viewConfig = { excludeRuntimeFiltersfromURL: true, ...viewConfig };
1240
1243
  }
1241
1244
 
1242
1245
  /**
package/src/index.ts CHANGED
@@ -54,6 +54,7 @@ import { SageEmbed, SageViewConfig } from './embed/sage';
54
54
  import { AnswerService, SessionInterface, UnderlyingDataPoint } from './utils/graphql/answerService/answerService';
55
55
  import { getEmbedConfig } from './embed/embedConfig';
56
56
  import { uploadMixpanelEvent, MIXPANEL_EVENT } from './mixpanel-service';
57
+ import { tokenizedFetch } from './tokenizedFetch';
57
58
 
58
59
  export {
59
60
  init,
@@ -65,6 +66,7 @@ export {
65
66
  exportTMLInput,
66
67
  getEmbedConfig as getInitConfig,
67
68
  getSessionInfo,
69
+ tokenizedFetch,
68
70
  SearchEmbed,
69
71
  SearchBarEmbed,
70
72
  PinboardEmbed,
@@ -135,6 +135,7 @@ describe('React Components', () => {
135
135
  values: [100],
136
136
  },
137
137
  ]}
138
+ excludeRuntimeFiltersfromURL={false}
138
139
  />,
139
140
  );
140
141
 
@@ -199,6 +200,35 @@ describe('React Components', () => {
199
200
  ).toBe(true);
200
201
  expect(containerSibling.querySelector('div')).toBe(null);
201
202
  });
203
+
204
+ it('Should have the correct container element', async () => {
205
+ const { container } = render(
206
+ <LiveboardEmbed liveboardId="abcd" className="def" />,
207
+ );
208
+
209
+ await waitFor(() => getIFrameEl(container));
210
+ expect(container.querySelector('div')).not.toBe(null);
211
+ expect(
212
+ container.querySelector('div').classList.contains('def'),
213
+ ).toBe(true);
214
+
215
+ const { container: containerSibling } = render(
216
+ <LiveboardEmbed
217
+ liveboardId="abcd"
218
+ className="def"
219
+ insertAsSibling={true}
220
+ />,
221
+ );
222
+ await waitFor(() => getIFrameEl(containerSibling));
223
+ expect(containerSibling.querySelector('span')).not.toBe(null);
224
+ expect(containerSibling.querySelector('span').style.position).toBe(
225
+ 'absolute',
226
+ );
227
+ expect(
228
+ getIFrameEl(containerSibling).classList.contains('def'),
229
+ ).toBe(true);
230
+ expect(containerSibling.querySelector('div')).toBe(null);
231
+ });
202
232
  });
203
233
 
204
234
  describe('SearchBarEmbed', () => {
@@ -116,3 +116,12 @@ export const expectUrlMatch = (source: string, target: string) => {
116
116
  const targetUrl = new URL(target);
117
117
  expect(sourceUrl.hash).toBe(targetUrl.hash);
118
118
  };
119
+
120
+ export const createRootEleForEmbed = () => {
121
+ const rootEle = document.createElement('div');
122
+ rootEle.id = 'myRoot';
123
+ const tsEmbedDiv = document.createElement('div');
124
+ tsEmbedDiv.id = 'tsEmbedDiv';
125
+ rootEle.appendChild(tsEmbedDiv);
126
+ document.body.appendChild(rootEle);
127
+ };
@@ -3,6 +3,15 @@ import { getEmbedConfig } from './embed/embedConfig';
3
3
 
4
4
  import { AuthType } from './types';
5
5
 
6
+ /**
7
+ * Fetch wrapper that adds the authentication token to the request.
8
+ * Use this to call the ThoughtSpot APIs when using the visual embed sdk.
9
+ *
10
+ * @param input
11
+ * @param init
12
+ * @version SDK: 1.28.0
13
+ * @group Global methods
14
+ */
6
15
  export const tokenizedFetch: typeof fetch = async (input, init): Promise<Response> => {
7
16
  const embedConfig = getEmbedConfig();
8
17
  if (embedConfig.authType !== AuthType.TrustedAuthTokenCookieless) {