@thoughtspot/visual-embed-sdk 1.40.1-alpha.2 → 1.41.0-pre-render-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 (111) hide show
  1. package/cjs/package.json +5 -4
  2. package/cjs/src/css-variables.d.ts +316 -0
  3. package/cjs/src/css-variables.d.ts.map +1 -1
  4. package/cjs/src/embed/app.d.ts.map +1 -1
  5. package/cjs/src/embed/app.js +8 -0
  6. package/cjs/src/embed/app.js.map +1 -1
  7. package/cjs/src/embed/app.spec.js +12 -2
  8. package/cjs/src/embed/app.spec.js.map +1 -1
  9. package/cjs/src/embed/bodyless-conversation.d.ts.map +1 -1
  10. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  11. package/cjs/src/embed/conversation.d.ts +63 -2
  12. package/cjs/src/embed/conversation.d.ts.map +1 -1
  13. package/cjs/src/embed/conversation.js +10 -2
  14. package/cjs/src/embed/conversation.js.map +1 -1
  15. package/cjs/src/embed/conversation.spec.js +102 -0
  16. package/cjs/src/embed/conversation.spec.js.map +1 -1
  17. package/cjs/src/embed/liveboard.d.ts +11 -2
  18. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  19. package/cjs/src/embed/liveboard.js +21 -7
  20. package/cjs/src/embed/liveboard.js.map +1 -1
  21. package/cjs/src/embed/liveboard.spec.js +185 -4
  22. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  23. package/cjs/src/embed/sage.js.map +1 -1
  24. package/cjs/src/embed/ts-embed.d.ts +22 -7
  25. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  26. package/cjs/src/embed/ts-embed.js +75 -46
  27. package/cjs/src/embed/ts-embed.js.map +1 -1
  28. package/cjs/src/embed/ts-embed.spec.js +173 -1
  29. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  30. package/cjs/src/types.d.ts +152 -44
  31. package/cjs/src/types.d.ts.map +1 -1
  32. package/cjs/src/types.js +139 -42
  33. package/cjs/src/types.js.map +1 -1
  34. package/cjs/src/utils/liveboardService/liveboardService.d.ts +21 -6
  35. package/cjs/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
  36. package/cjs/src/utils/liveboardService/liveboardService.js +21 -6
  37. package/cjs/src/utils/liveboardService/liveboardService.js.map +1 -1
  38. package/dist/index-BDlM0f0T.js +7371 -0
  39. package/dist/src/css-variables.d.ts +316 -0
  40. package/dist/src/css-variables.d.ts.map +1 -1
  41. package/dist/src/embed/app.d.ts.map +1 -1
  42. package/dist/src/embed/bodyless-conversation.d.ts.map +1 -1
  43. package/dist/src/embed/conversation.d.ts +63 -2
  44. package/dist/src/embed/conversation.d.ts.map +1 -1
  45. package/dist/src/embed/liveboard.d.ts +11 -2
  46. package/dist/src/embed/liveboard.d.ts.map +1 -1
  47. package/dist/src/embed/ts-embed.d.ts +22 -7
  48. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  49. package/dist/src/types.d.ts +152 -44
  50. package/dist/src/types.d.ts.map +1 -1
  51. package/dist/src/utils/liveboardService/liveboardService.d.ts +21 -6
  52. package/dist/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
  53. package/dist/tsembed-react.es.js +256 -100
  54. package/dist/tsembed-react.js +255 -99
  55. package/dist/tsembed.es.js +277 -106
  56. package/dist/tsembed.js +276 -105
  57. package/dist/visual-embed-sdk-react-full.d.ts +575 -57
  58. package/dist/visual-embed-sdk-react.d.ts +575 -57
  59. package/dist/visual-embed-sdk.d.ts +575 -57
  60. package/lib/package.json +5 -4
  61. package/lib/src/css-variables.d.ts +316 -0
  62. package/lib/src/css-variables.d.ts.map +1 -1
  63. package/lib/src/embed/app.d.ts.map +1 -1
  64. package/lib/src/embed/app.js +8 -0
  65. package/lib/src/embed/app.js.map +1 -1
  66. package/lib/src/embed/app.spec.js +12 -2
  67. package/lib/src/embed/app.spec.js.map +1 -1
  68. package/lib/src/embed/bodyless-conversation.d.ts.map +1 -1
  69. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  70. package/lib/src/embed/conversation.d.ts +63 -2
  71. package/lib/src/embed/conversation.d.ts.map +1 -1
  72. package/lib/src/embed/conversation.js +11 -3
  73. package/lib/src/embed/conversation.js.map +1 -1
  74. package/lib/src/embed/conversation.spec.js +104 -2
  75. package/lib/src/embed/conversation.spec.js.map +1 -1
  76. package/lib/src/embed/liveboard.d.ts +11 -2
  77. package/lib/src/embed/liveboard.d.ts.map +1 -1
  78. package/lib/src/embed/liveboard.js +21 -7
  79. package/lib/src/embed/liveboard.js.map +1 -1
  80. package/lib/src/embed/liveboard.spec.js +185 -4
  81. package/lib/src/embed/liveboard.spec.js.map +1 -1
  82. package/lib/src/embed/sage.js.map +1 -1
  83. package/lib/src/embed/ts-embed.d.ts +22 -7
  84. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  85. package/lib/src/embed/ts-embed.js +75 -46
  86. package/lib/src/embed/ts-embed.js.map +1 -1
  87. package/lib/src/embed/ts-embed.spec.js +173 -1
  88. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  89. package/lib/src/types.d.ts +152 -44
  90. package/lib/src/types.d.ts.map +1 -1
  91. package/lib/src/types.js +139 -42
  92. package/lib/src/types.js.map +1 -1
  93. package/lib/src/utils/liveboardService/liveboardService.d.ts +21 -6
  94. package/lib/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
  95. package/lib/src/utils/liveboardService/liveboardService.js +21 -6
  96. package/lib/src/utils/liveboardService/liveboardService.js.map +1 -1
  97. package/lib/src/visual-embed-sdk.d.ts +576 -58
  98. package/package.json +5 -4
  99. package/src/css-variables.ts +396 -1
  100. package/src/embed/app.spec.ts +17 -2
  101. package/src/embed/app.ts +8 -0
  102. package/src/embed/bodyless-conversation.ts +0 -1
  103. package/src/embed/conversation.spec.ts +131 -5
  104. package/src/embed/conversation.ts +89 -10
  105. package/src/embed/liveboard.spec.ts +236 -5
  106. package/src/embed/liveboard.ts +22 -7
  107. package/src/embed/sage.ts +1 -1
  108. package/src/embed/ts-embed.spec.ts +345 -113
  109. package/src/embed/ts-embed.ts +83 -56
  110. package/src/types.ts +199 -91
  111. package/src/utils/liveboardService/liveboardService.ts +21 -6
@@ -185,10 +185,7 @@ export class TsEmbed {
185
185
  */
186
186
  private fullscreenChangeHandler: (() => void) | null = null;
187
187
 
188
- public id: string;
189
-
190
188
  constructor(domSelector: DOMSelector, viewConfig?: ViewConfig) {
191
- this.id = Date.now().toString();
192
189
  this.el = getDOMNode(domSelector);
193
190
  this.eventHandlerMap = new Map();
194
191
  this.isError = false;
@@ -201,12 +198,11 @@ export class TsEmbed {
201
198
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
202
199
  ...viewConfig,
203
200
  });
204
- this.hostEventClient = new HostEventClient(this.iFrame);
205
-
206
201
  const embedConfig = getEmbedConfig();
207
202
  this.embedConfig = embedConfig;
203
+
204
+ this.hostEventClient = new HostEventClient(this.iFrame);
208
205
  this.isReadyForRenderPromise = getInitPromise().then(async () => {
209
-
210
206
  if (!embedConfig.authTriggerContainer && !embedConfig.useEventForSAMLPopup) {
211
207
  this.embedConfig.authTriggerContainer = domSelector;
212
208
  }
@@ -314,8 +310,6 @@ export class TsEmbed {
314
310
 
315
311
  private subscribedListeners: Record<string, any> = {};
316
312
 
317
- public isEmbedContainerLoaded = false;
318
-
319
313
  /**
320
314
  * Adds a global event listener to window for "message" events.
321
315
  * ThoughtSpot detects if a particular event is targeted to this
@@ -481,57 +475,19 @@ export class TsEmbed {
481
475
  notifyAuthFailure(AuthFailureType.IDLE_SESSION_TIMEOUT);
482
476
  };
483
477
 
484
- private pendingEvents: Array<{ eventType: HostEvent, data: TriggerPayload<any, HostEvent>, onEventTriggered?: () => void }> = [];
485
-
486
- protected getPreRenderObj<T extends TsEmbed>(): T {
487
- const embedObj = (this.insertedDomEl as any)?.[this.embedNodeKey] as T;
488
- if (embedObj === (this as any)) {
489
- logger.info('embedObj is same as this');
490
- }
491
- return embedObj;
492
- }
493
-
494
- private checkEmbedContainerLoaded() {
495
- if (this.isEmbedContainerLoaded) return true;
496
-
497
- const preRenderObj = this.getPreRenderObj<TsEmbed>();
498
- if (preRenderObj && preRenderObj.isEmbedContainerLoaded) {
499
- this.isEmbedContainerLoaded = true;
500
- }
501
-
502
- return this.isEmbedContainerLoaded;
503
- }
504
-
505
- private executePendingEvents() {
506
- logger.debug('executePendingEvents', this.pendingEvents);
507
- setTimeout(() => {
508
- this.pendingEvents.forEach((event) => {
509
- this.trigger(event.eventType, event.data);
510
- event.onEventTriggered?.();
511
- });
512
- this.pendingEvents = [];
513
- }, 1000);
514
- }
515
- protected triggerAfterLoad(eventType: HostEvent, data: TriggerPayload<any, HostEvent>, onEventTriggered?: () => void) {
516
- if (this.checkEmbedContainerLoaded()) {
517
- this.trigger(eventType, data);
518
- onEventTriggered?.();
519
- } else {
520
- this.pendingEvents.push({ eventType, data, onEventTriggered });
521
- }
522
- }
523
-
524
478
  /**
525
479
  * Register APP_INIT event and sendback init payload
526
480
  */
527
481
  private registerAppInit = () => {
528
482
  this.on(EmbedEvent.APP_INIT, this.appInitCb, { start: false }, true);
529
- this.on(EmbedEvent.AuthInit, () => {
530
- this.isEmbedContainerLoaded = true;
531
- this.executePendingEvents();
532
- }, { start: false }, true);
533
483
  this.on(EmbedEvent.AuthExpire, this.updateAuthToken, { start: false }, true);
534
484
  this.on(EmbedEvent.IdleSessionTimeout, this.idleSessionTimeout, { start: false }, true);
485
+
486
+ const embedListenerReadyHandler = this.createEmbedContainerHandler(EmbedEvent.EmbedListenerReady);
487
+ this.on(EmbedEvent.EmbedListenerReady, embedListenerReadyHandler, { start: false }, true);
488
+
489
+ const authInitHandler = this.createEmbedContainerHandler(EmbedEvent.AuthInit);
490
+ this.on(EmbedEvent.AuthInit, authInitHandler, { start: false }, true);
535
491
  };
536
492
 
537
493
  /**
@@ -1133,11 +1089,9 @@ export class TsEmbed {
1133
1089
  if (this.isRendered) {
1134
1090
  logger.warn('Please register event handlers before calling render');
1135
1091
  }
1136
-
1137
1092
  const callbacks = this.eventHandlerMap.get(messageType) || [];
1138
1093
  callbacks.push({ options, callback });
1139
1094
  this.eventHandlerMap.set(messageType, callbacks);
1140
-
1141
1095
  return this;
1142
1096
  }
1143
1097
 
@@ -1185,6 +1139,77 @@ export class TsEmbed {
1185
1139
  }
1186
1140
  }
1187
1141
 
1142
+ /**
1143
+ * @hidden
1144
+ * Internal state to track if the embed container is loaded.
1145
+ * This is used to trigger events after the embed container is loaded.
1146
+ */
1147
+ public isEmbedContainerLoaded = false;
1148
+
1149
+ /**
1150
+ * @hidden
1151
+ * Internal state to track the callbacks to be executed after the embed container
1152
+ * is loaded.
1153
+ * This is used to trigger events after the embed container is loaded.
1154
+ */
1155
+ private embedContainerReadyCallbacks: Array<() => void> = [];
1156
+
1157
+ protected getPreRenderObj<T extends TsEmbed>(): T {
1158
+ const embedObj = (this.insertedDomEl as any)?.[this.embedNodeKey] as T;
1159
+ if (embedObj === (this as any)) {
1160
+ logger.info('embedObj is same as this');
1161
+ }
1162
+ return embedObj;
1163
+ }
1164
+
1165
+ private checkEmbedContainerLoaded() {
1166
+ if (this.isEmbedContainerLoaded) return true;
1167
+
1168
+ const preRenderObj = this.getPreRenderObj<TsEmbed>();
1169
+ if (preRenderObj && preRenderObj.isEmbedContainerLoaded) {
1170
+ this.isEmbedContainerLoaded = true;
1171
+ }
1172
+
1173
+ return this.isEmbedContainerLoaded;
1174
+ }
1175
+ private executeEmbedContainerReadyCallbacks() {
1176
+ logger.debug('executePendingEvents', this.embedContainerReadyCallbacks);
1177
+ this.embedContainerReadyCallbacks.forEach((callback) => {
1178
+ callback?.();
1179
+ });
1180
+ this.embedContainerReadyCallbacks = [];
1181
+ }
1182
+
1183
+ /**
1184
+ * Executes a callback after the embed container is loaded.
1185
+ * @param callback The callback to execute
1186
+ */
1187
+ protected executeAfterEmbedContainerLoaded(callback: () => void) {
1188
+ if (this.checkEmbedContainerLoaded()) {
1189
+ callback?.();
1190
+ } else {
1191
+ logger.debug('pushing callback to embedContainerReadyCallbacks', callback);
1192
+ this.embedContainerReadyCallbacks.push(callback);
1193
+ }
1194
+ }
1195
+
1196
+ protected createEmbedContainerHandler = (source: EmbedEvent.AuthInit | EmbedEvent.EmbedListenerReady) => () => {
1197
+ const processEmbedContainerReady = () => {
1198
+ logger.debug('processEmbedContainerReady');
1199
+ this.isEmbedContainerLoaded = true;
1200
+ this.executeEmbedContainerReadyCallbacks();
1201
+ }
1202
+ if (source === EmbedEvent.AuthInit) {
1203
+ const AUTH_INIT_FALLBACK_DELAY = 1000;
1204
+ // Wait for 1 second to ensure the embed container is loaded
1205
+ // This is a workaround to ensure the embed container is loaded
1206
+ // this is needed until all clusters have EmbedListenerReady event
1207
+ setTimeout(processEmbedContainerReady, AUTH_INIT_FALLBACK_DELAY);
1208
+ } else if (source === EmbedEvent.EmbedListenerReady) {
1209
+ processEmbedContainerReady();
1210
+ }
1211
+ }
1212
+
1188
1213
  /**
1189
1214
  * Triggers an event to the embedded app
1190
1215
  * @param {HostEvent} messageType The event type
@@ -1253,7 +1278,7 @@ export class TsEmbed {
1253
1278
  * Creates the preRender shell
1254
1279
  * @param showPreRenderByDefault - Show the preRender after render, hidden by default
1255
1280
  */
1256
- public async preRender(showPreRenderByDefault = false): Promise<TsEmbed> {
1281
+ public async preRender(showPreRenderByDefault = false): Promise<TsEmbed> {
1257
1282
  if (!this.viewConfig.preRenderId) {
1258
1283
  logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
1259
1284
  return this;
@@ -1382,7 +1407,9 @@ export class TsEmbed {
1382
1407
  }
1383
1408
  this.validatePreRenderViewConfig(this.viewConfig);
1384
1409
  logger.debug('triggering UpdateEmbedParams', this.viewConfig);
1385
- this.triggerAfterLoad(HostEvent.UpdateEmbedParams, this.getUpdateEmbedParamsObject());
1410
+ this.executeAfterEmbedContainerLoaded(() => {
1411
+ this.trigger(HostEvent.UpdateEmbedParams, this.getUpdateEmbedParamsObject());
1412
+ });
1386
1413
  }
1387
1414
 
1388
1415
  this.beforePrerenderVisible();