@thoughtspot/visual-embed-sdk 1.38.0 → 1.39.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 +1 -1
  3. package/cjs/src/embed/app.d.ts +96 -156
  4. package/cjs/src/embed/app.d.ts.map +1 -1
  5. package/cjs/src/embed/app.js +7 -4
  6. package/cjs/src/embed/app.js.map +1 -1
  7. package/cjs/src/embed/app.spec.js +10 -0
  8. package/cjs/src/embed/app.spec.js.map +1 -1
  9. package/cjs/src/embed/bodyless-conversation.d.ts +4 -4
  10. package/cjs/src/embed/bodyless-conversation.d.ts.map +1 -1
  11. package/cjs/src/embed/bodyless-conversation.js +1 -1
  12. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  13. package/cjs/src/embed/conversation.d.ts +22 -11
  14. package/cjs/src/embed/conversation.d.ts.map +1 -1
  15. package/cjs/src/embed/conversation.js +1 -1
  16. package/cjs/src/embed/conversation.js.map +1 -1
  17. package/cjs/src/embed/liveboard.d.ts +110 -167
  18. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  19. package/cjs/src/embed/liveboard.js +25 -11
  20. package/cjs/src/embed/liveboard.js.map +1 -1
  21. package/cjs/src/embed/liveboard.spec.js +11 -0
  22. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  23. package/cjs/src/embed/sage.d.ts +17 -2
  24. package/cjs/src/embed/sage.d.ts.map +1 -1
  25. package/cjs/src/embed/sage.js +2 -0
  26. package/cjs/src/embed/sage.js.map +1 -1
  27. package/cjs/src/embed/search-bar.d.ts +16 -6
  28. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  29. package/cjs/src/embed/search-bar.js.map +1 -1
  30. package/cjs/src/embed/search.d.ts +46 -14
  31. package/cjs/src/embed/search.d.ts.map +1 -1
  32. package/cjs/src/embed/search.js.map +1 -1
  33. package/cjs/src/embed/ts-embed.d.ts +19 -2
  34. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  35. package/cjs/src/embed/ts-embed.js +49 -0
  36. package/cjs/src/embed/ts-embed.js.map +1 -1
  37. package/cjs/src/embed/ts-embed.spec.js +45 -4
  38. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  39. package/cjs/src/index.d.ts +2 -2
  40. package/cjs/src/index.d.ts.map +1 -1
  41. package/cjs/src/index.js +2 -1
  42. package/cjs/src/index.js.map +1 -1
  43. package/cjs/src/react/all-types-export.d.ts +1 -1
  44. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  45. package/cjs/src/react/all-types-export.js +2 -1
  46. package/cjs/src/react/all-types-export.js.map +1 -1
  47. package/cjs/src/react/index.d.ts +1 -1
  48. package/cjs/src/react/index.d.ts.map +1 -1
  49. package/cjs/src/react/index.js +1 -1
  50. package/cjs/src/react/util.d.ts +7 -4
  51. package/cjs/src/react/util.d.ts.map +1 -1
  52. package/cjs/src/react/util.js.map +1 -1
  53. package/cjs/src/types.d.ts +482 -251
  54. package/cjs/src/types.d.ts.map +1 -1
  55. package/cjs/src/types.js +31 -14
  56. package/cjs/src/types.js.map +1 -1
  57. package/cjs/src/utils/graphql/answerService/answerService.d.ts +2 -1
  58. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  59. package/cjs/src/utils/graphql/answerService/answerService.js +2 -1
  60. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
  61. package/cjs/src/utils/processData.d.ts.map +1 -1
  62. package/cjs/src/utils/processData.js +15 -0
  63. package/cjs/src/utils/processData.js.map +1 -1
  64. package/cjs/src/utils/processData.spec.js +15 -0
  65. package/cjs/src/utils/processData.spec.js.map +1 -1
  66. package/cjs/src/utils/processTrigger.d.ts.map +1 -1
  67. package/cjs/src/utils/processTrigger.js +14 -0
  68. package/cjs/src/utils/processTrigger.js.map +1 -1
  69. package/cjs/src/utils/processTrigger.spec.js +54 -0
  70. package/cjs/src/utils/processTrigger.spec.js.map +1 -1
  71. package/cjs/src/utils.d.ts +11 -2
  72. package/cjs/src/utils.d.ts.map +1 -1
  73. package/cjs/src/utils.js +70 -1
  74. package/cjs/src/utils.js.map +1 -1
  75. package/cjs/src/utils.spec.js +85 -0
  76. package/cjs/src/utils.spec.js.map +1 -1
  77. package/dist/{index-BIcnpmMY.js → index-sSREbWM-.js} +1 -1
  78. package/dist/src/embed/app.d.ts +96 -156
  79. package/dist/src/embed/app.d.ts.map +1 -1
  80. package/dist/src/embed/bodyless-conversation.d.ts +4 -4
  81. package/dist/src/embed/bodyless-conversation.d.ts.map +1 -1
  82. package/dist/src/embed/conversation.d.ts +22 -11
  83. package/dist/src/embed/conversation.d.ts.map +1 -1
  84. package/dist/src/embed/liveboard.d.ts +110 -167
  85. package/dist/src/embed/liveboard.d.ts.map +1 -1
  86. package/dist/src/embed/sage.d.ts +17 -2
  87. package/dist/src/embed/sage.d.ts.map +1 -1
  88. package/dist/src/embed/search-bar.d.ts +16 -6
  89. package/dist/src/embed/search-bar.d.ts.map +1 -1
  90. package/dist/src/embed/search.d.ts +46 -14
  91. package/dist/src/embed/search.d.ts.map +1 -1
  92. package/dist/src/embed/ts-embed.d.ts +19 -2
  93. package/dist/src/embed/ts-embed.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/react/all-types-export.d.ts +1 -1
  97. package/dist/src/react/all-types-export.d.ts.map +1 -1
  98. package/dist/src/react/index.d.ts +1 -1
  99. package/dist/src/react/index.d.ts.map +1 -1
  100. package/dist/src/react/util.d.ts +7 -4
  101. package/dist/src/react/util.d.ts.map +1 -1
  102. package/dist/src/types.d.ts +482 -251
  103. package/dist/src/types.d.ts.map +1 -1
  104. package/dist/src/utils/graphql/answerService/answerService.d.ts +2 -1
  105. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  106. package/dist/src/utils/processData.d.ts.map +1 -1
  107. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  108. package/dist/src/utils.d.ts +11 -2
  109. package/dist/src/utils.d.ts.map +1 -1
  110. package/dist/tsembed-react.es.js +3498 -3322
  111. package/dist/tsembed-react.js +3497 -3321
  112. package/dist/tsembed.es.js +213 -37
  113. package/dist/tsembed.js +216 -40
  114. package/dist/visual-embed-sdk-react-full.d.ts +845 -655
  115. package/dist/visual-embed-sdk-react.d.ts +845 -655
  116. package/dist/visual-embed-sdk.d.ts +827 -640
  117. package/lib/package.json +1 -1
  118. package/lib/src/embed/app.d.ts +96 -156
  119. package/lib/src/embed/app.d.ts.map +1 -1
  120. package/lib/src/embed/app.js +7 -4
  121. package/lib/src/embed/app.js.map +1 -1
  122. package/lib/src/embed/app.spec.js +10 -0
  123. package/lib/src/embed/app.spec.js.map +1 -1
  124. package/lib/src/embed/bodyless-conversation.d.ts +4 -4
  125. package/lib/src/embed/bodyless-conversation.d.ts.map +1 -1
  126. package/lib/src/embed/bodyless-conversation.js +1 -1
  127. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  128. package/lib/src/embed/conversation.d.ts +22 -11
  129. package/lib/src/embed/conversation.d.ts.map +1 -1
  130. package/lib/src/embed/conversation.js +1 -1
  131. package/lib/src/embed/conversation.js.map +1 -1
  132. package/lib/src/embed/liveboard.d.ts +110 -167
  133. package/lib/src/embed/liveboard.d.ts.map +1 -1
  134. package/lib/src/embed/liveboard.js +25 -11
  135. package/lib/src/embed/liveboard.js.map +1 -1
  136. package/lib/src/embed/liveboard.spec.js +11 -0
  137. package/lib/src/embed/liveboard.spec.js.map +1 -1
  138. package/lib/src/embed/sage.d.ts +17 -2
  139. package/lib/src/embed/sage.d.ts.map +1 -1
  140. package/lib/src/embed/sage.js +2 -0
  141. package/lib/src/embed/sage.js.map +1 -1
  142. package/lib/src/embed/search-bar.d.ts +16 -6
  143. package/lib/src/embed/search-bar.d.ts.map +1 -1
  144. package/lib/src/embed/search-bar.js.map +1 -1
  145. package/lib/src/embed/search.d.ts +46 -14
  146. package/lib/src/embed/search.d.ts.map +1 -1
  147. package/lib/src/embed/search.js.map +1 -1
  148. package/lib/src/embed/ts-embed.d.ts +19 -2
  149. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  150. package/lib/src/embed/ts-embed.js +49 -0
  151. package/lib/src/embed/ts-embed.js.map +1 -1
  152. package/lib/src/embed/ts-embed.spec.js +45 -4
  153. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  154. package/lib/src/index.d.ts +2 -2
  155. package/lib/src/index.d.ts.map +1 -1
  156. package/lib/src/index.js +2 -2
  157. package/lib/src/index.js.map +1 -1
  158. package/lib/src/react/all-types-export.d.ts +1 -1
  159. package/lib/src/react/all-types-export.d.ts.map +1 -1
  160. package/lib/src/react/all-types-export.js +1 -1
  161. package/lib/src/react/all-types-export.js.map +1 -1
  162. package/lib/src/react/index.d.ts +1 -1
  163. package/lib/src/react/index.d.ts.map +1 -1
  164. package/lib/src/react/index.js +1 -1
  165. package/lib/src/react/util.d.ts +7 -4
  166. package/lib/src/react/util.d.ts.map +1 -1
  167. package/lib/src/react/util.js.map +1 -1
  168. package/lib/src/types.d.ts +482 -251
  169. package/lib/src/types.d.ts.map +1 -1
  170. package/lib/src/types.js +31 -14
  171. package/lib/src/types.js.map +1 -1
  172. package/lib/src/utils/graphql/answerService/answerService.d.ts +2 -1
  173. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  174. package/lib/src/utils/graphql/answerService/answerService.js +2 -1
  175. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
  176. package/lib/src/utils/processData.d.ts.map +1 -1
  177. package/lib/src/utils/processData.js +15 -0
  178. package/lib/src/utils/processData.js.map +1 -1
  179. package/lib/src/utils/processData.spec.js +15 -0
  180. package/lib/src/utils/processData.spec.js.map +1 -1
  181. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  182. package/lib/src/utils/processTrigger.js +14 -0
  183. package/lib/src/utils/processTrigger.js.map +1 -1
  184. package/lib/src/utils/processTrigger.spec.js +54 -0
  185. package/lib/src/utils/processTrigger.spec.js.map +1 -1
  186. package/lib/src/utils.d.ts +11 -2
  187. package/lib/src/utils.d.ts.map +1 -1
  188. package/lib/src/utils.js +67 -0
  189. package/lib/src/utils.js.map +1 -1
  190. package/lib/src/utils.spec.js +86 -1
  191. package/lib/src/utils.spec.js.map +1 -1
  192. package/lib/src/visual-embed-sdk.d.ts +836 -649
  193. package/package.json +1 -1
  194. package/src/embed/app.spec.ts +14 -0
  195. package/src/embed/app.ts +98 -153
  196. package/src/embed/bodyless-conversation.ts +4 -4
  197. package/src/embed/conversation.ts +23 -12
  198. package/src/embed/liveboard.spec.ts +15 -0
  199. package/src/embed/liveboard.ts +142 -182
  200. package/src/embed/sage.ts +17 -5
  201. package/src/embed/search-bar.tsx +16 -17
  202. package/src/embed/search.ts +47 -21
  203. package/src/embed/ts-embed.spec.ts +52 -4
  204. package/src/embed/ts-embed.ts +61 -6
  205. package/src/index.ts +2 -0
  206. package/src/react/all-types-export.ts +1 -0
  207. package/src/react/index.tsx +3 -3
  208. package/src/react/util.ts +6 -4
  209. package/src/types.ts +488 -253
  210. package/src/utils/graphql/answerService/answerService.ts +5 -4
  211. package/src/utils/processData.spec.ts +28 -0
  212. package/src/utils/processData.ts +17 -0
  213. package/src/utils/processTrigger.spec.ts +90 -0
  214. package/src/utils/processTrigger.ts +16 -1
  215. package/src/utils.spec.ts +113 -0
  216. package/src/utils.ts +78 -2
@@ -1,10 +1,10 @@
1
1
  import isUndefined from 'lodash/isUndefined';
2
2
  import { ERROR_MESSAGE } from '../errors';
3
- import { ViewConfig, Param } from '../types';
3
+ import { Param, BaseViewConfig } from '../types';
4
4
  import { TsEmbed } from './ts-embed';
5
5
  import { getQueryParamString } from '../utils';
6
6
 
7
- /**
7
+ /**
8
8
  * Configuration for search options
9
9
  */
10
10
  export interface SearchOptions {
@@ -18,9 +18,9 @@ export interface SearchOptions {
18
18
  * The configuration for the embedded spotterEmbed options.
19
19
  * @group Embed components
20
20
  */
21
- export interface SpotterEmbedViewConfig extends ViewConfig {
21
+ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAction'> {
22
22
  /**
23
- * The ID of the worksheet to use for the conversation.
23
+ * The ID of the data source object. For example, Model, View, or Table. Spotter uses this object to query data and generate Answers.
24
24
  */
25
25
  worksheetId: string;
26
26
  /**
@@ -30,10 +30,12 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
30
30
  /**
31
31
  * disableSourceSelection : Disables data source selection
32
32
  * but still display the selected data source.
33
+ *
34
+ * Supported embed types: `SpotterEmbed`
33
35
  * @example
34
36
  * ```js
35
37
  * const embed = new SpotterEmbed('#tsEmbed', {
36
- * ... // other options
38
+ * ... //other embed view config
37
39
  * disableSourceSelection : true,
38
40
  * })
39
41
  * ```
@@ -42,10 +44,12 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
42
44
  disableSourceSelection?: boolean;
43
45
  /**
44
46
  * hideSourceSelection : Hide data source selection
47
+ *
48
+ * Supported embed types: `SpotterEmbed`
45
49
  * @example
46
50
  * ```js
47
51
  * const embed = new SpotterEmbed('#tsEmbed', {
48
- * ... // other options
52
+ * ... //other embed view config
49
53
  * hideSourceSelection : true,
50
54
  * })
51
55
  * ```
@@ -54,12 +58,15 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
54
58
  hideSourceSelection?: boolean;
55
59
  /**
56
60
  * Flag to control Data panel experience
61
+ *
62
+ * Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed`
57
63
  * @default false
58
64
  * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.4.0.cl
59
65
  * @example
60
66
  * ```js
61
- * const embed = new AppEmbed('#tsEmbed', {
62
- * ... // other options
67
+ * // Replace <EmbedComponent> with embed component name. For example, SageEmbed, AppEmbed, or SearchBarEmbed
68
+ * const embed = new <EmbedComponent>('#tsEmbed', {
69
+ * ... // other embed view config
63
70
  * dataPanelV2: true,
64
71
  * })
65
72
  * ```
@@ -69,10 +76,12 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
69
76
  * showSpotterLimitations : show limitation text
70
77
  * of the spotter underneath the chat input.
71
78
  * default is false.
79
+ *
80
+ * Supported embed types: `SpotterEmbed`
72
81
  * @example
73
82
  * ```js
74
83
  * const embed = new SpotterEmbed('#tsEmbed', {
75
- * ... // other options
84
+ * ... //other embed view config
76
85
  * showSpotterLimitations : true,
77
86
  * })
78
87
  * ```
@@ -82,10 +91,12 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
82
91
  /**
83
92
  * hideSampleQuestions : Hide sample questions on
84
93
  * the initial screen of the conversation.
94
+ *
95
+ * Supported embed types: `SpotterEmbed`
85
96
  * @example
86
97
  * ```js
87
98
  * const embed = new SpotterEmbed('#tsEmbed', {
88
- * ... // other options
99
+ * ... //other embed view config
89
100
  * hideSampleQuestions : true,
90
101
  * })
91
102
  * ```
@@ -96,7 +107,7 @@ export interface SpotterEmbedViewConfig extends ViewConfig {
96
107
 
97
108
  /**
98
109
  * The configuration for the embedded spotterEmbed options.
99
- * @deprecated from SDK: 1.38.0 | ThoughtSpot: 10.10.0.cl
110
+ * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
100
111
  * Use {@link SpotterEmbedViewConfig} instead
101
112
  * @group Embed components
102
113
  */
@@ -183,7 +194,7 @@ export class SpotterEmbed extends TsEmbed {
183
194
 
184
195
  /**
185
196
  * Embed ThoughtSpot AI Conversation.
186
- * @deprecated from SDK: 1.38.0 | ThoughtSpot: 10.10.0.cl
197
+ * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
187
198
  * Use {@link SpotterEmbed} instead
188
199
  * @group Embed components
189
200
  * @example
@@ -142,6 +142,21 @@ describe('Liveboard/viz embed tests', () => {
142
142
  });
143
143
  });
144
144
 
145
+ test('should set isLiveboardStylingAndGroupingEnabled to true in url', async () => {
146
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
147
+ isLiveboardStylingAndGroupingEnabled: true,
148
+ ...defaultViewConfig,
149
+ liveboardId,
150
+ } as LiveboardViewConfig);
151
+ liveboardEmbed.render();
152
+ await executeAfterWait(() => {
153
+ expectUrlMatchesWithParams(
154
+ getIFrameSrc(),
155
+ `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardStylingAndGroupingEnabled=true${prefixParams}#/embed/viz/${liveboardId}`,
156
+ );
157
+ });
158
+ });
159
+
145
160
  test('should set visible actions as empty array', async () => {
146
161
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
147
162
  visibleActions: [],
@@ -17,30 +17,23 @@ import {
17
17
  RuntimeFilter,
18
18
  DOMSelector,
19
19
  HostEvent,
20
- ViewConfig,
20
+ SearchLiveboardCommonViewConfig as LiveboardOtherViewConfig,
21
+ BaseViewConfig,
22
+ LiveboardAppEmbedViewConfig,
21
23
  } from '../types';
22
24
  import { getQueryParamString, isUndefined } from '../utils';
23
25
  import { getAuthPromise } from './base';
24
26
  import { TsEmbed, V1Embed } from './ts-embed';
25
27
  import { addPreviewStylesIfNotPresent } from '../utils/global-styles';
26
28
  import { TriggerPayload, TriggerResponse } from './hostEventClient/contracts';
29
+ import { logger } from '../utils/logger';
27
30
 
28
- const liveboardHeightWhitelistedRoutes = [
29
- '/embed/viz/',
30
- '/embed/insights/viz/',
31
- '/tsl-editor/PINBOARD_ANSWER_BOOK/',
32
- '/import-tsl/PINBOARD_ANSWER_BOOK/',
33
- ];
34
31
 
35
32
  /**
36
33
  * The configuration for the embedded Liveboard or visualization page view.
37
34
  * @group Embed components
38
35
  */
39
- export interface LiveboardViewConfig
40
- extends Omit<
41
- ViewConfig,
42
- 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'reorderedHomepageModules'
43
- > {
36
+ export interface LiveboardViewConfig extends BaseViewConfig, LiveboardOtherViewConfig, LiveboardAppEmbedViewConfig {
44
37
  /**
45
38
  * If set to true, the embedded object container dynamically resizes
46
39
  * according to the height of the Liveboard.
@@ -53,6 +46,8 @@ export interface LiveboardViewConfig
53
46
  * incrementally as users scroll the page to view the charts and tables.
54
47
  *
55
48
  * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1
49
+ *
50
+ * Supported embed types: `LiveboardEmbed`
56
51
  * @example
57
52
  * ```js
58
53
  * const embed = new LiveboardEmbed('#embed', {
@@ -66,6 +61,8 @@ export interface LiveboardViewConfig
66
61
  * This is the minimum height(in pixels) for a full-height Liveboard.
67
62
  * Setting this height helps resolve issues with empty Liveboards and
68
63
  * other screens navigable from a Liveboard.
64
+ *
65
+ * Supported embed types: `LiveboardEmbed`
69
66
  * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1
70
67
  * @default 500
71
68
  * @example
@@ -83,7 +80,7 @@ export interface LiveboardViewConfig
83
80
  * @example
84
81
  * ```js
85
82
  * const embed = new LiveboardEmbed('#tsEmbed', {
86
- * ... // other options
83
+ * ... //other embed view config
87
84
  * enableVizTransformations:true,
88
85
  * })
89
86
  * ```
@@ -93,11 +90,13 @@ export interface LiveboardViewConfig
93
90
  /**
94
91
  * The Liveboard to display in the embedded view.
95
92
  * Use either liveboardId or pinboardId to reference the Liveboard to embed.
93
+ *
94
+ * Supported embed types: `LiveboardEmbed`
96
95
  * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1
97
96
  * @example
98
97
  * ```js
99
- * const embed = new LiveboardEmbed('#embed-container', {
100
- * ... // other options
98
+ * const embed = new LiveboardEmbed('#tsEmbed', {
99
+ * ... //other embed view config
101
100
  * liveboardId:id of liveboard,
102
101
  * })
103
102
  */
@@ -109,11 +108,13 @@ export interface LiveboardViewConfig
109
108
  pinboardId?: string;
110
109
  /**
111
110
  * The visualization within the Liveboard to display.
111
+ *
112
+ * Supported embed types: `LiveboardEmbed`
112
113
  * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw
113
114
  * @example
114
115
  * ```js
115
- * const embed = new LiveboardEmbed('#embed-container', {
116
- * ... // other options
116
+ * const embed = new LiveboardEmbed('#tsEmbed', {
117
+ * ... //other embed view config
117
118
  * vizId:'430496d6-6903-4601-937e-2c691821af3c',
118
119
  * })
119
120
  * ```
@@ -122,11 +123,13 @@ export interface LiveboardViewConfig
122
123
  /**
123
124
  * If set to true, all filter chips from a
124
125
  * Liveboard page will be read-only (no X buttons)
126
+ *
127
+ * Supported embed types: `LiveboardEmbed`
125
128
  * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1.sw
126
129
  * @example
127
130
  * ```js
128
- * const embed = new LiveboardEmbed('#embed-container', {
129
- * ... // other options
131
+ * const embed = new LiveboardEmbed('#tsEmbed', {
132
+ * ... //other embed view config
130
133
  * preventLiveboardFilterRemoval:true,
131
134
  * })
132
135
  * ```
@@ -136,11 +139,13 @@ export interface LiveboardViewConfig
136
139
  * Array of visualization IDs which should be visible when the Liveboard
137
140
  * renders. This can be changed by triggering the `SetVisibleVizs`
138
141
  * event.
142
+ *
143
+ * Supported embed types: `LiveboardEmbed`
139
144
  * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw
140
145
  * @example
141
146
  * ```js
142
- * const embed = new LiveboardEmbed('#embed-container', {
143
- * ... // other options
147
+ * const embed = new LiveboardEmbed('#tsEmbed', {
148
+ * ... //other embed view config
144
149
  * visibleVizs: [
145
150
  * '430496d6-6903-4601-937e-2c691821af3c',
146
151
  * 'f547ec54-2a37-4516-a222-2b06719af726'
@@ -156,11 +161,13 @@ export interface LiveboardViewConfig
156
161
  /**
157
162
  * Render embedded Liveboards and visualizations in the
158
163
  * new Liveboard experience mode.
164
+ *
165
+ * Supported embed types: `LiveboardEmbed`
159
166
  * @version SDK: 1.14.0 | ThoughtSpot: 8.6.0.cl, 8.8.1-sw
160
167
  * @example
161
168
  * ```js
162
- * const embed = new LiveboardEmbed('#embed-container', {
163
- * ... // other options
169
+ * const embed = new LiveboardEmbed('#tsEmbed', {
170
+ * ... //other embed view config
164
171
  * liveboardV2:true,
165
172
  * })
166
173
  * ```
@@ -169,10 +176,12 @@ export interface LiveboardViewConfig
169
176
  /**
170
177
  * Set a Liveboard tab as an active tab.
171
178
  * Specify the tab ID.
179
+ *
180
+ * Supported embed types: `LiveboardEmbed`
172
181
  * @example
173
182
  * ```js
174
183
  * const embed = new LiveboardEmbed('#tsEmbed', {
175
- * ... // other options
184
+ * ... //other embed view config
176
185
  * activeTabId:'id-1234',
177
186
  * })
178
187
  * ```
@@ -181,96 +190,18 @@ export interface LiveboardViewConfig
181
190
  activeTabId?: string;
182
191
  /**
183
192
  * Show or hide the tab panel of the embedded Liveboard.
193
+ *
194
+ * Supported embed types: `LiveboardEmbed`
184
195
  * @version SDK: 1.25.0 | Thoughtspot: 9.6.0.cl, 9.8.0.sw
185
196
  * @example
186
197
  * ```js
187
- * const embed = new LiveboardEmbed('#embed-container', {
188
- * ... // other options
198
+ * const embed = new LiveboardEmbed('#tsEmbed', {
199
+ * ... //other embed view config
189
200
  * hideTabPanel:true,
190
201
  * })
191
202
  * ```
192
203
  */
193
204
  hideTabPanel?: boolean;
194
- /**
195
- * Show or hide the Liveboard header.
196
- * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw
197
- * @default false
198
- * @example
199
- * ```js
200
- * const embed = new LiveboardEmbed('#embed', {
201
- * ... // other liveboard view config
202
- * hideLiveboardHeader:true,
203
- * });
204
- * ```
205
- */
206
- hideLiveboardHeader?: boolean;
207
- /**
208
- * Show or hide the Liveboard title.
209
- * @default false
210
- * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw
211
- * @example
212
- * ```js
213
- * const embed = new LiveboardEmbed('#embed-container', {
214
- * ... // other options
215
- * showLiveboardTitle:true,
216
- * })
217
- * ```
218
- */
219
- showLiveboardTitle?: boolean;
220
- /**
221
- * Show or hide the Liveboard description.
222
- * @default false
223
- * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw
224
- * @example
225
- * ```js
226
- * const embed = new LiveboardEmbed('#embed-container', {
227
- * ... // other options
228
- * showLiveboardDescription:true,
229
- * })
230
- * ```
231
- */
232
- showLiveboardDescription?: boolean;
233
- /**
234
- * Control the position and visibility of
235
- * the Liveboard header as the users scroll down the
236
- * embedded Liveboard page.
237
- * @example
238
- * ```js
239
- * const embed = new LiveboardEmbed('#embed', {
240
- * ... // other Liveboard view config
241
- * isLiveboardHeaderSticky: true,
242
- * });
243
- * ```
244
- * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw
245
- */
246
- isLiveboardHeaderSticky?: boolean;
247
- /**
248
- * enable or disable ask sage
249
- * @default false
250
- * @version SDK: 1.29.0 | Thoughtspot: 9.12.0.cl
251
- * @example
252
- * ```js
253
- * const embed = new SearchEmbed('#tsEmbed', {
254
- * ... // other options
255
- * enableAskSage:true,
256
- * })
257
- * ```
258
- */
259
- enableAskSage?: boolean;
260
- /**
261
- * This flag is used to enable the 2 column layout on a Liveboard
262
- * @type {boolean}
263
- * @default false
264
- * @version SDK: 1.32.0 | ThoughtSpot:10.1.0.cl
265
- * @example
266
- * ```js
267
- * const embed = new LiveboardEmbed('#embed-container', {
268
- * ... // other options
269
- * enable2ColumnLayout: true,
270
- * })
271
- * ```
272
- */
273
- enable2ColumnLayout?: boolean;
274
205
  /**
275
206
  * Show a preview image of the visualization before the visualization loads.
276
207
  * Only works for visualizations embeds with a viz id.
@@ -280,9 +211,11 @@ export interface LiveboardViewConfig
280
211
  *
281
212
  * Since, this will show preview images, be careful that it may show
282
213
  * undesired data to the user when using row level security.
214
+ *
215
+ * Supported embed types: `LiveboardEmbed`
283
216
  * @example
284
217
  * ```js
285
- * const embed = new LiveboardEmbed('#embed-container', {
218
+ * const embed = new LiveboardEmbed('#tsEmbed', {
286
219
  * liveboardId: 'liveboard-id',
287
220
  * vizId: 'viz-id',
288
221
  * showPreviewLoader: true,
@@ -292,75 +225,16 @@ export interface LiveboardViewConfig
292
225
  * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl
293
226
  */
294
227
  showPreviewLoader?: boolean;
295
- /**
296
- * Enables or disables the compact header feature on a Liveboard.
297
- * Compact Liveboard header is turned off by default on Liveboards in
298
- * ThoughtSpot Embedded apps.
299
- *
300
- * @type {boolean}
301
- * @default false
302
- * @version SDK: 1.35.0 | ThoughtSpot:10.3.0.cl
303
- * @example
304
- * ```js
305
- * const embed = new LiveboardEmbed('#embed-container', {
306
- * ... // other options
307
- * isLiveboardCompactHeaderEnabled: true,
308
- * })
309
- * ```
310
- */
311
- isLiveboardCompactHeaderEnabled?: boolean;
312
- /**
313
- * This flag is used to show/hide verified icon in the Liveboard compact header
314
- * @type {boolean}
315
- * @default true
316
- * @version SDK: 1.35.0 | ThoughtSpot:10.4.0.cl
317
- * @example
318
- * ```js
319
- * const embed = new LiveboardEmbed('#embed-container', {
320
- * ... // other options
321
- * showLiveboardVerifiedBadge: true,
322
- * })
323
- * ```
324
- */
325
- showLiveboardVerifiedBadge?: boolean;
326
- /**
327
- * This flag is used to show/hide the re-verify banner
328
- * in Liveboard compact header
329
- * @type {boolean}
330
- * @default true
331
- * @version SDK: 1.35.0 | ThoughtSpot:10.4.0.cl
332
- * @example
333
- * ```js
334
- * const embed = new LiveboardEmbed('#embed-container', {
335
- * ... // other options
336
- * showLiveboardReverifyBanner: true,
337
- * })
338
- * ```
339
- */
340
- showLiveboardReverifyBanner?: boolean;
341
- /**
342
- * This flag is used to enable/disable hide irrelevant filters in a Liveboard tab
343
- * @type {boolean}
344
- * @default false
345
- * @version SDK: 1.36.0 | ThoughtSpot:10.6.0.cl
346
- * @example
347
- * ```js
348
- * const embed = new LiveboardEmbed('#embed-container', {
349
- * ... // other options
350
- * hideIrrelevantChipsInLiveboardTabs: true,
351
- * })
352
- * ```
353
- */
354
- hideIrrelevantChipsInLiveboardTabs?: boolean;
355
-
356
228
  /**
357
229
  * The Liveboard to run on regular intervals to fetch the cdw token.
230
+ *
231
+ * Supported embed types: `LiveboardEmbed`
358
232
  * @hidden
359
233
  * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl
360
234
  * @example
361
235
  * ```js
362
- * const embed = new LiveboardEmbed('#embed-container', {
363
- * ... // other options
236
+ * const embed = new LiveboardEmbed('#tsEmbed', {
237
+ * ... //other embed view config
364
238
  * oAuthPollingInterval: value in milliseconds,
365
239
  * })
366
240
  */
@@ -368,12 +242,14 @@ export interface LiveboardViewConfig
368
242
 
369
243
  /**
370
244
  * The Liveboard is set to force a token fetch during the initial load.
245
+ *
246
+ * Supported embed types: `LiveboardEmbed`
371
247
  * @hidden
372
248
  * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl
373
249
  * @example
374
250
  * ```js
375
- * const embed = new LiveboardEmbed('#embed-container', {
376
- * ... // other options
251
+ * const embed = new LiveboardEmbed('#tsEmbed', {
252
+ * ... //other embed view config
377
253
  * isForceRedirect: false,
378
254
  * })
379
255
  */
@@ -383,10 +259,12 @@ export interface LiveboardViewConfig
383
259
  * The source connection ID for authentication.
384
260
  * @hidden
385
261
  * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl
262
+ *
263
+ * Supported embed types: `LiveboardEmbed`
386
264
  * @example
387
265
  * ```js
388
- * const embed = new LiveboardEmbed('#embed-container', {
389
- * ... // other options
266
+ * const embed = new LiveboardEmbed('#tsEmbed', {
267
+ * ... //other embed view config
390
268
  * dataSourceId: '',
391
269
  * })
392
270
  */
@@ -395,18 +273,75 @@ export interface LiveboardViewConfig
395
273
  /**
396
274
  * This flag is for show/hide checkboxes for include or exclude
397
275
  * cover page and filters in the Liveboard PDF.
398
- * @type {boolean}
399
- * @default true
276
+ *
277
+ * Supported embed types: `LiveboardEmbed`
400
278
  * @version SDK: 1.37.0 | ThoughtSpot:10.8.0.cl
279
+ * @default true
280
+ * Supported embed types: `LiveboardEmbed`
401
281
  * @example
402
282
  * ```js
403
- * const embed = new LiveboardEmbed('#embed-container', {
404
- * ... // other options
283
+ * const embed = new LiveboardEmbed('#tsEmbed', {
284
+ * ... //other embed view config
405
285
  * coverAndFilterOptionInPDF: false,
406
286
  * })
407
287
  * ```
408
288
  */
409
289
  coverAndFilterOptionInPDF?: boolean;
290
+ /**
291
+ * The list of tab IDs to hide from the embedded.
292
+ * This Tabs will be hidden from their respective LBs.
293
+ * Use this to hide an tabID.
294
+ *
295
+ * Supported embed types: `LiveboardEmbed`
296
+ * @example
297
+ * ```js
298
+ * const embed = new LiveboardEmbed('#tsEmbed', {
299
+ * ... // other embed view config
300
+ * hiddenTabs: [
301
+ * '430496d6-6903-4601-937e-2c691821af3c',
302
+ * 'f547ec54-2a37-4516-a222-2b06719af726'
303
+ * ]
304
+ * });
305
+ * ```
306
+ * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw
307
+ */
308
+ hiddenTabs?: string[];
309
+ /**
310
+ * The list of tab IDs to show in the embedded Liveboard.
311
+ * Only the tabs specified in the array will be shown in the Liveboard.
312
+ *
313
+ * Use either `visibleTabs` or `hiddenTabs`.
314
+ *
315
+ * Supported embed types: `LiveboardEmbed`
316
+ * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw
317
+ * @example
318
+ * ```js
319
+ * const embed = new LiveboardEmbed('#tsEmbed', {
320
+ * ... // other embed view config
321
+ * visibleTabs: [
322
+ * '430496d6-6903-4601-937e-2c691821af3c',
323
+ * 'f547ec54-2a37-4516-a222-2b06719af726'
324
+ * ]
325
+ * })
326
+ * ```
327
+ */
328
+ visibleTabs?: string[];
329
+ /**
330
+ * This flag is used to enable/disable the styling and grouping in a Liveboard
331
+ *
332
+ * Supported embed types: `LiveboardEmbed`, `AppEmbed`
333
+ * @type {boolean}
334
+ * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl
335
+ * @example
336
+ * ```js
337
+ * // Replace <EmbedComponent> with embed component name. For example, AppEmbed or LiveboardEmbed
338
+ * const embed = new <EmbedComponent>('#tsEmbed', {
339
+ * ... // other embed view config
340
+ * isLiveboardStylingAndGroupingEnabled: true,
341
+ * })
342
+ * ```
343
+ */
344
+ isLiveboardStylingAndGroupingEnabled?: boolean;
410
345
  }
411
346
 
412
347
  /**
@@ -429,11 +364,16 @@ export class LiveboardEmbed extends V1Embed {
429
364
 
430
365
  private defaultHeight = 500;
431
366
 
432
- // eslint-disable-next-line no-useless-constructor
367
+
433
368
  constructor(domSelector: DOMSelector, viewConfig: LiveboardViewConfig) {
434
369
  viewConfig.embedComponentType = 'LiveboardEmbed';
435
370
  super(domSelector, viewConfig);
436
371
  if (this.viewConfig.fullHeight === true) {
372
+ if (this.viewConfig.vizId) {
373
+ logger.warn('Full height is currently only supported for Liveboard embeds.' +
374
+ 'Using full height with vizId might lead to unexpected behavior.');
375
+ }
376
+
437
377
  this.on(EmbedEvent.RouteChange, this.setIframeHeightForNonEmbedLiveboard);
438
378
  this.on(EmbedEvent.EmbedHeight, this.updateIFrameHeight);
439
379
  this.on(EmbedEvent.EmbedIframeCenter, this.embedIframeCenter);
@@ -472,6 +412,7 @@ export class LiveboardEmbed extends V1Embed {
472
412
  isForceRedirect,
473
413
  dataSourceId,
474
414
  coverAndFilterOptionInPDF,
415
+ isLiveboardStylingAndGroupingEnabled,
475
416
  } = this.viewConfig;
476
417
 
477
418
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
@@ -534,6 +475,10 @@ export class LiveboardEmbed extends V1Embed {
534
475
  params[Param.CoverAndFilterOptionInPDF] = coverAndFilterOptionInPDF;
535
476
  }
536
477
 
478
+ if (isLiveboardStylingAndGroupingEnabled !== undefined) {
479
+ params[Param.IsLiveboardStylingAndGroupingEnabled] = isLiveboardStylingAndGroupingEnabled;
480
+ }
481
+
537
482
  params[Param.LiveboardHeaderSticky] = isLiveboardHeaderSticky;
538
483
  params[Param.LiveboardHeaderV2] = isLiveboardCompactHeaderEnabled;
539
484
  params[Param.ShowLiveboardVerifiedBadge] = showLiveboardVerifiedBadge;
@@ -592,11 +537,26 @@ export class LiveboardEmbed extends V1Embed {
592
537
  };
593
538
 
594
539
  private setIframeHeightForNonEmbedLiveboard = (data: MessagePayload) => {
595
- const routePath = data.data.currentPath;
596
- if (liveboardHeightWhitelistedRoutes.some((path) => routePath.startsWith(path))) {
540
+ const { height: frameHeight } = this.viewConfig.frameParams || {};
541
+
542
+ const liveboardRelatedRoutes = [
543
+ '/pinboard/',
544
+ '/insights/pinboard/',
545
+ '/schedules/',
546
+ '/embed/viz/',
547
+ '/embed/insights/viz/',
548
+ '/liveboard/',
549
+ '/insights/liveboard/',
550
+ '/tsl-editor/PINBOARD_ANSWER_BOOK/',
551
+ '/import-tsl/PINBOARD_ANSWER_BOOK/',
552
+ ];
553
+
554
+ if (liveboardRelatedRoutes.some((path) => data.data.currentPath.startsWith(path))) {
555
+ // Ignore the height reset of the frame, if the navigation is
556
+ // only within the liveboard page.
597
557
  return;
598
558
  }
599
- this.setIFrameHeight(this.defaultHeight);
559
+ this.setIFrameHeight(frameHeight || this.defaultHeight);
600
560
  };
601
561
 
602
562
  private setActiveTab(data: { tabId: string }) {