@thoughtspot/visual-embed-sdk 1.24.0-sage.3 → 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 (308) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +10 -3
  3. package/cjs/src/auth.d.ts.map +1 -1
  4. package/cjs/src/auth.js +3 -0
  5. package/cjs/src/auth.js.map +1 -1
  6. package/cjs/src/css-variables.d.ts +38 -0
  7. package/cjs/src/css-variables.d.ts.map +1 -1
  8. package/cjs/src/embed/app.d.ts +33 -1
  9. package/cjs/src/embed/app.d.ts.map +1 -1
  10. package/cjs/src/embed/app.js +12 -8
  11. package/cjs/src/embed/app.js.map +1 -1
  12. package/cjs/src/embed/app.spec.js +46 -0
  13. package/cjs/src/embed/app.spec.js.map +1 -1
  14. package/cjs/src/embed/base.d.ts +6 -1
  15. package/cjs/src/embed/base.d.ts.map +1 -1
  16. package/cjs/src/embed/base.js +8 -3
  17. package/cjs/src/embed/base.js.map +1 -1
  18. package/cjs/src/embed/liveboard.d.ts +6 -1
  19. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  20. package/cjs/src/embed/liveboard.js +6 -2
  21. package/cjs/src/embed/liveboard.js.map +1 -1
  22. package/cjs/src/embed/liveboard.spec.js +23 -7
  23. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  24. package/cjs/src/embed/sage.d.ts +1 -0
  25. package/cjs/src/embed/sage.d.ts.map +1 -1
  26. package/cjs/src/embed/sage.js +1 -0
  27. package/cjs/src/embed/sage.js.map +1 -1
  28. package/cjs/src/embed/search-bar.d.ts +7 -0
  29. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  30. package/cjs/src/embed/search-bar.js +6 -2
  31. package/cjs/src/embed/search-bar.js.map +1 -1
  32. package/cjs/src/embed/search.d.ts +16 -2
  33. package/cjs/src/embed/search.d.ts.map +1 -1
  34. package/cjs/src/embed/search.js +9 -2
  35. package/cjs/src/embed/search.js.map +1 -1
  36. package/cjs/src/embed/search.spec.js +49 -0
  37. package/cjs/src/embed/search.spec.js.map +1 -1
  38. package/cjs/src/embed/ts-embed.d.ts +4 -1
  39. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  40. package/cjs/src/embed/ts-embed.js +31 -8
  41. package/cjs/src/embed/ts-embed.js.map +1 -1
  42. package/cjs/src/embed/ts-embed.spec.js +186 -3
  43. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  44. package/cjs/src/index.d.ts +4 -3
  45. package/cjs/src/index.d.ts.map +1 -1
  46. package/cjs/src/index.js +5 -1
  47. package/cjs/src/index.js.map +1 -1
  48. package/cjs/src/mixpanel-service.d.ts +1 -0
  49. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  50. package/cjs/src/mixpanel-service.js +12 -3
  51. package/cjs/src/mixpanel-service.js.map +1 -1
  52. package/cjs/src/mixpanel-service.spec.js +13 -3
  53. package/cjs/src/mixpanel-service.spec.js.map +1 -1
  54. package/cjs/src/react/index.d.ts +15 -15
  55. package/cjs/src/react/index.d.ts.map +1 -1
  56. package/cjs/src/react/index.js +7 -3
  57. package/cjs/src/react/index.js.map +1 -1
  58. package/cjs/src/react/index.spec.js +12 -0
  59. package/cjs/src/react/index.spec.js.map +1 -1
  60. package/cjs/src/types.d.ts +216 -21
  61. package/cjs/src/types.d.ts.map +1 -1
  62. package/cjs/src/types.js +133 -13
  63. package/cjs/src/types.js.map +1 -1
  64. package/cjs/src/utils/answerService/answerService.d.ts +34 -0
  65. package/cjs/src/utils/answerService/answerService.d.ts.map +1 -0
  66. package/cjs/src/utils/answerService/answerService.js +142 -0
  67. package/cjs/src/utils/answerService/answerService.js.map +1 -0
  68. package/cjs/src/utils/answerService/answerService.spec.d.ts +1 -0
  69. package/cjs/src/utils/answerService/answerService.spec.d.ts.map +1 -0
  70. package/cjs/src/utils/answerService/answerService.spec.js +1 -0
  71. package/cjs/src/utils/answerService/answerService.spec.js.map +1 -0
  72. package/cjs/src/utils/answerService/graphql-queries.d.ts +6 -0
  73. package/cjs/src/utils/answerService/graphql-queries.d.ts.map +1 -0
  74. package/cjs/src/utils/answerService/graphql-queries.js +123 -0
  75. package/cjs/src/utils/answerService/graphql-queries.js.map +1 -0
  76. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  77. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  78. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  79. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  80. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  81. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  82. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  83. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  84. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  85. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  86. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  87. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  88. package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
  89. package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
  90. package/cjs/src/utils/graphql/answerService/graphql-queries.js +80 -0
  91. package/cjs/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
  92. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  93. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  94. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  95. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  96. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  97. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  98. package/cjs/src/utils/graphql/sourceService.js +69 -0
  99. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  100. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  101. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  102. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  103. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  104. package/cjs/src/utils/processData.d.ts.map +1 -1
  105. package/cjs/src/utils/processData.js +7 -11
  106. package/cjs/src/utils/processData.js.map +1 -1
  107. package/cjs/src/utils/processData.spec.js +13 -17
  108. package/cjs/src/utils/processData.spec.js.map +1 -1
  109. package/cjs/src/utils.d.ts +13 -1
  110. package/cjs/src/utils.d.ts.map +1 -1
  111. package/cjs/src/utils.js +45 -1
  112. package/cjs/src/utils.js.map +1 -1
  113. package/cjs/src/utils.spec.js +24 -0
  114. package/cjs/src/utils.spec.js.map +1 -1
  115. package/dist/src/auth.d.ts.map +1 -1
  116. package/dist/src/css-variables.d.ts +38 -0
  117. package/dist/src/css-variables.d.ts.map +1 -1
  118. package/dist/src/embed/app.d.ts +33 -1
  119. package/dist/src/embed/app.d.ts.map +1 -1
  120. package/dist/src/embed/base.d.ts +6 -1
  121. package/dist/src/embed/base.d.ts.map +1 -1
  122. package/dist/src/embed/liveboard.d.ts +6 -1
  123. package/dist/src/embed/liveboard.d.ts.map +1 -1
  124. package/dist/src/embed/sage.d.ts +1 -0
  125. package/dist/src/embed/sage.d.ts.map +1 -1
  126. package/dist/src/embed/search-bar.d.ts +7 -0
  127. package/dist/src/embed/search-bar.d.ts.map +1 -1
  128. package/dist/src/embed/search.d.ts +16 -2
  129. package/dist/src/embed/search.d.ts.map +1 -1
  130. package/dist/src/embed/ts-embed.d.ts +4 -1
  131. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  132. package/dist/src/index.d.ts +4 -3
  133. package/dist/src/index.d.ts.map +1 -1
  134. package/dist/src/mixpanel-service.d.ts +1 -0
  135. package/dist/src/mixpanel-service.d.ts.map +1 -1
  136. package/dist/src/react/index.d.ts +15 -15
  137. package/dist/src/react/index.d.ts.map +1 -1
  138. package/dist/src/types.d.ts +216 -21
  139. package/dist/src/types.d.ts.map +1 -1
  140. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  141. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  142. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  143. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  144. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  145. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  146. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  147. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  148. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  149. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  150. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  151. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  152. package/dist/src/utils/processData.d.ts.map +1 -1
  153. package/dist/src/utils.d.ts +13 -1
  154. package/dist/src/utils.d.ts.map +1 -1
  155. package/dist/tsembed-react.es.js +603 -96
  156. package/dist/tsembed-react.js +596 -95
  157. package/dist/tsembed.es.js +655 -100
  158. package/dist/tsembed.js +649 -99
  159. package/dist/visual-embed-sdk-react-full.d.ts +615 -260
  160. package/dist/visual-embed-sdk-react.d.ts +617 -262
  161. package/dist/visual-embed-sdk.d.ts +380 -26
  162. package/lib/package.json +10 -3
  163. package/lib/src/.index.d.ts.swp +0 -0
  164. package/lib/src/auth.d.ts.map +1 -1
  165. package/lib/src/auth.js +3 -0
  166. package/lib/src/auth.js.map +1 -1
  167. package/lib/src/css-variables.d.ts +38 -0
  168. package/lib/src/css-variables.d.ts.map +1 -1
  169. package/lib/src/embed/app.d.ts +33 -1
  170. package/lib/src/embed/app.d.ts.map +1 -1
  171. package/lib/src/embed/app.js +12 -8
  172. package/lib/src/embed/app.js.map +1 -1
  173. package/lib/src/embed/app.spec.js +46 -0
  174. package/lib/src/embed/app.spec.js.map +1 -1
  175. package/lib/src/embed/base.d.ts +6 -1
  176. package/lib/src/embed/base.d.ts.map +1 -1
  177. package/lib/src/embed/base.js +8 -3
  178. package/lib/src/embed/base.js.map +1 -1
  179. package/lib/src/embed/liveboard.d.ts +6 -1
  180. package/lib/src/embed/liveboard.d.ts.map +1 -1
  181. package/lib/src/embed/liveboard.js +7 -3
  182. package/lib/src/embed/liveboard.js.map +1 -1
  183. package/lib/src/embed/liveboard.spec.js +23 -7
  184. package/lib/src/embed/liveboard.spec.js.map +1 -1
  185. package/lib/src/embed/sage.d.ts +1 -0
  186. package/lib/src/embed/sage.d.ts.map +1 -1
  187. package/lib/src/embed/sage.js +1 -0
  188. package/lib/src/embed/sage.js.map +1 -1
  189. package/lib/src/embed/search-bar.d.ts +7 -0
  190. package/lib/src/embed/search-bar.d.ts.map +1 -1
  191. package/lib/src/embed/search-bar.js +7 -3
  192. package/lib/src/embed/search-bar.js.map +1 -1
  193. package/lib/src/embed/search.d.ts +16 -2
  194. package/lib/src/embed/search.d.ts.map +1 -1
  195. package/lib/src/embed/search.js +10 -3
  196. package/lib/src/embed/search.js.map +1 -1
  197. package/lib/src/embed/search.spec.js +49 -0
  198. package/lib/src/embed/search.spec.js.map +1 -1
  199. package/lib/src/embed/ts-embed.d.ts +4 -1
  200. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  201. package/lib/src/embed/ts-embed.js +32 -9
  202. package/lib/src/embed/ts-embed.js.map +1 -1
  203. package/lib/src/embed/ts-embed.spec.js +187 -4
  204. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  205. package/lib/src/index.d.ts +4 -3
  206. package/lib/src/index.d.ts.map +1 -1
  207. package/lib/src/index.js +4 -3
  208. package/lib/src/index.js.map +1 -1
  209. package/lib/src/mixpanel-service.d.ts +1 -0
  210. package/lib/src/mixpanel-service.d.ts.map +1 -1
  211. package/lib/src/mixpanel-service.js +12 -3
  212. package/lib/src/mixpanel-service.js.map +1 -1
  213. package/lib/src/mixpanel-service.spec.js +13 -3
  214. package/lib/src/mixpanel-service.spec.js.map +1 -1
  215. package/lib/src/react/index.d.ts +15 -15
  216. package/lib/src/react/index.d.ts.map +1 -1
  217. package/lib/src/react/index.js +5 -3
  218. package/lib/src/react/index.js.map +1 -1
  219. package/lib/src/react/index.spec.js +13 -1
  220. package/lib/src/react/index.spec.js.map +1 -1
  221. package/lib/src/types.d.ts +216 -21
  222. package/lib/src/types.d.ts.map +1 -1
  223. package/lib/src/types.js +132 -12
  224. package/lib/src/types.js.map +1 -1
  225. package/lib/src/utils/answerService/answerService.d.ts +34 -0
  226. package/lib/src/utils/answerService/answerService.d.ts.map +1 -0
  227. package/lib/src/utils/answerService/answerService.js +137 -0
  228. package/lib/src/utils/answerService/answerService.js.map +1 -0
  229. package/lib/src/utils/answerService/answerService.spec.d.ts +1 -0
  230. package/lib/src/utils/answerService/answerService.spec.d.ts.map +1 -0
  231. package/lib/src/utils/answerService/answerService.spec.js +1 -0
  232. package/lib/src/utils/answerService/answerService.spec.js.map +1 -0
  233. package/lib/src/utils/answerService/graphql-queries.d.ts +6 -0
  234. package/lib/src/utils/answerService/graphql-queries.d.ts.map +1 -0
  235. package/lib/src/utils/answerService/graphql-queries.js +120 -0
  236. package/lib/src/utils/answerService/graphql-queries.js.map +1 -0
  237. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  238. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  239. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  240. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  241. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  242. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  243. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  244. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  245. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  246. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  247. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  248. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  249. package/lib/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
  250. package/lib/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
  251. package/lib/src/utils/graphql/answerService/graphql-queries.js +77 -0
  252. package/lib/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
  253. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  254. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  255. package/lib/src/utils/graphql/graphql-request.js +36 -0
  256. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  257. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  258. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  259. package/lib/src/utils/graphql/sourceService.js +65 -0
  260. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  261. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  262. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  263. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  264. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  265. package/lib/src/utils/processData.d.ts.map +1 -1
  266. package/lib/src/utils/processData.js +8 -12
  267. package/lib/src/utils/processData.js.map +1 -1
  268. package/lib/src/utils/processData.spec.js +14 -18
  269. package/lib/src/utils/processData.spec.js.map +1 -1
  270. package/lib/src/utils.d.ts +13 -1
  271. package/lib/src/utils.d.ts.map +1 -1
  272. package/lib/src/utils.js +41 -0
  273. package/lib/src/utils.js.map +1 -1
  274. package/lib/src/utils.spec.js +25 -1
  275. package/lib/src/utils.spec.js.map +1 -1
  276. package/lib/src/visual-embed-sdk.d.ts +389 -30
  277. package/package.json +10 -3
  278. package/src/auth.ts +6 -3
  279. package/src/css-variables.ts +47 -0
  280. package/src/embed/app.spec.ts +63 -0
  281. package/src/embed/app.ts +52 -15
  282. package/src/embed/base.ts +11 -6
  283. package/src/embed/liveboard.spec.ts +29 -10
  284. package/src/embed/liveboard.ts +13 -2
  285. package/src/embed/sage.ts +2 -0
  286. package/src/embed/search-bar.tsx +21 -6
  287. package/src/embed/search.spec.ts +61 -0
  288. package/src/embed/search.ts +36 -3
  289. package/src/embed/ts-embed.spec.ts +211 -8
  290. package/src/embed/ts-embed.ts +34 -9
  291. package/src/index.ts +9 -0
  292. package/src/mixpanel-service.spec.ts +13 -3
  293. package/src/mixpanel-service.ts +11 -3
  294. package/src/react/index.spec.tsx +33 -2
  295. package/src/react/index.tsx +37 -26
  296. package/src/types.ts +305 -103
  297. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  298. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  299. package/src/utils/graphql/answerService/answerService.ts +234 -0
  300. package/src/utils/graphql/graphql-request.ts +45 -0
  301. package/src/utils/graphql/sourceService.spec.ts +10 -0
  302. package/src/utils/graphql/sourceService.ts +71 -0
  303. package/src/utils/processData.spec.ts +15 -25
  304. package/src/utils/processData.ts +13 -15
  305. package/src/utils.spec.ts +31 -0
  306. package/src/utils.ts +47 -0
  307. package/src/utils/answerService.spec.ts +0 -41
  308. package/src/utils/answerService.ts +0 -63
package/dist/tsembed.js CHANGED
@@ -4,6 +4,50 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.tsembed = {}));
5
5
  }(this, (function (exports) { 'use strict';
6
6
 
7
+ // istanbul ignore next
8
+ const isObject = (obj) => {
9
+ if (typeof obj === "object" && obj !== null) {
10
+ if (typeof Object.getPrototypeOf === "function") {
11
+ const prototype = Object.getPrototypeOf(obj);
12
+ return prototype === Object.prototype || prototype === null;
13
+ }
14
+ return Object.prototype.toString.call(obj) === "[object Object]";
15
+ }
16
+ return false;
17
+ };
18
+ const merge = (...objects) => objects.reduce((result, current) => {
19
+ if (Array.isArray(current)) {
20
+ throw new TypeError("Arguments provided to ts-deepmerge must be objects, not arrays.");
21
+ }
22
+ Object.keys(current).forEach((key) => {
23
+ if (["__proto__", "constructor", "prototype"].includes(key)) {
24
+ return;
25
+ }
26
+ if (Array.isArray(result[key]) && Array.isArray(current[key])) {
27
+ result[key] = merge.options.mergeArrays
28
+ ? Array.from(new Set(result[key].concat(current[key])))
29
+ : current[key];
30
+ }
31
+ else if (isObject(result[key]) && isObject(current[key])) {
32
+ result[key] = merge(result[key], current[key]);
33
+ }
34
+ else {
35
+ result[key] = current[key];
36
+ }
37
+ });
38
+ return result;
39
+ }, {});
40
+ const defaultOptions = {
41
+ mergeArrays: true,
42
+ };
43
+ merge.options = defaultOptions;
44
+ merge.withOptions = (options, ...objects) => {
45
+ merge.options = Object.assign({ mergeArrays: true }, options);
46
+ const result = merge(...objects);
47
+ merge.options = defaultOptions;
48
+ return result;
49
+ };
50
+
7
51
  /**
8
52
  * Copyright (c) 2023
9
53
  *
@@ -34,6 +78,24 @@
34
78
  }
35
79
  return null;
36
80
  };
81
+ /**
82
+ * Construct a runtime parameter override query string from the given option.
83
+ *
84
+ * @param runtimeParameters
85
+ */
86
+ const getRuntimeParameters = (runtimeParameters) => {
87
+ if (runtimeParameters && runtimeParameters.length) {
88
+ const params = runtimeParameters.map((param, valueIndex) => {
89
+ const index = valueIndex + 1;
90
+ const filterExpr = [];
91
+ filterExpr.push(`param${index}=${encodeURIComponent(param.name)}`);
92
+ filterExpr.push(`paramVal${index}=${encodeURIComponent(param.value)}`);
93
+ return filterExpr.join('&');
94
+ });
95
+ return `${params.join('&')}`;
96
+ }
97
+ return null;
98
+ };
37
99
  /**
38
100
  * Convert a value to a string representation to be sent as a query
39
101
  * parameter to the ThoughtSpot app.
@@ -181,6 +243,30 @@
181
243
  */
182
244
  function getDOMNode(domSelector) {
183
245
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
246
+ }
247
+ const deepMerge = (target, source) => merge(target, source);
248
+ const getOperationNameFromQuery = (query) => {
249
+ const regex = /(?:query|mutation)\s+(\w+)/;
250
+ const matches = query.match(regex);
251
+ return matches === null || matches === void 0 ? void 0 : matches[1];
252
+ };
253
+ /**
254
+ *
255
+ * @param obj
256
+ */
257
+ function removeTypename(obj) {
258
+ if (!obj || typeof obj !== 'object')
259
+ return obj;
260
+ // eslint-disable-next-line no-restricted-syntax
261
+ for (const key in obj) {
262
+ if (key === '__typename') {
263
+ delete obj[key];
264
+ }
265
+ else if (typeof obj[key] === 'object') {
266
+ removeTypename(obj[key]);
267
+ }
268
+ }
269
+ return obj;
184
270
  }
185
271
 
186
272
  /**
@@ -352,6 +438,17 @@
352
438
  */
353
439
  AuthType["Basic"] = "Basic";
354
440
  })(exports.AuthType || (exports.AuthType = {}));
441
+ (function (HomeLeftNavItem) {
442
+ HomeLeftNavItem["QueryBuilder"] = "query-builder";
443
+ HomeLeftNavItem["Home"] = "insights-home";
444
+ HomeLeftNavItem["Liveboards"] = "liveboards";
445
+ HomeLeftNavItem["Answers"] = "answers";
446
+ HomeLeftNavItem["MonitorSubscription"] = "monitor-alerts";
447
+ HomeLeftNavItem["SpotIQAnalysis"] = "spotiq-analysis";
448
+ HomeLeftNavItem["Tutorials"] = "tutorials";
449
+ HomeLeftNavItem["Documentation"] = "documentation";
450
+ HomeLeftNavItem["Community"] = "community";
451
+ })(exports.HomeLeftNavItem || (exports.HomeLeftNavItem = {}));
355
452
  (function (RuntimeFilterOp) {
356
453
  /**
357
454
  * Equals
@@ -410,6 +507,32 @@
410
507
  */
411
508
  RuntimeFilterOp["IN"] = "IN";
412
509
  })(exports.RuntimeFilterOp || (exports.RuntimeFilterOp = {}));
510
+ (function (HomepageModule) {
511
+ /**
512
+ * Search bar
513
+ */
514
+ HomepageModule["Search"] = "SEARCH";
515
+ /**
516
+ * kPI watchlist module
517
+ */
518
+ HomepageModule["Watchlist"] = "WATCHLIST";
519
+ /**
520
+ * favorite objects
521
+ */
522
+ HomepageModule["Favorite"] = "FAVORITE";
523
+ /**
524
+ * List of answers and liveboards
525
+ */
526
+ HomepageModule["MyLibrary"] = "MY_LIBRARY";
527
+ /**
528
+ * Trending list
529
+ */
530
+ HomepageModule["Trending"] = "TRENDING";
531
+ /**
532
+ * Learning videos
533
+ */
534
+ HomepageModule["Learning"] = "LEARNING";
535
+ })(exports.HomepageModule || (exports.HomepageModule = {}));
413
536
  (function (EmbedEvent) {
414
537
  /**
415
538
  * Rendering has initialized.
@@ -814,23 +937,74 @@
814
937
  */
815
938
  EmbedEvent["InsertIntoSlide"] = "insertInToSlide";
816
939
  /**
940
+ * @hidden
817
941
  * Emitted when a user changes any filter on a Liveboard.
818
- *
819
942
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
820
943
  */
821
944
  EmbedEvent["FilterChanged"] = "filterChanged";
822
945
  /**
823
946
  * Emitted when a user click on Go button in Sage Embed
824
947
  *
825
- * @version SDK : 1.27.0 | Thoughtspot: 9.7.0.cl
948
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
826
949
  */
827
950
  EmbedEvent["SageEmbedQuery"] = "sageEmbedQuery";
828
951
  /**
829
952
  * Emitten when a user select data source in Sage Embed
830
953
  *
831
- * @version SDK : 1.27.0 | Thoughtspot: 9.7.0.cl
954
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
832
955
  */
833
956
  EmbedEvent["SageWorksheetUpdated"] = "sageWorksheetUpdated";
957
+ /**
958
+ * Emitten when a user updates a connection in Data tab
959
+ *
960
+ * @version SDK : 1.27.0 | Thoughtspot: 9.8.0.cl
961
+ */
962
+ EmbedEvent["UpdateConnection"] = "updateConnection";
963
+ /**
964
+ * Emitted when name, status (private or public) or filter values of a
965
+ * PersonalisedView is updated.
966
+ *
967
+ * @returns viewName: string
968
+ * @returns viewId: string
969
+ * @returns liveboardId: string
970
+ * @returns isPublic: boolean
971
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
972
+ */
973
+ EmbedEvent["UpdatePersonalisedView"] = "updatePersonalisedView";
974
+ /**
975
+ * Emitted when a PersonalisedView is saved.
976
+ *
977
+ * @returns viewName: string
978
+ * @returns viewId: string
979
+ * @returns liveboardId: string
980
+ * @returns isPublic: boolean
981
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
982
+ */
983
+ EmbedEvent["SavePersonalisedView"] = "savePersonalisedView";
984
+ /**
985
+ * Emitted when a Liveboard is reset.
986
+ *
987
+ * @returns viewName: string
988
+ * @returns viewId: string
989
+ * @returns liveboardId: string
990
+ * @returns isPublic: boolean
991
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
992
+ */
993
+ EmbedEvent["ResetLiveboard"] = "resetLiveboard";
994
+ /**
995
+ * Emitted when a PersonalisedView is deleted.
996
+ *
997
+ * @returns views: string[]
998
+ * @returns liveboardId: string
999
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1000
+ */
1001
+ EmbedEvent["DeletePersonalisedView"] = "deletePersonalisedView";
1002
+ /**
1003
+ * Emitten when a user creates a new worksheet
1004
+ *
1005
+ * @version SDK : 1.27.0 | Thoughtspot: 9.8.0.cl
1006
+ */
1007
+ EmbedEvent["CreateWorksheet"] = "createWorksheet";
834
1008
  })(exports.EmbedEvent || (exports.EmbedEvent = {}));
835
1009
  (function (HostEvent) {
836
1010
  /**
@@ -1451,16 +1625,16 @@
1451
1625
  */
1452
1626
  HostEvent["ResetSearch"] = "resetSearch";
1453
1627
  /**
1628
+ * @hidden
1454
1629
  * Gets the currents visible and runtime filters applied on a Liveboard
1455
- *
1456
1630
  * @example
1457
1631
  * liveboardEmbed.trigger(HostEvent.GetFilters)
1458
1632
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
1459
1633
  */
1460
1634
  HostEvent["GetFilters"] = "getFilters";
1461
1635
  /**
1636
+ * @hidden
1462
1637
  * Updates the visible filters on the Liveboard.
1463
- *
1464
1638
  * @param - filter: filter object containing column name and filter operation and values
1465
1639
  * @example
1466
1640
  *
@@ -1611,6 +1785,9 @@
1611
1785
  Param["HideSampleQuestions"] = "hideSampleQuestions";
1612
1786
  Param["WorksheetId"] = "worksheet";
1613
1787
  Param["Query"] = "query";
1788
+ Param["HideHomepageLeftNav"] = "hideHomepageLeftNav";
1789
+ Param["ModularHomeExperienceEnabled"] = "modularHomeExperience";
1790
+ Param["PendoTrackingKey"] = "additionalPendoKey";
1614
1791
  })(Param || (Param = {}));
1615
1792
  (function (Action) {
1616
1793
  /**
@@ -2086,7 +2263,7 @@
2086
2263
  * disabledActions: [Action.QueryDetailsButtons]
2087
2264
  * ```
2088
2265
  */
2089
- Action["QueryDetailsButtons"] = "QueryDetailsButtons";
2266
+ Action["QueryDetailsButtons"] = "queryDetailsButtons";
2090
2267
  /**
2091
2268
  * The **Delete** action for Answers.
2092
2269
  *
@@ -2391,13 +2568,36 @@
2391
2568
  * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
2392
2569
  */
2393
2570
  Action["ModifySageAnswer"] = "modifySageAnswer";
2571
+ /**
2572
+ * The **Move to Tab** menu action on visualizations in liveboard edit mode.
2573
+ * Allows moving a visualization to a different tab.
2574
+ *
2575
+ * @example
2576
+ * ```js
2577
+ * disabledActions: [Action.MoveToTab]
2578
+ * ```
2579
+ */
2580
+ Action["MoveToTab"] = "onContainerMove";
2581
+ /**
2582
+ * The **Manage Alertsb** menu action on KPI visualizations.
2583
+ *
2584
+ * @example
2585
+ * ```js
2586
+ * disabledActions: [Action.ManageMonitor]
2587
+ * ```
2588
+ */
2589
+ Action["ManageMonitor"] = "ManageMonitor";
2590
+ /**
2591
+ * Action ID for Liveboard Personalised Views dropdown
2592
+ *
2593
+ * @example
2594
+ * ```js
2595
+ * disabledActions: [Action.PersonalisedViewsDropdown]
2596
+ * ```
2597
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
2598
+ */
2599
+ Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
2394
2600
  })(exports.Action || (exports.Action = {}));
2395
- // eslint-disable-next-line no-shadow
2396
- var OperationType;
2397
- (function (OperationType) {
2398
- OperationType["GetChartWithData"] = "GetChartWithData";
2399
- OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
2400
- })(OperationType || (OperationType = {}));
2401
2601
  (function (PrefetchFeatures) {
2402
2602
  PrefetchFeatures["FullApp"] = "FullApp";
2403
2603
  PrefetchFeatures["SearchEmbed"] = "SearchEmbed";
@@ -8465,6 +8665,7 @@
8465
8665
 
8466
8666
  // Needed to avoid error in CJS builds on some bundlers.
8467
8667
  const mixpanelLib = mixpanel_cjs || mixpanel$1;
8668
+ let mixpanelInstance;
8468
8669
  const MIXPANEL_EVENT = {
8469
8670
  VISUAL_SDK_RENDER_START: 'visual-sdk-render-start',
8470
8671
  VISUAL_SDK_CALLED_INIT: 'visual-sdk-called-init',
@@ -8473,6 +8674,7 @@
8473
8674
  VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
8474
8675
  VISUAL_SDK_ON: 'visual-sdk-on',
8475
8676
  VISUAL_SDK_IFRAME_LOAD_PERFORMANCE: 'visual-sdk-iframe-load-performance',
8677
+ VISUAL_SDK_EMBED_CREATE: 'visual-sdk-embed-create',
8476
8678
  };
8477
8679
  let isMixpanelInitialized = false;
8478
8680
  let eventQueue = [];
@@ -8487,7 +8689,7 @@
8487
8689
  eventQueue.push({ eventId, eventProps });
8488
8690
  return;
8489
8691
  }
8490
- mixpanelLib.track(eventId, eventProps);
8692
+ mixpanelInstance.track(eventId, eventProps);
8491
8693
  }
8492
8694
  /**
8493
8695
  *
@@ -8506,6 +8708,7 @@
8506
8708
  * @param sessionInfo
8507
8709
  */
8508
8710
  function initMixpanel(sessionInfo) {
8711
+ var _a;
8509
8712
  if (!sessionInfo || !sessionInfo.mixpanelToken) {
8510
8713
  return;
8511
8714
  }
@@ -8515,10 +8718,16 @@
8515
8718
  const token = sessionInfo.mixpanelToken;
8516
8719
  try {
8517
8720
  if (token) {
8518
- mixpanelLib.init(token);
8721
+ mixpanelInstance = mixpanelLib.init(token, undefined, 'tsEmbed');
8519
8722
  if (!isPublicCluster) {
8520
- mixpanelLib.identify(sessionInfo.userGUID);
8723
+ mixpanelInstance.identify(sessionInfo.userGUID);
8521
8724
  }
8725
+ mixpanelInstance.register_once({
8726
+ clusterId: sessionInfo.clusterId,
8727
+ clusterName: sessionInfo.clusterName,
8728
+ releaseVersion: sessionInfo.releaseVersion,
8729
+ hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
8730
+ });
8522
8731
  isMixpanelInitialized = true;
8523
8732
  emptyQueue();
8524
8733
  }
@@ -9010,12 +9219,12 @@
9010
9219
  * _.isObject(null);
9011
9220
  * // => false
9012
9221
  */
9013
- function isObject(value) {
9222
+ function isObject$1(value) {
9014
9223
  var type = typeof value;
9015
9224
  return value != null && (type == 'object' || type == 'function');
9016
9225
  }
9017
9226
 
9018
- var isObject_1 = isObject;
9227
+ var isObject_1 = isObject$1;
9019
9228
 
9020
9229
  /** `Object#toString` result references. */
9021
9230
  var asyncTag = '[object AsyncFunction]',
@@ -9846,9 +10055,9 @@
9846
10055
  var _cacheHas = cacheHas;
9847
10056
 
9848
10057
  /* Built-in method references that are verified to be native. */
9849
- var Set = _getNative(_root, 'Set');
10058
+ var Set$1 = _getNative(_root, 'Set');
9850
10059
 
9851
- var _Set = Set;
10060
+ var _Set = Set$1;
9852
10061
 
9853
10062
  /**
9854
10063
  * This method returns `undefined`.
@@ -10217,6 +10426,9 @@
10217
10426
  userGUID: sessionInfoResp.userGUID,
10218
10427
  mixpanelToken,
10219
10428
  isPublicUser: sessionInfoResp.configInfo.isPublicUser,
10429
+ releaseVersion: sessionInfoResp.releaseVersion,
10430
+ clusterId: sessionInfoResp.configInfo.selfClusterId,
10431
+ clusterName: sessionInfoResp.configInfo.selfClusterName,
10220
10432
  ...sessionInfoResp,
10221
10433
  };
10222
10434
  };
@@ -10622,9 +10834,9 @@
10622
10834
  const authEE = new eventemitter3();
10623
10835
  setAuthEE(authEE);
10624
10836
  handleAuth();
10837
+ const { password, ...configToTrack } = config;
10625
10838
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_CALLED_INIT, {
10626
- authType: config.authType,
10627
- host: config.thoughtSpotHost,
10839
+ ...configToTrack,
10628
10840
  usedCustomizationSheet: ((_b = (_a = embedConfig.customizations) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.customCSSUrl) != null,
10629
10841
  usedCustomizationVariables: ((_e = (_d = (_c = embedConfig.customizations) === null || _c === void 0 ? void 0 : _c.style) === null || _d === void 0 ? void 0 : _d.customCSS) === null || _e === void 0 ? void 0 : _e.variables) != null,
10630
10842
  usedCustomizationRules: ((_h = (_g = (_f = embedConfig.customizations) === null || _f === void 0 ? void 0 : _f.style) === null || _g === void 0 ? void 0 : _g.customCSS) === null || _h === void 0 ? void 0 : _h.rules_UNSTABLE) != null,
@@ -10681,8 +10893,10 @@
10681
10893
  };
10682
10894
  /**
10683
10895
  * Imports TML representation of the metadata objects into ThoughtSpot.
10896
+ *
10684
10897
  * @param data
10685
10898
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
10899
+ * @group Global methods
10686
10900
  */
10687
10901
  const executeTML = async (data) => {
10688
10902
  const { thoughtSpotHost, authType } = config;
@@ -10725,9 +10939,12 @@
10725
10939
  });
10726
10940
  };
10727
10941
  /**
10728
- * Exports TML representation of the metadata objects from ThoughtSpot in JSON or YAML format.
10942
+ * Exports TML representation of the metadata objects from ThoughtSpot in JSON or YAML
10943
+ * format.
10944
+ *
10729
10945
  * @param data
10730
10946
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
10947
+ * @group Global methods
10731
10948
  */
10732
10949
  const exportTML = async (data) => {
10733
10950
  const { thoughtSpotHost, authType } = config;
@@ -10773,58 +10990,351 @@
10773
10990
 
10774
10991
  /**
10775
10992
  *
10776
- * @param session
10777
- * @param query
10778
- * @param operation
10993
+ * @param root0
10994
+ * @param root0.query
10995
+ * @param root0.variables
10996
+ * @param root0.thoughtSpotHost
10997
+ * @param root0.isCompositeQuery
10998
+ */
10999
+ async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
11000
+ const operationName = getOperationNameFromQuery(query);
11001
+ try {
11002
+ const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
11003
+ method: 'POST',
11004
+ headers: {
11005
+ 'content-type': 'application/json;charset=UTF-8',
11006
+ 'x-requested-by': 'ThoughtSpot',
11007
+ accept: '*/*',
11008
+ 'accept-language': 'en-us',
11009
+ },
11010
+ body: JSON.stringify({
11011
+ operationName,
11012
+ query,
11013
+ variables,
11014
+ }),
11015
+ credentials: 'include',
11016
+ });
11017
+ const result = await response.json();
11018
+ const dataValues = Object.values(result.data);
11019
+ return (isCompositeQuery) ? result.data : dataValues[0];
11020
+ }
11021
+ catch (error) {
11022
+ return error;
11023
+ }
11024
+ }
11025
+
11026
+ const getSourceDetailQuery = `
11027
+ query GetSourceDetail($ids: [GUID!]!) {
11028
+ getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
11029
+ id
11030
+ name
11031
+ description
11032
+ authorName
11033
+ authorDisplayName
11034
+ isExternal
11035
+ type
11036
+ created
11037
+ modified
11038
+ columns {
11039
+ id
11040
+ name
11041
+ author
11042
+ authorDisplayName
11043
+ description
11044
+ dataType
11045
+ type
11046
+ modified
11047
+ ownerName
11048
+ owner
11049
+ dataRecency
11050
+ sources {
11051
+ tableId
11052
+ tableName
11053
+ columnId
11054
+ columnName
11055
+ __typename
11056
+ }
11057
+ synonyms
11058
+ cohortAnswerId
11059
+ __typename
11060
+ }
11061
+ relationships
11062
+ destinationRelationships
11063
+ dataSourceId
11064
+ __typename
11065
+ }
11066
+ }
11067
+ `;
11068
+ const sourceDetailCache = new Map();
11069
+ /**
11070
+ *
10779
11071
  * @param thoughtSpotHost
11072
+ * @param sourceId
10780
11073
  */
10781
- function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
10782
- let variable;
10783
- const fetchQuery = async (variables) => {
10784
- try {
10785
- const response = await fetch(`${thoughtSpotHost}/prism/?op=${operation}`, {
10786
- method: 'POST',
10787
- headers: {
10788
- 'content-type': 'application/json;charset=UTF-8',
10789
- 'x-requested-by': 'ThoughtSpot',
10790
- accept: '*/*',
10791
- 'accept-language': 'en-us',
10792
- },
10793
- body: JSON.stringify({
10794
- operationName: operation,
10795
- query,
10796
- variables,
10797
- }),
10798
- credentials: 'include',
10799
- });
10800
- const result = await response.json();
10801
- return result.data;
11074
+ async function getSourceDetail(thoughtSpotHost, sourceId) {
11075
+ if (sourceDetailCache.has(sourceId)) {
11076
+ return sourceDetailCache.get(sourceId);
11077
+ }
11078
+ const details = await graphqlQuery({
11079
+ query: getSourceDetailQuery,
11080
+ variables: {
11081
+ ids: [sourceId],
11082
+ },
11083
+ thoughtSpotHost,
11084
+ });
11085
+ const souceDetails = details[0];
11086
+ sourceDetailCache.set(sourceId, souceDetails);
11087
+ return souceDetails;
11088
+ }
11089
+
11090
+ const bachSessionId = `
11091
+ id {
11092
+ sessionId
11093
+ genNo
11094
+ acSession {
11095
+ sessionId
11096
+ genNo
11097
+ }
11098
+ }
11099
+ `;
11100
+ const getUnaggregatedAnswerSession = `
11101
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
11102
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
11103
+ ${bachSessionId}
11104
+ answer {
11105
+ visualizations {
11106
+ ... on TableViz {
11107
+ columns {
11108
+ column {
11109
+ id
11110
+ name
11111
+ referencedColumns {
11112
+ guid
11113
+ displayName
11114
+ }
11115
+ }
11116
+ }
11117
+ }
11118
+ }
11119
+ }
11120
+ }
11121
+ }
11122
+ `;
11123
+ const removeColumns = `
11124
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
11125
+ Answer__removeColumns(
11126
+ session: $session
11127
+ logicalColumnIds: $logicalColumnIds
11128
+ columnIds: $columnIds
11129
+ ) {
11130
+ ${bachSessionId}
11131
+ }
11132
+ }
11133
+ `;
11134
+ const addColumns = `
11135
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
11136
+ Answer__addColumn(session: $session, columns: $columns) {
11137
+ ${bachSessionId}
11138
+ }
11139
+ }
11140
+ `;
11141
+ const getAnswerData = `
11142
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
11143
+ getAnswer(session: $session) {
11144
+ ${bachSessionId}
11145
+ answer {
11146
+ id
11147
+ visualizations {
11148
+ id
11149
+ ... on TableViz {
11150
+ columns {
11151
+ column {
11152
+ id
11153
+ name
11154
+ type
11155
+ aggregationType
11156
+ dataType
11157
+ }
11158
+ }
11159
+ data(deadline: $deadline, pagination: $dataPaginationParams)
11160
+ }
11161
+ }
11162
+ }
11163
+ }
11164
+ }
11165
+ `;
11166
+
11167
+ // eslint-disable-next-line no-shadow
11168
+ var OperationType;
11169
+ (function (OperationType) {
11170
+ OperationType["GetChartWithData"] = "GetChartWithData";
11171
+ OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
11172
+ })(OperationType || (OperationType = {}));
11173
+ /**
11174
+ * Class representing the answer service provided with the
11175
+ * custom action payload. This service could be used to run
11176
+ * graphql queries in the context of the answer on which the
11177
+ * custom action was triggered.
11178
+ *
11179
+ * @example
11180
+ * ```js
11181
+ * embed.on(EmbedEvent.CustomAction, e => {
11182
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
11183
+ * 'col name 1'
11184
+ * ]);
11185
+ * const data = await underlying.fetchData(0, 100);
11186
+ * })
11187
+ * ```
11188
+ * @version
11189
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
11190
+ */
11191
+ class AnswerService {
11192
+ constructor(session, answer, thoughtSpotHost, selectedPoints) {
11193
+ this.session = session;
11194
+ this.answer = answer;
11195
+ this.thoughtSpotHost = thoughtSpotHost;
11196
+ this.selectedPoints = selectedPoints;
11197
+ this.session = removeTypename(session);
11198
+ }
11199
+ async getSourceDetail() {
11200
+ const sourceId = this.answer.sources[0].header.guid;
11201
+ return getSourceDetail(this.thoughtSpotHost, sourceId);
11202
+ }
11203
+ async removeColumns(columnIds) {
11204
+ return this.executeQuery(removeColumns, {
11205
+ logicalColumnIds: columnIds,
11206
+ });
11207
+ }
11208
+ async addColumns(columnIds) {
11209
+ return this.executeQuery(addColumns, {
11210
+ columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
11211
+ });
11212
+ }
11213
+ async fetchData(offset = 0, size = 1000) {
11214
+ const { answer } = await this.executeQuery(getAnswerData, {
11215
+ deadline: 0,
11216
+ dataPaginationParams: {
11217
+ isClientPaginated: true,
11218
+ offset,
11219
+ size,
11220
+ },
11221
+ });
11222
+ const { columns, data } = answer.visualizations[0];
11223
+ return {
11224
+ columns,
11225
+ data,
11226
+ };
11227
+ }
11228
+ /**
11229
+ *
11230
+ * @param userLocale
11231
+ * @param omitInfo Omit the download Info on top of the CSV
11232
+ * @returns Response
11233
+ */
11234
+ async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
11235
+ if (omitInfo) {
11236
+ console.warn('omitInfo not supported yet.');
11237
+ }
11238
+ const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
11239
+ return fetch(fetchUrl, {
11240
+ credentials: 'include',
11241
+ });
11242
+ }
11243
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
11244
+ if (!selectedPoints && !this.selectedPoints) {
11245
+ throw new Error('Needs to be triggered in context of a point');
10802
11246
  }
10803
- catch (error) {
10804
- return error;
11247
+ if (!selectedPoints) {
11248
+ selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
10805
11249
  }
10806
- };
10807
- const fetchData = (offset, batchSize) => {
10808
- if (operation === OperationType.GetChartWithData) {
10809
- variable = { batchSize, offset: offset * batchSize };
11250
+ const sourceDetail = await this.getSourceDetail();
11251
+ const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
11252
+ const unAggAnswer = await graphqlQuery({
11253
+ query: getUnaggregatedAnswerSession,
11254
+ variables: {
11255
+ session: this.session,
11256
+ columns: selectedPoints,
11257
+ },
11258
+ thoughtSpotHost: this.thoughtSpotHost,
11259
+ });
11260
+ const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
11261
+ const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
11262
+ .map((c) => c.column.referencedColumns[0].guid));
11263
+ const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
11264
+ if (columnsToAdd.length) {
11265
+ await unaggAnswerSession.addColumns(columnsToAdd);
11266
+ }
11267
+ const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
11268
+ if (columnsToRemove.length) {
11269
+ await unaggAnswerSession.removeColumns(columnsToRemove);
11270
+ }
11271
+ return unaggAnswerSession;
11272
+ }
11273
+ async executeQuery(query, variables) {
11274
+ const data = await graphqlQuery({
11275
+ query,
11276
+ variables: {
11277
+ session: this.session,
11278
+ ...variables,
11279
+ },
11280
+ thoughtSpotHost: this.thoughtSpotHost,
11281
+ isCompositeQuery: false,
11282
+ });
11283
+ this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
11284
+ return data;
11285
+ }
11286
+ getSession() {
11287
+ return this.session;
11288
+ }
11289
+ }
11290
+ /**
11291
+ *
11292
+ * @param sourceDetail
11293
+ * @param colNames
11294
+ */
11295
+ function getGuidsFromColumnNames(sourceDetail, colNames) {
11296
+ const cols = sourceDetail.columns.reduce((colSet, col) => {
11297
+ colSet[col.name] = col;
11298
+ return colSet;
11299
+ }, {});
11300
+ return new Set(colNames.map((colName) => {
11301
+ const col = cols[colName];
11302
+ return col.id;
11303
+ }));
11304
+ }
11305
+ /**
11306
+ *
11307
+ * @param selectedPoints
11308
+ */
11309
+ function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
11310
+ const underlyingDataPoint = [];
11311
+ /**
11312
+ *
11313
+ * @param colVal
11314
+ */
11315
+ function addPointFromColVal(colVal) {
11316
+ const dataType = colVal.column.dataType;
11317
+ const id = colVal.column.id;
11318
+ let dataValue;
11319
+ if (dataType === 'DATE') {
11320
+ dataValue = [{
11321
+ epochRange: {
11322
+ startEpoch: colVal.value,
11323
+ },
11324
+ }];
10810
11325
  }
10811
11326
  else {
10812
- variable = {
10813
- dataPaginationParams: {
10814
- isClientPaginated: true,
10815
- offset: offset * batchSize,
10816
- size: batchSize,
10817
- },
10818
- };
11327
+ dataValue = [{ value: colVal.value }];
10819
11328
  }
10820
- return fetchQuery({
10821
- session,
10822
- ...variable,
11329
+ underlyingDataPoint.push({
11330
+ columnId: colVal.column.id,
11331
+ dataValue,
10823
11332
  });
10824
- };
10825
- return {
10826
- fetchData,
10827
- };
11333
+ }
11334
+ selectedPoints.forEach((p) => {
11335
+ p.selectedAttributes.forEach(addPointFromColVal);
11336
+ });
11337
+ return underlyingDataPoint;
10828
11338
  }
10829
11339
 
10830
11340
  /**
@@ -10833,16 +11343,12 @@
10833
11343
  * @param thoughtSpotHost
10834
11344
  */
10835
11345
  function processCustomAction(e, thoughtSpotHost) {
10836
- var _a;
10837
- if ([OperationType.GetChartWithData, OperationType.GetTableWithHeadlineData].includes((_a = e.data) === null || _a === void 0 ? void 0 : _a.operation)) {
10838
- const { session, query, operation } = e.data;
10839
- const answerService = getAnswerServiceInstance(session, query, operation, thoughtSpotHost);
10840
- return {
10841
- ...e,
10842
- answerService,
10843
- };
10844
- }
10845
- return e;
11346
+ const { session, embedAnswerData, contextMenuPoints } = e.data;
11347
+ const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
11348
+ return {
11349
+ ...e,
11350
+ answerService,
11351
+ };
10846
11352
  }
10847
11353
  /**
10848
11354
  *
@@ -10987,7 +11493,7 @@
10987
11493
  });
10988
11494
  }
10989
11495
 
10990
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-sage.3";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$1={".":{"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 is-publish-allowed && npm run test && 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","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","@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$1,typesVersions:typesVersions,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};
11496
+ var name="@thoughtspot/visual-embed-sdk";var version="1.24.1";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$1={".":{"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 is-publish-allowed && npm run test && 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$1,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};
10991
11497
 
10992
11498
  /**
10993
11499
  * Copyright (c) 2022
@@ -11019,6 +11525,7 @@
11019
11525
  class TsEmbed {
11020
11526
  constructor(domSelector, viewConfig) {
11021
11527
  this.isAppInitialized = false;
11528
+ this.embedComponentType = 'TsEmbed';
11022
11529
  /**
11023
11530
  * Should we encode URL Query Params using base64 encoding which thoughtspot
11024
11531
  * will generate for embedding. This provides additional security to
@@ -11035,6 +11542,7 @@
11035
11542
  * @param responder
11036
11543
  */
11037
11544
  this.appInitCb = async (_, responder) => {
11545
+ var _a, _b;
11038
11546
  let authToken = '';
11039
11547
  if (this.embedConfig.authType === exports.AuthType.TrustedAuthTokenCookieless) {
11040
11548
  authToken = await getAuthenticaionToken(this.embedConfig);
@@ -11045,8 +11553,15 @@
11045
11553
  data: {
11046
11554
  customisations: getCustomisations(this.embedConfig, this.viewConfig),
11047
11555
  authToken,
11048
- runtimeFilterParams: getRuntimeFilters(this.viewConfig.runtimeFilters),
11556
+ runtimeFilterParams: this.viewConfig.excludeRuntimeFiltersfromURL
11557
+ ? getRuntimeFilters(this.viewConfig.runtimeFilters)
11558
+ : null,
11559
+ hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
11560
+ reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
11049
11561
  hostConfig: this.embedConfig.hostConfig,
11562
+ hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
11563
+ ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
11564
+ : [],
11050
11565
  },
11051
11566
  });
11052
11567
  };
@@ -11074,8 +11589,8 @@
11074
11589
  * Register APP_INIT event and sendback init payload
11075
11590
  */
11076
11591
  this.registerAppInit = () => {
11077
- this.on(exports.EmbedEvent.APP_INIT, this.appInitCb);
11078
- this.on(exports.EmbedEvent.AuthExpire, this.updateAuthToken);
11592
+ this.on(exports.EmbedEvent.APP_INIT, this.appInitCb, { start: false }, true);
11593
+ this.on(exports.EmbedEvent.AuthExpire, this.updateAuthToken, { start: false }, true);
11079
11594
  };
11080
11595
  this.el = getDOMNode(domSelector);
11081
11596
  // TODO: handle error
@@ -11090,6 +11605,10 @@
11090
11605
  this.viewConfig = viewConfig;
11091
11606
  this.shouldEncodeUrlQueryParams = this.embedConfig.shouldEncodeUrlQueryParams;
11092
11607
  this.registerAppInit();
11608
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
11609
+ ...viewConfig,
11610
+ embedComponentType: this.embedComponentType,
11611
+ });
11093
11612
  }
11094
11613
  /**
11095
11614
  * Throws error encountered during initialization.
@@ -11220,6 +11739,9 @@
11220
11739
  if (this.embedConfig.authType === exports.AuthType.TrustedAuthTokenCookieless) {
11221
11740
  queryParams[Param.cookieless] = true;
11222
11741
  }
11742
+ if (this.embedConfig.pendoTrackingKey) {
11743
+ queryParams[Param.PendoTrackingKey] = this.embedConfig.pendoTrackingKey;
11744
+ }
11223
11745
  const { disabledActions, disabledActionReason, hiddenActions, visibleActions, hiddenTabs, visibleTabs, showAlerts, additionalFlags, locale, customizations, contextMenuTrigger, linkOverride, insertInToSlide, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, } = this.viewConfig;
11224
11746
  if (Array.isArray(visibleActions) && Array.isArray(hiddenActions)) {
11225
11747
  this.handleError('You cannot have both hidden actions and visible actions');
@@ -11372,7 +11894,6 @@
11372
11894
  this.insertIntoDOM(this.embedConfig.loginFailedMessage);
11373
11895
  return;
11374
11896
  }
11375
- uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE);
11376
11897
  this.iFrame = this.iFrame || this.createIframeEl(url);
11377
11898
  this.iFrame.addEventListener('load', () => {
11378
11899
  nextInQueue();
@@ -11383,7 +11904,9 @@
11383
11904
  },
11384
11905
  type: exports.EmbedEvent.Load,
11385
11906
  });
11386
- uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_IFRAME_LOAD_PERFORMANCE, {
11907
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE, {
11908
+ elWidth: this.iFrame.clientWidth,
11909
+ elHeight: this.iFrame.clientHeight,
11387
11910
  timeTookToLoad: loadTimestamp - initTimestamp,
11388
11911
  });
11389
11912
  });
@@ -11526,6 +12049,8 @@
11526
12049
  * @param messageType The message type
11527
12050
  * @param callback A callback as a function
11528
12051
  * @param options The message options
12052
+ * @param isSelf
12053
+ * @param isRegisteredBySDK
11529
12054
  * @example
11530
12055
  * ```js
11531
12056
  * tsEmbed.on(EmbedEvent.Error, (data) => {
@@ -11541,7 +12066,10 @@
11541
12066
  * });
11542
12067
  * ```
11543
12068
  */
11544
- on(messageType, callback, options = { start: false }) {
12069
+ on(messageType, callback, options = { start: false }, isRegisteredBySDK = false) {
12070
+ uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_ON}-${messageType}`, {
12071
+ isRegisteredBySDK,
12072
+ });
11545
12073
  if (this.isRendered) {
11546
12074
  this.handleError('Please register event handlers before calling render');
11547
12075
  }
@@ -11698,8 +12226,10 @@
11698
12226
  let queryString = queryParams;
11699
12227
  if (!this.viewConfig.excludeRuntimeFiltersfromURL) {
11700
12228
  const runtimeFilters = this.viewConfig.runtimeFilters;
12229
+ const runtimeParameters = this.viewConfig.runtimeParameters;
12230
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11701
12231
  const filterQuery = getFilterQuery(runtimeFilters || []);
11702
- queryString = [filterQuery, queryParams].filter(Boolean).join('&');
12232
+ queryString = [parameterQuery, filterQuery, queryParams].filter(Boolean).join('&');
11703
12233
  }
11704
12234
  return this.getV1EmbedBasePath(queryString);
11705
12235
  }
@@ -11722,7 +12252,6 @@
11722
12252
  */
11723
12253
  on(messageType, callback, options = { start: false }) {
11724
12254
  const eventType = this.getCompatibleEventType(messageType);
11725
- uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_ON}-${messageType}`);
11726
12255
  return super.on(eventType, callback, options);
11727
12256
  }
11728
12257
  }
@@ -11777,6 +12306,7 @@
11777
12306
  constructor(domSelector, viewConfig) {
11778
12307
  super(domSelector, viewConfig);
11779
12308
  this.defaultHeight = '100%';
12309
+ this.embedComponentType = 'AppEmbed';
11780
12310
  /**
11781
12311
  * Set the iframe height as per the computed height received
11782
12312
  * from the ThoughtSpot app.
@@ -11808,7 +12338,7 @@
11808
12338
  * embedded Liveboard or visualization.
11809
12339
  */
11810
12340
  getEmbedParams() {
11811
- const { tag, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, fullHeight, dataPanelV2 = false, } = this.viewConfig;
12341
+ const { tag, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, fullHeight, dataPanelV2 = false, hideHomepageLeftNav = false, modularHomeExperience = false, } = this.viewConfig;
11812
12342
  let params = {};
11813
12343
  params[Param.EmbedApp] = true;
11814
12344
  params[Param.PrimaryNavHidden] = !showPrimaryNavbar;
@@ -11832,6 +12362,8 @@
11832
12362
  params[Param.EnableSearchAssist] = enableSearchAssist;
11833
12363
  }
11834
12364
  params[Param.DataPanelV2Enabled] = dataPanelV2;
12365
+ params[Param.HideHomepageLeftNav] = hideHomepageLeftNav;
12366
+ params[Param.ModularHomeExperienceEnabled] = modularHomeExperience;
11835
12367
  const queryParams = getQueryParamString(params, true);
11836
12368
  return queryParams;
11837
12369
  }
@@ -11841,8 +12373,8 @@
11841
12373
  * @param pageId The ID of the page to be embedded.
11842
12374
  */
11843
12375
  getIFrameSrc() {
11844
- const { pageId, path } = this.viewConfig;
11845
- const pageRoute = this.formatPath(path) || this.getPageRoute(pageId);
12376
+ const { pageId, path, modularHomeExperience } = this.viewConfig;
12377
+ const pageRoute = this.formatPath(path) || this.getPageRoute(pageId, modularHomeExperience);
11846
12378
  let url = `${this.getRootIframeSrc()}/${pageRoute}`;
11847
12379
  const tsPostHashParams = this.getThoughtSpotPostUrlParams();
11848
12380
  url = `${url}${tsPostHashParams}`;
@@ -11852,21 +12384,22 @@
11852
12384
  * Gets the ThoughtSpot route of the page for a particular page ID.
11853
12385
  *
11854
12386
  * @param pageId The identifier for a page in the ThoughtSpot app.
12387
+ * @param modularHomeExperience
11855
12388
  */
11856
- getPageRoute(pageId) {
12389
+ getPageRoute(pageId, modularHomeExperience = false) {
11857
12390
  switch (pageId) {
11858
12391
  case exports.Page.Search:
11859
12392
  return 'answer';
11860
12393
  case exports.Page.Answers:
11861
- return 'answers';
12394
+ return modularHomeExperience ? 'home/answers' : 'answers';
11862
12395
  case exports.Page.Liveboards:
11863
- return 'pinboards';
12396
+ return modularHomeExperience ? 'home/liveboards' : 'pinboards';
11864
12397
  case exports.Page.Pinboards:
11865
- return 'pinboards';
12398
+ return modularHomeExperience ? 'home/liveboards' : 'pinboards';
11866
12399
  case exports.Page.Data:
11867
12400
  return 'data/tables';
11868
12401
  case exports.Page.SpotIQ:
11869
- return 'insights/results';
12402
+ return modularHomeExperience ? 'home/spotiq-analysis' : 'insights/results';
11870
12403
  case exports.Page.Home:
11871
12404
  default:
11872
12405
  return 'home';
@@ -11963,6 +12496,7 @@
11963
12496
  constructor(domSelector, viewConfig) {
11964
12497
  super(domSelector, viewConfig);
11965
12498
  this.defaultHeight = 500;
12499
+ this.embedComponentType = 'LiveboardEmbed';
11966
12500
  /**
11967
12501
  * Set the iframe height as per the computed height received
11968
12502
  * from the ThoughtSpot app.
@@ -11995,7 +12529,7 @@
11995
12529
  let params = {};
11996
12530
  params[Param.EmbedApp] = true;
11997
12531
  params = this.getBaseQueryParams(params);
11998
- const { enableVizTransformations, fullHeight, defaultHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, } = this.viewConfig;
12532
+ const { enableVizTransformations, fullHeight, defaultHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, runtimeParameters, } = this.viewConfig;
11999
12533
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
12000
12534
  || this.viewConfig.preventPinboardFilterRemoval;
12001
12535
  if (fullHeight === true) {
@@ -12023,7 +12557,10 @@
12023
12557
  if (hideTabPanel) {
12024
12558
  params[Param.HideTabPanel] = hideTabPanel;
12025
12559
  }
12026
- const queryParams = getQueryParamString(params, true);
12560
+ let queryParams = getQueryParamString(params, true);
12561
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
12562
+ if (parameterQuery)
12563
+ queryParams += `&${parameterQuery}`;
12027
12564
  return queryParams;
12028
12565
  }
12029
12566
  getIframeSuffixSrc(liveboardId, vizId, activeTabId) {
@@ -12129,6 +12666,7 @@
12129
12666
  class SearchEmbed extends TsEmbed {
12130
12667
  constructor(domSelector, viewConfig) {
12131
12668
  super(domSelector);
12669
+ this.embedComponentType = 'SearchEmbed';
12132
12670
  this.viewConfig = viewConfig;
12133
12671
  }
12134
12672
  /**
@@ -12147,7 +12685,7 @@
12147
12685
  }
12148
12686
  getEmbedParams() {
12149
12687
  var _a;
12150
- const { hideResults, enableSearchAssist, forceTable, searchOptions, runtimeFilters, dataSource, dataSources, excludeRuntimeFiltersfromURL, dataPanelV2 = false, } = this.viewConfig;
12688
+ const { hideResults, expandAllDataSource, enableSearchAssist, forceTable, searchOptions, runtimeFilters, dataSource, dataSources, excludeRuntimeFiltersfromURL, dataPanelV2 = false, useLastSelectedSources = false, runtimeParameters, } = this.viewConfig;
12151
12689
  const queryParams = this.getBaseQueryParams();
12152
12690
  queryParams[Param.HideActions] = [
12153
12691
  ...((_a = queryParams[Param.HideActions]) !== null && _a !== void 0 ? _a : []),
@@ -12176,13 +12714,19 @@
12176
12714
  }
12177
12715
  queryParams[Param.DataPanelV2Enabled] = dataPanelV2;
12178
12716
  queryParams[Param.DataSourceMode] = this.getDataSourceMode();
12179
- queryParams[Param.UseLastSelectedDataSource] = false;
12717
+ queryParams[Param.UseLastSelectedDataSource] = useLastSelectedSources;
12718
+ if (dataSource || dataSources) {
12719
+ queryParams[Param.UseLastSelectedDataSource] = false;
12720
+ }
12180
12721
  queryParams[Param.searchEmbed] = true;
12181
12722
  let query = '';
12182
12723
  const queryParamsString = getQueryParamString(queryParams, true);
12183
12724
  if (queryParamsString) {
12184
12725
  query = `?${queryParamsString}`;
12185
12726
  }
12727
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
12728
+ if (parameterQuery)
12729
+ query += `&${parameterQuery}`;
12186
12730
  const filterQuery = getFilterQuery(runtimeFilters || []);
12187
12731
  if (filterQuery && !excludeRuntimeFiltersfromURL) {
12188
12732
  query += `&${filterQuery}`;
@@ -12227,6 +12771,7 @@
12227
12771
  class SearchBarEmbed extends TsEmbed {
12228
12772
  constructor(domSelector, viewConfig) {
12229
12773
  super(domSelector);
12774
+ this.embedComponentType = 'SearchBarEmbed';
12230
12775
  this.viewConfig = viewConfig;
12231
12776
  }
12232
12777
  /**
@@ -12237,7 +12782,7 @@
12237
12782
  */
12238
12783
  getIFrameSrc() {
12239
12784
  var _a;
12240
- const { searchOptions, dataSource, dataSources } = this.viewConfig;
12785
+ const { searchOptions, dataSource, dataSources, useLastSelectedSources = false, } = this.viewConfig;
12241
12786
  const path = 'search-bar-embed';
12242
12787
  const queryParams = this.getBaseQueryParams();
12243
12788
  queryParams[Param.HideActions] = [...((_a = queryParams[Param.HideActions]) !== null && _a !== void 0 ? _a : [])];
@@ -12253,7 +12798,10 @@
12253
12798
  queryParams[Param.executeSearch] = true;
12254
12799
  }
12255
12800
  }
12256
- queryParams[Param.UseLastSelectedDataSource] = false;
12801
+ queryParams[Param.UseLastSelectedDataSource] = useLastSelectedSources;
12802
+ if (dataSource || dataSources) {
12803
+ queryParams[Param.UseLastSelectedDataSource] = false;
12804
+ }
12257
12805
  queryParams[Param.searchEmbed] = true;
12258
12806
  let query = '';
12259
12807
  const queryParamsString = getQueryParamString(queryParams, true);
@@ -12302,6 +12850,7 @@
12302
12850
  // eslint-disable-next-line no-useless-constructor
12303
12851
  constructor(domSelector, viewConfig) {
12304
12852
  super(domSelector, viewConfig);
12853
+ this.embedComponentType = 'SageEmbed';
12305
12854
  }
12306
12855
  /**
12307
12856
  * Constructs a map of parameters to be passed on to the
@@ -12363,6 +12912,7 @@
12363
12912
  }
12364
12913
  }
12365
12914
 
12915
+ exports.AnswerService = AnswerService;
12366
12916
  exports.AppEmbed = AppEmbed;
12367
12917
  exports.LiveboardEmbed = LiveboardEmbed;
12368
12918
  exports.PinboardEmbed = PinboardEmbed;