@thoughtspot/visual-embed-sdk 1.50.0 → 1.51.0-test

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 (285) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/config.d.ts +1 -0
  3. package/cjs/src/config.d.ts.map +1 -1
  4. package/cjs/src/config.js +2 -1
  5. package/cjs/src/config.js.map +1 -1
  6. package/cjs/src/css-variables.d.ts +122 -0
  7. package/cjs/src/css-variables.d.ts.map +1 -1
  8. package/cjs/src/embed/app.d.ts +176 -24
  9. package/cjs/src/embed/app.d.ts.map +1 -1
  10. package/cjs/src/embed/app.js +86 -38
  11. package/cjs/src/embed/app.js.map +1 -1
  12. package/cjs/src/embed/app.spec.js +672 -150
  13. package/cjs/src/embed/app.spec.js.map +1 -1
  14. package/cjs/src/embed/base.d.ts +1 -1
  15. package/cjs/src/embed/base.js +1 -1
  16. package/cjs/src/embed/conversation.d.ts +401 -2
  17. package/cjs/src/embed/conversation.d.ts.map +1 -1
  18. package/cjs/src/embed/conversation.js +32 -16
  19. package/cjs/src/embed/conversation.js.map +1 -1
  20. package/cjs/src/embed/conversation.spec.js +346 -17
  21. package/cjs/src/embed/conversation.spec.js.map +1 -1
  22. package/cjs/src/embed/events.spec.js +638 -0
  23. package/cjs/src/embed/events.spec.js.map +1 -1
  24. package/cjs/src/embed/host-events.spec.js +187 -0
  25. package/cjs/src/embed/host-events.spec.js.map +1 -1
  26. package/cjs/src/embed/hostEventClient/contracts.d.ts +51 -14
  27. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  28. package/cjs/src/embed/hostEventClient/contracts.js +11 -1
  29. package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
  30. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +2 -1
  31. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  32. package/cjs/src/embed/hostEventClient/host-event-client.js +9 -0
  33. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  34. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +236 -0
  35. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  36. package/cjs/src/embed/hostEventClient/utils.d.ts +2 -0
  37. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
  38. package/cjs/src/embed/hostEventClient/utils.js +32 -2
  39. package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
  40. package/cjs/src/embed/hostEventClient/utils.spec.js +178 -0
  41. package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -1
  42. package/cjs/src/embed/liveboard.d.ts +81 -13
  43. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  44. package/cjs/src/embed/liveboard.js +50 -9
  45. package/cjs/src/embed/liveboard.js.map +1 -1
  46. package/cjs/src/embed/liveboard.spec.js +432 -4
  47. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  48. package/cjs/src/embed/spotter-utils.d.ts +15 -1
  49. package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
  50. package/cjs/src/embed/spotter-utils.js +28 -1
  51. package/cjs/src/embed/spotter-utils.js.map +1 -1
  52. package/cjs/src/embed/spotter-utils.spec.js +129 -0
  53. package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
  54. package/cjs/src/embed/spotter-viz-utils.d.ts +37 -4
  55. package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
  56. package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
  57. package/cjs/src/embed/spotter-viz-utils.spec.js +17 -0
  58. package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -1
  59. package/cjs/src/embed/ts-embed.d.ts +16 -8
  60. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  61. package/cjs/src/embed/ts-embed.js +96 -37
  62. package/cjs/src/embed/ts-embed.js.map +1 -1
  63. package/cjs/src/embed/ts-embed.spec.js +683 -3
  64. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  65. package/cjs/src/errors.d.ts +1 -0
  66. package/cjs/src/errors.d.ts.map +1 -1
  67. package/cjs/src/errors.js +1 -0
  68. package/cjs/src/errors.js.map +1 -1
  69. package/cjs/src/index.d.ts +3 -3
  70. package/cjs/src/index.d.ts.map +1 -1
  71. package/cjs/src/index.js +4 -2
  72. package/cjs/src/index.js.map +1 -1
  73. package/cjs/src/mixpanel-service.d.ts +4 -0
  74. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  75. package/cjs/src/mixpanel-service.js +4 -0
  76. package/cjs/src/mixpanel-service.js.map +1 -1
  77. package/cjs/src/react/all-types-export.d.ts +1 -1
  78. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  79. package/cjs/src/react/all-types-export.js +2 -1
  80. package/cjs/src/react/all-types-export.js.map +1 -1
  81. package/cjs/src/react/all-types-export.parity.spec.d.ts +2 -0
  82. package/cjs/src/react/all-types-export.parity.spec.d.ts.map +1 -0
  83. package/cjs/src/react/all-types-export.parity.spec.js +194 -0
  84. package/cjs/src/react/all-types-export.parity.spec.js.map +1 -0
  85. package/cjs/src/react/index.d.ts +66 -32
  86. package/cjs/src/react/index.d.ts.map +1 -1
  87. package/cjs/src/react/index.js +5 -3
  88. package/cjs/src/react/index.js.map +1 -1
  89. package/cjs/src/react/index.spec.js +101 -0
  90. package/cjs/src/react/index.spec.js.map +1 -1
  91. package/cjs/src/react/util.spec.js +251 -0
  92. package/cjs/src/react/util.spec.js.map +1 -1
  93. package/cjs/src/types.d.ts +902 -28
  94. package/cjs/src/types.d.ts.map +1 -1
  95. package/cjs/src/types.js +701 -14
  96. package/cjs/src/types.js.map +1 -1
  97. package/cjs/src/utils/processData.spec.js +93 -0
  98. package/cjs/src/utils/processData.spec.js.map +1 -1
  99. package/cjs/src/utils/processTrigger.spec.js +61 -0
  100. package/cjs/src/utils/processTrigger.spec.js.map +1 -1
  101. package/cjs/src/utils.spec.js +4 -0
  102. package/cjs/src/utils.spec.js.map +1 -1
  103. package/dist/{index-B5xoN6Cp.js → index-Bivg-mDx.js} +1 -1
  104. package/dist/src/config.d.ts +1 -0
  105. package/dist/src/config.d.ts.map +1 -1
  106. package/dist/src/css-variables.d.ts +122 -0
  107. package/dist/src/css-variables.d.ts.map +1 -1
  108. package/dist/src/embed/app.d.ts +176 -24
  109. package/dist/src/embed/app.d.ts.map +1 -1
  110. package/dist/src/embed/base.d.ts +1 -1
  111. package/dist/src/embed/conversation.d.ts +401 -2
  112. package/dist/src/embed/conversation.d.ts.map +1 -1
  113. package/dist/src/embed/hostEventClient/contracts.d.ts +51 -14
  114. package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  115. package/dist/src/embed/hostEventClient/host-event-client.d.ts +2 -1
  116. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  117. package/dist/src/embed/hostEventClient/utils.d.ts +2 -0
  118. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
  119. package/dist/src/embed/liveboard.d.ts +81 -13
  120. package/dist/src/embed/liveboard.d.ts.map +1 -1
  121. package/dist/src/embed/spotter-utils.d.ts +15 -1
  122. package/dist/src/embed/spotter-utils.d.ts.map +1 -1
  123. package/dist/src/embed/spotter-viz-utils.d.ts +37 -4
  124. package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
  125. package/dist/src/embed/ts-embed.d.ts +16 -8
  126. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  127. package/dist/src/errors.d.ts +1 -0
  128. package/dist/src/errors.d.ts.map +1 -1
  129. package/dist/src/index.d.ts +3 -3
  130. package/dist/src/index.d.ts.map +1 -1
  131. package/dist/src/mixpanel-service.d.ts +4 -0
  132. package/dist/src/mixpanel-service.d.ts.map +1 -1
  133. package/dist/src/react/all-types-export.d.ts +1 -1
  134. package/dist/src/react/all-types-export.d.ts.map +1 -1
  135. package/dist/src/react/all-types-export.parity.spec.d.ts +2 -0
  136. package/dist/src/react/all-types-export.parity.spec.d.ts.map +1 -0
  137. package/dist/src/react/index.d.ts +66 -32
  138. package/dist/src/react/index.d.ts.map +1 -1
  139. package/dist/src/types.d.ts +902 -28
  140. package/dist/src/types.d.ts.map +1 -1
  141. package/dist/tsembed-react.es.js +1269 -206
  142. package/dist/tsembed-react.js +1268 -205
  143. package/dist/tsembed.es.js +1364 -304
  144. package/dist/tsembed.js +1362 -302
  145. package/dist/visual-embed-sdk-react-full.d.ts +1867 -157
  146. package/dist/visual-embed-sdk-react.d.ts +1872 -161
  147. package/dist/visual-embed-sdk.d.ts +1815 -127
  148. package/lib/package.json +1 -1
  149. package/lib/src/config.d.ts +1 -0
  150. package/lib/src/config.d.ts.map +1 -1
  151. package/lib/src/config.js +1 -0
  152. package/lib/src/config.js.map +1 -1
  153. package/lib/src/css-variables.d.ts +122 -0
  154. package/lib/src/css-variables.d.ts.map +1 -1
  155. package/lib/src/embed/app.d.ts +176 -24
  156. package/lib/src/embed/app.d.ts.map +1 -1
  157. package/lib/src/embed/app.js +87 -39
  158. package/lib/src/embed/app.js.map +1 -1
  159. package/lib/src/embed/app.spec.js +673 -151
  160. package/lib/src/embed/app.spec.js.map +1 -1
  161. package/lib/src/embed/base.d.ts +1 -1
  162. package/lib/src/embed/base.js +1 -1
  163. package/lib/src/embed/conversation.d.ts +401 -2
  164. package/lib/src/embed/conversation.d.ts.map +1 -1
  165. package/lib/src/embed/conversation.js +33 -17
  166. package/lib/src/embed/conversation.js.map +1 -1
  167. package/lib/src/embed/conversation.spec.js +347 -18
  168. package/lib/src/embed/conversation.spec.js.map +1 -1
  169. package/lib/src/embed/events.spec.js +638 -0
  170. package/lib/src/embed/events.spec.js.map +1 -1
  171. package/lib/src/embed/host-events.spec.js +188 -1
  172. package/lib/src/embed/host-events.spec.js.map +1 -1
  173. package/lib/src/embed/hostEventClient/contracts.d.ts +51 -14
  174. package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  175. package/lib/src/embed/hostEventClient/contracts.js +10 -0
  176. package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
  177. package/lib/src/embed/hostEventClient/host-event-client.d.ts +2 -1
  178. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  179. package/lib/src/embed/hostEventClient/host-event-client.js +10 -1
  180. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  181. package/lib/src/embed/hostEventClient/host-event-client.spec.js +236 -0
  182. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  183. package/lib/src/embed/hostEventClient/utils.d.ts +2 -0
  184. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
  185. package/lib/src/embed/hostEventClient/utils.js +28 -1
  186. package/lib/src/embed/hostEventClient/utils.js.map +1 -1
  187. package/lib/src/embed/hostEventClient/utils.spec.js +179 -1
  188. package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -1
  189. package/lib/src/embed/liveboard.d.ts +81 -13
  190. package/lib/src/embed/liveboard.d.ts.map +1 -1
  191. package/lib/src/embed/liveboard.js +50 -9
  192. package/lib/src/embed/liveboard.js.map +1 -1
  193. package/lib/src/embed/liveboard.spec.js +432 -4
  194. package/lib/src/embed/liveboard.spec.js.map +1 -1
  195. package/lib/src/embed/spotter-utils.d.ts +15 -1
  196. package/lib/src/embed/spotter-utils.d.ts.map +1 -1
  197. package/lib/src/embed/spotter-utils.js +25 -0
  198. package/lib/src/embed/spotter-utils.js.map +1 -1
  199. package/lib/src/embed/spotter-utils.spec.js +130 -1
  200. package/lib/src/embed/spotter-utils.spec.js.map +1 -1
  201. package/lib/src/embed/spotter-viz-utils.d.ts +37 -4
  202. package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
  203. package/lib/src/embed/spotter-viz-utils.js.map +1 -1
  204. package/lib/src/embed/spotter-viz-utils.spec.js +17 -0
  205. package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -1
  206. package/lib/src/embed/ts-embed.d.ts +16 -8
  207. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  208. package/lib/src/embed/ts-embed.js +96 -37
  209. package/lib/src/embed/ts-embed.js.map +1 -1
  210. package/lib/src/embed/ts-embed.spec.js +683 -3
  211. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  212. package/lib/src/errors.d.ts +1 -0
  213. package/lib/src/errors.d.ts.map +1 -1
  214. package/lib/src/errors.js +1 -0
  215. package/lib/src/errors.js.map +1 -1
  216. package/lib/src/index.d.ts +3 -3
  217. package/lib/src/index.d.ts.map +1 -1
  218. package/lib/src/index.js +3 -3
  219. package/lib/src/index.js.map +1 -1
  220. package/lib/src/mixpanel-service.d.ts +4 -0
  221. package/lib/src/mixpanel-service.d.ts.map +1 -1
  222. package/lib/src/mixpanel-service.js +4 -0
  223. package/lib/src/mixpanel-service.js.map +1 -1
  224. package/lib/src/react/all-types-export.d.ts +1 -1
  225. package/lib/src/react/all-types-export.d.ts.map +1 -1
  226. package/lib/src/react/all-types-export.js +1 -1
  227. package/lib/src/react/all-types-export.js.map +1 -1
  228. package/lib/src/react/all-types-export.parity.spec.d.ts +2 -0
  229. package/lib/src/react/all-types-export.parity.spec.d.ts.map +1 -0
  230. package/lib/src/react/all-types-export.parity.spec.js +191 -0
  231. package/lib/src/react/all-types-export.parity.spec.js.map +1 -0
  232. package/lib/src/react/index.d.ts +66 -32
  233. package/lib/src/react/index.d.ts.map +1 -1
  234. package/lib/src/react/index.js +5 -3
  235. package/lib/src/react/index.js.map +1 -1
  236. package/lib/src/react/index.spec.js +102 -1
  237. package/lib/src/react/index.spec.js.map +1 -1
  238. package/lib/src/react/util.spec.js +251 -0
  239. package/lib/src/react/util.spec.js.map +1 -1
  240. package/lib/src/types.d.ts +902 -28
  241. package/lib/src/types.d.ts.map +1 -1
  242. package/lib/src/types.js +701 -14
  243. package/lib/src/types.js.map +1 -1
  244. package/lib/src/utils/processData.spec.js +93 -0
  245. package/lib/src/utils/processData.spec.js.map +1 -1
  246. package/lib/src/utils/processTrigger.spec.js +61 -0
  247. package/lib/src/utils/processTrigger.spec.js.map +1 -1
  248. package/lib/src/utils.spec.js +4 -0
  249. package/lib/src/utils.spec.js.map +1 -1
  250. package/lib/src/visual-embed-sdk.d.ts +1815 -127
  251. package/package.json +1 -1
  252. package/src/config.ts +1 -0
  253. package/src/css-variables.ts +150 -0
  254. package/src/embed/app.spec.ts +877 -196
  255. package/src/embed/app.ts +276 -75
  256. package/src/embed/base.ts +1 -1
  257. package/src/embed/conversation.spec.ts +411 -21
  258. package/src/embed/conversation.ts +441 -18
  259. package/src/embed/events.spec.ts +761 -1
  260. package/src/embed/host-events.spec.ts +242 -0
  261. package/src/embed/hostEventClient/contracts.ts +57 -14
  262. package/src/embed/hostEventClient/host-event-client.spec.ts +372 -0
  263. package/src/embed/hostEventClient/host-event-client.ts +18 -2
  264. package/src/embed/hostEventClient/utils.spec.ts +204 -0
  265. package/src/embed/hostEventClient/utils.ts +37 -10
  266. package/src/embed/liveboard.spec.ts +565 -4
  267. package/src/embed/liveboard.ts +155 -28
  268. package/src/embed/spotter-utils.spec.ts +140 -1
  269. package/src/embed/spotter-utils.ts +36 -1
  270. package/src/embed/spotter-viz-utils.spec.ts +17 -0
  271. package/src/embed/spotter-viz-utils.ts +37 -4
  272. package/src/embed/ts-embed.spec.ts +885 -3
  273. package/src/embed/ts-embed.ts +111 -39
  274. package/src/errors.ts +1 -0
  275. package/src/index.ts +45 -2
  276. package/src/mixpanel-service.ts +4 -0
  277. package/src/react/all-types-export.parity.spec.ts +208 -0
  278. package/src/react/all-types-export.ts +22 -0
  279. package/src/react/index.spec.tsx +158 -0
  280. package/src/react/index.tsx +70 -33
  281. package/src/react/util.spec.tsx +255 -0
  282. package/src/types.ts +904 -24
  283. package/src/utils/processData.spec.ts +97 -0
  284. package/src/utils/processTrigger.spec.ts +91 -0
  285. package/src/utils.spec.ts +5 -0
@@ -7,6 +7,8 @@ import * as processTriggerInstance from '../utils/processTrigger';
7
7
  import * as auth from '../auth';
8
8
  import * as previewService from '../utils/graphql/preview-service';
9
9
  import * as SessionInfoService from '../utils/sessionInfoService';
10
+ import { logger } from '../utils/logger';
11
+ import { DEFAULT_LAZY_LOADING_MARGIN } from '../config';
10
12
  const defaultViewConfig = {
11
13
  frameParams: {
12
14
  width: 1280,
@@ -106,6 +108,22 @@ describe('Liveboard/viz embed tests', () => {
106
108
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true&${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22,%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${liveboardId}`);
107
109
  });
108
110
  });
111
+ test('should hide and disable the Spotter button on the Liveboard header', async () => {
112
+ expect(Action.SpotterOnLiveboard).toBe('spotterOnLiveboard');
113
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
114
+ hiddenActions: [Action.SpotterOnLiveboard],
115
+ disabledActions: [Action.SpotterOnLiveboard],
116
+ ...defaultViewConfig,
117
+ liveboardId,
118
+ });
119
+ liveboardEmbed.render();
120
+ await executeAfterWait(() => {
121
+ expectUrlToHaveParamsWithValues(getIFrameSrc(), {
122
+ hideAction: JSON.stringify([Action.ReportError, Action.SpotterOnLiveboard]),
123
+ disableAction: JSON.stringify([Action.SpotterOnLiveboard]),
124
+ });
125
+ });
126
+ });
109
127
  test('should set visible actions', async () => {
110
128
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
111
129
  visibleActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
@@ -141,6 +159,17 @@ describe('Liveboard/viz embed tests', () => {
141
159
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&enable2ColumnLayout=true${prefixParams}#/embed/viz/${liveboardId}`);
142
160
  });
143
161
  });
162
+ test('should set isLiveboardAlwaysOn12ColLayout to true in url', async () => {
163
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
164
+ isLiveboardAlwaysOn12ColLayout: true,
165
+ ...defaultViewConfig,
166
+ liveboardId,
167
+ });
168
+ liveboardEmbed.render();
169
+ await executeAfterWait(() => {
170
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardAlwaysOn12ColLayout=true${prefixParams}#/embed/viz/${liveboardId}`);
171
+ });
172
+ });
144
173
  test('should set isLiveboardStylingAndGroupingEnabled to true in url (deprecated, use isLiveboardMasterpiecesEnabled)', async () => {
145
174
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
146
175
  isLiveboardStylingAndGroupingEnabled: true,
@@ -152,6 +181,28 @@ describe('Liveboard/viz embed tests', () => {
152
181
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardStylingAndGroupingEnabled=true${prefixParams}#/embed/viz/${liveboardId}`);
153
182
  });
154
183
  });
184
+ test('should set liveboardGutter in url', async () => {
185
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
186
+ ...defaultViewConfig,
187
+ liveboardId,
188
+ liveboardGutter: 8,
189
+ });
190
+ liveboardEmbed.render();
191
+ await executeAfterWait(() => {
192
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&liveboardGutter=8${prefixParams}#/embed/viz/${liveboardId}`);
193
+ });
194
+ });
195
+ test('should set liveboardGutter to 0 in url', async () => {
196
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
197
+ ...defaultViewConfig,
198
+ liveboardId,
199
+ liveboardGutter: 0,
200
+ });
201
+ liveboardEmbed.render();
202
+ await executeAfterWait(() => {
203
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&liveboardGutter=0${prefixParams}#/embed/viz/${liveboardId}`);
204
+ });
205
+ });
155
206
  test('should set isThisPeriodInDateFiltersEnabled to true in url', async () => {
156
207
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
157
208
  ...defaultViewConfig,
@@ -196,14 +247,14 @@ describe('Liveboard/viz embed tests', () => {
196
247
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isWYSIWYGLiveboardPDFEnabled=true${prefixParams}#/embed/viz/${liveboardId}`);
197
248
  });
198
249
  });
199
- test('should disable isWYSIWYGLiveboardPDFEnabled by default in url', async () => {
250
+ test('should not set isWYSIWYGLiveboardPDFEnabled in url by default', async () => {
200
251
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
201
252
  ...defaultViewConfig,
202
253
  liveboardId,
203
254
  });
204
255
  liveboardEmbed.render();
205
256
  await executeAfterWait(() => {
206
- expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isWYSIWYGLiveboardPDFEnabled=false${prefixParams}#/embed/viz/${liveboardId}`);
257
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}#/embed/viz/${liveboardId}`);
207
258
  });
208
259
  });
209
260
  test('should set isLiveboardXLSXCSVDownloadEnabled to true in url', async () => {
@@ -545,6 +596,38 @@ describe('Liveboard/viz embed tests', () => {
545
596
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isCentralizedLiveboardFilterUXEnabled=false${prefixParams}#/embed/viz/${liveboardId}`);
546
597
  });
547
598
  });
599
+ test('should add isScopedLiveboardFilteringEnabled flag and set value to true to the iframe src', async () => {
600
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
601
+ ...defaultViewConfig,
602
+ liveboardId,
603
+ isScopedLiveboardFilteringEnabled: true,
604
+ });
605
+ liveboardEmbed.render();
606
+ await executeAfterWait(() => {
607
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isScopedLiveboardFilteringEnabled=true${prefixParams}#/embed/viz/${liveboardId}`);
608
+ });
609
+ });
610
+ test('should add isScopedLiveboardFilteringEnabled flag and set value to false to the iframe src', async () => {
611
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
612
+ ...defaultViewConfig,
613
+ liveboardId,
614
+ isScopedLiveboardFilteringEnabled: false,
615
+ });
616
+ liveboardEmbed.render();
617
+ await executeAfterWait(() => {
618
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isScopedLiveboardFilteringEnabled=false${prefixParams}#/embed/viz/${liveboardId}`);
619
+ });
620
+ });
621
+ test('should not add isScopedLiveboardFilteringEnabled flag to the iframe src when undefined', async () => {
622
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
623
+ ...defaultViewConfig,
624
+ liveboardId,
625
+ });
626
+ liveboardEmbed.render();
627
+ await executeAfterWait(() => {
628
+ expect(getIFrameSrc()).not.toContain('isScopedLiveboardFilteringEnabled');
629
+ });
630
+ });
548
631
  test('should not append runtime filters in URL if excludeRuntimeFiltersfromURL is true', async () => {
549
632
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
550
633
  ...defaultViewConfig,
@@ -937,6 +1020,37 @@ describe('Liveboard/viz embed tests', () => {
937
1020
  expect(onSpy).toHaveBeenCalledWith(HostEvent.Navigate, 'embed/viz/lb1/viz1');
938
1021
  }, 1002);
939
1022
  });
1023
+ test('navigateToLiveboard should call preRender when preRenderConfig.preRenderId is set', () => {
1024
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1025
+ ...defaultViewConfig,
1026
+ liveboardId,
1027
+ preRenderConfig: {
1028
+ preRenderId: 'config-pre-render-id',
1029
+ },
1030
+ });
1031
+ const preRenderSpy = jest
1032
+ .spyOn(liveboardEmbed, 'preRender')
1033
+ .mockResolvedValue(liveboardEmbed);
1034
+ liveboardEmbed.navigateToLiveboard('lb1');
1035
+ expect(preRenderSpy).toHaveBeenCalledTimes(1);
1036
+ expect(preRenderSpy).toHaveBeenCalledWith(true);
1037
+ });
1038
+ test('navigateToLiveboard should prefer preRenderConfig.preRenderId over top-level preRenderId', () => {
1039
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1040
+ ...defaultViewConfig,
1041
+ liveboardId,
1042
+ preRenderId: 'top-level-id',
1043
+ preRenderConfig: {
1044
+ preRenderId: 'config-level-id',
1045
+ },
1046
+ });
1047
+ const preRenderSpy = jest
1048
+ .spyOn(liveboardEmbed, 'preRender')
1049
+ .mockResolvedValue(liveboardEmbed);
1050
+ liveboardEmbed.navigateToLiveboard('lb1');
1051
+ expect(preRenderSpy).toHaveBeenCalledTimes(1);
1052
+ expect(preRenderSpy).toHaveBeenCalledWith(true);
1053
+ });
940
1054
  test('should set runtime parametere values in url params', async () => {
941
1055
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
942
1056
  ...defaultViewConfig,
@@ -987,6 +1101,43 @@ describe('Liveboard/viz embed tests', () => {
987
1101
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&enableStarterPrompts=true#/embed/viz/${liveboardId}`);
988
1102
  });
989
1103
  });
1104
+ test('should set openSpotterOnLiveboardByDefault parameter in url params', async () => {
1105
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1106
+ ...defaultViewConfig,
1107
+ liveboardId,
1108
+ spotterChatConfig: { openSpotterOnLiveboardByDefault: true },
1109
+ });
1110
+ await liveboardEmbed.render();
1111
+ await executeAfterWait(() => {
1112
+ expectUrlToHaveParamsWithValues(getIFrameSrc(), {
1113
+ openSpotterOnLiveboardByDefault: 'true',
1114
+ });
1115
+ });
1116
+ });
1117
+ test('should set openSpotterOnLiveboardByDefault to false when explicitly disabled', async () => {
1118
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1119
+ ...defaultViewConfig,
1120
+ liveboardId,
1121
+ spotterChatConfig: { openSpotterOnLiveboardByDefault: false },
1122
+ });
1123
+ await liveboardEmbed.render();
1124
+ await executeAfterWait(() => {
1125
+ expectUrlToHaveParamsWithValues(getIFrameSrc(), {
1126
+ openSpotterOnLiveboardByDefault: 'false',
1127
+ });
1128
+ });
1129
+ });
1130
+ test('should not set openSpotterOnLiveboardByDefault when it is not configured', async () => {
1131
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1132
+ ...defaultViewConfig,
1133
+ liveboardId,
1134
+ spotterChatConfig: { enableStarterPrompts: true },
1135
+ });
1136
+ await liveboardEmbed.render();
1137
+ await executeAfterWait(() => {
1138
+ expect(getIFrameSrc()).not.toContain('openSpotterOnLiveboardByDefault');
1139
+ });
1140
+ });
990
1141
  test('should set spotterFileUploadFileTypes parameter in url params', async () => {
991
1142
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
992
1143
  ...defaultViewConfig,
@@ -1022,6 +1173,28 @@ describe('Liveboard/viz embed tests', () => {
1022
1173
  expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&updatedSpotterChatPrompt=false#/embed/viz/${liveboardId}`);
1023
1174
  });
1024
1175
  });
1176
+ test('should render the liveboard embed with showSpotterRadiance', async () => {
1177
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1178
+ ...defaultViewConfig,
1179
+ liveboardId,
1180
+ showSpotterRadiance: true,
1181
+ });
1182
+ await liveboardEmbed.render();
1183
+ await executeAfterWait(() => {
1184
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&showSpotterRadiance=true#/embed/viz/${liveboardId}`);
1185
+ });
1186
+ });
1187
+ test('should render the liveboard embed with showSpotterRadiance disabled', async () => {
1188
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1189
+ ...defaultViewConfig,
1190
+ liveboardId,
1191
+ showSpotterRadiance: false,
1192
+ });
1193
+ await liveboardEmbed.render();
1194
+ await executeAfterWait(() => {
1195
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&showSpotterRadiance=false#/embed/viz/${liveboardId}`);
1196
+ });
1197
+ });
1025
1198
  test('should set hideToolResponseCardBranding parameter in url params via spotterChatConfig', async () => {
1026
1199
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1027
1200
  ...defaultViewConfig,
@@ -1082,6 +1255,34 @@ describe('Liveboard/viz embed tests', () => {
1082
1255
  });
1083
1256
  });
1084
1257
  });
1258
+ test('should include starterPrompts in APP_INIT embedParams', async () => {
1259
+ const starterPrompts = {
1260
+ enable: true,
1261
+ quick: {
1262
+ label: 'Quick',
1263
+ questions: [
1264
+ { label: 'Q1', prompt: 'P1' },
1265
+ { label: 'Q2', prompt: 'P2' },
1266
+ ],
1267
+ },
1268
+ research: { label: 'Research' },
1269
+ };
1270
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1271
+ ...defaultViewConfig,
1272
+ liveboardId,
1273
+ spotterChatConfig: { starterPrompts },
1274
+ });
1275
+ mockMessageChannel();
1276
+ await liveboardEmbed.render();
1277
+ const mockPort = { postMessage: jest.fn() };
1278
+ await executeAfterWait(() => {
1279
+ postMessageToParent(getIFrameEl().contentWindow, { type: EmbedEvent.APP_INIT, data: {} }, mockPort);
1280
+ });
1281
+ await executeAfterWait(() => {
1282
+ expect(mockPort.postMessage.mock.calls[0][0].data.embedParams.starterPrompts)
1283
+ .toEqual(starterPrompts);
1284
+ });
1285
+ });
1085
1286
  test('should pass brandHeadline through spotterVizConfig in APP_INIT', async () => {
1086
1287
  const spotterViz = { brandName: 'MyBrand', brandHeadline: "Hi, there! I'm" };
1087
1288
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
@@ -1404,6 +1605,188 @@ describe('Liveboard/viz embed tests', () => {
1404
1605
  expect(iframeSrc).toContain('isFullHeightPinboard=true');
1405
1606
  }, 100);
1406
1607
  });
1608
+ test('should default lazy loading flags to true when fullHeight is enabled', async () => {
1609
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1610
+ ...defaultViewConfig,
1611
+ liveboardId,
1612
+ fullHeight: true,
1613
+ });
1614
+ expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBe(true);
1615
+ expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(true);
1616
+ expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe('500px 0px');
1617
+ await liveboardEmbed.render();
1618
+ await executeAfterWait(() => {
1619
+ const iframeSrc = getIFrameSrc();
1620
+ expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
1621
+ expect(iframeSrc).toContain('isFullHeightPinboard=true');
1622
+ expect(iframeSrc).toContain('rootMarginForLazyLoad=500px%200px');
1623
+ }, 100);
1624
+ });
1625
+ test('should not default lazy loading flags when fullHeight is not enabled', async () => {
1626
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1627
+ ...defaultViewConfig,
1628
+ liveboardId,
1629
+ });
1630
+ expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
1631
+ expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
1632
+ expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
1633
+ });
1634
+ test('should not write the defaults back onto the caller view config', async () => {
1635
+ const callerViewConfig = {
1636
+ ...defaultViewConfig,
1637
+ liveboardId,
1638
+ fullHeight: true,
1639
+ };
1640
+ new LiveboardEmbed(getRootEl(), callerViewConfig);
1641
+ expect(callerViewConfig.lazyLoadingForFullHeight).toBeUndefined();
1642
+ expect(callerViewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
1643
+ expect(callerViewConfig.lazyLoadingMargin).toBeUndefined();
1644
+ });
1645
+ test('should not default lazy loading flags when fullHeight is explicitly false', async () => {
1646
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1647
+ ...defaultViewConfig,
1648
+ liveboardId,
1649
+ fullHeight: false,
1650
+ });
1651
+ expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBeUndefined();
1652
+ expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBeUndefined();
1653
+ expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBeUndefined();
1654
+ });
1655
+ test('should default lazyLoadingMargin when lazyLoadingForFullHeight is set explicitly', async () => {
1656
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1657
+ ...defaultViewConfig,
1658
+ liveboardId,
1659
+ fullHeight: true,
1660
+ lazyLoadingForFullHeight: true,
1661
+ });
1662
+ expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe(DEFAULT_LAZY_LOADING_MARGIN);
1663
+ await liveboardEmbed.render();
1664
+ await executeAfterWait(() => {
1665
+ expect(getIFrameSrc()).toContain('rootMarginForLazyLoad=500px%200px');
1666
+ }, 100);
1667
+ });
1668
+ test('should let an explicit lazyLoadingMargin win over the default', async () => {
1669
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1670
+ ...defaultViewConfig,
1671
+ liveboardId,
1672
+ fullHeight: true,
1673
+ lazyLoadingMargin: '250px',
1674
+ });
1675
+ await liveboardEmbed.render();
1676
+ await executeAfterWait(() => {
1677
+ const iframeSrc = getIFrameSrc();
1678
+ expect(iframeSrc).toContain('rootMarginForLazyLoad=250px');
1679
+ expect(iframeSrc).not.toContain('rootMarginForLazyLoad=500px%200px');
1680
+ }, 100);
1681
+ });
1682
+ test('should drop an invalid lazyLoadingMargin and log an error', async () => {
1683
+ const loggerErrorSpy = jest.spyOn(logger, 'error').mockImplementation(() => undefined);
1684
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1685
+ ...defaultViewConfig,
1686
+ liveboardId,
1687
+ fullHeight: true,
1688
+ lazyLoadingMargin: 'not-a-margin',
1689
+ });
1690
+ await liveboardEmbed.render();
1691
+ await executeAfterWait(() => {
1692
+ const iframeSrc = getIFrameSrc();
1693
+ expect(iframeSrc).toContain('isLazyLoadingForEmbedEnabled=true');
1694
+ expect(iframeSrc).not.toContain('rootMarginForLazyLoad');
1695
+ expect(loggerErrorSpy).toHaveBeenCalledWith('Please provide a valid lazyLoadingMargin value (e.g., "10px")');
1696
+ }, 100);
1697
+ });
1698
+ test('should track scrollable ancestors by default when only fullHeight is set', async () => {
1699
+ const scrollContainer = getRootEl();
1700
+ scrollContainer.style.overflow = 'auto';
1701
+ const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
1702
+ const resizeObserveSpy = jest.fn();
1703
+ const resizeDisconnectSpy = jest.fn();
1704
+ const originalResizeObserver = window.ResizeObserver;
1705
+ window.ResizeObserver = jest.fn().mockImplementation(() => ({
1706
+ observe: resizeObserveSpy,
1707
+ disconnect: resizeDisconnectSpy,
1708
+ }));
1709
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1710
+ ...defaultViewConfig,
1711
+ liveboardId,
1712
+ fullHeight: true,
1713
+ });
1714
+ await liveboardEmbed.render();
1715
+ await executeAfterWait(() => {
1716
+ expect(scrollContainerSpy).toHaveBeenCalledWith('scroll', expect.any(Function));
1717
+ expect(resizeObserveSpy).toHaveBeenCalledWith(scrollContainer);
1718
+ }, 100);
1719
+ liveboardEmbed.destroy();
1720
+ expect(resizeDisconnectSpy).toHaveBeenCalled();
1721
+ scrollContainer.style.overflow = '';
1722
+ window.ResizeObserver = originalResizeObserver;
1723
+ });
1724
+ test('should skip ancestor tracking when enableScrollableContainerLazyLoading is false', async () => {
1725
+ const scrollContainer = getRootEl();
1726
+ scrollContainer.style.overflow = 'auto';
1727
+ const scrollContainerSpy = jest.spyOn(scrollContainer, 'addEventListener');
1728
+ const windowSpy = jest.spyOn(window, 'addEventListener');
1729
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1730
+ ...defaultViewConfig,
1731
+ liveboardId,
1732
+ fullHeight: true,
1733
+ enableScrollableContainerLazyLoading: false,
1734
+ });
1735
+ await liveboardEmbed.render();
1736
+ await executeAfterWait(() => {
1737
+ expect(windowSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
1738
+ expect(scrollContainerSpy).not.toHaveBeenCalledWith('scroll', expect.any(Function));
1739
+ }, 100);
1740
+ liveboardEmbed.destroy();
1741
+ scrollContainer.style.overflow = '';
1742
+ });
1743
+ test('should wire the window scroll listener to the coordinates sender by default', async () => {
1744
+ const addEventListenerSpy = jest.spyOn(window, 'addEventListener');
1745
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1746
+ ...defaultViewConfig,
1747
+ liveboardId,
1748
+ fullHeight: true,
1749
+ });
1750
+ const mockTrigger = jest
1751
+ .spyOn(liveboardEmbed, 'trigger')
1752
+ .mockImplementation(() => Promise.resolve(undefined));
1753
+ await liveboardEmbed.render();
1754
+ await executeAfterWait(() => {
1755
+ const scrollCall = addEventListenerSpy.mock.calls.find(([eventName, , capture]) => eventName === 'scroll' && capture === true);
1756
+ expect(scrollCall).toBeDefined();
1757
+ // Call the handler the way a real scroll event would.
1758
+ scrollCall[1]();
1759
+ expect(mockTrigger).toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, expect.objectContaining({ top: expect.any(Number) }));
1760
+ }, 100);
1761
+ liveboardEmbed.destroy();
1762
+ addEventListenerSpy.mockRestore();
1763
+ });
1764
+ test('should remove listeners on destroy when the flags come from defaults', async () => {
1765
+ const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener');
1766
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1767
+ ...defaultViewConfig,
1768
+ liveboardId,
1769
+ fullHeight: true,
1770
+ });
1771
+ await liveboardEmbed.render();
1772
+ liveboardEmbed.destroy();
1773
+ expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.anything());
1774
+ expect(removeEventListenerSpy).toHaveBeenCalledWith('scroll', expect.anything(), true);
1775
+ removeEventListenerSpy.mockRestore();
1776
+ });
1777
+ test('should keep an explicit false for the lazy loading flags', async () => {
1778
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1779
+ ...defaultViewConfig,
1780
+ liveboardId,
1781
+ fullHeight: true,
1782
+ lazyLoadingForFullHeight: false,
1783
+ enableScrollableContainerLazyLoading: false,
1784
+ lazyLoadingMargin: '0px',
1785
+ });
1786
+ expect(liveboardEmbed.viewConfig.lazyLoadingForFullHeight).toBe(false);
1787
+ expect(liveboardEmbed.viewConfig.enableScrollableContainerLazyLoading).toBe(false);
1788
+ expect(liveboardEmbed.viewConfig.lazyLoadingMargin).toBe('0px');
1789
+ });
1407
1790
  test('should not set lazyLoadingForEmbed when lazyLoadingForFullHeight is enabled but fullHeight is false', async () => {
1408
1791
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1409
1792
  ...defaultViewConfig,
@@ -1468,7 +1851,7 @@ describe('Liveboard/viz embed tests', () => {
1468
1851
  width: 650,
1469
1852
  });
1470
1853
  });
1471
- test('should send correct visible data when RequestVisibleEmbedCoordinates is triggered', async () => {
1854
+ test('should send visible data when fullHeight is enabled and lazyLoadingForFullHeight is omitted', async () => {
1472
1855
  const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
1473
1856
  ...defaultViewConfig,
1474
1857
  liveboardId,
@@ -1479,7 +1862,7 @@ describe('Liveboard/viz embed tests', () => {
1479
1862
  await liveboardEmbed.render();
1480
1863
  // Trigger the lazy load data calculation
1481
1864
  liveboardEmbed.sendFullHeightLazyLoadData();
1482
- expect(mockTrigger).not.toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, {
1865
+ expect(mockTrigger).toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, {
1483
1866
  top: 0,
1484
1867
  height: 500,
1485
1868
  left: 0,
@@ -1784,4 +2167,49 @@ describe('Liveboard/viz embed tests', () => {
1784
2167
  });
1785
2168
  });
1786
2169
  });
2170
+ describe('LiveboardEmbed updatedSpotterExperience tests', () => {
2171
+ beforeEach(() => {
2172
+ document.body.innerHTML = getDocumentBody();
2173
+ });
2174
+ test('should render the liveboard embed with updatedSpotterExperience', async () => {
2175
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
2176
+ ...defaultViewConfig,
2177
+ liveboardId,
2178
+ updatedSpotterExperience: true,
2179
+ });
2180
+ await liveboardEmbed.render();
2181
+ await executeAfterWait(() => {
2182
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&updatedSpotterExperience=true#/embed/viz/${liveboardId}`);
2183
+ });
2184
+ });
2185
+ test('should render the liveboard embed with updatedSpotterExperience disabled', async () => {
2186
+ const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
2187
+ ...defaultViewConfig,
2188
+ liveboardId,
2189
+ updatedSpotterExperience: false,
2190
+ });
2191
+ await liveboardEmbed.render();
2192
+ await executeAfterWait(() => {
2193
+ expectUrlMatchesWithParams(getIFrameSrc(), `http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}&updatedSpotterExperience=false#/embed/viz/${liveboardId}`);
2194
+ });
2195
+ });
2196
+ describe('trigger typing contracts (compile-time)', () => {
2197
+ it('infers typed response for no-payload calls through the LiveboardEmbed override', () => {
2198
+ const embed = new LiveboardEmbed(getRootEl(), {
2199
+ liveboardId: 'test-liveboard-id',
2200
+ });
2201
+ const getTabs = () => embed.trigger(HostEvent.GetTabs);
2202
+ const tabsIsTyped = false;
2203
+ const tabsHasContractFields = true;
2204
+ const probeUnknownField = (r) =>
2205
+ // @ts-expect-error — field not on the GetTabs contract (was silent when `any`)
2206
+ r.tabCount;
2207
+ void probeUnknownField;
2208
+ const reload = () => embed.trigger(HostEvent.Reload);
2209
+ const reloadStaysAny = true;
2210
+ expect([tabsIsTyped, tabsHasContractFields, reloadStaysAny])
2211
+ .toEqual([false, true, true]);
2212
+ });
2213
+ });
2214
+ });
1787
2215
  //# sourceMappingURL=liveboard.spec.js.map