@thoughtspot/visual-embed-sdk 1.20.2 → 1.20.3

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 (368) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +171 -0
  3. package/cjs/src/auth.d.ts +183 -0
  4. package/cjs/src/auth.d.ts.map +1 -0
  5. package/cjs/src/auth.js +457 -0
  6. package/cjs/src/auth.js.map +1 -0
  7. package/cjs/src/auth.spec.d.ts +13 -0
  8. package/cjs/src/auth.spec.d.ts.map +1 -0
  9. package/cjs/src/auth.spec.js +397 -0
  10. package/cjs/src/auth.spec.js.map +1 -0
  11. package/cjs/src/config.d.ts +22 -0
  12. package/cjs/src/config.d.ts.map +1 -0
  13. package/cjs/src/config.js +70 -0
  14. package/cjs/src/config.js.map +1 -0
  15. package/cjs/src/config.spec.d.ts +5 -0
  16. package/cjs/src/config.spec.d.ts.map +1 -0
  17. package/cjs/src/config.spec.js +65 -0
  18. package/cjs/src/config.spec.js.map +1 -0
  19. package/cjs/src/embed/app.d.ts +168 -0
  20. package/cjs/src/embed/app.d.ts.map +1 -0
  21. package/cjs/src/embed/app.js +215 -0
  22. package/cjs/src/embed/app.js.map +1 -0
  23. package/cjs/src/embed/app.spec.d.ts +2 -0
  24. package/cjs/src/embed/app.spec.d.ts.map +1 -0
  25. package/cjs/src/embed/app.spec.js +239 -0
  26. package/cjs/src/embed/app.spec.js.map +1 -0
  27. package/cjs/src/embed/base.d.ts +79 -0
  28. package/cjs/src/embed/base.d.ts.map +1 -0
  29. package/cjs/src/embed/base.js +229 -0
  30. package/cjs/src/embed/base.js.map +1 -0
  31. package/cjs/src/embed/base.spec.d.ts +2 -0
  32. package/cjs/src/embed/base.spec.d.ts.map +1 -0
  33. package/cjs/src/embed/base.spec.js +198 -0
  34. package/cjs/src/embed/base.spec.js.map +1 -0
  35. package/cjs/src/embed/embed.spec.d.ts +2 -0
  36. package/cjs/src/embed/embed.spec.d.ts.map +1 -0
  37. package/cjs/src/embed/embed.spec.js +74 -0
  38. package/cjs/src/embed/embed.spec.js.map +1 -0
  39. package/cjs/src/embed/events.spec.d.ts +2 -0
  40. package/cjs/src/embed/events.spec.d.ts.map +1 -0
  41. package/cjs/src/embed/events.spec.js +238 -0
  42. package/cjs/src/embed/events.spec.js.map +1 -0
  43. package/cjs/src/embed/liveboard.d.ts +150 -0
  44. package/cjs/src/embed/liveboard.d.ts.map +1 -0
  45. package/cjs/src/embed/liveboard.js +168 -0
  46. package/cjs/src/embed/liveboard.js.map +1 -0
  47. package/cjs/src/embed/liveboard.spec.d.ts +2 -0
  48. package/cjs/src/embed/liveboard.spec.d.ts.map +1 -0
  49. package/cjs/src/embed/liveboard.spec.js +229 -0
  50. package/cjs/src/embed/liveboard.spec.js.map +1 -0
  51. package/cjs/src/embed/pinboard.spec.d.ts +2 -0
  52. package/cjs/src/embed/pinboard.spec.d.ts.map +1 -0
  53. package/cjs/src/embed/pinboard.spec.js +148 -0
  54. package/cjs/src/embed/pinboard.spec.js.map +1 -0
  55. package/cjs/src/embed/search-bar.d.ts +50 -0
  56. package/cjs/src/embed/search-bar.d.ts.map +1 -0
  57. package/cjs/src/embed/search-bar.js +63 -0
  58. package/cjs/src/embed/search-bar.js.map +1 -0
  59. package/cjs/src/embed/search.d.ts +129 -0
  60. package/cjs/src/embed/search.d.ts.map +1 -0
  61. package/cjs/src/embed/search.js +121 -0
  62. package/cjs/src/embed/search.js.map +1 -0
  63. package/cjs/src/embed/search.spec.d.ts +2 -0
  64. package/cjs/src/embed/search.spec.d.ts.map +1 -0
  65. package/cjs/src/embed/search.spec.js +238 -0
  66. package/cjs/src/embed/search.spec.js.map +1 -0
  67. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
  68. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
  69. package/cjs/src/embed/searchEmbed-basic-auth.spec.js +103 -0
  70. package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
  71. package/cjs/src/embed/ts-embed.d.ts +323 -0
  72. package/cjs/src/embed/ts-embed.d.ts.map +1 -0
  73. package/cjs/src/embed/ts-embed.js +719 -0
  74. package/cjs/src/embed/ts-embed.js.map +1 -0
  75. package/cjs/src/embed/ts-embed.spec.d.ts +2 -0
  76. package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -0
  77. package/cjs/src/embed/ts-embed.spec.js +771 -0
  78. package/cjs/src/embed/ts-embed.spec.js.map +1 -0
  79. package/cjs/src/errors.d.ts +7 -0
  80. package/cjs/src/errors.d.ts.map +1 -0
  81. package/cjs/src/errors.js +10 -0
  82. package/cjs/src/errors.js.map +1 -0
  83. package/cjs/src/index.d.ts +18 -0
  84. package/cjs/src/index.d.ts.map +1 -0
  85. package/cjs/src/index.js +42 -0
  86. package/cjs/src/index.js.map +1 -0
  87. package/cjs/src/mixpanel-service.d.ts +29 -0
  88. package/cjs/src/mixpanel-service.d.ts.map +1 -0
  89. package/cjs/src/mixpanel-service.js +76 -0
  90. package/cjs/src/mixpanel-service.js.map +1 -0
  91. package/cjs/src/mixpanel-service.spec.d.ts +2 -0
  92. package/cjs/src/mixpanel-service.spec.d.ts.map +1 -0
  93. package/cjs/src/mixpanel-service.spec.js +63 -0
  94. package/cjs/src/mixpanel-service.spec.js.map +1 -0
  95. package/cjs/src/react/all-types-export.d.ts +3 -0
  96. package/cjs/src/react/all-types-export.d.ts.map +1 -0
  97. package/cjs/src/react/all-types-export.js +29 -0
  98. package/cjs/src/react/all-types-export.js.map +1 -0
  99. package/cjs/src/react/all-types-export.spec.d.ts +2 -0
  100. package/cjs/src/react/all-types-export.spec.d.ts.map +1 -0
  101. package/cjs/src/react/all-types-export.spec.js +13 -0
  102. package/cjs/src/react/all-types-export.spec.js.map +1 -0
  103. package/cjs/src/react/index.d.ts +95 -0
  104. package/cjs/src/react/index.d.ts.map +1 -0
  105. package/cjs/src/react/index.js +121 -0
  106. package/cjs/src/react/index.js.map +1 -0
  107. package/cjs/src/react/index.spec.d.ts +3 -0
  108. package/cjs/src/react/index.spec.d.ts.map +1 -0
  109. package/cjs/src/react/index.spec.js +138 -0
  110. package/cjs/src/react/index.spec.js.map +1 -0
  111. package/cjs/src/react/util.d.ts +19 -0
  112. package/cjs/src/react/util.d.ts.map +1 -0
  113. package/cjs/src/react/util.js +25 -0
  114. package/cjs/src/react/util.js.map +1 -0
  115. package/cjs/src/test/test-utils.d.ts +48 -0
  116. package/cjs/src/test/test-utils.d.ts.map +1 -0
  117. package/cjs/src/test/test-utils.js +108 -0
  118. package/cjs/src/test/test-utils.js.map +1 -0
  119. package/cjs/src/types.d.ts +2020 -0
  120. package/cjs/src/types.d.ts.map +1 -0
  121. package/cjs/src/types.js +1543 -0
  122. package/cjs/src/types.js.map +1 -0
  123. package/cjs/src/utils/answerService.d.ts +10 -0
  124. package/cjs/src/utils/answerService.d.ts.map +1 -0
  125. package/cjs/src/utils/answerService.js +61 -0
  126. package/cjs/src/utils/answerService.js.map +1 -0
  127. package/cjs/src/utils/answerService.spec.d.ts +2 -0
  128. package/cjs/src/utils/answerService.spec.d.ts.map +1 -0
  129. package/cjs/src/utils/answerService.spec.js +31 -0
  130. package/cjs/src/utils/answerService.spec.js.map +1 -0
  131. package/cjs/src/utils/authService.d.ts +37 -0
  132. package/cjs/src/utils/authService.d.ts.map +1 -0
  133. package/cjs/src/utils/authService.js +106 -0
  134. package/cjs/src/utils/authService.js.map +1 -0
  135. package/cjs/src/utils/authService.spec.d.ts +2 -0
  136. package/cjs/src/utils/authService.spec.d.ts.map +1 -0
  137. package/cjs/src/utils/authService.spec.js +72 -0
  138. package/cjs/src/utils/authService.spec.js.map +1 -0
  139. package/cjs/src/utils/processData.d.ts +16 -0
  140. package/cjs/src/utils/processData.d.ts.map +1 -0
  141. package/cjs/src/utils/processData.js +110 -0
  142. package/cjs/src/utils/processData.js.map +1 -0
  143. package/cjs/src/utils/processData.spec.d.ts +2 -0
  144. package/cjs/src/utils/processData.spec.d.ts.map +1 -0
  145. package/cjs/src/utils/processData.spec.js +142 -0
  146. package/cjs/src/utils/processData.spec.js.map +1 -0
  147. package/cjs/src/utils/processTrigger.d.ts +10 -0
  148. package/cjs/src/utils/processTrigger.d.ts.map +1 -0
  149. package/cjs/src/utils/processTrigger.js +63 -0
  150. package/cjs/src/utils/processTrigger.js.map +1 -0
  151. package/cjs/src/utils/processTrigger.spec.d.ts +2 -0
  152. package/cjs/src/utils/processTrigger.spec.d.ts.map +1 -0
  153. package/cjs/src/utils/processTrigger.spec.js +58 -0
  154. package/cjs/src/utils/processTrigger.spec.js.map +1 -0
  155. package/cjs/src/utils.d.ts +68 -0
  156. package/cjs/src/utils.d.ts.map +1 -0
  157. package/cjs/src/utils.js +196 -0
  158. package/cjs/src/utils.js.map +1 -0
  159. package/cjs/src/utils.spec.d.ts +5 -0
  160. package/cjs/src/utils.spec.d.ts.map +1 -0
  161. package/cjs/src/utils.spec.js +98 -0
  162. package/cjs/src/utils.spec.js.map +1 -0
  163. package/dist/src/auth.d.ts +54 -5
  164. package/dist/src/auth.d.ts.map +1 -1
  165. package/dist/src/auth.spec.d.ts +3 -0
  166. package/dist/src/auth.spec.d.ts.map +1 -1
  167. package/dist/src/config.d.ts +1 -0
  168. package/dist/src/config.d.ts.map +1 -1
  169. package/dist/src/embed/app.d.ts +35 -6
  170. package/dist/src/embed/app.d.ts.map +1 -1
  171. package/dist/src/embed/base.d.ts +20 -9
  172. package/dist/src/embed/base.d.ts.map +1 -1
  173. package/dist/src/embed/liveboard.d.ts +17 -5
  174. package/dist/src/embed/liveboard.d.ts.map +1 -1
  175. package/dist/src/embed/search-bar.d.ts +3 -0
  176. package/dist/src/embed/search-bar.d.ts.map +1 -1
  177. package/dist/src/embed/search.d.ts +9 -1
  178. package/dist/src/embed/search.d.ts.map +1 -1
  179. package/dist/src/embed/ts-embed.d.ts +65 -7
  180. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  181. package/dist/src/errors.d.ts.map +1 -1
  182. package/dist/src/index.d.ts +2 -2
  183. package/dist/src/index.d.ts.map +1 -1
  184. package/dist/src/mixpanel-service.d.ts +8 -0
  185. package/dist/src/mixpanel-service.d.ts.map +1 -1
  186. package/dist/src/react/all-types-export.d.ts +3 -0
  187. package/dist/src/react/all-types-export.d.ts.map +1 -0
  188. package/dist/src/react/all-types-export.spec.d.ts +2 -0
  189. package/dist/src/react/all-types-export.spec.d.ts.map +1 -0
  190. package/dist/src/react/index.d.ts +72 -0
  191. package/dist/src/react/index.d.ts.map +1 -1
  192. package/dist/src/react/util.d.ts +4 -0
  193. package/dist/src/react/util.d.ts.map +1 -1
  194. package/dist/src/test/test-utils.d.ts +11 -2
  195. package/dist/src/test/test-utils.d.ts.map +1 -1
  196. package/dist/src/types.d.ts +499 -96
  197. package/dist/src/types.d.ts.map +1 -1
  198. package/dist/src/utils/answerService.d.ts +7 -0
  199. package/dist/src/utils/answerService.d.ts.map +1 -1
  200. package/dist/src/utils/authService.d.ts +30 -0
  201. package/dist/src/utils/authService.d.ts.map +1 -1
  202. package/dist/src/utils/processData.d.ts +12 -0
  203. package/dist/src/utils/processData.d.ts.map +1 -1
  204. package/dist/src/utils/processTrigger.d.ts +7 -0
  205. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  206. package/dist/src/utils.d.ts +12 -0
  207. package/dist/src/utils.d.ts.map +1 -1
  208. package/dist/tsembed-react.es.js +28024 -0
  209. package/dist/tsembed-react.js +27966 -0
  210. package/dist/tsembed.es.js +18114 -305
  211. package/dist/tsembed.js +18088 -327
  212. package/dist/visual-embed-sdk-react-full.d.ts +3092 -0
  213. package/dist/visual-embed-sdk-react.d.ts +2781 -0
  214. package/dist/visual-embed-sdk.d.ts +2944 -0
  215. package/lib/package.json +15 -14
  216. package/lib/src/auth.d.ts +54 -5
  217. package/lib/src/auth.d.ts.map +1 -1
  218. package/lib/src/auth.js +91 -31
  219. package/lib/src/auth.js.map +1 -1
  220. package/lib/src/auth.spec.d.ts +3 -0
  221. package/lib/src/auth.spec.d.ts.map +1 -1
  222. package/lib/src/auth.spec.js +37 -6
  223. package/lib/src/auth.spec.js.map +1 -1
  224. package/lib/src/config.d.ts +1 -0
  225. package/lib/src/config.d.ts.map +1 -1
  226. package/lib/src/config.js +5 -3
  227. package/lib/src/config.js.map +1 -1
  228. package/lib/src/config.spec.js.map +1 -1
  229. package/lib/src/embed/app.d.ts +35 -6
  230. package/lib/src/embed/app.d.ts.map +1 -1
  231. package/lib/src/embed/app.js +55 -16
  232. package/lib/src/embed/app.js.map +1 -1
  233. package/lib/src/embed/app.spec.js +41 -12
  234. package/lib/src/embed/app.spec.js.map +1 -1
  235. package/lib/src/embed/base.d.ts +20 -9
  236. package/lib/src/embed/base.d.ts.map +1 -1
  237. package/lib/src/embed/base.js +31 -15
  238. package/lib/src/embed/base.js.map +1 -1
  239. package/lib/src/embed/base.spec.js.map +1 -1
  240. package/lib/src/embed/embed.spec.js +1 -1
  241. package/lib/src/embed/embed.spec.js.map +1 -1
  242. package/lib/src/embed/liveboard.d.ts +17 -5
  243. package/lib/src/embed/liveboard.d.ts.map +1 -1
  244. package/lib/src/embed/liveboard.js +49 -37
  245. package/lib/src/embed/liveboard.js.map +1 -1
  246. package/lib/src/embed/liveboard.spec.js +37 -30
  247. package/lib/src/embed/liveboard.spec.js.map +1 -1
  248. package/lib/src/embed/pinboard.spec.js +14 -26
  249. package/lib/src/embed/pinboard.spec.js.map +1 -1
  250. package/lib/src/embed/search-bar.d.ts +3 -0
  251. package/lib/src/embed/search-bar.d.ts.map +1 -1
  252. package/lib/src/embed/search-bar.js +5 -6
  253. package/lib/src/embed/search-bar.js.map +1 -1
  254. package/lib/src/embed/search.d.ts +9 -1
  255. package/lib/src/embed/search.d.ts.map +1 -1
  256. package/lib/src/embed/search.js +18 -14
  257. package/lib/src/embed/search.js.map +1 -1
  258. package/lib/src/embed/search.spec.js +16 -19
  259. package/lib/src/embed/search.spec.js.map +1 -1
  260. package/lib/src/embed/searchEmbed-basic-auth.spec.js +4 -0
  261. package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -1
  262. package/lib/src/embed/ts-embed.d.ts +65 -7
  263. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  264. package/lib/src/embed/ts-embed.js +154 -77
  265. package/lib/src/embed/ts-embed.js.map +1 -1
  266. package/lib/src/embed/ts-embed.spec.js +46 -24
  267. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  268. package/lib/src/errors.d.ts.map +1 -1
  269. package/lib/src/errors.js.map +1 -1
  270. package/lib/src/index.d.ts +2 -2
  271. package/lib/src/index.d.ts.map +1 -1
  272. package/lib/src/index.js +4 -4
  273. package/lib/src/index.js.map +1 -1
  274. package/lib/src/mixpanel-service.d.ts +8 -0
  275. package/lib/src/mixpanel-service.d.ts.map +1 -1
  276. package/lib/src/mixpanel-service.js +13 -1
  277. package/lib/src/mixpanel-service.js.map +1 -1
  278. package/lib/src/mixpanel-service.spec.js.map +1 -1
  279. package/lib/src/react/all-types-export.d.ts +3 -0
  280. package/lib/src/react/all-types-export.d.ts.map +1 -0
  281. package/lib/src/react/all-types-export.js +5 -0
  282. package/lib/src/react/all-types-export.js.map +1 -0
  283. package/lib/src/react/all-types-export.spec.d.ts +2 -0
  284. package/lib/src/react/all-types-export.spec.d.ts.map +1 -0
  285. package/lib/src/react/all-types-export.spec.js +10 -0
  286. package/lib/src/react/all-types-export.spec.js.map +1 -0
  287. package/lib/src/react/index.d.ts +72 -0
  288. package/lib/src/react/index.d.ts.map +1 -1
  289. package/lib/src/react/index.js +79 -7
  290. package/lib/src/react/index.js.map +1 -1
  291. package/lib/src/react/index.spec.js +27 -6
  292. package/lib/src/react/index.spec.js.map +1 -1
  293. package/lib/src/react/util.d.ts +4 -0
  294. package/lib/src/react/util.d.ts.map +1 -1
  295. package/lib/src/react/util.js +4 -0
  296. package/lib/src/react/util.js.map +1 -1
  297. package/lib/src/test/test-utils.d.ts +11 -2
  298. package/lib/src/test/test-utils.d.ts.map +1 -1
  299. package/lib/src/test/test-utils.js +36 -25
  300. package/lib/src/test/test-utils.js.map +1 -1
  301. package/lib/src/types.d.ts +499 -96
  302. package/lib/src/types.d.ts.map +1 -1
  303. package/lib/src/types.js +374 -68
  304. package/lib/src/types.js.map +1 -1
  305. package/lib/src/utils/answerService.d.ts +7 -0
  306. package/lib/src/utils/answerService.d.ts.map +1 -1
  307. package/lib/src/utils/answerService.js +7 -0
  308. package/lib/src/utils/answerService.js.map +1 -1
  309. package/lib/src/utils/answerService.spec.js.map +1 -1
  310. package/lib/src/utils/authService.d.ts +30 -0
  311. package/lib/src/utils/authService.d.ts.map +1 -1
  312. package/lib/src/utils/authService.js +39 -2
  313. package/lib/src/utils/authService.js.map +1 -1
  314. package/lib/src/utils/authService.spec.js.map +1 -1
  315. package/lib/src/utils/processData.d.ts +12 -0
  316. package/lib/src/utils/processData.d.ts.map +1 -1
  317. package/lib/src/utils/processData.js +33 -5
  318. package/lib/src/utils/processData.js.map +1 -1
  319. package/lib/src/utils/processData.spec.js.map +1 -1
  320. package/lib/src/utils/processTrigger.d.ts +7 -0
  321. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  322. package/lib/src/utils/processTrigger.js +17 -3
  323. package/lib/src/utils/processTrigger.js.map +1 -1
  324. package/lib/src/utils/processTrigger.spec.js.map +1 -1
  325. package/lib/src/utils.d.ts +12 -0
  326. package/lib/src/utils.d.ts.map +1 -1
  327. package/lib/src/utils.js +24 -19
  328. package/lib/src/utils.js.map +1 -1
  329. package/lib/src/utils.spec.js.map +1 -1
  330. package/package.json +15 -14
  331. package/src/auth.spec.ts +83 -133
  332. package/src/auth.ts +148 -115
  333. package/src/config.spec.ts +2 -4
  334. package/src/config.ts +5 -3
  335. package/src/embed/app.spec.ts +57 -14
  336. package/src/embed/app.ts +91 -36
  337. package/src/embed/base.spec.ts +3 -9
  338. package/src/embed/base.ts +51 -53
  339. package/src/embed/embed.spec.ts +5 -6
  340. package/src/embed/liveboard.spec.ts +56 -37
  341. package/src/embed/liveboard.ts +66 -64
  342. package/src/embed/pinboard.spec.ts +26 -29
  343. package/src/embed/search-bar.tsx +10 -8
  344. package/src/embed/search.spec.ts +31 -21
  345. package/src/embed/search.ts +26 -20
  346. package/src/embed/searchEmbed-basic-auth.spec.ts +22 -28
  347. package/src/embed/ts-embed.spec.ts +99 -144
  348. package/src/embed/ts-embed.ts +188 -162
  349. package/src/errors.ts +3 -6
  350. package/src/index.ts +6 -10
  351. package/src/mixpanel-service.spec.ts +1 -3
  352. package/src/mixpanel-service.ts +13 -1
  353. package/src/react/index.spec.tsx +66 -13
  354. package/src/react/index.tsx +111 -62
  355. package/src/react/util.ts +8 -4
  356. package/src/test/test-utils.ts +43 -39
  357. package/src/types.ts +498 -98
  358. package/src/utils/answerService.spec.ts +3 -5
  359. package/src/utils/answerService.ts +21 -17
  360. package/src/utils/authService.spec.ts +26 -41
  361. package/src/utils/authService.ts +47 -21
  362. package/src/utils/processData.spec.ts +26 -59
  363. package/src/utils/processData.ts +36 -14
  364. package/src/utils/processTrigger.spec.ts +1 -6
  365. package/src/utils/processTrigger.ts +18 -9
  366. package/src/utils.spec.ts +8 -12
  367. package/src/utils.ts +25 -26
  368. package/lib/src/visual-embed-sdk.d.ts +0 -2419
@@ -15,6 +15,8 @@ import {
15
15
  setAttributes,
16
16
  getCustomisations,
17
17
  getDOMNode,
18
+ getFilterQuery,
19
+ getQueryParamString,
18
20
  } from '../utils';
19
21
  import {
20
22
  getThoughtSpotHost,
@@ -38,6 +40,7 @@ import {
38
40
  ViewConfig,
39
41
  FrameParams,
40
42
  ContextMenuTriggerOptions,
43
+ RuntimeFilter,
41
44
  } from '../types';
42
45
  import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
43
46
  import { processEventData } from '../utils/processData';
@@ -64,6 +67,7 @@ const TS_EMBED_ID = '_thoughtspot-embed';
64
67
  * The event id map from v2 event names to v1 event id
65
68
  * v1 events are the classic embed events implemented in Blink v1
66
69
  * We cannot rename v1 event types to maintain backward compatibility
70
+ *
67
71
  * @internal
68
72
  */
69
73
  const V1EventMap = {};
@@ -87,6 +91,8 @@ export class TsEmbed {
87
91
  */
88
92
  private el: Element;
89
93
 
94
+ protected isAppInitialized = false;
95
+
90
96
  /**
91
97
  * A reference to the iframe within which the ThoughtSpot app
92
98
  * will be rendered.
@@ -128,6 +134,7 @@ export class TsEmbed {
128
134
  * Should we encode URL Query Params using base64 encoding which thoughtspot
129
135
  * will generate for embedding. This provides additional security to
130
136
  * thoughtspot clusters against Cross site scripting attacks.
137
+ *
131
138
  * @default false
132
139
  */
133
140
  private shouldEncodeUrlQueryParams = false;
@@ -138,6 +145,9 @@ export class TsEmbed {
138
145
  this.el = getDOMNode(domSelector);
139
146
  // TODO: handle error
140
147
  this.embedConfig = getEmbedConfig();
148
+ if (!this.embedConfig.authTriggerContainer && !this.embedConfig.useEventForSAMLPopup) {
149
+ this.embedConfig.authTriggerContainer = domSelector;
150
+ }
141
151
  this.thoughtSpotHost = getThoughtSpotHost(this.embedConfig);
142
152
  this.thoughtSpotV2Base = getV2BasePath(this.embedConfig);
143
153
  this.eventHandlerMap = new Map();
@@ -156,6 +166,7 @@ export class TsEmbed {
156
166
 
157
167
  /**
158
168
  * Handles errors within the SDK
169
+ *
159
170
  * @param error The error message or object
160
171
  */
161
172
  protected handleError(error: string | Record<string, unknown>) {
@@ -169,6 +180,7 @@ export class TsEmbed {
169
180
 
170
181
  /**
171
182
  * Extracts the type field from the event payload
183
+ *
172
184
  * @param event The window message event
173
185
  */
174
186
  private getEventType(event: MessageEvent) {
@@ -178,6 +190,7 @@ export class TsEmbed {
178
190
 
179
191
  /**
180
192
  * Extracts the port field from the event payload
193
+ *
181
194
  * @param event The window message event
182
195
  * @returns
183
196
  */
@@ -191,6 +204,9 @@ export class TsEmbed {
191
204
  /**
192
205
  * fix for ts7.sep.cl
193
206
  * will be removed for ts7.oct.cl
207
+ *
208
+ * @param event
209
+ * @param eventType
194
210
  * @hidden
195
211
  */
196
212
  private formatEventData(event: MessageEvent, eventType: string) {
@@ -218,12 +234,7 @@ export class TsEmbed {
218
234
  if (event.source === this.iFrame.contentWindow) {
219
235
  this.executeCallbacks(
220
236
  eventType,
221
- processEventData(
222
- eventType,
223
- eventData,
224
- this.thoughtSpotHost,
225
- this.el,
226
- ),
237
+ processEventData(eventType, eventData, this.thoughtSpotHost, this.el),
227
238
  eventPort,
228
239
  );
229
240
  }
@@ -232,19 +243,20 @@ export class TsEmbed {
232
243
 
233
244
  /**
234
245
  * Send Custom style as part of payload of APP_INIT
246
+ *
247
+ * @param _
248
+ * @param responder
235
249
  */
236
250
  private appInitCb = async (_: any, responder: any) => {
237
251
  let authToken = '';
238
252
  if (this.embedConfig.authType === AuthType.TrustedAuthTokenCookieless) {
239
253
  authToken = await getAuthenticaionToken(this.embedConfig);
240
254
  }
255
+ this.isAppInitialized = true;
241
256
  responder({
242
257
  type: EmbedEvent.APP_INIT,
243
258
  data: {
244
- customisations: getCustomisations(
245
- this.embedConfig,
246
- this.viewConfig,
247
- ),
259
+ customisations: getCustomisations(this.embedConfig, this.viewConfig),
248
260
  authToken,
249
261
  },
250
262
  });
@@ -252,6 +264,9 @@ export class TsEmbed {
252
264
 
253
265
  /**
254
266
  * Sends updated auth token to the iFrame to avoid user logout
267
+ *
268
+ * @param _
269
+ * @param responder
255
270
  */
256
271
  private updateAuthToken = async (_: any, responder: any) => {
257
272
  const { autoLogin = false, authType } = this.embedConfig; // Set autoLogin default to false
@@ -277,6 +292,8 @@ export class TsEmbed {
277
292
 
278
293
  /**
279
294
  * Constructs the base URL string to load the ThoughtSpot app.
295
+ *
296
+ * @param query
280
297
  */
281
298
  protected getEmbedBasePath(query: string): string {
282
299
  let queryString = query;
@@ -285,31 +302,25 @@ export class TsEmbed {
285
302
  queryString.substr(1),
286
303
  )}`;
287
304
  }
288
- const basePath = [
289
- this.thoughtSpotHost,
290
- this.thoughtSpotV2Base,
291
- queryString,
292
- ]
305
+ const basePath = [this.thoughtSpotHost, this.thoughtSpotV2Base, queryString]
293
306
  .filter((x) => x.length > 0)
294
307
  .join('/');
295
308
 
296
- return `${basePath}#/embed`;
309
+ return `${basePath}#`;
297
310
  }
298
311
 
299
312
  /**
300
313
  * Common query params set for all the embed modes.
314
+ *
315
+ * @param queryParams
301
316
  * @returns queryParams
302
317
  */
303
- protected getBaseQueryParams() {
304
- const queryParams = {};
318
+ protected getBaseQueryParams(queryParams = {}) {
305
319
  let hostAppUrl = window?.location?.host || '';
306
320
 
307
- // The below check is needed because TS Cloud firewall, blocks localhost/127.0.0.1
308
- // in any url param.
309
- if (
310
- hostAppUrl.includes('localhost') ||
311
- hostAppUrl.includes('127.0.0.1')
312
- ) {
321
+ // The below check is needed because TS Cloud firewall, blocks
322
+ // localhost/127.0.0.1 in any url param.
323
+ if (hostAppUrl.includes('localhost') || hostAppUrl.includes('127.0.0.1')) {
313
324
  hostAppUrl = 'local-host';
314
325
  }
315
326
  queryParams[Param.HostAppUrl] = encodeURIComponent(hostAppUrl);
@@ -317,10 +328,7 @@ export class TsEmbed {
317
328
  queryParams[Param.ViewPortWidth] = window.innerWidth;
318
329
  queryParams[Param.Version] = version;
319
330
  queryParams[Param.AuthType] = this.embedConfig.authType;
320
- if (
321
- this.embedConfig.disableLoginRedirect === true ||
322
- this.embedConfig.autoLogin === true
323
- ) {
331
+ if (this.embedConfig.disableLoginRedirect === true || this.embedConfig.autoLogin === true) {
324
332
  queryParams[Param.DisableLoginRedirect] = true;
325
333
  }
326
334
  if (this.embedConfig.authType === AuthType.EmbeddedSSO) {
@@ -345,16 +353,12 @@ export class TsEmbed {
345
353
  } = this.viewConfig;
346
354
 
347
355
  if (Array.isArray(visibleActions) && Array.isArray(hiddenActions)) {
348
- this.handleError(
349
- 'You cannot have both hidden actions and visible actions',
350
- );
356
+ this.handleError('You cannot have both hidden actions and visible actions');
351
357
  return queryParams;
352
358
  }
353
359
 
354
360
  // TODO remove embedConfig.customCssUrl
355
- const cssUrlParam =
356
- customizations?.style?.customCSSUrl ||
357
- this.embedConfig.customCssUrl;
361
+ const cssUrlParam = customizations?.style?.customCSSUrl || this.embedConfig.customCssUrl;
358
362
 
359
363
  if (cssUrlParam) {
360
364
  queryParams[Param.CustomCSSUrl] = cssUrlParam;
@@ -366,31 +370,26 @@ export class TsEmbed {
366
370
  if (disabledActionReason) {
367
371
  queryParams[Param.DisableActionReason] = disabledActionReason;
368
372
  }
369
- queryParams[Param.HideActions] = [
370
- ...this.defaultHiddenActions,
371
- ...(hiddenActions ?? []),
372
- ];
373
+ queryParams[Param.HideActions] = [...this.defaultHiddenActions, ...(hiddenActions ?? [])];
373
374
  if (Array.isArray(visibleActions)) {
374
375
  queryParams[Param.VisibleActions] = visibleActions;
375
376
  }
376
377
 
377
- /** Default behavior for context menu will be left-click
378
- * from version 9.2.0.cl the user have an option to override context menu click
378
+ /**
379
+ * Default behavior for context menu will be left-click
380
+ * from version 9.2.0.cl the user have an option to override context
381
+ * menu click
379
382
  */
380
383
  if (contextMenuTrigger === ContextMenuTriggerOptions.LEFT_CLICK) {
381
384
  queryParams[Param.ContextMenuTrigger] = true;
382
- } else if (
383
- contextMenuTrigger === ContextMenuTriggerOptions.RIGHT_CLICK
384
- ) {
385
+ } else if (contextMenuTrigger === ContextMenuTriggerOptions.RIGHT_CLICK) {
385
386
  queryParams[Param.ContextMenuTrigger] = false;
386
387
  }
387
388
 
388
- const spriteUrl = customizations?.iconSpriteUrl;
389
+ const spriteUrl = customizations?.iconSpriteUrl
390
+ || this.embedConfig.customizations?.iconSpriteUrl;
389
391
  if (spriteUrl) {
390
- queryParams[Param.IconSpriteUrl] = spriteUrl.replace(
391
- 'https://',
392
- '',
393
- );
392
+ queryParams[Param.IconSpriteUrl] = spriteUrl.replace('https://', '');
394
393
  }
395
394
 
396
395
  if (showAlerts !== undefined) {
@@ -414,48 +413,72 @@ export class TsEmbed {
414
413
  /**
415
414
  * Constructs the base URL string to load v1 of the ThoughtSpot app.
416
415
  * This is used for embedding Liveboards, visualizations, and full application.
416
+ *
417
417
  * @param queryString The query string to append to the URL.
418
418
  * @param isAppEmbed A Boolean parameter to specify if you are embedding
419
419
  * the full application.
420
420
  */
421
- protected getV1EmbedBasePath(
422
- queryString: string,
423
- showPrimaryNavbar = false,
424
- disableProfileAndHelp = false,
425
- isAppEmbed = false,
426
- enableSearchAssist = false,
427
- ): string {
428
- const queryStringFrag = queryString ? `&${queryString}` : '';
429
- const primaryNavParam = `&primaryNavHidden=${!showPrimaryNavbar}`;
430
- const disableProfileAndHelpParam = `&profileAndHelpInNavBarHidden=${disableProfileAndHelp}`;
431
- const enableSearchAssistParam = `&${Param.EnableSearchAssist}=${enableSearchAssist}`;
432
- let queryParams = `?embedApp=true${isAppEmbed ? primaryNavParam : ''}${
433
- isAppEmbed ? disableProfileAndHelpParam : ''
434
- }${
435
- enableSearchAssist ? enableSearchAssistParam : ''
436
- }${queryStringFrag}`;
437
- if (this.shouldEncodeUrlQueryParams) {
438
- queryParams = `?base64UrlEncodedFlags=${getEncodedQueryParamsString(
439
- queryParams.substr(1),
440
- )}`;
441
- }
442
- let path = `${this.thoughtSpotHost}/${queryParams}#`;
443
- if (!isAppEmbed) {
444
- path = `${path}/embed`;
445
- }
421
+ protected getV1EmbedBasePath(queryString: string): string {
422
+ const queryParams = this.shouldEncodeUrlQueryParams
423
+ ? `?base64UrlEncodedFlags=${getEncodedQueryParamsString(queryString)}`
424
+ : `?${queryString}`;
425
+ const path = `${this.thoughtSpotHost}/${queryParams}#`;
446
426
  return path;
447
427
  }
448
428
 
429
+ protected getEmbedParams() {
430
+ const queryParams = this.getBaseQueryParams();
431
+ return getQueryParamString(queryParams);
432
+ }
433
+
434
+ protected getRootIframeSrc() {
435
+ const query = this.getEmbedParams();
436
+ return this.getEmbedBasePath(query);
437
+ }
438
+
439
+ protected createIframeEl(frameSrc: string): HTMLIFrameElement {
440
+ const iFrame = document.createElement('iframe');
441
+
442
+ iFrame.src = frameSrc;
443
+ iFrame.id = TS_EMBED_ID;
444
+
445
+ // according to screenfull.js documentation
446
+ // allowFullscreen, webkitallowfullscreen and mozallowfullscreen must be
447
+ // true
448
+ iFrame.allowFullscreen = true;
449
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
450
+ // @ts-ignore
451
+ iFrame.webkitallowfullscreen = true;
452
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
453
+ // @ts-ignore
454
+ iFrame.mozallowfullscreen = true;
455
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
456
+ // @ts-ignore
457
+ iFrame.allow = 'clipboard-read; clipboard-write';
458
+
459
+ const {
460
+ height: frameHeight,
461
+ width: frameWidth, ...restParams
462
+ } = this.viewConfig.frameParams || {};
463
+ const width = getCssDimension(frameWidth || DEFAULT_EMBED_WIDTH);
464
+ const height = getCssDimension(frameHeight || DEFAULT_EMBED_HEIGHT);
465
+ setAttributes(iFrame, restParams);
466
+
467
+ iFrame.style.width = `${width}`;
468
+ iFrame.style.height = `${height}`;
469
+ iFrame.style.border = '0';
470
+ iFrame.name = 'ThoughtSpot Embedded Analytics';
471
+ return iFrame;
472
+ }
473
+
449
474
  /**
450
475
  * Renders the embedded ThoughtSpot app in an iframe and sets up
451
476
  * event listeners.
477
+ *
452
478
  * @param url
453
479
  * @param frameOptions
454
480
  */
455
- protected async renderIFrame(
456
- url: string,
457
- frameOptions: FrameParams = {},
458
- ): Promise<any> {
481
+ protected async renderIFrame(url: string): Promise<any> {
459
482
  if (this.isError) {
460
483
  return null;
461
484
  }
@@ -484,45 +507,8 @@ export class TsEmbed {
484
507
  return;
485
508
  }
486
509
 
487
- uploadMixpanelEvent(
488
- MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE,
489
- );
490
-
491
- this.iFrame =
492
- this.iFrame || document.createElement('iframe');
493
-
494
- this.iFrame.src = url;
495
- this.iFrame.id = TS_EMBED_ID;
496
-
497
- // according to screenfull.js documentation
498
- // allowFullscreen, webkitallowfullscreen and mozallowfullscreen must be true
499
- this.iFrame.allowFullscreen = true;
500
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
501
- // @ts-ignore
502
- this.iFrame.webkitallowfullscreen = true;
503
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
504
- // @ts-ignore
505
- this.iFrame.mozallowfullscreen = true;
506
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
507
- // @ts-ignore
508
- this.iFrame.allow = 'clipboard-read; clipboard-write';
509
- const {
510
- height: frameHeight,
511
- width: frameWidth,
512
- ...restParams
513
- } = frameOptions;
514
- const width = getCssDimension(
515
- frameWidth || DEFAULT_EMBED_WIDTH,
516
- );
517
- const height = getCssDimension(
518
- frameHeight || DEFAULT_EMBED_HEIGHT,
519
- );
520
- setAttributes(this.iFrame, restParams);
521
-
522
- this.iFrame.style.width = `${width}`;
523
- this.iFrame.style.height = `${height}`;
524
- this.iFrame.style.border = '0';
525
- this.iFrame.name = 'ThoughtSpot Embedded Analytics';
510
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE);
511
+ this.iFrame = this.iFrame || this.createIframeEl(url);
526
512
  this.iFrame.addEventListener('load', () => {
527
513
  nextInQueue();
528
514
  const loadTimestamp = Date.now();
@@ -532,20 +518,15 @@ export class TsEmbed {
532
518
  },
533
519
  type: EmbedEvent.Load,
534
520
  });
535
- uploadMixpanelEvent(
536
- MIXPANEL_EVENT.VISUAL_SDK_IFRAME_LOAD_PERFORMANCE,
537
- {
538
- timeTookToLoad: loadTimestamp - initTimestamp,
539
- },
540
- );
521
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_IFRAME_LOAD_PERFORMANCE, {
522
+ timeTookToLoad: loadTimestamp - initTimestamp,
523
+ });
541
524
  });
542
525
  this.iFrame.addEventListener('error', () => {
543
526
  nextInQueue();
544
527
  });
545
528
  this.insertIntoDOM(this.iFrame);
546
- const prefetchIframe = document.querySelectorAll(
547
- '.prefetchIframe',
548
- );
529
+ const prefetchIframe = document.querySelectorAll('.prefetchIframe');
549
530
  if (prefetchIframe.length) {
550
531
  prefetchIframe.forEach((el) => {
551
532
  el.remove();
@@ -555,10 +536,9 @@ export class TsEmbed {
555
536
  })
556
537
  .catch((error) => {
557
538
  nextInQueue();
558
- uploadMixpanelEvent(
559
- MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED,
560
- { error: JSON.stringify(error) },
561
- );
539
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
540
+ error: JSON.stringify(error),
541
+ });
562
542
  this.insertIntoDOM(this.embedConfig.loginFailedMessage);
563
543
  this.handleError(error);
564
544
  });
@@ -591,14 +571,16 @@ export class TsEmbed {
591
571
 
592
572
  /**
593
573
  * Sets the height of the iframe
574
+ *
594
575
  * @param height The height in pixels
595
576
  */
596
- protected setIFrameHeight(height: number): void {
597
- this.iFrame.style.height = `${height}px`;
577
+ protected setIFrameHeight(height: number | string): void {
578
+ this.iFrame.style.height = getCssDimension(height);
598
579
  }
599
580
 
600
581
  /**
601
582
  * Executes all registered event handlers for a particular event type
583
+ *
602
584
  * @param eventType The event type
603
585
  * @param data The payload invoked with the event handler
604
586
  * @param eventPort The event Port for a specific MessageChannel
@@ -608,16 +590,18 @@ export class TsEmbed {
608
590
  data: any,
609
591
  eventPort?: MessagePort | void,
610
592
  ): void {
611
- const callbacks = this.eventHandlerMap.get(eventType) || [];
593
+ const eventHandlers = this.eventHandlerMap.get(eventType) || [];
612
594
  const allHandlers = this.eventHandlerMap.get(EmbedEvent.ALL) || [];
613
- callbacks.push(...allHandlers);
595
+ const callbacks = [...eventHandlers, ...allHandlers];
614
596
  const dataStatus = data?.status || embedEventStatus.END;
615
597
  callbacks.forEach((callbackObj) => {
616
598
  if (
617
- (callbackObj.options.start &&
618
- dataStatus === embedEventStatus.START) || // When start status is true it trigger only start releated payload
619
- (!callbackObj.options.start &&
620
- dataStatus === embedEventStatus.END) // When start status is false it trigger only end releated payload
599
+ // When start status is true it trigger only start releated
600
+ // payload
601
+ (callbackObj.options.start && dataStatus === embedEventStatus.START)
602
+ // When start status is false it trigger only end releated
603
+ // payload
604
+ || (!callbackObj.options.start && dataStatus === embedEventStatus.END)
621
605
  ) {
622
606
  callbackObj.callback(data, (payload) => {
623
607
  this.triggerEventOnPort(eventPort, payload);
@@ -635,6 +619,7 @@ export class TsEmbed {
635
619
 
636
620
  /**
637
621
  * Gets the v1 event type (if applicable) for the EmbedEvent type
622
+ *
638
623
  * @param eventType The v2 event type
639
624
  * @returns The corresponding v1 event type if one exists
640
625
  * or else the v2 event type itself
@@ -647,6 +632,7 @@ export class TsEmbed {
647
632
  * Calculates the iframe center for the current visible viewPort
648
633
  * of iframe using Scroll position of Host App, offsetTop for iframe
649
634
  * in Host app. ViewPort height of the tab.
635
+ *
650
636
  * @returns iframe Center in visible viewport,
651
637
  * Iframe height,
652
638
  * View port height.
@@ -661,18 +647,11 @@ export class TsEmbed {
661
647
  let iframeOffset;
662
648
 
663
649
  if (iframeScrolled < 0) {
664
- iframeVisibleViewPort =
665
- viewPortHeight - (offsetTopClient - scrollTopClient);
666
- iframeVisibleViewPort = Math.min(
667
- iframeHeight,
668
- iframeVisibleViewPort,
669
- );
650
+ iframeVisibleViewPort = viewPortHeight - (offsetTopClient - scrollTopClient);
651
+ iframeVisibleViewPort = Math.min(iframeHeight, iframeVisibleViewPort);
670
652
  iframeOffset = 0;
671
653
  } else {
672
- iframeVisibleViewPort = Math.min(
673
- iframeHeight - iframeScrolled,
674
- viewPortHeight,
675
- );
654
+ iframeVisibleViewPort = Math.min(iframeHeight - iframeScrolled, viewPortHeight);
676
655
  iframeOffset = iframeScrolled;
677
656
  }
678
657
  const iframeCenter = iframeOffset + iframeVisibleViewPort / 2;
@@ -713,9 +692,7 @@ export class TsEmbed {
713
692
  options: MessageOptions = { start: false },
714
693
  ): typeof TsEmbed.prototype {
715
694
  if (this.isRendered) {
716
- this.handleError(
717
- 'Please register event handlers before calling render',
718
- );
695
+ this.handleError('Please register event handlers before calling render');
719
696
  }
720
697
  const callbacks = this.eventHandlerMap.get(messageType) || [];
721
698
  callbacks.push({ options, callback });
@@ -723,11 +700,38 @@ export class TsEmbed {
723
700
  return this;
724
701
  }
725
702
 
703
+ /**
704
+ * Removes an event listener for a particular event type.
705
+ *
706
+ * @param messageType The message type
707
+ * @param callback The callback to remove
708
+ * @example
709
+ * ```js
710
+ * const errorHandler = (data) => { console.error(data); };
711
+ * tsEmbed.on(EmbedEvent.Error, errorHandler);
712
+ * tsEmbed.off(EmbedEvent.Error, errorHandler);
713
+ * ```
714
+ */
715
+ public off(
716
+ messageType: EmbedEvent,
717
+ callback: MessageCallback,
718
+ ): typeof TsEmbed.prototype {
719
+ const callbacks = this.eventHandlerMap.get(messageType) || [];
720
+ const index = callbacks.findIndex((cb) => cb.callback === callback);
721
+ if (index > -1) {
722
+ callbacks.splice(index, 1);
723
+ }
724
+ return this;
725
+ }
726
+
726
727
  /**
727
728
  * Triggers an event on specific Port registered against
728
729
  * for the EmbedEvent
730
+ *
729
731
  * @param eventType The message type
730
732
  * @param data The payload to send
733
+ * @param eventPort
734
+ * @param payload
731
735
  */
732
736
  private triggerEventOnPort(eventPort: MessagePort | void, payload: any) {
733
737
  if (eventPort) {
@@ -747,25 +751,20 @@ export class TsEmbed {
747
751
 
748
752
  /**
749
753
  * Triggers an event to the embedded app
754
+ *
750
755
  * @param messageType The event type
751
756
  * @param data The payload to send with the message
752
757
  */
753
758
  public trigger(messageType: HostEvent, data: any = {}): Promise<any> {
754
- uploadMixpanelEvent(
755
- `${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`,
756
- );
757
- return processTrigger(
758
- this.iFrame,
759
- messageType,
760
- this.thoughtSpotHost,
761
- data,
762
- );
759
+ uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`);
760
+ return processTrigger(this.iFrame, messageType, this.thoughtSpotHost, data);
763
761
  }
764
762
 
765
763
  /**
766
764
  * Marks the ThoughtSpot object to have been rendered
767
765
  * Needs to be overridden by subclasses to do the actual
768
766
  * rendering of the iframe.
767
+ *
769
768
  * @param args
770
769
  */
771
770
  public render(): TsEmbed {
@@ -778,6 +777,7 @@ export class TsEmbed {
778
777
  * Get the Post Url Params for THOUGHTSPOT from the current
779
778
  * host app URL.
780
779
  * THOUGHTSPOT URL params starts with a prefix "ts-"
780
+ *
781
781
  * @version SDK: 1.14.0 | ThoughtSpot: 8.4.0.cl, 8.4.1-sw
782
782
  */
783
783
  public getThoughtSpotPostUrlParams(): string {
@@ -805,6 +805,7 @@ export class TsEmbed {
805
805
 
806
806
  /**
807
807
  * Destroys the ThoughtSpot embed, and remove any nodes from the DOM.
808
+ *
808
809
  * @version SDK: 1.19.1 | ThoughtSpot: *
809
810
  */
810
811
  public destroy(): void {
@@ -814,6 +815,23 @@ export class TsEmbed {
814
815
  console.log('Error destroying TS Embed', e);
815
816
  }
816
817
  }
818
+
819
+ public getUnderlyingFrameElement(): HTMLIFrameElement {
820
+ return this.iFrame;
821
+ }
822
+
823
+ /**
824
+ * Prerenders a generic instance of the TS component.
825
+ * This means without the path but with the flags already applied.
826
+ * This is useful for prerendering the component in the background.
827
+ *
828
+ * @version SDK: 1.22.0
829
+ * @returns
830
+ */
831
+ public async prerenderGeneric(): Promise<any> {
832
+ const prerenderFrameSrc = this.getRootIframeSrc();
833
+ return this.renderIFrame(prerenderFrameSrc);
834
+ }
817
835
  }
818
836
 
819
837
  /**
@@ -833,15 +851,23 @@ export class V1Embed extends TsEmbed {
833
851
 
834
852
  /**
835
853
  * Render the ap p in an iframe and set up event handlers
854
+ *
836
855
  * @param iframeSrc
837
856
  */
838
857
  protected renderV1Embed(iframeSrc: string): any {
839
- return this.renderIFrame(iframeSrc, this.viewConfig.frameParams);
858
+ return this.renderIFrame(iframeSrc);
859
+ }
860
+
861
+ protected getRootIframeSrc(): string {
862
+ const runtimeFilters = this.viewConfig.runtimeFilters;
863
+ const filterQuery = getFilterQuery(runtimeFilters || []);
864
+ const queryParams = this.getEmbedParams();
865
+ const queryString = [filterQuery, queryParams].filter(Boolean).join('&');
866
+ return this.getV1EmbedBasePath(queryString);
840
867
  }
841
868
 
842
869
  /**
843
- * @inheritdoc TsEmbed.on
844
- *
870
+ * @inheritdoc
845
871
  * @example
846
872
  * ```js
847
873
  * tsEmbed.on(EmbedEvent.Error, (data) => {
package/src/errors.ts CHANGED
@@ -1,9 +1,6 @@
1
1
  export const ERROR_MESSAGE = {
2
- INVALID_THOUGHTSPOT_HOST:
3
- 'Error parsing ThoughtSpot host. Please provide a valid URL.',
4
- LIVEBOARD_VIZ_ID_VALIDATION:
5
- 'Please provide either liveboardId or pinboardId',
2
+ INVALID_THOUGHTSPOT_HOST: 'Error parsing ThoughtSpot host. Please provide a valid URL.',
3
+ LIVEBOARD_VIZ_ID_VALIDATION: 'Please provide either liveboardId or pinboardId',
6
4
  TRIGGER_TIMED_OUT: 'Trigger timedout in getting response',
7
- SEARCHEMBED_BETA_WRANING_MESSAGE:
8
- 'Search Embed is in Beta in this release.',
5
+ SEARCHEMBED_BETA_WRANING_MESSAGE: 'Search Embed is in Beta in this release.',
9
6
  };