@thoughtspot/visual-embed-sdk 1.24.0-preRender.5 → 1.24.0-preRender.7

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 (174) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +2 -2
  3. package/cjs/src/embed/app.d.ts +35 -1
  4. package/cjs/src/embed/app.d.ts.map +1 -1
  5. package/cjs/src/embed/app.js +5 -1
  6. package/cjs/src/embed/app.js.map +1 -1
  7. package/cjs/src/embed/app.spec.js +19 -0
  8. package/cjs/src/embed/app.spec.js.map +1 -1
  9. package/cjs/src/embed/liveboard.d.ts +35 -5
  10. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  11. package/cjs/src/embed/liveboard.js +14 -9
  12. package/cjs/src/embed/liveboard.js.map +1 -1
  13. package/cjs/src/embed/liveboard.spec.js +14 -3
  14. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  15. package/cjs/src/embed/sage.d.ts +45 -7
  16. package/cjs/src/embed/sage.d.ts.map +1 -1
  17. package/cjs/src/embed/sage.js +9 -3
  18. package/cjs/src/embed/sage.js.map +1 -1
  19. package/cjs/src/embed/sage.spec.js +85 -6
  20. package/cjs/src/embed/sage.spec.js.map +1 -1
  21. package/cjs/src/embed/search-bar.d.ts +1 -1
  22. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  23. package/cjs/src/embed/search-bar.js.map +1 -1
  24. package/cjs/src/embed/search.d.ts +2 -6
  25. package/cjs/src/embed/search.d.ts.map +1 -1
  26. package/cjs/src/embed/search.js.map +1 -1
  27. package/cjs/src/embed/ts-embed.d.ts +1 -1
  28. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  29. package/cjs/src/embed/ts-embed.js +45 -41
  30. package/cjs/src/embed/ts-embed.js.map +1 -1
  31. package/cjs/src/embed/ts-embed.spec.js +50 -11
  32. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  33. package/cjs/src/index.d.ts +2 -2
  34. package/cjs/src/index.d.ts.map +1 -1
  35. package/cjs/src/index.js.map +1 -1
  36. package/cjs/src/react/all-types-export.d.ts +1 -1
  37. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  38. package/cjs/src/react/all-types-export.js.map +1 -1
  39. package/cjs/src/react/index.d.ts +12 -0
  40. package/cjs/src/react/index.d.ts.map +1 -1
  41. package/cjs/src/react/index.js +37 -16
  42. package/cjs/src/react/index.js.map +1 -1
  43. package/cjs/src/types.d.ts +30 -33
  44. package/cjs/src/types.d.ts.map +1 -1
  45. package/cjs/src/types.js +20 -5
  46. package/cjs/src/types.js.map +1 -1
  47. package/cjs/src/utils/graphql/answerService/answerService.d.ts +2 -1
  48. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  49. package/cjs/src/utils/graphql/answerService/answerService.js +3 -5
  50. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
  51. package/cjs/src/utils/graphql/answerService/answerService.spec.js +1 -1
  52. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  53. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -1
  54. package/cjs/src/utils/graphql/sourceService.js +3 -1
  55. package/cjs/src/utils/graphql/sourceService.js.map +1 -1
  56. package/cjs/src/utils.d.ts +1 -0
  57. package/cjs/src/utils.d.ts.map +1 -1
  58. package/cjs/src/utils.js +5 -3
  59. package/cjs/src/utils.js.map +1 -1
  60. package/cjs/src/utils.spec.js +18 -8
  61. package/cjs/src/utils.spec.js.map +1 -1
  62. package/dist/src/embed/app.d.ts +35 -1
  63. package/dist/src/embed/app.d.ts.map +1 -1
  64. package/dist/src/embed/liveboard.d.ts +35 -5
  65. package/dist/src/embed/liveboard.d.ts.map +1 -1
  66. package/dist/src/embed/sage.d.ts +45 -7
  67. package/dist/src/embed/sage.d.ts.map +1 -1
  68. package/dist/src/embed/search-bar.d.ts +1 -1
  69. package/dist/src/embed/search-bar.d.ts.map +1 -1
  70. package/dist/src/embed/search.d.ts +2 -6
  71. package/dist/src/embed/search.d.ts.map +1 -1
  72. package/dist/src/embed/ts-embed.d.ts +1 -1
  73. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  74. package/dist/src/index.d.ts +2 -2
  75. package/dist/src/index.d.ts.map +1 -1
  76. package/dist/src/react/all-types-export.d.ts +1 -1
  77. package/dist/src/react/all-types-export.d.ts.map +1 -1
  78. package/dist/src/react/index.d.ts +12 -0
  79. package/dist/src/react/index.d.ts.map +1 -1
  80. package/dist/src/types.d.ts +30 -33
  81. package/dist/src/types.d.ts.map +1 -1
  82. package/dist/src/utils/graphql/answerService/answerService.d.ts +2 -1
  83. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  84. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -1
  85. package/dist/src/utils.d.ts +1 -0
  86. package/dist/src/utils.d.ts.map +1 -1
  87. package/dist/tsembed-react.es.js +3752 -19027
  88. package/dist/tsembed-react.js +3752 -19027
  89. package/dist/tsembed.es.js +7586 -23428
  90. package/dist/tsembed.js +7586 -23428
  91. package/dist/visual-embed-sdk-react-full.d.ts +161 -53
  92. package/dist/visual-embed-sdk-react.d.ts +161 -53
  93. package/dist/visual-embed-sdk.d.ts +149 -53
  94. package/lib/package.json +2 -2
  95. package/lib/src/embed/app.d.ts +35 -1
  96. package/lib/src/embed/app.d.ts.map +1 -1
  97. package/lib/src/embed/app.js +5 -1
  98. package/lib/src/embed/app.js.map +1 -1
  99. package/lib/src/embed/app.spec.js +19 -0
  100. package/lib/src/embed/app.spec.js.map +1 -1
  101. package/lib/src/embed/liveboard.d.ts +35 -5
  102. package/lib/src/embed/liveboard.d.ts.map +1 -1
  103. package/lib/src/embed/liveboard.js +15 -9
  104. package/lib/src/embed/liveboard.js.map +1 -1
  105. package/lib/src/embed/liveboard.spec.js +14 -3
  106. package/lib/src/embed/liveboard.spec.js.map +1 -1
  107. package/lib/src/embed/sage.d.ts +45 -7
  108. package/lib/src/embed/sage.d.ts.map +1 -1
  109. package/lib/src/embed/sage.js +9 -3
  110. package/lib/src/embed/sage.js.map +1 -1
  111. package/lib/src/embed/sage.spec.js +85 -6
  112. package/lib/src/embed/sage.spec.js.map +1 -1
  113. package/lib/src/embed/search-bar.d.ts +1 -1
  114. package/lib/src/embed/search-bar.d.ts.map +1 -1
  115. package/lib/src/embed/search-bar.js.map +1 -1
  116. package/lib/src/embed/search.d.ts +2 -6
  117. package/lib/src/embed/search.d.ts.map +1 -1
  118. package/lib/src/embed/search.js.map +1 -1
  119. package/lib/src/embed/ts-embed.d.ts +1 -1
  120. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  121. package/lib/src/embed/ts-embed.js +46 -42
  122. package/lib/src/embed/ts-embed.js.map +1 -1
  123. package/lib/src/embed/ts-embed.spec.js +50 -11
  124. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  125. package/lib/src/index.d.ts +2 -2
  126. package/lib/src/index.d.ts.map +1 -1
  127. package/lib/src/index.js.map +1 -1
  128. package/lib/src/react/all-types-export.d.ts +1 -1
  129. package/lib/src/react/all-types-export.d.ts.map +1 -1
  130. package/lib/src/react/all-types-export.js.map +1 -1
  131. package/lib/src/react/index.d.ts +12 -0
  132. package/lib/src/react/index.d.ts.map +1 -1
  133. package/lib/src/react/index.js +37 -16
  134. package/lib/src/react/index.js.map +1 -1
  135. package/lib/src/types.d.ts +30 -33
  136. package/lib/src/types.d.ts.map +1 -1
  137. package/lib/src/types.js +20 -5
  138. package/lib/src/types.js.map +1 -1
  139. package/lib/src/utils/graphql/answerService/answerService.d.ts +2 -1
  140. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  141. package/lib/src/utils/graphql/answerService/answerService.js +3 -5
  142. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
  143. package/lib/src/utils/graphql/answerService/answerService.spec.js +1 -1
  144. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  145. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -1
  146. package/lib/src/utils/graphql/sourceService.js +3 -1
  147. package/lib/src/utils/graphql/sourceService.js.map +1 -1
  148. package/lib/src/utils.d.ts +1 -0
  149. package/lib/src/utils.d.ts.map +1 -1
  150. package/lib/src/utils.js +3 -2
  151. package/lib/src/utils.js.map +1 -1
  152. package/lib/src/utils.spec.js +19 -9
  153. package/lib/src/utils.spec.js.map +1 -1
  154. package/lib/src/visual-embed-sdk.d.ts +152 -56
  155. package/package.json +2 -2
  156. package/src/embed/app.spec.ts +29 -0
  157. package/src/embed/app.ts +43 -1
  158. package/src/embed/liveboard.spec.ts +19 -3
  159. package/src/embed/liveboard.ts +53 -13
  160. package/src/embed/sage.spec.ts +119 -6
  161. package/src/embed/sage.ts +63 -13
  162. package/src/embed/search-bar.tsx +11 -1
  163. package/src/embed/search.ts +5 -6
  164. package/src/embed/ts-embed.spec.ts +57 -12
  165. package/src/embed/ts-embed.ts +55 -45
  166. package/src/index.ts +2 -0
  167. package/src/react/all-types-export.ts +1 -0
  168. package/src/react/index.tsx +54 -12
  169. package/src/types.ts +36 -39
  170. package/src/utils/graphql/answerService/answerService.spec.ts +1 -1
  171. package/src/utils/graphql/answerService/answerService.ts +3 -5
  172. package/src/utils/graphql/sourceService.ts +4 -1
  173. package/src/utils.spec.ts +23 -8
  174. package/src/utils.ts +4 -2
@@ -9,19 +9,17 @@
9
9
  * @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
10
10
  */
11
11
 
12
- import _ from 'lodash';
13
12
  import { ERROR_MESSAGE } from '../errors';
14
13
  import {
15
14
  EmbedEvent,
16
15
  MessagePayload,
17
16
  Param,
18
17
  RuntimeFilter,
19
- RuntimeParameter,
20
18
  DOMSelector,
21
19
  HostEvent,
22
20
  ViewConfig,
23
21
  } from '../types';
24
- import { getQueryParamString, getRuntimeParameters } from '../utils';
22
+ import { getQueryParamString, isUndefined } from '../utils';
25
23
  import { getAuthPromise } from './base';
26
24
  import { V1Embed } from './ts-embed';
27
25
 
@@ -30,7 +28,7 @@ import { V1Embed } from './ts-embed';
30
28
  *
31
29
  * @group Embed components
32
30
  */
33
- export interface LiveboardViewConfig extends ViewConfig {
31
+ export interface LiveboardViewConfig extends Omit<ViewConfig, 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems'| 'reorderedHomepageModules'> {
34
32
  /**
35
33
  * If set to true, the embedded object container dynamically resizes
36
34
  * according to the height of the Liveboard.
@@ -96,7 +94,7 @@ export interface LiveboardViewConfig extends ViewConfig {
96
94
  */
97
95
  liveboardV2?: boolean;
98
96
  /**
99
- * Tab Id of the Liveboard that is supposed to be active
97
+ * Tab ID of the Liveboard that is supposed to be active
100
98
  *
101
99
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1-sw
102
100
  */
@@ -108,9 +106,39 @@ export interface LiveboardViewConfig extends ViewConfig {
108
106
  */
109
107
  hideTabPanel?: boolean;
110
108
  /**
111
- * The list of parameter override to apply to a Liveboard.
109
+ * Show or hide Liveboard header
110
+ *
111
+ * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
112
+ * @default false
113
+ */
114
+ hideLiveboardHeader?: boolean;
115
+ /**
116
+ * Show or hide Liveboard title
117
+ *
118
+ * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
119
+ * @default false
120
+ */
121
+ showLiveboardTitle?: boolean;
122
+ /**
123
+ * Show or hide Liveboard description
124
+ *
125
+ * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
126
+ * @default false
112
127
  */
113
- runtimeParameters?: RuntimeParameter[];
128
+ showLiveboardDescription?: boolean;
129
+ /**
130
+ * Boolean for sticky Liveboard header.
131
+ *
132
+ * @example
133
+ * ```js
134
+ * const embed = new LiveboardEmbed('#embed', {
135
+ * ... // other liveboard view config
136
+ * isLiveboardHeaderSticky: true,
137
+ * });
138
+ * ```
139
+ * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
140
+ */
141
+ isLiveboardHeaderSticky?: boolean;
114
142
  }
115
143
 
116
144
  /**
@@ -162,7 +190,10 @@ export class LiveboardEmbed extends V1Embed {
162
190
  vizId,
163
191
  hideTabPanel,
164
192
  activeTabId,
165
- runtimeParameters,
193
+ hideLiveboardHeader,
194
+ showLiveboardDescription,
195
+ showLiveboardTitle,
196
+ isLiveboardHeaderSticky = true,
166
197
  } = this.viewConfig;
167
198
 
168
199
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
@@ -193,10 +224,19 @@ export class LiveboardEmbed extends V1Embed {
193
224
  if (hideTabPanel) {
194
225
  params[Param.HideTabPanel] = hideTabPanel;
195
226
  }
196
- let queryParams = getQueryParamString(params, true);
227
+ if (hideLiveboardHeader) {
228
+ params[Param.HideLiveboardHeader] = hideLiveboardHeader;
229
+ }
230
+ if (showLiveboardDescription) {
231
+ params[Param.ShowLiveboardDescription] = showLiveboardDescription;
232
+ }
233
+ if (showLiveboardTitle) {
234
+ params[Param.ShowLiveboardTitle] = showLiveboardTitle;
235
+ }
236
+
237
+ params[Param.LiveboardHeaderSticky] = isLiveboardHeaderSticky;
197
238
 
198
- const parameterQuery = getRuntimeParameters(runtimeParameters || []);
199
- if (parameterQuery) queryParams += `&${parameterQuery}`;
239
+ const queryParams = getQueryParamString(params, true);
200
240
 
201
241
  return queryParams;
202
242
  }
@@ -264,7 +304,7 @@ export class LiveboardEmbed extends V1Embed {
264
304
  protected beforePrerenderVisible(): void {
265
305
  const embedObj = this.insertedDomEl?.[this.embedNodeKey] as LiveboardEmbed;
266
306
 
267
- if (_.isUndefined(embedObj)) return;
307
+ if (isUndefined(embedObj)) return;
268
308
 
269
309
  const showDifferentLib = this.viewConfig.liveboardId
270
310
  && embedObj.viewConfig.liveboardId !== this.viewConfig.liveboardId;
@@ -276,7 +316,7 @@ export class LiveboardEmbed extends V1Embed {
276
316
  }
277
317
 
278
318
  protected handleRenderForPrerender(): void {
279
- if (_.isUndefined(this.viewConfig.liveboardId)) {
319
+ if (isUndefined(this.viewConfig.liveboardId)) {
280
320
  this.prerenderGeneric();
281
321
  return;
282
322
  }
@@ -10,10 +10,13 @@ import {
10
10
  } from '../test/test-utils';
11
11
 
12
12
  const defaultConfig: SageViewConfig = {
13
- showObjectResults: true,
14
13
  disableWorksheetChange: false,
15
- hideWorksheetSelector: true,
16
- showObjectSuggestions: false,
14
+ hideWorksheetSelector: false,
15
+ hideSearchBarTitle: false,
16
+ hideSageAnswerHeader: false,
17
+ hideAutocompleteSuggestions: false,
18
+ hideSampleQuestions: false,
19
+ isProductTour: false,
17
20
  };
18
21
 
19
22
  const thoughtSpotHost = 'tshost';
@@ -37,10 +40,119 @@ describe('Sage embed tests', () => {
37
40
  await executeAfterWait(() => {
38
41
  expectUrlMatch(
39
42
  getIFrameSrc(),
40
- `http://${thoughtSpotHost}/?embedApp=true&hideEurekaResults=false&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=true&hideEurekaSuggestions=true&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
43
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
41
44
  );
42
45
  });
43
46
  });
47
+
48
+ test('should render sage with product tour flag set', async () => {
49
+ const sageEmbed = new SageEmbed(getRootEl(), { ...defaultConfig, isProductTour: true });
50
+ sageEmbed.render();
51
+ await executeAfterWait(() => {
52
+ expectUrlMatch(
53
+ getIFrameSrc(),
54
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=true&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
55
+ );
56
+ });
57
+ });
58
+
59
+ test('should render sage with disable worksheet change flag', async () => {
60
+ const sageEmbed = new SageEmbed(getRootEl(), {
61
+ ...defaultConfig,
62
+ disableWorksheetChange: true,
63
+ });
64
+ sageEmbed.render();
65
+ await executeAfterWait(() => {
66
+ expectUrlMatch(
67
+ getIFrameSrc(),
68
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=true&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
69
+ );
70
+ });
71
+ });
72
+
73
+ test('should render sage with hide worksheet selector flag', async () => {
74
+ const sageEmbed = new SageEmbed(getRootEl(), {
75
+ ...defaultConfig,
76
+ hideWorksheetSelector: true,
77
+ });
78
+ sageEmbed.render();
79
+ await executeAfterWait(() => {
80
+ expectUrlMatch(
81
+ getIFrameSrc(),
82
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=true&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
83
+ );
84
+ });
85
+ });
86
+
87
+ test('should render sage with hideSearchBarTitle flag', async () => {
88
+ const sageEmbed = new SageEmbed(getRootEl(), {
89
+ ...defaultConfig,
90
+ hideSearchBarTitle: true,
91
+ });
92
+ sageEmbed.render();
93
+ await executeAfterWait(() => {
94
+ expectUrlMatch(
95
+ getIFrameSrc(),
96
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=true&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
97
+ );
98
+ });
99
+ });
100
+
101
+ test('should render sage with hide Sage Answer Header flag', async () => {
102
+ const sageEmbed = new SageEmbed(getRootEl(), {
103
+ ...defaultConfig,
104
+ hideSageAnswerHeader: true,
105
+ });
106
+ sageEmbed.render();
107
+ await executeAfterWait(() => {
108
+ expectUrlMatch(
109
+ getIFrameSrc(),
110
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=true&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
111
+ );
112
+ });
113
+ });
114
+
115
+ test('should render sage with hide Autocomplete suggestions flag', async () => {
116
+ const sageEmbed = new SageEmbed(getRootEl(), {
117
+ ...defaultConfig,
118
+ hideAutocompleteSuggestions: true,
119
+ });
120
+ sageEmbed.render();
121
+ await executeAfterWait(() => {
122
+ expectUrlMatch(
123
+ getIFrameSrc(),
124
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=true&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
125
+ );
126
+ });
127
+ });
128
+
129
+ test('should render sage with deprecated showObjectSuggestions flag', async () => {
130
+ const sageEmbed = new SageEmbed(getRootEl(), {
131
+ showObjectSuggestions: true,
132
+ });
133
+ sageEmbed.render();
134
+ await executeAfterWait(() => {
135
+ expectUrlMatch(
136
+ getIFrameSrc(),
137
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
138
+ );
139
+ });
140
+ });
141
+
142
+ test('embed url include pre-seed dataSource without populating searchOptions', async () => {
143
+ const sageEmbed = new SageEmbed(getRootEl(), {
144
+ ...defaultConfig,
145
+ dataSource: 'worksheet-id',
146
+ });
147
+ sageEmbed.render();
148
+ await executeAfterWait(() => {
149
+ expectUrlMatch(
150
+ getIFrameSrc(),
151
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?worksheet=worksheet-id`,
152
+ );
153
+ });
154
+ });
155
+
44
156
  test('embed url include pre-seed dataSource and query', async () => {
45
157
  const sageEmbed = new SageEmbed(getRootEl(), {
46
158
  ...defaultConfig,
@@ -53,10 +165,11 @@ describe('Sage embed tests', () => {
53
165
  await executeAfterWait(() => {
54
166
  expectUrlMatch(
55
167
  getIFrameSrc(),
56
- `http://${thoughtSpotHost}/?embedApp=true&hideEurekaResults=false&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=true&hideEurekaSuggestions=true&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?worksheet=worksheet-id&query=test-query`,
168
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?worksheet=worksheet-id&query=test-query`,
57
169
  );
58
170
  });
59
171
  });
172
+
60
173
  test('embed url include pre-seed execute flag with query', async () => {
61
174
  const sageEmbed = new SageEmbed(getRootEl(), {
62
175
  ...defaultConfig,
@@ -69,7 +182,7 @@ describe('Sage embed tests', () => {
69
182
  await executeAfterWait(() => {
70
183
  expectUrlMatch(
71
184
  getIFrameSrc(),
72
- `http://${thoughtSpotHost}/?embedApp=true&hideEurekaResults=false&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=true&hideEurekaSuggestions=true&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?query=test-query&executeSearch=true`,
185
+ `http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?query=test-query&executeSearch=true`,
73
186
  );
74
187
  });
75
188
  });
package/src/embed/sage.ts CHANGED
@@ -18,7 +18,7 @@ import { V1Embed } from './ts-embed';
18
18
  */
19
19
  export interface SearchOptions {
20
20
  /**
21
- * The tml string to load the answer
21
+ * The query string to pre-fill in natual language search bar
22
22
  */
23
23
  searchQuery: string;
24
24
  /**
@@ -37,34 +37,74 @@ export interface SearchOptions {
37
37
  * @version: SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.1-sw
38
38
  * @group Embed components
39
39
  */
40
- export interface SageViewConfig extends ViewConfig {
40
+ export interface SageViewConfig
41
+ extends Omit<
42
+ ViewConfig,
43
+ 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'hiddenTabs' | 'visibleTabs' | 'reorderedHomepageModules'
44
+ > {
41
45
  /**
42
46
  * If set to true, a list of liveboard and answers related
43
47
  * to the natural language search will be shown below the
44
48
  * AI generated answer.
49
+ *
50
+ * @deprecated Currently liveboard and answers related
51
+ * to the natural language search will not be shown for sage
52
+ * embed
45
53
  */
46
54
  showObjectResults?: boolean;
55
+ /**
56
+ * flag used by the TS product tour page to show the blue search bar
57
+ * even after the search is completed. This is different from TSE Sage Embed
58
+ * experience where it mimics closer to the non-embed case.
59
+ * The Sample questions container is collapsed when this value is set after
60
+ * does a search.
61
+ *
62
+ * @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
63
+ * @hidden
64
+ */
65
+ isProductTour?: boolean;
66
+ /**
67
+ * flag to hide search bar title. default false.
68
+ *
69
+ * @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
70
+ */
71
+ hideSearchBarTitle?: boolean;
72
+ /**
73
+ * flag to disable Sage Answer header(`AI Answer` title section on top of the Sage
74
+ * answer). default false.
75
+ *
76
+ * @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
77
+ */
78
+ hideSageAnswerHeader?: boolean;
47
79
  /**
48
80
  * flag to disable changing worksheet. default false.
81
+ *
82
+ * @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
49
83
  */
50
- disableWorksheetChange?: boolean,
84
+ disableWorksheetChange?: boolean;
51
85
  /**
52
86
  * flag to hide worksheet selector. default false.
53
87
  */
54
- hideWorksheetSelector?: boolean,
88
+ hideWorksheetSelector?: boolean;
55
89
  /**
56
- * If set to true, the search suggestions will contain existing
57
- * liveboards and answers in addition with the autocomplete
90
+ * If set to true, the search bar auto complete search suggestions will not be shown.
91
+ * default false
58
92
  *
93
+ * @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
59
94
  */
60
- showObjectSuggestions?: boolean;
95
+ hideAutocompleteSuggestions?: boolean;
61
96
  /**
62
- * The query string to pre-fill in natual language search bar
97
+ * If set to false, the auto complete search suggestions not be shown
98
+ *
99
+ * @deprecated currently, object suggestions will not be shown for sage embed
100
+ * earlier this flag was used to show Auto complete suggestions
63
101
  */
64
- searchQuery?: string;
102
+ showObjectSuggestions?: boolean;
65
103
  /**
66
104
  * If set to true, sample questions would be hidden to user.
67
105
  * These sample questions are autogenerated based on selected datasource.
106
+ *
107
+ * @version SDK: 1.26.0 | Thoughtspot: 9.10.0.cl
68
108
  */
69
109
  hideSampleQuestions?: boolean;
70
110
  /**
@@ -73,9 +113,10 @@ export interface SageViewConfig extends ViewConfig {
73
113
  dataSource?: string;
74
114
  /**
75
115
  * Configuration for search options
116
+ *
117
+ * @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
76
118
  */
77
119
  searchOptions?: SearchOptions;
78
-
79
120
  }
80
121
  export const HiddenActionItemByDefaultForSageEmbed = [
81
122
  Action.Save,
@@ -115,21 +156,30 @@ export class SageEmbed extends V1Embed {
115
156
  */
116
157
  protected getEmbedParams(): string {
117
158
  const {
118
- showObjectResults,
119
159
  disableWorksheetChange,
120
160
  hideWorksheetSelector,
121
161
  showObjectSuggestions,
122
162
  hideSampleQuestions,
163
+ isProductTour,
164
+ hideSearchBarTitle,
165
+ hideSageAnswerHeader,
166
+ hideAutocompleteSuggestions,
123
167
  } = this.viewConfig;
124
168
 
125
169
  const params = this.getBaseQueryParams();
126
170
  params[Param.EmbedApp] = true;
127
- params[Param.HideEurekaResults] = !showObjectResults;
128
171
  params[Param.IsSageEmbed] = true;
129
172
  params[Param.DisableWorksheetChange] = !!disableWorksheetChange;
130
173
  params[Param.HideWorksheetSelector] = !!hideWorksheetSelector;
131
- params[Param.HideEurekaSuggestions] = !showObjectSuggestions;
174
+ params[Param.HideEurekaSuggestions] = !!hideAutocompleteSuggestions;
175
+ if (showObjectSuggestions) {
176
+ params[Param.HideEurekaSuggestions] = !showObjectSuggestions;
177
+ // support backwards compatibility
178
+ }
132
179
  params[Param.HideSampleQuestions] = !!hideSampleQuestions;
180
+ params[Param.IsProductTour] = !!isProductTour;
181
+ params[Param.HideSearchBarTitle] = !!hideSearchBarTitle;
182
+ params[Param.HideSageAnswerHeader] = !!hideSageAnswerHeader;
133
183
  params[Param.HideActions] = [
134
184
  ...(params[Param.HideActions] ?? []),
135
185
  ...HiddenActionItemByDefaultForSageEmbed,
@@ -7,7 +7,17 @@ import { SearchOptions } from './search';
7
7
  * @group Embed components
8
8
  */
9
9
  export interface SearchBarViewConfig
10
- extends Omit<ViewConfig, 'runtimeFilters' | 'showAlerts' | 'dataPanelV2'> {
10
+ extends Omit<
11
+ ViewConfig,
12
+ | 'runtimeFilters'
13
+ | 'showAlerts'
14
+ | 'dataPanelV2'
15
+ | 'hiddenHomepageModules'
16
+ | 'hiddenHomeLeftNavItems'
17
+ | 'hiddenTabs'
18
+ | 'visibleTabs'
19
+ | 'reorderedHomepageModules'
20
+ > {
11
21
  /**
12
22
  * The array of data source GUIDs to set on load.
13
23
  * Only a single dataSource supported currently.
@@ -14,7 +14,6 @@ import {
14
14
  Action,
15
15
  ViewConfig,
16
16
  RuntimeFilter,
17
- RuntimeParameter,
18
17
  } from '../types';
19
18
  import {
20
19
  getQueryParamString,
@@ -50,7 +49,11 @@ export interface SearchOptions {
50
49
  *
51
50
  * @group Embed components
52
51
  */
53
- export interface SearchViewConfig extends ViewConfig {
52
+ export interface SearchViewConfig
53
+ extends Omit<
54
+ ViewConfig,
55
+ 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'hiddenTabs' | 'visibleTabs' | 'reorderedHomepageModules'
56
+ > {
54
57
  /**
55
58
  * If set to true, the data sources panel is collapsed on load,
56
59
  * but can be expanded manually.
@@ -124,10 +127,6 @@ export interface SearchViewConfig extends ViewConfig {
124
127
  * @version: SDK: 1.24.0
125
128
  */
126
129
  useLastSelectedSources?: boolean;
127
- /**
128
- * The list of parameter override to apply to a search answer.
129
- */
130
- runtimeParameters?: RuntimeParameter[];
131
130
  }
132
131
 
133
132
  export const HiddenActionItemByDefaultForSearchEmbed = [
@@ -48,6 +48,15 @@ const tabId2 = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
48
48
  const thoughtSpotHost = 'tshost';
49
49
  const defaultParamsPost = '';
50
50
 
51
+ const createRootEleForEmbed = () => {
52
+ const rootEle = document.createElement('div');
53
+ rootEle.id = 'myRoot';
54
+ const tsEmbedDiv = document.createElement('div');
55
+ tsEmbedDiv.id = 'tsEmbedDiv';
56
+ rootEle.appendChild(tsEmbedDiv);
57
+ document.body.appendChild(rootEle);
58
+ };
59
+
51
60
  beforeAll(() => {
52
61
  spyOn(window, 'alert');
53
62
  });
@@ -164,7 +173,7 @@ describe('Unit test case for ts embed', () => {
164
173
  HomepageModule.Learning,
165
174
  ];
166
175
 
167
- const searchEmbed = new SearchEmbed(getRootEl(), {
176
+ const searchEmbed = new AppEmbed(getRootEl(), {
168
177
  ...defaultViewConfig,
169
178
  hiddenHomepageModules: mockedHiddenHomepageModules,
170
179
  });
@@ -201,7 +210,7 @@ describe('Unit test case for ts embed', () => {
201
210
  HomepageModule.Watchlist,
202
211
  ];
203
212
 
204
- const searchEmbed = new SearchEmbed(getRootEl(), {
213
+ const searchEmbed = new AppEmbed(getRootEl(), {
205
214
  ...defaultViewConfig,
206
215
  reorderedHomepageModules: mockedReorderedHomepageModules,
207
216
  });
@@ -318,7 +327,7 @@ describe('Unit test case for ts embed', () => {
318
327
  HomeLeftNavItem.Documentation,
319
328
  ];
320
329
 
321
- const searchEmbed = new SearchEmbed(getRootEl(), {
330
+ const searchEmbed = new AppEmbed(getRootEl(), {
322
331
  ...defaultViewConfig,
323
332
  hiddenHomeLeftNavItems: mockedHiddenHomeLeftNavItems,
324
333
  });
@@ -1273,15 +1282,6 @@ describe('Unit test case for ts embed', () => {
1273
1282
  rootEle.remove();
1274
1283
  });
1275
1284
 
1276
- const createRootEleForEmbed = () => {
1277
- const rootEle = document.createElement('div');
1278
- rootEle.id = 'myRoot';
1279
- const tsEmbedDiv = document.createElement('div');
1280
- tsEmbedDiv.id = 'tsEmbedDiv';
1281
- rootEle.appendChild(tsEmbedDiv);
1282
- document.body.appendChild(rootEle);
1283
- };
1284
-
1285
1285
  it('should preRender and hide the iframe', async () => {
1286
1286
  createRootEleForEmbed();
1287
1287
 
@@ -1416,5 +1416,50 @@ describe('Unit test case for ts embed', () => {
1416
1416
 
1417
1417
  expect(warnSpy).toHaveBeenCalledTimes(2);
1418
1418
  });
1419
+ it('showPreRender should not preRender if not available', async () => {
1420
+ createRootEleForEmbed();
1421
+
1422
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1423
+ liveboardId: 'myLiveboardId',
1424
+ });
1425
+ spyOn(libEmbed, 'preRender');
1426
+ spyOn(console, 'error');
1427
+ libEmbed.showPreRender();
1428
+ expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
1429
+ expect(console.error).toHaveBeenCalledTimes(1);
1430
+ });
1431
+
1432
+ it('should get underlying iframe', async () => {
1433
+ createRootEleForEmbed();
1434
+
1435
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1436
+ liveboardId: 'myLiveboardId',
1437
+ });
1438
+ libEmbed.render();
1439
+ await waitFor(() => !!getIFrameEl());
1440
+
1441
+ expect(libEmbed.getUnderlyingFrameElement()).toEqual(getIFrameEl());
1442
+ });
1443
+
1444
+ it('should render error message properly', async () => {
1445
+ jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValueOnce(false);
1446
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1447
+ liveboardId: 'myLiveboardId',
1448
+ preRenderId: 'test',
1449
+ });
1450
+ await libEmbed.preRender();
1451
+
1452
+ expect(document.getElementById('tsEmbed-pre-render-child-test').innerHTML).toBe('Not logged in');
1453
+ });
1454
+ it('should log error if sync is called before preRender', async () => {
1455
+ jest.spyOn(console, 'error').mockImplementation(jest.fn());
1456
+ const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
1457
+ liveboardId: 'myLiveboardId',
1458
+ preRenderId: 'test',
1459
+ });
1460
+ await libEmbed.syncPreRenderStyle();
1461
+ expect(console.error).toBeCalledWith('PreRender should be called before using syncPreRenderStyle');
1462
+ (console.error as any).mockClear();
1463
+ });
1419
1464
  });
1420
1465
  });