@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.
- package/cjs/package.json +5 -4
- package/cjs/src/css-variables.d.ts +316 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +8 -0
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +12 -2
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/bodyless-conversation.d.ts.map +1 -1
- package/cjs/src/embed/bodyless-conversation.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +63 -2
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +10 -2
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +102 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +11 -2
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +21 -7
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +185 -4
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +22 -7
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +75 -46
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +173 -1
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/types.d.ts +152 -44
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +139 -42
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/liveboardService/liveboardService.d.ts +21 -6
- package/cjs/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
- package/cjs/src/utils/liveboardService/liveboardService.js +21 -6
- package/cjs/src/utils/liveboardService/liveboardService.js.map +1 -1
- package/dist/index-BDlM0f0T.js +7371 -0
- package/dist/src/css-variables.d.ts +316 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/bodyless-conversation.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +63 -2
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +11 -2
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +22 -7
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/types.d.ts +152 -44
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/liveboardService/liveboardService.d.ts +21 -6
- package/dist/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +256 -100
- package/dist/tsembed-react.js +255 -99
- package/dist/tsembed.es.js +277 -106
- package/dist/tsembed.js +276 -105
- package/dist/visual-embed-sdk-react-full.d.ts +575 -57
- package/dist/visual-embed-sdk-react.d.ts +575 -57
- package/dist/visual-embed-sdk.d.ts +575 -57
- package/lib/package.json +5 -4
- package/lib/src/css-variables.d.ts +316 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +8 -0
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +12 -2
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/bodyless-conversation.d.ts.map +1 -1
- package/lib/src/embed/bodyless-conversation.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +63 -2
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +11 -3
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +104 -2
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +11 -2
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +21 -7
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +185 -4
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +22 -7
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +75 -46
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +173 -1
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/types.d.ts +152 -44
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +139 -42
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/liveboardService/liveboardService.d.ts +21 -6
- package/lib/src/utils/liveboardService/liveboardService.d.ts.map +1 -1
- package/lib/src/utils/liveboardService/liveboardService.js +21 -6
- package/lib/src/utils/liveboardService/liveboardService.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +576 -58
- package/package.json +5 -4
- package/src/css-variables.ts +396 -1
- package/src/embed/app.spec.ts +17 -2
- package/src/embed/app.ts +8 -0
- package/src/embed/bodyless-conversation.ts +0 -1
- package/src/embed/conversation.spec.ts +131 -5
- package/src/embed/conversation.ts +89 -10
- package/src/embed/liveboard.spec.ts +236 -5
- package/src/embed/liveboard.ts +22 -7
- package/src/embed/sage.ts +1 -1
- package/src/embed/ts-embed.spec.ts +345 -113
- package/src/embed/ts-embed.ts +83 -56
- package/src/types.ts +199 -91
- package/src/utils/liveboardService/liveboardService.ts +21 -6
package/src/embed/ts-embed.ts
CHANGED
|
@@ -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.
|
|
1410
|
+
this.executeAfterEmbedContainerLoaded(() => {
|
|
1411
|
+
this.trigger(HostEvent.UpdateEmbedParams, this.getUpdateEmbedParamsObject());
|
|
1412
|
+
});
|
|
1386
1413
|
}
|
|
1387
1414
|
|
|
1388
1415
|
this.beforePrerenderVisible();
|