@thoughtspot/visual-embed-sdk 1.24.0 → 1.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/cjs/package.json +2 -3
  2. package/cjs/src/embed/app.d.ts +1 -0
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +1 -0
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/base.d.ts +2 -0
  7. package/cjs/src/embed/base.d.ts.map +1 -1
  8. package/cjs/src/embed/base.js +2 -0
  9. package/cjs/src/embed/base.js.map +1 -1
  10. package/cjs/src/embed/liveboard.d.ts +1 -0
  11. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  12. package/cjs/src/embed/liveboard.js +1 -0
  13. package/cjs/src/embed/liveboard.js.map +1 -1
  14. package/cjs/src/embed/sage.d.ts +1 -0
  15. package/cjs/src/embed/sage.d.ts.map +1 -1
  16. package/cjs/src/embed/sage.js +1 -0
  17. package/cjs/src/embed/sage.js.map +1 -1
  18. package/cjs/src/embed/search-bar.d.ts +1 -0
  19. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  20. package/cjs/src/embed/search-bar.js +1 -0
  21. package/cjs/src/embed/search-bar.js.map +1 -1
  22. package/cjs/src/embed/search.d.ts +1 -0
  23. package/cjs/src/embed/search.d.ts.map +1 -1
  24. package/cjs/src/embed/search.js +1 -0
  25. package/cjs/src/embed/search.js.map +1 -1
  26. package/cjs/src/embed/ts-embed.d.ts +1 -0
  27. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  28. package/cjs/src/embed/ts-embed.js +3 -0
  29. package/cjs/src/embed/ts-embed.js.map +1 -1
  30. package/cjs/src/embed/ts-embed.spec.js +47 -0
  31. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  32. package/cjs/src/index.d.ts +3 -2
  33. package/cjs/src/index.d.ts.map +1 -1
  34. package/cjs/src/index.js +3 -1
  35. package/cjs/src/index.js.map +1 -1
  36. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  37. package/cjs/src/mixpanel-service.js +2 -0
  38. package/cjs/src/mixpanel-service.js.map +1 -1
  39. package/cjs/src/mixpanel-service.spec.js +1 -0
  40. package/cjs/src/mixpanel-service.spec.js.map +1 -1
  41. package/cjs/src/types.d.ts +46 -18
  42. package/cjs/src/types.d.ts.map +1 -1
  43. package/cjs/src/types.js +7 -13
  44. package/cjs/src/types.js.map +1 -1
  45. package/cjs/src/utils/answerService/answerService.d.ts +34 -0
  46. package/cjs/src/utils/answerService/answerService.d.ts.map +1 -0
  47. package/cjs/src/utils/answerService/answerService.js +142 -0
  48. package/cjs/src/utils/answerService/answerService.js.map +1 -0
  49. package/cjs/src/utils/answerService/answerService.spec.d.ts +1 -0
  50. package/cjs/src/utils/answerService/answerService.spec.d.ts.map +1 -0
  51. package/cjs/src/utils/answerService/answerService.spec.js +1 -0
  52. package/cjs/src/utils/answerService/answerService.spec.js.map +1 -0
  53. package/cjs/src/utils/answerService/graphql-queries.d.ts +6 -0
  54. package/cjs/src/utils/answerService/graphql-queries.d.ts.map +1 -0
  55. package/cjs/src/utils/answerService/graphql-queries.js +123 -0
  56. package/cjs/src/utils/answerService/graphql-queries.js.map +1 -0
  57. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  58. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  59. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  60. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  61. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  62. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  63. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  64. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  65. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  66. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  67. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  68. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  69. package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
  70. package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
  71. package/cjs/src/utils/graphql/answerService/graphql-queries.js +80 -0
  72. package/cjs/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
  73. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  74. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  75. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  76. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  77. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  78. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  79. package/cjs/src/utils/graphql/sourceService.js +69 -0
  80. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  81. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  82. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  83. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  84. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  85. package/cjs/src/utils/processData.d.ts.map +1 -1
  86. package/cjs/src/utils/processData.js +7 -11
  87. package/cjs/src/utils/processData.js.map +1 -1
  88. package/cjs/src/utils/processData.spec.js +13 -17
  89. package/cjs/src/utils/processData.spec.js.map +1 -1
  90. package/cjs/src/utils.d.ts +6 -0
  91. package/cjs/src/utils.d.ts.map +1 -1
  92. package/cjs/src/utils.js +26 -1
  93. package/cjs/src/utils.js.map +1 -1
  94. package/dist/src/embed/app.d.ts +1 -0
  95. package/dist/src/embed/app.d.ts.map +1 -1
  96. package/dist/src/embed/base.d.ts +2 -0
  97. package/dist/src/embed/base.d.ts.map +1 -1
  98. package/dist/src/embed/liveboard.d.ts +1 -0
  99. package/dist/src/embed/liveboard.d.ts.map +1 -1
  100. package/dist/src/embed/sage.d.ts +1 -0
  101. package/dist/src/embed/sage.d.ts.map +1 -1
  102. package/dist/src/embed/search-bar.d.ts +1 -0
  103. package/dist/src/embed/search-bar.d.ts.map +1 -1
  104. package/dist/src/embed/search.d.ts +1 -0
  105. package/dist/src/embed/search.d.ts.map +1 -1
  106. package/dist/src/embed/ts-embed.d.ts +1 -0
  107. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  108. package/dist/src/index.d.ts +3 -2
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/mixpanel-service.d.ts.map +1 -1
  111. package/dist/src/types.d.ts +46 -18
  112. package/dist/src/types.d.ts.map +1 -1
  113. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  114. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  115. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  116. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  117. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  118. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  119. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  120. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  121. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  122. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  123. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  124. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  125. package/dist/src/utils/processData.d.ts.map +1 -1
  126. package/dist/src/utils.d.ts +6 -0
  127. package/dist/src/utils.d.ts.map +1 -1
  128. package/dist/tsembed-react.es.js +384 -68
  129. package/dist/tsembed-react.js +384 -68
  130. package/dist/tsembed.es.js +435 -72
  131. package/dist/tsembed.js +435 -71
  132. package/dist/visual-embed-sdk-react-full.d.ts +110 -19
  133. package/dist/visual-embed-sdk-react.d.ts +110 -19
  134. package/dist/visual-embed-sdk.d.ts +110 -19
  135. package/lib/package.json +2 -3
  136. package/lib/src/.index.d.ts.swp +0 -0
  137. package/lib/src/embed/app.d.ts +1 -0
  138. package/lib/src/embed/app.d.ts.map +1 -1
  139. package/lib/src/embed/app.js +1 -0
  140. package/lib/src/embed/app.js.map +1 -1
  141. package/lib/src/embed/base.d.ts +2 -0
  142. package/lib/src/embed/base.d.ts.map +1 -1
  143. package/lib/src/embed/base.js +2 -0
  144. package/lib/src/embed/base.js.map +1 -1
  145. package/lib/src/embed/liveboard.d.ts +1 -0
  146. package/lib/src/embed/liveboard.d.ts.map +1 -1
  147. package/lib/src/embed/liveboard.js +1 -0
  148. package/lib/src/embed/liveboard.js.map +1 -1
  149. package/lib/src/embed/sage.d.ts +1 -0
  150. package/lib/src/embed/sage.d.ts.map +1 -1
  151. package/lib/src/embed/sage.js +1 -0
  152. package/lib/src/embed/sage.js.map +1 -1
  153. package/lib/src/embed/search-bar.d.ts +1 -0
  154. package/lib/src/embed/search-bar.d.ts.map +1 -1
  155. package/lib/src/embed/search-bar.js +1 -0
  156. package/lib/src/embed/search-bar.js.map +1 -1
  157. package/lib/src/embed/search.d.ts +1 -0
  158. package/lib/src/embed/search.d.ts.map +1 -1
  159. package/lib/src/embed/search.js +1 -0
  160. package/lib/src/embed/search.js.map +1 -1
  161. package/lib/src/embed/ts-embed.d.ts +1 -0
  162. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  163. package/lib/src/embed/ts-embed.js +3 -0
  164. package/lib/src/embed/ts-embed.js.map +1 -1
  165. package/lib/src/embed/ts-embed.spec.js +47 -0
  166. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  167. package/lib/src/index.d.ts +3 -2
  168. package/lib/src/index.d.ts.map +1 -1
  169. package/lib/src/index.js +2 -1
  170. package/lib/src/index.js.map +1 -1
  171. package/lib/src/mixpanel-service.d.ts.map +1 -1
  172. package/lib/src/mixpanel-service.js +2 -0
  173. package/lib/src/mixpanel-service.js.map +1 -1
  174. package/lib/src/mixpanel-service.spec.js +1 -0
  175. package/lib/src/mixpanel-service.spec.js.map +1 -1
  176. package/lib/src/types.d.ts +46 -18
  177. package/lib/src/types.d.ts.map +1 -1
  178. package/lib/src/types.js +6 -12
  179. package/lib/src/types.js.map +1 -1
  180. package/lib/src/utils/answerService/answerService.d.ts +34 -0
  181. package/lib/src/utils/answerService/answerService.d.ts.map +1 -0
  182. package/lib/src/utils/answerService/answerService.js +137 -0
  183. package/lib/src/utils/answerService/answerService.js.map +1 -0
  184. package/lib/src/utils/answerService/answerService.spec.d.ts +1 -0
  185. package/lib/src/utils/answerService/answerService.spec.d.ts.map +1 -0
  186. package/lib/src/utils/answerService/answerService.spec.js +1 -0
  187. package/lib/src/utils/answerService/answerService.spec.js.map +1 -0
  188. package/lib/src/utils/answerService/graphql-queries.d.ts +6 -0
  189. package/lib/src/utils/answerService/graphql-queries.d.ts.map +1 -0
  190. package/lib/src/utils/answerService/graphql-queries.js +120 -0
  191. package/lib/src/utils/answerService/graphql-queries.js.map +1 -0
  192. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  193. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  194. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  195. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  196. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  197. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  198. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  199. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  200. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  201. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  202. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  203. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  204. package/lib/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
  205. package/lib/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
  206. package/lib/src/utils/graphql/answerService/graphql-queries.js +77 -0
  207. package/lib/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
  208. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  209. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  210. package/lib/src/utils/graphql/graphql-request.js +36 -0
  211. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  212. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  213. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  214. package/lib/src/utils/graphql/sourceService.js +65 -0
  215. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  216. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  217. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  218. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  219. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  220. package/lib/src/utils/processData.d.ts.map +1 -1
  221. package/lib/src/utils/processData.js +8 -12
  222. package/lib/src/utils/processData.js.map +1 -1
  223. package/lib/src/utils/processData.spec.js +14 -18
  224. package/lib/src/utils/processData.spec.js.map +1 -1
  225. package/lib/src/utils.d.ts +6 -0
  226. package/lib/src/utils.d.ts.map +1 -1
  227. package/lib/src/utils.js +23 -0
  228. package/lib/src/utils.js.map +1 -1
  229. package/lib/src/visual-embed-sdk.d.ts +116 -20
  230. package/package.json +4 -5
  231. package/src/embed/app.ts +2 -0
  232. package/src/embed/base.ts +2 -0
  233. package/src/embed/liveboard.ts +2 -0
  234. package/src/embed/sage.ts +2 -0
  235. package/src/embed/search-bar.tsx +2 -0
  236. package/src/embed/search.ts +2 -0
  237. package/src/embed/ts-embed.spec.ts +49 -0
  238. package/src/embed/ts-embed.ts +4 -0
  239. package/src/index.ts +5 -0
  240. package/src/mixpanel-service.spec.ts +1 -0
  241. package/src/mixpanel-service.ts +1 -0
  242. package/src/types.ts +50 -19
  243. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  244. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  245. package/src/utils/graphql/answerService/answerService.ts +234 -0
  246. package/src/utils/graphql/graphql-request.ts +45 -0
  247. package/src/utils/graphql/sourceService.spec.ts +10 -0
  248. package/src/utils/graphql/sourceService.ts +71 -0
  249. package/src/utils/processData.spec.ts +15 -25
  250. package/src/utils/processData.ts +13 -15
  251. package/src/utils.ts +24 -0
  252. package/src/utils/answerService.spec.ts +0 -41
  253. package/src/utils/answerService.ts +0 -63
package/src/embed/sage.ts CHANGED
@@ -100,6 +100,8 @@ export class SageEmbed extends V1Embed {
100
100
  */
101
101
  protected viewConfig: SageViewConfig;
102
102
 
103
+ protected embedComponentType = 'SageEmbed';
104
+
103
105
  // eslint-disable-next-line no-useless-constructor
104
106
  constructor(domSelector: DOMSelector, viewConfig: SageViewConfig) {
105
107
  super(domSelector, viewConfig);
@@ -45,6 +45,8 @@ export class SearchBarEmbed extends TsEmbed {
45
45
  */
46
46
  protected viewConfig: SearchBarViewConfig;
47
47
 
48
+ protected embedComponentType = 'SearchBarEmbed';
49
+
48
50
  constructor(domSelector: string, viewConfig: SearchBarViewConfig) {
49
51
  super(domSelector);
50
52
  this.viewConfig = viewConfig;
@@ -153,6 +153,8 @@ export class SearchEmbed extends TsEmbed {
153
153
  */
154
154
  protected viewConfig: SearchViewConfig;
155
155
 
156
+ protected embedComponentType = 'SearchEmbed';
157
+
156
158
  constructor(domSelector: DOMSelector, viewConfig: SearchViewConfig) {
157
159
  super(domSelector);
158
160
  this.viewConfig = viewConfig;
@@ -113,6 +113,8 @@ describe('Unit test case for ts embed', () => {
113
113
  runtimeFilterParams: null,
114
114
  hiddenHomeLeftNavItems: [],
115
115
  hiddenHomepageModules: [],
116
+ hostConfig: undefined,
117
+ reorderedHomepageModules: [],
116
118
  },
117
119
  });
118
120
  });
@@ -142,6 +144,8 @@ describe('Unit test case for ts embed', () => {
142
144
  runtimeFilterParams: null,
143
145
  hiddenHomeLeftNavItems: [],
144
146
  hiddenHomepageModules: [],
147
+ hostConfig: undefined,
148
+ reorderedHomepageModules: [],
145
149
  },
146
150
  });
147
151
  expect(getIFrameSrc()).toContain(
@@ -181,6 +185,44 @@ describe('Unit test case for ts embed', () => {
181
185
  hiddenHomeLeftNavItems: [],
182
186
  hiddenHomepageModules: [HomepageModule.MyLibrary,
183
187
  HomepageModule.Learning],
188
+ reorderedHomepageModules: [],
189
+ },
190
+ });
191
+ });
192
+
193
+ test('Reordering the home page modules from view Config should be part of app_init payload', async () => {
194
+ const mockEmbedEventPayload = {
195
+ type: EmbedEvent.APP_INIT,
196
+ data: {},
197
+ };
198
+ const mockedReorderedHomepageModules: HomepageModule[] = [
199
+ HomepageModule.MyLibrary,
200
+ HomepageModule.Watchlist,
201
+ ];
202
+
203
+ const searchEmbed = new SearchEmbed(getRootEl(), {
204
+ ...defaultViewConfig,
205
+ reorderedHomepageModules: mockedReorderedHomepageModules,
206
+ });
207
+ searchEmbed.render();
208
+ const mockPort: any = {
209
+ postMessage: jest.fn(),
210
+ };
211
+ await executeAfterWait(() => {
212
+ const iframe = getIFrameEl();
213
+ postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
214
+ });
215
+ expect(mockPort.postMessage).toHaveBeenCalledWith({
216
+ type: EmbedEvent.APP_INIT,
217
+ data: {
218
+ customisations,
219
+ authToken: '',
220
+ hostConfig: undefined,
221
+ runtimeFilterParams: null,
222
+ hiddenHomeLeftNavItems: [],
223
+ hiddenHomepageModules: [],
224
+ reorderedHomepageModules: [HomepageModule.MyLibrary,
225
+ HomepageModule.Watchlist],
184
226
  },
185
227
  });
186
228
  });
@@ -219,6 +261,8 @@ describe('Unit test case for ts embed', () => {
219
261
  runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
220
262
  hiddenHomeLeftNavItems: [],
221
263
  hiddenHomepageModules: [],
264
+ hostConfig: undefined,
265
+ reorderedHomepageModules: [],
222
266
  },
223
267
  });
224
268
  });
@@ -257,6 +301,8 @@ describe('Unit test case for ts embed', () => {
257
301
  runtimeFilterParams: null,
258
302
  hiddenHomeLeftNavItems: [],
259
303
  hiddenHomepageModules: [],
304
+ hostConfig: undefined,
305
+ reorderedHomepageModules: [],
260
306
  },
261
307
  });
262
308
  });
@@ -293,6 +339,7 @@ describe('Unit test case for ts embed', () => {
293
339
  hiddenHomeLeftNavItems: [HomeLeftNavItem.Home,
294
340
  HomeLeftNavItem.Documentation],
295
341
  hiddenHomepageModules: [],
342
+ reorderedHomepageModules: [],
296
343
  },
297
344
  });
298
345
  });
@@ -448,6 +495,8 @@ describe('Unit test case for ts embed', () => {
448
495
  runtimeFilterParams: null,
449
496
  hiddenHomeLeftNavItems: [],
450
497
  hiddenHomepageModules: [],
498
+ hostConfig: undefined,
499
+ reorderedHomepageModules: [],
451
500
  },
452
501
  });
453
502
  });
@@ -115,6 +115,8 @@ export class TsEmbed {
115
115
  */
116
116
  protected thoughtSpotV2Base: string;
117
117
 
118
+ protected embedComponentType = 'TsEmbed';
119
+
118
120
  /**
119
121
  * A map of event handlers for particular message types triggered
120
122
  * by the embedded app; multiple event handlers can be registered
@@ -159,6 +161,7 @@ export class TsEmbed {
159
161
  this.registerAppInit();
160
162
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
161
163
  ...viewConfig,
164
+ embedComponentType: this.embedComponentType,
162
165
  });
163
166
  }
164
167
 
@@ -277,6 +280,7 @@ export class TsEmbed {
277
280
  ? getRuntimeFilters(this.viewConfig.runtimeFilters)
278
281
  : null,
279
282
  hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
283
+ reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
280
284
  hostConfig: this.embedConfig.hostConfig,
281
285
  hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
282
286
  ? this.viewConfig?.hiddenHomeLeftNavItems
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@
10
10
  import { AppEmbed, Page, AppViewConfig } from './embed/app';
11
11
  import {
12
12
  init, prefetch, logout, getEmbedConfig, executeTML, exportTML,
13
+ executeTMLInput, exportTMLInput,
13
14
  } from './embed/base';
14
15
  import { PinboardEmbed, LiveboardViewConfig, LiveboardEmbed } from './embed/liveboard';
15
16
  import { SearchEmbed, SearchViewConfig } from './embed/search';
@@ -41,6 +42,7 @@ import {
41
42
  } from './types';
42
43
  import { CustomCssVariables } from './css-variables';
43
44
  import { SageEmbed, SageViewConfig } from './embed/sage';
45
+ import { AnswerService } from './utils/graphql/answerService/answerService';
44
46
 
45
47
  export {
46
48
  init,
@@ -48,6 +50,8 @@ export {
48
50
  prefetch,
49
51
  executeTML,
50
52
  exportTML,
53
+ executeTMLInput,
54
+ exportTMLInput,
51
55
  getEmbedConfig as getInitConfig,
52
56
  getSessionInfo,
53
57
  SearchEmbed,
@@ -60,6 +64,7 @@ export {
60
64
  AuthStatus,
61
65
  AuthEvent,
62
66
  AuthEventEmitter,
67
+ AnswerService,
63
68
  // types
64
69
  Page,
65
70
  AuthType,
@@ -57,6 +57,7 @@ describe('Unit test for mixpanel', () => {
57
57
  clusterId: sessionInfo.clusterId,
58
58
  clusterName: sessionInfo.clusterName,
59
59
  releaseVersion: sessionInfo.releaseVersion,
60
+ hostAppUrl: 'localhost',
60
61
  });
61
62
  expect(mixpanel.identify).not.toHaveBeenCalledWith(sessionInfo.userGUID);
62
63
  });
@@ -71,6 +71,7 @@ export function initMixpanel(sessionInfo: any): void {
71
71
  clusterId: sessionInfo.clusterId,
72
72
  clusterName: sessionInfo.clusterName,
73
73
  releaseVersion: sessionInfo.releaseVersion,
74
+ hostAppUrl: window?.location?.host || '',
74
75
  });
75
76
  isMixpanelInitialized = true;
76
77
  emptyQueue();
package/src/types.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  import { CustomCssVariables } from './css-variables';
11
+ import type { SessionInterface } from './utils/graphql/answerService/answerService';
11
12
 
12
13
  /**
13
14
  * The authentication mechanism for allowing access to the
@@ -533,7 +534,7 @@ export interface EmbedConfig {
533
534
  }
534
535
 
535
536
  // eslint-disable-next-line @typescript-eslint/no-empty-interface
536
- export interface LayoutConfig {}
537
+ export interface LayoutConfig { }
537
538
 
538
539
  /**
539
540
  * Embedded iFrame configuration
@@ -757,6 +758,12 @@ export interface ViewConfig {
757
758
  * @version SDK: 1.27.0 | Thoughtspot: 9.8.0.cl
758
759
  */
759
760
  hiddenHomepageModules?: HomepageModule[];
761
+ /**
762
+ * reordering the home page modules
763
+ * eg: reorderedHomepageModules = [HomepageModule.MyLibrary, HomepageModule.Watchlist]
764
+ * @version SDK: 1.28.0 | Thoughtspot: 9.9.0.cl
765
+ */
766
+ reorderedHomepageModules?: HomepageModule[];
760
767
  /**
761
768
  * The list of tab IDs to show in the embedded.
762
769
  * Only this Tabs will be shown in their respective LBs.
@@ -917,27 +924,27 @@ export enum HomepageModule {
917
924
  /**
918
925
  * Search bar
919
926
  */
920
- Search = 'search',
927
+ Search = 'SEARCH',
921
928
  /**
922
929
  * kPI watchlist module
923
930
  */
924
- Watchlist = 'watchlist',
931
+ Watchlist = 'WATCHLIST',
925
932
  /**
926
933
  * favorite objects
927
934
  */
928
- Favorite = 'favorite',
935
+ Favorite = 'FAVORITE',
929
936
  /**
930
937
  * List of answers and liveboards
931
938
  */
932
- MyLibrary = 'mylibrary',
939
+ MyLibrary = 'MY_LIBRARY',
933
940
  /**
934
941
  * Trending list
935
942
  */
936
- Trending = 'trending',
943
+ Trending = 'TRENDING',
937
944
  /**
938
945
  * Learning videos
939
946
  */
940
- Learning = 'learning',
947
+ Learning = 'LEARNING',
941
948
  }
942
949
 
943
950
  /**
@@ -3122,18 +3129,6 @@ export enum Action {
3122
3129
  PersonalisedViewsDropdown = 'personalisedViewsDropdown',
3123
3130
  }
3124
3131
 
3125
- export interface SessionInterface {
3126
- sessionId: string;
3127
- genNo: number;
3128
- acSession: { sessionId: string; genNo: number };
3129
- }
3130
-
3131
- // eslint-disable-next-line no-shadow
3132
- export enum OperationType {
3133
- GetChartWithData = 'GetChartWithData',
3134
- GetTableWithHeadlineData = 'GetTableWithHeadlineData',
3135
- }
3136
-
3137
3132
  export interface AnswerServiceType {
3138
3133
  getAnswer?: (offset: number, batchSize: number) => any;
3139
3134
  }
@@ -3152,3 +3147,39 @@ export enum ContextMenuTriggerOptions {
3152
3147
  LEFT_CLICK = 'left-click',
3153
3148
  RIGHT_CLICK = 'right-click',
3154
3149
  }
3150
+
3151
+ export interface ColumnValue {
3152
+ column: {
3153
+ id: string,
3154
+ name: string,
3155
+ dataType: string,
3156
+ [key: string]: any
3157
+ },
3158
+ value: string | number | boolean;
3159
+ }
3160
+
3161
+ export interface VizPoint {
3162
+ selectedAttributes: ColumnValue[],
3163
+ selectedMeasures: ColumnValue[]
3164
+ }
3165
+
3166
+ export interface CustomActionPayload {
3167
+ contextMenuPoints?: {
3168
+ clickedPoint: VizPoint
3169
+ selectedPoints: VizPoint[]
3170
+ };
3171
+ embedAnswerData: {
3172
+ name: string,
3173
+ id: string,
3174
+ sources: {
3175
+ header: {
3176
+ guid: string
3177
+ }
3178
+ },
3179
+ columns: any[],
3180
+ data: any[],
3181
+ [key: string]: any
3182
+ };
3183
+ session: SessionInterface;
3184
+ vizId?: string;
3185
+ }
@@ -0,0 +1,80 @@
1
+ const bachSessionId = `
2
+ id {
3
+ sessionId
4
+ genNo
5
+ acSession {
6
+ sessionId
7
+ genNo
8
+ }
9
+ }
10
+ `;
11
+
12
+ export const getUnaggregatedAnswerSession = `
13
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
14
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
15
+ ${bachSessionId}
16
+ answer {
17
+ visualizations {
18
+ ... on TableViz {
19
+ columns {
20
+ column {
21
+ id
22
+ name
23
+ referencedColumns {
24
+ guid
25
+ displayName
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ `;
35
+
36
+ export const removeColumns = `
37
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
38
+ Answer__removeColumns(
39
+ session: $session
40
+ logicalColumnIds: $logicalColumnIds
41
+ columnIds: $columnIds
42
+ ) {
43
+ ${bachSessionId}
44
+ }
45
+ }
46
+ `;
47
+
48
+ export const addColumns = `
49
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
50
+ Answer__addColumn(session: $session, columns: $columns) {
51
+ ${bachSessionId}
52
+ }
53
+ }
54
+ `;
55
+
56
+ export const getAnswerData = `
57
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
58
+ getAnswer(session: $session) {
59
+ ${bachSessionId}
60
+ answer {
61
+ id
62
+ visualizations {
63
+ id
64
+ ... on TableViz {
65
+ columns {
66
+ column {
67
+ id
68
+ name
69
+ type
70
+ aggregationType
71
+ dataType
72
+ }
73
+ }
74
+ data(deadline: $deadline, pagination: $dataPaginationParams)
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ `;
@@ -0,0 +1,231 @@
1
+ import 'jest-fetch-mock';
2
+ import { VizPoint } from 'src/types';
3
+ import { AnswerService } from './answerService';
4
+ import { getAnswerData, removeColumns } from './answer-queries';
5
+
6
+ const defaultSession = {
7
+ sessionId: 'id',
8
+ genNo: 1,
9
+ acSession: {
10
+ sessionId: 'ac',
11
+ genNo: 0,
12
+ },
13
+ };
14
+ /**
15
+ *
16
+ * @param answer
17
+ * @param point
18
+ */
19
+ function createAnswerService(answer = {}, point?: VizPoint[]) {
20
+ return new AnswerService(
21
+ defaultSession,
22
+ answer,
23
+ 'https://tshost',
24
+ point,
25
+ );
26
+ }
27
+
28
+ describe('Answer service tests', () => {
29
+ beforeEach(() => {
30
+ fetchMock.resetMocks();
31
+ });
32
+ test('Execute query should execute the supplied graphql on the session', async () => {
33
+ fetchMock.mockResponseOnce(JSON.stringify({
34
+ data: {
35
+ Bla: {
36
+ id: {},
37
+ },
38
+ },
39
+ }));
40
+ const answerService = createAnswerService();
41
+ answerService.executeQuery(
42
+ 'query Bla {}',
43
+ { a: 1 },
44
+ );
45
+ expect(fetchMock).toBeCalledWith('https://tshost/prism/?op=Bla', expect.objectContaining({
46
+ body: JSON.stringify({
47
+ operationName: 'Bla',
48
+ query: 'query Bla {}',
49
+ variables: {
50
+ session: defaultSession,
51
+ a: 1,
52
+ },
53
+ }),
54
+ }));
55
+ });
56
+
57
+ test('Should return error when failure', async () => {
58
+ fetchMock.mockRejectOnce(new Error('testError'));
59
+ const answerService = createAnswerService();
60
+ const data = await answerService.executeQuery(
61
+ 'query Bla {}',
62
+ { a: 1 },
63
+ );
64
+ expect(data.message).toBe('testError');
65
+ });
66
+
67
+ test('fetchData should call the right graphql, and return data', async () => {
68
+ fetchMock.mockResponseOnce(JSON.stringify({
69
+ data: {
70
+ getAnswer: {
71
+ id: {},
72
+ answer: {
73
+ visualizations: [{
74
+ columns: [{
75
+ column: {
76
+ id: 'id1',
77
+ },
78
+ }],
79
+ data: {
80
+ foo: 1,
81
+ },
82
+ }],
83
+ },
84
+ },
85
+ },
86
+ }));
87
+ const answerService = createAnswerService();
88
+ const data = await answerService.fetchData(20, 10);
89
+ expect(fetchMock).toHaveBeenCalledWith(
90
+ 'https://tshost/prism/?op=GetTableWithHeadlineData',
91
+ expect.objectContaining({
92
+ body: JSON.stringify({
93
+ operationName: 'GetTableWithHeadlineData',
94
+ query: getAnswerData,
95
+ variables: {
96
+ session: defaultSession,
97
+ deadline: 0,
98
+ dataPaginationParams: {
99
+ isClientPaginated: true,
100
+ offset: 20,
101
+ size: 10,
102
+ },
103
+ },
104
+ }),
105
+ }),
106
+ );
107
+ expect(data.columns[0].column.id).toBe('id1');
108
+ expect(data.data.foo).toBe(1);
109
+ });
110
+
111
+ test('fetchCSVBlob should call the right API', async () => {
112
+ fetchMock.once('Bla');
113
+ const answerService = createAnswerService();
114
+ answerService.fetchCSVBlob(undefined, true);
115
+ expect(fetchMock).toHaveBeenCalledWith(
116
+ `https://tshost/prism/download/answer/csv?sessionId=${defaultSession.sessionId}&genNo=${defaultSession.genNo}&userLocale=en-us&exportFileName=data&omitInfo=true`,
117
+ expect.objectContaining({}),
118
+ );
119
+ });
120
+
121
+ test('getUnderlyingDataForPoint should call the right APIs', async () => {
122
+ fetchMock.mockResponses(
123
+ JSON.stringify({
124
+ data: {
125
+ getSourceDetailById: [{
126
+ columns: [{
127
+ id: 'id1',
128
+ name: 'col1',
129
+ }, {
130
+ id: 'id2',
131
+ name: 'col2',
132
+ }, {
133
+ id: 'id3',
134
+ name: 'col3',
135
+ }],
136
+ }],
137
+ },
138
+ }),
139
+ JSON.stringify({
140
+ data: {
141
+ Answer__getUnaggregatedAnswer: {
142
+ id: {
143
+ ...defaultSession,
144
+ },
145
+ answer: {
146
+ visualizations: [{
147
+ columns: [{
148
+ column: {
149
+ id: 'oid1',
150
+ name: 'col1',
151
+ referencedColumns: [{
152
+ guid: 'id1',
153
+ }],
154
+ },
155
+ }],
156
+ }],
157
+ },
158
+ },
159
+ },
160
+ }),
161
+ JSON.stringify({
162
+ data: {
163
+ Answer__addColumn: {
164
+ id: {
165
+ genNo: 2,
166
+ },
167
+ },
168
+ },
169
+ }),
170
+ JSON.stringify({
171
+ data: {
172
+ Answer__removeColumns: {
173
+ id: {
174
+ genNo: 3,
175
+ },
176
+ },
177
+ },
178
+ }),
179
+ );
180
+ const answerService = createAnswerService({
181
+ sources: [{
182
+ header: {
183
+ guid: 'source1',
184
+ },
185
+ }],
186
+ }, [{
187
+ selectedAttributes: [{
188
+ column: {
189
+ id: 'oid1', // output column id
190
+ name: 'col1',
191
+ dataType: 'CHAR',
192
+ },
193
+ value: '1',
194
+ }, {
195
+ column: {
196
+ id: 'oid3',
197
+ name: 'col3',
198
+ dataType: 'DATE',
199
+ },
200
+ value: 12345,
201
+ }],
202
+ selectedMeasures: [],
203
+ }]);
204
+ const underlying = await answerService.getUnderlyingDataForPoint(['col2']);
205
+ expect(fetchMock).toHaveBeenCalledTimes(4);
206
+ expect(underlying.getSession().genNo).toBe(3);
207
+ expect(fetchMock).toHaveBeenCalledWith(
208
+ 'https://tshost/prism/?op=RemoveColumns',
209
+ expect.objectContaining({
210
+ body: JSON.stringify({
211
+ operationName: 'RemoveColumns',
212
+ query: removeColumns,
213
+ variables: {
214
+ session: {
215
+ ...defaultSession,
216
+ genNo: 2,
217
+ },
218
+ logicalColumnIds: [
219
+ 'id1',
220
+ ],
221
+ },
222
+ }),
223
+ }),
224
+ );
225
+ });
226
+
227
+ test('getUnderlyingDataForPoint should throw when no point is selected', async () => {
228
+ const answerService = createAnswerService({}, null);
229
+ await expect(answerService.getUnderlyingDataForPoint(['col2'])).rejects.toThrow();
230
+ });
231
+ });