@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.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 (231) hide show
  1. package/cjs/package.json +2 -3
  2. package/cjs/src/embed/app.d.ts +3 -1
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +8 -2
  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 +3 -2
  11. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  12. package/cjs/src/embed/liveboard.js +6 -5
  13. package/cjs/src/embed/liveboard.js.map +1 -1
  14. package/cjs/src/embed/sage.d.ts +4 -1
  15. package/cjs/src/embed/sage.d.ts.map +1 -1
  16. package/cjs/src/embed/sage.js +9 -2
  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 +5 -1
  23. package/cjs/src/embed/search.d.ts.map +1 -1
  24. package/cjs/src/embed/search.js +10 -2
  25. package/cjs/src/embed/search.js.map +1 -1
  26. package/cjs/src/embed/ts-embed.d.ts +9 -3
  27. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  28. package/cjs/src/embed/ts-embed.js +50 -20
  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/react/index.d.ts +5 -1
  42. package/cjs/src/react/index.d.ts.map +1 -1
  43. package/cjs/src/react/index.js +8 -8
  44. package/cjs/src/react/index.js.map +1 -1
  45. package/cjs/src/types.d.ts +46 -18
  46. package/cjs/src/types.d.ts.map +1 -1
  47. package/cjs/src/types.js +7 -13
  48. package/cjs/src/types.js.map +1 -1
  49. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  50. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  51. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  52. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  53. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  54. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  55. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  56. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  57. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  58. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  59. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  60. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  61. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  62. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  63. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  64. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  65. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  66. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  67. package/cjs/src/utils/graphql/sourceService.js +69 -0
  68. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  69. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  70. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  71. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  72. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  73. package/cjs/src/utils/processData.d.ts.map +1 -1
  74. package/cjs/src/utils/processData.js +7 -11
  75. package/cjs/src/utils/processData.js.map +1 -1
  76. package/cjs/src/utils/processData.spec.js +13 -17
  77. package/cjs/src/utils/processData.spec.js.map +1 -1
  78. package/cjs/src/utils.d.ts +6 -0
  79. package/cjs/src/utils.d.ts.map +1 -1
  80. package/cjs/src/utils.js +26 -1
  81. package/cjs/src/utils.js.map +1 -1
  82. package/dist/src/embed/app.d.ts +3 -1
  83. package/dist/src/embed/app.d.ts.map +1 -1
  84. package/dist/src/embed/base.d.ts +2 -0
  85. package/dist/src/embed/base.d.ts.map +1 -1
  86. package/dist/src/embed/liveboard.d.ts +3 -2
  87. package/dist/src/embed/liveboard.d.ts.map +1 -1
  88. package/dist/src/embed/sage.d.ts +4 -1
  89. package/dist/src/embed/sage.d.ts.map +1 -1
  90. package/dist/src/embed/search-bar.d.ts +1 -0
  91. package/dist/src/embed/search-bar.d.ts.map +1 -1
  92. package/dist/src/embed/search.d.ts +5 -1
  93. package/dist/src/embed/search.d.ts.map +1 -1
  94. package/dist/src/embed/ts-embed.d.ts +9 -3
  95. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  96. package/dist/src/index.d.ts +3 -2
  97. package/dist/src/index.d.ts.map +1 -1
  98. package/dist/src/mixpanel-service.d.ts.map +1 -1
  99. package/dist/src/react/index.d.ts +5 -1
  100. package/dist/src/react/index.d.ts.map +1 -1
  101. package/dist/src/types.d.ts +46 -18
  102. package/dist/src/types.d.ts.map +1 -1
  103. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  104. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  105. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  106. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  107. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  108. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  109. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  110. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  111. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  112. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  113. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  114. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  115. package/dist/src/utils/processData.d.ts.map +1 -1
  116. package/dist/src/utils.d.ts +6 -0
  117. package/dist/src/utils.d.ts.map +1 -1
  118. package/dist/tsembed-react.es.js +468 -107
  119. package/dist/tsembed-react.js +471 -106
  120. package/dist/tsembed.es.js +511 -103
  121. package/dist/tsembed.js +511 -102
  122. package/dist/visual-embed-sdk-react-full.d.ts +132 -28
  123. package/dist/visual-embed-sdk-react.d.ts +132 -28
  124. package/dist/visual-embed-sdk.d.ts +127 -27
  125. package/lib/package.json +2 -3
  126. package/lib/src/embed/app.d.ts +3 -1
  127. package/lib/src/embed/app.d.ts.map +1 -1
  128. package/lib/src/embed/app.js +8 -2
  129. package/lib/src/embed/app.js.map +1 -1
  130. package/lib/src/embed/base.d.ts +2 -0
  131. package/lib/src/embed/base.d.ts.map +1 -1
  132. package/lib/src/embed/base.js +2 -0
  133. package/lib/src/embed/base.js.map +1 -1
  134. package/lib/src/embed/liveboard.d.ts +3 -2
  135. package/lib/src/embed/liveboard.d.ts.map +1 -1
  136. package/lib/src/embed/liveboard.js +6 -5
  137. package/lib/src/embed/liveboard.js.map +1 -1
  138. package/lib/src/embed/sage.d.ts +4 -1
  139. package/lib/src/embed/sage.d.ts.map +1 -1
  140. package/lib/src/embed/sage.js +9 -2
  141. package/lib/src/embed/sage.js.map +1 -1
  142. package/lib/src/embed/search-bar.d.ts +1 -0
  143. package/lib/src/embed/search-bar.d.ts.map +1 -1
  144. package/lib/src/embed/search-bar.js +1 -0
  145. package/lib/src/embed/search-bar.js.map +1 -1
  146. package/lib/src/embed/search.d.ts +5 -1
  147. package/lib/src/embed/search.d.ts.map +1 -1
  148. package/lib/src/embed/search.js +10 -2
  149. package/lib/src/embed/search.js.map +1 -1
  150. package/lib/src/embed/ts-embed.d.ts +9 -3
  151. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  152. package/lib/src/embed/ts-embed.js +50 -20
  153. package/lib/src/embed/ts-embed.js.map +1 -1
  154. package/lib/src/embed/ts-embed.spec.js +47 -0
  155. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  156. package/lib/src/index.d.ts +3 -2
  157. package/lib/src/index.d.ts.map +1 -1
  158. package/lib/src/index.js +2 -1
  159. package/lib/src/index.js.map +1 -1
  160. package/lib/src/mixpanel-service.d.ts.map +1 -1
  161. package/lib/src/mixpanel-service.js +2 -0
  162. package/lib/src/mixpanel-service.js.map +1 -1
  163. package/lib/src/mixpanel-service.spec.js +1 -0
  164. package/lib/src/mixpanel-service.spec.js.map +1 -1
  165. package/lib/src/react/index.d.ts +5 -1
  166. package/lib/src/react/index.d.ts.map +1 -1
  167. package/lib/src/react/index.js +7 -7
  168. package/lib/src/react/index.js.map +1 -1
  169. package/lib/src/types.d.ts +46 -18
  170. package/lib/src/types.d.ts.map +1 -1
  171. package/lib/src/types.js +6 -12
  172. package/lib/src/types.js.map +1 -1
  173. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  174. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  175. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  176. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  177. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  178. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  179. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  180. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  181. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  182. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  183. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  184. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  185. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  186. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  187. package/lib/src/utils/graphql/graphql-request.js +36 -0
  188. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  189. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  190. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  191. package/lib/src/utils/graphql/sourceService.js +65 -0
  192. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  193. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  194. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  195. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  196. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  197. package/lib/src/utils/processData.d.ts.map +1 -1
  198. package/lib/src/utils/processData.js +8 -12
  199. package/lib/src/utils/processData.js.map +1 -1
  200. package/lib/src/utils/processData.spec.js +14 -18
  201. package/lib/src/utils/processData.spec.js.map +1 -1
  202. package/lib/src/utils.d.ts +6 -0
  203. package/lib/src/utils.d.ts.map +1 -1
  204. package/lib/src/utils.js +23 -0
  205. package/lib/src/utils.js.map +1 -1
  206. package/lib/src/visual-embed-sdk.d.ts +133 -28
  207. package/package.json +2 -3
  208. package/src/embed/app.ts +12 -2
  209. package/src/embed/base.ts +2 -0
  210. package/src/embed/liveboard.ts +7 -5
  211. package/src/embed/sage.ts +13 -2
  212. package/src/embed/search-bar.tsx +2 -0
  213. package/src/embed/search.ts +14 -2
  214. package/src/embed/ts-embed.spec.ts +49 -0
  215. package/src/embed/ts-embed.ts +61 -22
  216. package/src/index.ts +5 -0
  217. package/src/mixpanel-service.spec.ts +1 -0
  218. package/src/mixpanel-service.ts +1 -0
  219. package/src/react/index.tsx +40 -37
  220. package/src/types.ts +50 -19
  221. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  222. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  223. package/src/utils/graphql/answerService/answerService.ts +234 -0
  224. package/src/utils/graphql/graphql-request.ts +45 -0
  225. package/src/utils/graphql/sourceService.spec.ts +10 -0
  226. package/src/utils/graphql/sourceService.ts +71 -0
  227. package/src/utils/processData.spec.ts +15 -25
  228. package/src/utils/processData.ts +13 -15
  229. package/src/utils.ts +25 -0
  230. package/src/utils/answerService.spec.ts +0 -41
  231. package/src/utils/answerService.ts +0 -63
@@ -1,3 +1,47 @@
1
+ // istanbul ignore next
2
+ const isObject = (obj) => {
3
+ if (typeof obj === "object" && obj !== null) {
4
+ if (typeof Object.getPrototypeOf === "function") {
5
+ const prototype = Object.getPrototypeOf(obj);
6
+ return prototype === Object.prototype || prototype === null;
7
+ }
8
+ return Object.prototype.toString.call(obj) === "[object Object]";
9
+ }
10
+ return false;
11
+ };
12
+ const merge = (...objects) => objects.reduce((result, current) => {
13
+ if (Array.isArray(current)) {
14
+ throw new TypeError("Arguments provided to ts-deepmerge must be objects, not arrays.");
15
+ }
16
+ Object.keys(current).forEach((key) => {
17
+ if (["__proto__", "constructor", "prototype"].includes(key)) {
18
+ return;
19
+ }
20
+ if (Array.isArray(result[key]) && Array.isArray(current[key])) {
21
+ result[key] = merge.options.mergeArrays
22
+ ? Array.from(new Set(result[key].concat(current[key])))
23
+ : current[key];
24
+ }
25
+ else if (isObject(result[key]) && isObject(current[key])) {
26
+ result[key] = merge(result[key], current[key]);
27
+ }
28
+ else {
29
+ result[key] = current[key];
30
+ }
31
+ });
32
+ return result;
33
+ }, {});
34
+ const defaultOptions = {
35
+ mergeArrays: true,
36
+ };
37
+ merge.options = defaultOptions;
38
+ merge.withOptions = (options, ...objects) => {
39
+ merge.options = Object.assign({ mergeArrays: true }, options);
40
+ const result = merge(...objects);
41
+ merge.options = defaultOptions;
42
+ return result;
43
+ };
44
+
1
45
  /**
2
46
  * Copyright (c) 2023
3
47
  *
@@ -194,6 +238,25 @@ const getRuntimeFilters = (runtimefilters) => getFilterQuery(runtimefilters || [
194
238
  function getDOMNode(domSelector) {
195
239
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
196
240
  }
241
+ const deepMerge = (target, source) => merge(target, source);
242
+ /**
243
+ *
244
+ * @param obj
245
+ */
246
+ function removeTypename(obj) {
247
+ if (!obj || typeof obj !== 'object')
248
+ return obj;
249
+ // eslint-disable-next-line no-restricted-syntax
250
+ for (const key in obj) {
251
+ if (key === '__typename') {
252
+ delete obj[key];
253
+ }
254
+ else if (typeof obj[key] === 'object') {
255
+ removeTypename(obj[key]);
256
+ }
257
+ }
258
+ return obj;
259
+ }
197
260
  const setStyleProperties = (element, styleProperties) => {
198
261
  if (!element || !styleProperties)
199
262
  return;
@@ -207,6 +270,11 @@ const removeStyleProperties = (element, styleProperties) => {
207
270
  styleProperties.forEach((styleProperty) => {
208
271
  element.style.removeProperty(styleProperty);
209
272
  });
273
+ };
274
+ const getOperationNameFromQuery = (query) => {
275
+ const regex = /(?:query|mutation)\s+(\w+)/;
276
+ const matches = query.match(regex);
277
+ return matches === null || matches === void 0 ? void 0 : matches[1];
210
278
  };
211
279
 
212
280
  /**
@@ -470,27 +538,27 @@ var HomepageModule;
470
538
  /**
471
539
  * Search bar
472
540
  */
473
- HomepageModule["Search"] = "search";
541
+ HomepageModule["Search"] = "SEARCH";
474
542
  /**
475
543
  * kPI watchlist module
476
544
  */
477
- HomepageModule["Watchlist"] = "watchlist";
545
+ HomepageModule["Watchlist"] = "WATCHLIST";
478
546
  /**
479
547
  * favorite objects
480
548
  */
481
- HomepageModule["Favorite"] = "favorite";
549
+ HomepageModule["Favorite"] = "FAVORITE";
482
550
  /**
483
551
  * List of answers and liveboards
484
552
  */
485
- HomepageModule["MyLibrary"] = "mylibrary";
553
+ HomepageModule["MyLibrary"] = "MY_LIBRARY";
486
554
  /**
487
555
  * Trending list
488
556
  */
489
- HomepageModule["Trending"] = "trending";
557
+ HomepageModule["Trending"] = "TRENDING";
490
558
  /**
491
559
  * Learning videos
492
560
  */
493
- HomepageModule["Learning"] = "learning";
561
+ HomepageModule["Learning"] = "LEARNING";
494
562
  })(HomepageModule || (HomepageModule = {}));
495
563
  /**
496
564
  * Event types emitted by the embedded ThoughtSpot application.
@@ -2638,12 +2706,6 @@ var Action;
2638
2706
  */
2639
2707
  Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
2640
2708
  })(Action || (Action = {}));
2641
- // eslint-disable-next-line no-shadow
2642
- var OperationType;
2643
- (function (OperationType) {
2644
- OperationType["GetChartWithData"] = "GetChartWithData";
2645
- OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
2646
- })(OperationType || (OperationType = {}));
2647
2709
  var PrefetchFeatures;
2648
2710
  (function (PrefetchFeatures) {
2649
2711
  PrefetchFeatures["FullApp"] = "FullApp";
@@ -8759,6 +8821,7 @@ function emptyQueue() {
8759
8821
  * @param sessionInfo
8760
8822
  */
8761
8823
  function initMixpanel(sessionInfo) {
8824
+ var _a;
8762
8825
  if (!sessionInfo || !sessionInfo.mixpanelToken) {
8763
8826
  return;
8764
8827
  }
@@ -8776,6 +8839,7 @@ function initMixpanel(sessionInfo) {
8776
8839
  clusterId: sessionInfo.clusterId,
8777
8840
  clusterName: sessionInfo.clusterName,
8778
8841
  releaseVersion: sessionInfo.releaseVersion,
8842
+ hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
8779
8843
  });
8780
8844
  isMixpanelInitialized = true;
8781
8845
  emptyQueue();
@@ -9268,12 +9332,12 @@ var _baseGetTag = baseGetTag;
9268
9332
  * _.isObject(null);
9269
9333
  * // => false
9270
9334
  */
9271
- function isObject(value) {
9335
+ function isObject$1(value) {
9272
9336
  var type = typeof value;
9273
9337
  return value != null && (type == 'object' || type == 'function');
9274
9338
  }
9275
9339
 
9276
- var isObject_1 = isObject;
9340
+ var isObject_1 = isObject$1;
9277
9341
 
9278
9342
  /** `Object#toString` result references. */
9279
9343
  var asyncTag = '[object AsyncFunction]',
@@ -10104,9 +10168,9 @@ function cacheHas(cache, key) {
10104
10168
  var _cacheHas = cacheHas;
10105
10169
 
10106
10170
  /* Built-in method references that are verified to be native. */
10107
- var Set = _getNative(_root, 'Set');
10171
+ var Set$1 = _getNative(_root, 'Set');
10108
10172
 
10109
- var _Set = Set;
10173
+ var _Set = Set$1;
10110
10174
 
10111
10175
  /**
10112
10176
  * This method returns `undefined`.
@@ -10964,6 +11028,7 @@ const renderInQueue = (fn) => {
10964
11028
  *
10965
11029
  * @param data
10966
11030
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
11031
+ * @group Global methods
10967
11032
  */
10968
11033
  const executeTML = async (data) => {
10969
11034
  const { thoughtSpotHost, authType } = config;
@@ -11011,6 +11076,7 @@ const executeTML = async (data) => {
11011
11076
  *
11012
11077
  * @param data
11013
11078
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
11079
+ * @group Global methods
11014
11080
  */
11015
11081
  const exportTML = async (data) => {
11016
11082
  const { thoughtSpotHost, authType } = config;
@@ -11056,58 +11122,351 @@ const exportTML = async (data) => {
11056
11122
 
11057
11123
  /**
11058
11124
  *
11059
- * @param session
11060
- * @param query
11061
- * @param operation
11125
+ * @param root0
11126
+ * @param root0.query
11127
+ * @param root0.variables
11128
+ * @param root0.thoughtSpotHost
11129
+ * @param root0.isCompositeQuery
11130
+ */
11131
+ async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
11132
+ const operationName = getOperationNameFromQuery(query);
11133
+ try {
11134
+ const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
11135
+ method: 'POST',
11136
+ headers: {
11137
+ 'content-type': 'application/json;charset=UTF-8',
11138
+ 'x-requested-by': 'ThoughtSpot',
11139
+ accept: '*/*',
11140
+ 'accept-language': 'en-us',
11141
+ },
11142
+ body: JSON.stringify({
11143
+ operationName,
11144
+ query,
11145
+ variables,
11146
+ }),
11147
+ credentials: 'include',
11148
+ });
11149
+ const result = await response.json();
11150
+ const dataValues = Object.values(result.data);
11151
+ return (isCompositeQuery) ? result.data : dataValues[0];
11152
+ }
11153
+ catch (error) {
11154
+ return error;
11155
+ }
11156
+ }
11157
+
11158
+ const getSourceDetailQuery = `
11159
+ query GetSourceDetail($ids: [GUID!]!) {
11160
+ getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
11161
+ id
11162
+ name
11163
+ description
11164
+ authorName
11165
+ authorDisplayName
11166
+ isExternal
11167
+ type
11168
+ created
11169
+ modified
11170
+ columns {
11171
+ id
11172
+ name
11173
+ author
11174
+ authorDisplayName
11175
+ description
11176
+ dataType
11177
+ type
11178
+ modified
11179
+ ownerName
11180
+ owner
11181
+ dataRecency
11182
+ sources {
11183
+ tableId
11184
+ tableName
11185
+ columnId
11186
+ columnName
11187
+ __typename
11188
+ }
11189
+ synonyms
11190
+ cohortAnswerId
11191
+ __typename
11192
+ }
11193
+ relationships
11194
+ destinationRelationships
11195
+ dataSourceId
11196
+ __typename
11197
+ }
11198
+ }
11199
+ `;
11200
+ const sourceDetailCache = new Map();
11201
+ /**
11202
+ *
11062
11203
  * @param thoughtSpotHost
11204
+ * @param sourceId
11063
11205
  */
11064
- function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
11065
- let variable;
11066
- const fetchQuery = async (variables) => {
11067
- try {
11068
- const response = await fetch(`${thoughtSpotHost}/prism/?op=${operation}`, {
11069
- method: 'POST',
11070
- headers: {
11071
- 'content-type': 'application/json;charset=UTF-8',
11072
- 'x-requested-by': 'ThoughtSpot',
11073
- accept: '*/*',
11074
- 'accept-language': 'en-us',
11075
- },
11076
- body: JSON.stringify({
11077
- operationName: operation,
11078
- query,
11079
- variables,
11080
- }),
11081
- credentials: 'include',
11082
- });
11083
- const result = await response.json();
11084
- return result.data;
11206
+ async function getSourceDetail(thoughtSpotHost, sourceId) {
11207
+ if (sourceDetailCache.has(sourceId)) {
11208
+ return sourceDetailCache.get(sourceId);
11209
+ }
11210
+ const details = await graphqlQuery({
11211
+ query: getSourceDetailQuery,
11212
+ variables: {
11213
+ ids: [sourceId],
11214
+ },
11215
+ thoughtSpotHost,
11216
+ });
11217
+ const souceDetails = details[0];
11218
+ sourceDetailCache.set(sourceId, souceDetails);
11219
+ return souceDetails;
11220
+ }
11221
+
11222
+ const bachSessionId = `
11223
+ id {
11224
+ sessionId
11225
+ genNo
11226
+ acSession {
11227
+ sessionId
11228
+ genNo
11229
+ }
11230
+ }
11231
+ `;
11232
+ const getUnaggregatedAnswerSession = `
11233
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
11234
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
11235
+ ${bachSessionId}
11236
+ answer {
11237
+ visualizations {
11238
+ ... on TableViz {
11239
+ columns {
11240
+ column {
11241
+ id
11242
+ name
11243
+ referencedColumns {
11244
+ guid
11245
+ displayName
11246
+ }
11247
+ }
11248
+ }
11249
+ }
11250
+ }
11251
+ }
11252
+ }
11253
+ }
11254
+ `;
11255
+ const removeColumns = `
11256
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
11257
+ Answer__removeColumns(
11258
+ session: $session
11259
+ logicalColumnIds: $logicalColumnIds
11260
+ columnIds: $columnIds
11261
+ ) {
11262
+ ${bachSessionId}
11263
+ }
11264
+ }
11265
+ `;
11266
+ const addColumns = `
11267
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
11268
+ Answer__addColumn(session: $session, columns: $columns) {
11269
+ ${bachSessionId}
11270
+ }
11271
+ }
11272
+ `;
11273
+ const getAnswerData = `
11274
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
11275
+ getAnswer(session: $session) {
11276
+ ${bachSessionId}
11277
+ answer {
11278
+ id
11279
+ visualizations {
11280
+ id
11281
+ ... on TableViz {
11282
+ columns {
11283
+ column {
11284
+ id
11285
+ name
11286
+ type
11287
+ aggregationType
11288
+ dataType
11289
+ }
11290
+ }
11291
+ data(deadline: $deadline, pagination: $dataPaginationParams)
11292
+ }
11293
+ }
11294
+ }
11295
+ }
11296
+ }
11297
+ `;
11298
+
11299
+ // eslint-disable-next-line no-shadow
11300
+ var OperationType;
11301
+ (function (OperationType) {
11302
+ OperationType["GetChartWithData"] = "GetChartWithData";
11303
+ OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
11304
+ })(OperationType || (OperationType = {}));
11305
+ /**
11306
+ * Class representing the answer service provided with the
11307
+ * custom action payload. This service could be used to run
11308
+ * graphql queries in the context of the answer on which the
11309
+ * custom action was triggered.
11310
+ *
11311
+ * @example
11312
+ * ```js
11313
+ * embed.on(EmbedEvent.CustomAction, e => {
11314
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
11315
+ * 'col name 1'
11316
+ * ]);
11317
+ * const data = await underlying.fetchData(0, 100);
11318
+ * })
11319
+ * ```
11320
+ * @version
11321
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
11322
+ */
11323
+ class AnswerService {
11324
+ constructor(session, answer, thoughtSpotHost, selectedPoints) {
11325
+ this.session = session;
11326
+ this.answer = answer;
11327
+ this.thoughtSpotHost = thoughtSpotHost;
11328
+ this.selectedPoints = selectedPoints;
11329
+ this.session = removeTypename(session);
11330
+ }
11331
+ async getSourceDetail() {
11332
+ const sourceId = this.answer.sources[0].header.guid;
11333
+ return getSourceDetail(this.thoughtSpotHost, sourceId);
11334
+ }
11335
+ async removeColumns(columnIds) {
11336
+ return this.executeQuery(removeColumns, {
11337
+ logicalColumnIds: columnIds,
11338
+ });
11339
+ }
11340
+ async addColumns(columnIds) {
11341
+ return this.executeQuery(addColumns, {
11342
+ columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
11343
+ });
11344
+ }
11345
+ async fetchData(offset = 0, size = 1000) {
11346
+ const { answer } = await this.executeQuery(getAnswerData, {
11347
+ deadline: 0,
11348
+ dataPaginationParams: {
11349
+ isClientPaginated: true,
11350
+ offset,
11351
+ size,
11352
+ },
11353
+ });
11354
+ const { columns, data } = answer.visualizations[0];
11355
+ return {
11356
+ columns,
11357
+ data,
11358
+ };
11359
+ }
11360
+ /**
11361
+ *
11362
+ * @param userLocale
11363
+ * @param omitInfo Omit the download Info on top of the CSV
11364
+ * @returns Response
11365
+ */
11366
+ async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
11367
+ if (omitInfo) {
11368
+ console.warn('omitInfo not supported yet.');
11085
11369
  }
11086
- catch (error) {
11087
- return error;
11370
+ const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
11371
+ return fetch(fetchUrl, {
11372
+ credentials: 'include',
11373
+ });
11374
+ }
11375
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
11376
+ if (!selectedPoints && !this.selectedPoints) {
11377
+ throw new Error('Needs to be triggered in context of a point');
11088
11378
  }
11089
- };
11090
- const fetchData = (offset, batchSize) => {
11091
- if (operation === OperationType.GetChartWithData) {
11092
- variable = { batchSize, offset: offset * batchSize };
11379
+ if (!selectedPoints) {
11380
+ selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
11381
+ }
11382
+ const sourceDetail = await this.getSourceDetail();
11383
+ const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
11384
+ const unAggAnswer = await graphqlQuery({
11385
+ query: getUnaggregatedAnswerSession,
11386
+ variables: {
11387
+ session: this.session,
11388
+ columns: selectedPoints,
11389
+ },
11390
+ thoughtSpotHost: this.thoughtSpotHost,
11391
+ });
11392
+ const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
11393
+ const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
11394
+ .map((c) => c.column.referencedColumns[0].guid));
11395
+ const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
11396
+ if (columnsToAdd.length) {
11397
+ await unaggAnswerSession.addColumns(columnsToAdd);
11398
+ }
11399
+ const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
11400
+ if (columnsToRemove.length) {
11401
+ await unaggAnswerSession.removeColumns(columnsToRemove);
11402
+ }
11403
+ return unaggAnswerSession;
11404
+ }
11405
+ async executeQuery(query, variables) {
11406
+ const data = await graphqlQuery({
11407
+ query,
11408
+ variables: {
11409
+ session: this.session,
11410
+ ...variables,
11411
+ },
11412
+ thoughtSpotHost: this.thoughtSpotHost,
11413
+ isCompositeQuery: false,
11414
+ });
11415
+ this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
11416
+ return data;
11417
+ }
11418
+ getSession() {
11419
+ return this.session;
11420
+ }
11421
+ }
11422
+ /**
11423
+ *
11424
+ * @param sourceDetail
11425
+ * @param colNames
11426
+ */
11427
+ function getGuidsFromColumnNames(sourceDetail, colNames) {
11428
+ const cols = sourceDetail.columns.reduce((colSet, col) => {
11429
+ colSet[col.name] = col;
11430
+ return colSet;
11431
+ }, {});
11432
+ return new Set(colNames.map((colName) => {
11433
+ const col = cols[colName];
11434
+ return col.id;
11435
+ }));
11436
+ }
11437
+ /**
11438
+ *
11439
+ * @param selectedPoints
11440
+ */
11441
+ function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
11442
+ const underlyingDataPoint = [];
11443
+ /**
11444
+ *
11445
+ * @param colVal
11446
+ */
11447
+ function addPointFromColVal(colVal) {
11448
+ const dataType = colVal.column.dataType;
11449
+ const id = colVal.column.id;
11450
+ let dataValue;
11451
+ if (dataType === 'DATE') {
11452
+ dataValue = [{
11453
+ epochRange: {
11454
+ startEpoch: colVal.value,
11455
+ },
11456
+ }];
11093
11457
  }
11094
11458
  else {
11095
- variable = {
11096
- dataPaginationParams: {
11097
- isClientPaginated: true,
11098
- offset: offset * batchSize,
11099
- size: batchSize,
11100
- },
11101
- };
11459
+ dataValue = [{ value: colVal.value }];
11102
11460
  }
11103
- return fetchQuery({
11104
- session,
11105
- ...variable,
11461
+ underlyingDataPoint.push({
11462
+ columnId: colVal.column.id,
11463
+ dataValue,
11106
11464
  });
11107
- };
11108
- return {
11109
- fetchData,
11110
- };
11465
+ }
11466
+ selectedPoints.forEach((p) => {
11467
+ p.selectedAttributes.forEach(addPointFromColVal);
11468
+ });
11469
+ return underlyingDataPoint;
11111
11470
  }
11112
11471
 
11113
11472
  /**
@@ -11116,16 +11475,12 @@ function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
11116
11475
  * @param thoughtSpotHost
11117
11476
  */
11118
11477
  function processCustomAction(e, thoughtSpotHost) {
11119
- var _a;
11120
- if ([OperationType.GetChartWithData, OperationType.GetTableWithHeadlineData].includes((_a = e.data) === null || _a === void 0 ? void 0 : _a.operation)) {
11121
- const { session, query, operation } = e.data;
11122
- const answerService = getAnswerServiceInstance(session, query, operation, thoughtSpotHost);
11123
- return {
11124
- ...e,
11125
- answerService,
11126
- };
11127
- }
11128
- return e;
11478
+ const { session, embedAnswerData, contextMenuPoints } = e.data;
11479
+ const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
11480
+ return {
11481
+ ...e,
11482
+ answerService,
11483
+ };
11129
11484
  }
11130
11485
  /**
11131
11486
  *
@@ -11270,7 +11625,7 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data) {
11270
11625
  });
11271
11626
  }
11272
11627
 
11273
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-dev";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false; tsc -p . --incremental false --module commonjs --outDir cjs",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts","bundle-dts":"dts-bundle --name ../../dist/visual-embed-sdk --main lib/src/index.d.ts --outputAsModuleFolder=true","bundle-dts-react":"dts-bundle --name ../../../dist/visual-embed-sdk-react --main lib/src/react/index.d.ts --outputAsModuleFolder=true","bundle-dts-react-full":"dts-bundle --name ../../../dist/visual-embed-sdk-react-full --main lib/src/react/all-types-export.d.ts --outputAsModuleFolder=true",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js --runInBand","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs",posttest:"cat ./coverage/sdk/lcov.info | coveralls","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1",dompurify:"^2.3.4","eslint-plugin-comment-length":"^0.9.2","eslint-plugin-jsdoc":"^40.1.0",eventemitter3:"^4.0.7","gatsby-plugin-vercel":"^1.0.3","html-react-parser":"^1.4.12",lodash:"^4.17.21","mixpanel-browser":"^2.45.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^8.2.6","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","current-git-branch":"^1.1.0","dts-bundle":"^0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.13.1","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"6.7.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-puppeteer":"^4.4.0",jsdom:"^17.0.0","node-sass":"^8.0.0",prettier:"2.1.2",puppeteer:"^7.0.1",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.js",limit:"40 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
11628
+ var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-preRender.0";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false; tsc -p . --incremental false --module commonjs --outDir cjs",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts","bundle-dts":"dts-bundle --name ../../dist/visual-embed-sdk --main lib/src/index.d.ts --outputAsModuleFolder=true","bundle-dts-react":"dts-bundle --name ../../../dist/visual-embed-sdk-react --main lib/src/react/index.d.ts --outputAsModuleFolder=true","bundle-dts-react-full":"dts-bundle --name ../../../dist/visual-embed-sdk-react-full --main lib/src/react/all-types-export.d.ts --outputAsModuleFolder=true",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js --runInBand","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs",posttest:"cat ./coverage/sdk/lcov.info | coveralls","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1",dompurify:"^2.3.4","eslint-plugin-comment-length":"^0.9.2","eslint-plugin-jsdoc":"^40.1.0",eventemitter3:"^4.0.7","gatsby-plugin-vercel":"^1.0.3","html-react-parser":"^1.4.12",lodash:"^4.17.21","mixpanel-browser":"^2.45.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^8.2.6","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","current-git-branch":"^1.1.0","dts-bundle":"^0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.13.1","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"6.7.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-fetch-mock":"^3.0.3",jsdom:"^17.0.0","node-sass":"^8.0.0",prettier:"2.1.2",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.js",limit:"40 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
11274
11629
 
11275
11630
  /**
11276
11631
  * Copyright (c) 2022
@@ -11302,6 +11657,7 @@ const V1EventMap = {};
11302
11657
  class TsEmbed {
11303
11658
  constructor(domSelector, viewConfig) {
11304
11659
  this.isAppInitialized = false;
11660
+ this.embedComponentType = 'TsEmbed';
11305
11661
  /**
11306
11662
  * Should we encode URL Query Params using base64 encoding which thoughtspot
11307
11663
  * will generate for embedding. This provides additional security to
@@ -11311,6 +11667,7 @@ class TsEmbed {
11311
11667
  */
11312
11668
  this.shouldEncodeUrlQueryParams = false;
11313
11669
  this.defaultHiddenActions = [Action.ReportError];
11670
+ this.subscribedListeners = {};
11314
11671
  /**
11315
11672
  * Send Custom style as part of payload of APP_INIT
11316
11673
  *
@@ -11333,6 +11690,7 @@ class TsEmbed {
11333
11690
  ? getRuntimeFilters(this.viewConfig.runtimeFilters)
11334
11691
  : null,
11335
11692
  hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
11693
+ reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
11336
11694
  hostConfig: this.embedConfig.hostConfig,
11337
11695
  hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
11338
11696
  ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
@@ -11382,6 +11740,7 @@ class TsEmbed {
11382
11740
  this.registerAppInit();
11383
11741
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
11384
11742
  ...viewConfig,
11743
+ embedComponentType: this.embedComponentType,
11385
11744
  });
11386
11745
  }
11387
11746
  /**
@@ -11450,23 +11809,36 @@ class TsEmbed {
11450
11809
  * and executes the registered callbacks accordingly.
11451
11810
  */
11452
11811
  subscribeToEvents() {
11453
- window.addEventListener('message', (event) => {
11812
+ const messageEventListener = (event) => {
11454
11813
  const eventType = this.getEventType(event);
11455
11814
  const eventPort = this.getEventPort(event);
11456
11815
  const eventData = this.formatEventData(event, eventType);
11457
11816
  if (event.source === this.iFrame.contentWindow) {
11458
11817
  this.executeCallbacks(eventType, processEventData(eventType, eventData, this.thoughtSpotHost, this.el), eventPort);
11459
11818
  }
11460
- });
11461
- window.addEventListener('online', (e) => {
11819
+ };
11820
+ window.addEventListener('message', messageEventListener);
11821
+ const onlineEventListener = (e) => {
11462
11822
  this.trigger(HostEvent.Reload);
11463
- });
11464
- window.addEventListener('offline', (e) => {
11823
+ };
11824
+ window.addEventListener('online', onlineEventListener);
11825
+ const offlineEventListener = (e) => {
11465
11826
  const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
11466
11827
  this.executeCallbacks(EmbedEvent.Error, {
11467
11828
  offlineWarning,
11468
11829
  });
11469
11830
  console.warn(offlineWarning);
11831
+ };
11832
+ window.addEventListener('offline', offlineEventListener);
11833
+ this.subscribedListeners = {
11834
+ message: messageEventListener,
11835
+ online: onlineEventListener,
11836
+ offline: offlineEventListener,
11837
+ };
11838
+ }
11839
+ unsubscribeToEvents() {
11840
+ Object.keys(this.subscribedListeners).forEach((key) => {
11841
+ window.removeEventListener(key, this.subscribedListeners[key]);
11470
11842
  });
11471
11843
  }
11472
11844
  /**
@@ -11644,8 +12016,10 @@ class TsEmbed {
11644
12016
  *
11645
12017
  * @param url
11646
12018
  * @param frameOptions
12019
+ * @param showPreRender
12020
+ * @param showPreRenderByDefault
11647
12021
  */
11648
- async renderIFrame(url) {
12022
+ async renderIFrame(url, showPreRenderByDefault = false) {
11649
12023
  if (this.isError) {
11650
12024
  return null;
11651
12025
  }
@@ -11694,6 +12068,9 @@ class TsEmbed {
11694
12068
  });
11695
12069
  if (this.isPreRendered) {
11696
12070
  this.insertIntoDOMForPreRender(this.iFrame);
12071
+ if (showPreRenderByDefault) {
12072
+ this.showPreRender();
12073
+ }
11697
12074
  }
11698
12075
  else {
11699
12076
  this.insertIntoDOM(this.iFrame);
@@ -11732,11 +12109,10 @@ class TsEmbed {
11732
12109
  throw new Error('Pre render id is required');
11733
12110
  }
11734
12111
  const preRenderIds = this.getPreRenderIds();
11735
- const stalePreRenderWrapper = document.getElementById(preRenderIds.wrapper);
11736
- if (stalePreRenderWrapper) {
11737
- console.log('Found stale wrapper , removing');
11738
- stalePreRenderWrapper.remove();
11739
- }
12112
+ [preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
12113
+ .map((id) => document.getElementById(id))
12114
+ .filter((element) => element)
12115
+ .forEach((existingElement) => existingElement.remove());
11740
12116
  const preRenderWrapper = document.createElement('div');
11741
12117
  preRenderWrapper.id = preRenderIds.wrapper;
11742
12118
  setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
@@ -11751,7 +12127,7 @@ class TsEmbed {
11751
12127
  this.preRenderChild = child;
11752
12128
  return preRenderWrapper;
11753
12129
  }
11754
- isPreRenderAvailable() {
12130
+ connectPreRendered() {
11755
12131
  const preRenderIds = this.getPreRenderIds();
11756
12132
  this.preRenderWrapper = this.preRenderWrapper
11757
12133
  || document.getElementById(preRenderIds.wrapper);
@@ -11759,6 +12135,10 @@ class TsEmbed {
11759
12135
  || document.getElementById(preRenderIds.shield);
11760
12136
  this.preRenderChild = this.preRenderChild
11761
12137
  || document.getElementById(preRenderIds.child);
12138
+ this.iFrame = this.preRenderChild;
12139
+ return this.isPreRenderAvailable();
12140
+ }
12141
+ isPreRenderAvailable() {
11762
12142
  return !!this.preRenderWrapper && !!this.preRenderShield
11763
12143
  && !!this.preRenderChild;
11764
12144
  }
@@ -11801,18 +12181,23 @@ class TsEmbed {
11801
12181
  top: '0',
11802
12182
  left: '0',
11803
12183
  });
12184
+ this.unsubscribeToEvents();
11804
12185
  }
11805
12186
  showPreRender() {
11806
12187
  if (!this.isPreRenderAvailable()) {
11807
- // if the Embed component is nor preRendered , Render it now and
11808
- // show it (hide is defalt behaviour)
11809
- console.log('No preRender found, creating new ');
11810
- this.render();
11811
- return;
12188
+ const isAvailable = this.connectPreRendered();
12189
+ if (!isAvailable) {
12190
+ // if the Embed component is nor preRendered , Render it now and
12191
+ // show it (hide is defalt behaviour)
12192
+ console.log('No preRender found, creating new ');
12193
+ this.preRender(true);
12194
+ return;
12195
+ }
11812
12196
  }
11813
12197
  this.syncPreRenderStyle();
11814
12198
  removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
11815
12199
  setStyleProperties(this.preRenderShield, { zIndex: '-1' });
12200
+ this.subscribeToEvents();
11816
12201
  }
11817
12202
  syncPreRenderStyle() {
11818
12203
  if (!this.el) {
@@ -12040,7 +12425,7 @@ class TsEmbed {
12040
12425
  /**
12041
12426
  * Creates the preRender shell
12042
12427
  */
12043
- preRender() {
12428
+ preRender(showPreRenderByDefault = false) {
12044
12429
  this.isPreRendered = true;
12045
12430
  return this;
12046
12431
  }
@@ -12117,8 +12502,8 @@ class V1Embed extends TsEmbed {
12117
12502
  *
12118
12503
  * @param iframeSrc
12119
12504
  */
12120
- renderV1Embed(iframeSrc) {
12121
- return this.renderIFrame(iframeSrc);
12505
+ renderV1Embed(iframeSrc, showPreRenderByDefault = false) {
12506
+ return this.renderIFrame(iframeSrc, showPreRenderByDefault);
12122
12507
  }
12123
12508
  getRootIframeSrc() {
12124
12509
  const queryParams = this.getEmbedParams();
@@ -12210,6 +12595,7 @@ class AppEmbed extends V1Embed {
12210
12595
  constructor(domSelector, viewConfig) {
12211
12596
  super(domSelector, viewConfig);
12212
12597
  this.defaultHeight = '100%';
12598
+ this.embedComponentType = 'AppEmbed';
12213
12599
  /**
12214
12600
  * Set the iframe height as per the computed height received
12215
12601
  * from the ThoughtSpot app.
@@ -12361,10 +12747,15 @@ class AppEmbed extends V1Embed {
12361
12747
  * @param renderOptions An object containing the page ID
12362
12748
  * to be embedded.
12363
12749
  */
12364
- render() {
12750
+ render(showPreRenderByDefault = false) {
12365
12751
  super.render();
12366
12752
  const src = this.getIFrameSrc();
12367
- this.renderV1Embed(src);
12753
+ this.renderV1Embed(src, showPreRenderByDefault);
12754
+ return this;
12755
+ }
12756
+ preRender(showPreRenderByDefault = false) {
12757
+ super.preRender(showPreRenderByDefault);
12758
+ this.render(showPreRenderByDefault);
12368
12759
  return this;
12369
12760
  }
12370
12761
  }
@@ -12399,6 +12790,7 @@ class LiveboardEmbed extends V1Embed {
12399
12790
  constructor(domSelector, viewConfig) {
12400
12791
  super(domSelector, viewConfig);
12401
12792
  this.defaultHeight = 500;
12793
+ this.embedComponentType = 'LiveboardEmbed';
12402
12794
  /**
12403
12795
  * Set the iframe height as per the computed height received
12404
12796
  * from the ThoughtSpot app.
@@ -12520,15 +12912,15 @@ class LiveboardEmbed extends V1Embed {
12520
12912
  * @param renderOptions An object specifying the Liveboard ID,
12521
12913
  * visualization ID and the runtime filters.
12522
12914
  */
12523
- render() {
12915
+ render(showPreRenderByDefault = false) {
12524
12916
  super.render();
12525
12917
  const src = this.getIFrameSrc();
12526
- this.renderV1Embed(src);
12918
+ this.renderV1Embed(src, showPreRenderByDefault);
12527
12919
  return this;
12528
12920
  }
12529
- preRender() {
12530
- super.preRender();
12531
- this.render();
12921
+ preRender(showPreRenderByDefault = false) {
12922
+ super.preRender(showPreRenderByDefault);
12923
+ this.render(showPreRenderByDefault);
12532
12924
  return this;
12533
12925
  }
12534
12926
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
@@ -12573,6 +12965,7 @@ const HiddenActionItemByDefaultForSearchEmbed = [
12573
12965
  class SearchEmbed extends TsEmbed {
12574
12966
  constructor(domSelector, viewConfig) {
12575
12967
  super(domSelector);
12968
+ this.embedComponentType = 'SearchEmbed';
12576
12969
  this.viewConfig = viewConfig;
12577
12970
  }
12578
12971
  /**
@@ -12653,12 +13046,14 @@ class SearchEmbed extends TsEmbed {
12653
13046
  }
12654
13047
  /**
12655
13048
  * Render the embedded ThoughtSpot search
13049
+ *
13050
+ * @param showPreRenderByDefault
12656
13051
  */
12657
- render() {
13052
+ render(showPreRenderByDefault = false) {
12658
13053
  super.render();
12659
13054
  const { answerId } = this.viewConfig;
12660
13055
  const src = this.getIFrameSrc(answerId);
12661
- this.renderIFrame(src);
13056
+ this.renderIFrame(src, showPreRenderByDefault);
12662
13057
  getAuthPromise().then(() => {
12663
13058
  if (checkReleaseVersionInBeta(getReleaseVersion(), getEmbedConfig().suppressSearchEmbedBetaWarning)) {
12664
13059
  alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
@@ -12666,6 +13061,11 @@ class SearchEmbed extends TsEmbed {
12666
13061
  });
12667
13062
  return this;
12668
13063
  }
13064
+ preRender(showPreRenderByDefault = false) {
13065
+ super.preRender(showPreRenderByDefault);
13066
+ this.render(showPreRenderByDefault);
13067
+ return this;
13068
+ }
12669
13069
  }
12670
13070
 
12671
13071
  /**
@@ -12677,6 +13077,7 @@ class SearchEmbed extends TsEmbed {
12677
13077
  class SearchBarEmbed extends TsEmbed {
12678
13078
  constructor(domSelector, viewConfig) {
12679
13079
  super(domSelector);
13080
+ this.embedComponentType = 'SearchBarEmbed';
12680
13081
  this.viewConfig = viewConfig;
12681
13082
  }
12682
13083
  /**
@@ -12755,6 +13156,7 @@ class SageEmbed extends V1Embed {
12755
13156
  // eslint-disable-next-line no-useless-constructor
12756
13157
  constructor(domSelector, viewConfig) {
12757
13158
  super(domSelector, viewConfig);
13159
+ this.embedComponentType = 'SageEmbed';
12758
13160
  }
12759
13161
  /**
12760
13162
  * Constructs a map of parameters to be passed on to the
@@ -12806,14 +13208,20 @@ class SageEmbed extends V1Embed {
12806
13208
  /**
12807
13209
  * Render the embedded ThoughtSpot Sage
12808
13210
  *
13211
+ * @param showPreRenderByDefault
12809
13212
  * @returns {SageEmbed} Eureka/Sage embed
12810
13213
  */
12811
- render() {
13214
+ render(showPreRenderByDefault = false) {
12812
13215
  super.render();
12813
13216
  const src = this.getIFrameSrc();
12814
- this.renderV1Embed(src);
13217
+ this.renderV1Embed(src, showPreRenderByDefault);
13218
+ return this;
13219
+ }
13220
+ preRender(showPreRenderByDefault = false) {
13221
+ super.preRender(showPreRenderByDefault);
13222
+ this.render(showPreRenderByDefault);
12815
13223
  return this;
12816
13224
  }
12817
13225
  }
12818
13226
 
12819
- export { Action, AppEmbed, AuthEvent, AuthFailureType, AuthStatus, AuthType, ContextMenuTriggerOptions, DataSourceVisualMode, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed, Page, PinboardEmbed, PrefetchFeatures, RuntimeFilterOp, SageEmbed, SearchBarEmbed, SearchEmbed, executeTML, exportTML, getEmbedConfig as getInitConfig, getSessionInfo, init, logout$1 as logout, prefetch };
13227
+ export { Action, AnswerService, AppEmbed, AuthEvent, AuthFailureType, AuthStatus, AuthType, ContextMenuTriggerOptions, DataSourceVisualMode, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed, Page, PinboardEmbed, PrefetchFeatures, RuntimeFilterOp, SageEmbed, SearchBarEmbed, SearchEmbed, executeTML, exportTML, getEmbedConfig as getInitConfig, getSessionInfo, init, logout$1 as logout, prefetch };