@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.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 +2 -3
- package/cjs/src/embed/TsEmbed.d.ts +302 -0
- package/cjs/src/embed/TsEmbed.d.ts.map +1 -0
- package/cjs/src/embed/TsEmbed.js +851 -0
- package/cjs/src/embed/TsEmbed.js.map +1 -0
- package/cjs/src/embed/app.d.ts +4 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +9 -2
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/base.d.ts +2 -0
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +2 -0
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +3 -2
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +6 -5
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +4 -1
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +9 -2
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +1 -0
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +1 -0
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +5 -1
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +10 -2
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +14 -7
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +94 -63
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +47 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +3 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +2 -0
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/mixpanel-service.spec.js +1 -0
- package/cjs/src/mixpanel-service.spec.js.map +1 -1
- package/cjs/src/react/index.d.ts +5 -1
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +8 -8
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/types.d.ts +60 -19
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +7 -13
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.js +40 -0
- package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
- package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.js +69 -0
- package/cjs/src/utils/graphql/sourceService.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
- package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/cjs/src/utils/processData.d.ts.map +1 -1
- package/cjs/src/utils/processData.js +7 -11
- package/cjs/src/utils/processData.js.map +1 -1
- package/cjs/src/utils/processData.spec.js +13 -17
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +6 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +26 -1
- package/cjs/src/utils.js.map +1 -1
- package/dist/src/embed/app.d.ts +4 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +2 -0
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +3 -2
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +4 -1
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +1 -0
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +5 -1
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +14 -7
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +5 -1
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +60 -19
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
- package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.d.ts +8 -0
- package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +513 -150
- package/dist/tsembed-react.js +516 -149
- package/dist/tsembed.es.js +556 -146
- package/dist/tsembed.js +556 -145
- package/dist/visual-embed-sdk-react-full.d.ts +152 -33
- package/dist/visual-embed-sdk-react.d.ts +152 -33
- package/dist/visual-embed-sdk.d.ts +147 -32
- package/lib/package.json +2 -3
- package/lib/src/embed/TsEmbed.d.ts +302 -0
- package/lib/src/embed/TsEmbed.d.ts.map +1 -0
- package/lib/src/embed/TsEmbed.js +847 -0
- package/lib/src/embed/TsEmbed.js.map +1 -0
- package/lib/src/embed/app.d.ts +4 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +9 -2
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/base.d.ts +2 -0
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +2 -0
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +3 -2
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +6 -5
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/sage.d.ts +4 -1
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +9 -2
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +1 -0
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +1 -0
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +5 -1
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +10 -2
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +14 -7
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +94 -63
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +47 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +3 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +2 -0
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/mixpanel-service.spec.js +1 -0
- package/lib/src/mixpanel-service.spec.js.map +1 -1
- package/lib/src/react/index.d.ts +5 -1
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +7 -7
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/types.d.ts +60 -19
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +6 -12
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.js +177 -0
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
- package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/lib/src/utils/graphql/graphql-request.js +36 -0
- package/lib/src/utils/graphql/graphql-request.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.d.ts +8 -0
- package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.js +65 -0
- package/lib/src/utils/graphql/sourceService.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.js +10 -0
- package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +8 -12
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js +14 -18
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils.d.ts +6 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +23 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +153 -33
- package/package.json +2 -3
- package/src/embed/app.ts +13 -6
- package/src/embed/base.ts +2 -0
- package/src/embed/liveboard.ts +7 -5
- package/src/embed/sage.ts +13 -2
- package/src/embed/search-bar.tsx +2 -0
- package/src/embed/search.ts +14 -2
- package/src/embed/ts-embed.spec.ts +49 -0
- package/src/embed/ts-embed.ts +116 -64
- package/src/index.ts +5 -0
- package/src/mixpanel-service.spec.ts +1 -0
- package/src/mixpanel-service.ts +1 -0
- package/src/react/index.tsx +50 -45
- package/src/types.ts +64 -21
- package/src/utils/graphql/answerService/answer-queries.ts +80 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
- package/src/utils/graphql/answerService/answerService.ts +234 -0
- package/src/utils/graphql/graphql-request.ts +45 -0
- package/src/utils/graphql/sourceService.spec.ts +10 -0
- package/src/utils/graphql/sourceService.ts +71 -0
- package/src/utils/processData.spec.ts +15 -25
- package/src/utils/processData.ts +13 -15
- package/src/utils.ts +24 -0
- package/src/utils/answerService.spec.ts +0 -41
- package/src/utils/answerService.ts +0 -63
package/src/embed/ts-embed.ts
CHANGED
|
@@ -117,6 +117,8 @@ export class TsEmbed {
|
|
|
117
117
|
*/
|
|
118
118
|
protected thoughtSpotV2Base: string;
|
|
119
119
|
|
|
120
|
+
protected embedComponentType = 'TsEmbed';
|
|
121
|
+
|
|
120
122
|
/**
|
|
121
123
|
* A map of event handlers for particular message types triggered
|
|
122
124
|
* by the embedded app; multiple event handlers can be registered
|
|
@@ -161,6 +163,7 @@ export class TsEmbed {
|
|
|
161
163
|
this.registerAppInit();
|
|
162
164
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
163
165
|
...viewConfig,
|
|
166
|
+
embedComponentType: this.embedComponentType,
|
|
164
167
|
});
|
|
165
168
|
}
|
|
166
169
|
|
|
@@ -227,6 +230,8 @@ export class TsEmbed {
|
|
|
227
230
|
return eventData;
|
|
228
231
|
}
|
|
229
232
|
|
|
233
|
+
private subscribedListeners = {};
|
|
234
|
+
|
|
230
235
|
/**
|
|
231
236
|
* Adds a global event listener to window for "message" events.
|
|
232
237
|
* ThoughtSpot detects if a particular event is targeted to this
|
|
@@ -234,7 +239,8 @@ export class TsEmbed {
|
|
|
234
239
|
* and executes the registered callbacks accordingly.
|
|
235
240
|
*/
|
|
236
241
|
private subscribeToEvents() {
|
|
237
|
-
|
|
242
|
+
this.unsubscribeToEvents();
|
|
243
|
+
const messageEventListener = (event: MessageEvent<any>) => {
|
|
238
244
|
const eventType = this.getEventType(event);
|
|
239
245
|
const eventPort = this.getEventPort(event);
|
|
240
246
|
const eventData = this.formatEventData(event, eventType);
|
|
@@ -245,16 +251,33 @@ export class TsEmbed {
|
|
|
245
251
|
eventPort,
|
|
246
252
|
);
|
|
247
253
|
}
|
|
248
|
-
}
|
|
249
|
-
window.addEventListener('
|
|
254
|
+
};
|
|
255
|
+
window.addEventListener('message', messageEventListener);
|
|
256
|
+
|
|
257
|
+
const onlineEventListener = (e: Event) => {
|
|
250
258
|
this.trigger(HostEvent.Reload);
|
|
251
|
-
}
|
|
252
|
-
window.addEventListener('
|
|
259
|
+
};
|
|
260
|
+
window.addEventListener('online', onlineEventListener);
|
|
261
|
+
|
|
262
|
+
const offlineEventListener = (e: Event) => {
|
|
253
263
|
const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
|
|
254
264
|
this.executeCallbacks(EmbedEvent.Error, {
|
|
255
265
|
offlineWarning,
|
|
256
266
|
});
|
|
257
267
|
console.warn(offlineWarning);
|
|
268
|
+
};
|
|
269
|
+
window.addEventListener('offline', offlineEventListener);
|
|
270
|
+
|
|
271
|
+
this.subscribedListeners = {
|
|
272
|
+
message: messageEventListener,
|
|
273
|
+
online: onlineEventListener,
|
|
274
|
+
offline: offlineEventListener,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private unsubscribeToEvents() {
|
|
279
|
+
Object.keys(this.subscribedListeners).forEach((key) => {
|
|
280
|
+
window.removeEventListener(key, this.subscribedListeners[key]);
|
|
258
281
|
});
|
|
259
282
|
}
|
|
260
283
|
|
|
@@ -279,6 +302,7 @@ export class TsEmbed {
|
|
|
279
302
|
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
280
303
|
: null,
|
|
281
304
|
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
305
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
282
306
|
hostConfig: this.embedConfig.hostConfig,
|
|
283
307
|
hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
|
|
284
308
|
? this.viewConfig?.hiddenHomeLeftNavItems
|
|
@@ -525,14 +549,24 @@ export class TsEmbed {
|
|
|
525
549
|
return iFrame;
|
|
526
550
|
}
|
|
527
551
|
|
|
552
|
+
protected handleInsertionIntoDOM(child: string | Node, showPreRenderByDefault = false): void {
|
|
553
|
+
if (this.isPreRendered) {
|
|
554
|
+
this.insertIntoDOMForPreRender(
|
|
555
|
+
this.embedConfig.loginFailedMessage, showPreRenderByDefault,
|
|
556
|
+
);
|
|
557
|
+
} else {
|
|
558
|
+
this.insertIntoDOM(this.embedConfig.loginFailedMessage);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
528
562
|
/**
|
|
529
563
|
* Renders the embedded ThoughtSpot app in an iframe and sets up
|
|
530
564
|
* event listeners.
|
|
531
565
|
*
|
|
532
|
-
* @param url
|
|
533
|
-
* @param
|
|
566
|
+
* @param url - The URL of the embedded ThoughtSpot app.
|
|
567
|
+
* @param showPreRenderByDefault - The flag to show the preRender by default.
|
|
534
568
|
*/
|
|
535
|
-
protected async renderIFrame(url: string): Promise<any> {
|
|
569
|
+
protected async renderIFrame(url: string, showPreRenderByDefault = false): Promise<any> {
|
|
536
570
|
if (this.isError) {
|
|
537
571
|
return null;
|
|
538
572
|
}
|
|
@@ -557,11 +591,9 @@ export class TsEmbed {
|
|
|
557
591
|
return getAuthPromise()
|
|
558
592
|
?.then((isLoggedIn: boolean) => {
|
|
559
593
|
if (!isLoggedIn) {
|
|
560
|
-
|
|
561
|
-
this.
|
|
562
|
-
|
|
563
|
-
this.insertIntoDOM(this.embedConfig.loginFailedMessage);
|
|
564
|
-
}
|
|
594
|
+
this.handleInsertionIntoDOM(
|
|
595
|
+
this.embedConfig.loginFailedMessage, showPreRenderByDefault,
|
|
596
|
+
);
|
|
565
597
|
return;
|
|
566
598
|
}
|
|
567
599
|
|
|
@@ -584,11 +616,9 @@ export class TsEmbed {
|
|
|
584
616
|
this.iFrame.addEventListener('error', () => {
|
|
585
617
|
nextInQueue();
|
|
586
618
|
});
|
|
587
|
-
|
|
588
|
-
this.
|
|
589
|
-
|
|
590
|
-
this.insertIntoDOM(this.iFrame);
|
|
591
|
-
}
|
|
619
|
+
this.handleInsertionIntoDOM(
|
|
620
|
+
this.iFrame, showPreRenderByDefault,
|
|
621
|
+
);
|
|
592
622
|
const prefetchIframe = document.querySelectorAll('.prefetchIframe');
|
|
593
623
|
if (prefetchIframe.length) {
|
|
594
624
|
prefetchIframe.forEach((el) => {
|
|
@@ -602,11 +632,7 @@ export class TsEmbed {
|
|
|
602
632
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
|
|
603
633
|
error: JSON.stringify(error),
|
|
604
634
|
});
|
|
605
|
-
|
|
606
|
-
this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
|
|
607
|
-
} else {
|
|
608
|
-
this.insertIntoDOM(this.embedConfig.loginFailedMessage);
|
|
609
|
-
}
|
|
635
|
+
this.handleInsertionIntoDOM(this.embedConfig.loginFailedMessage);
|
|
610
636
|
this.handleError(error);
|
|
611
637
|
});
|
|
612
638
|
});
|
|
@@ -622,32 +648,32 @@ export class TsEmbed {
|
|
|
622
648
|
|
|
623
649
|
protected createPreRenderWrapper(child: HTMLElement): HTMLDivElement {
|
|
624
650
|
if (!this.viewConfig.preRenderId) {
|
|
625
|
-
throw new Error('
|
|
651
|
+
throw new Error('PreRender id is required');
|
|
626
652
|
}
|
|
627
653
|
|
|
628
654
|
const preRenderIds = this.getPreRenderIds();
|
|
629
655
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
}
|
|
656
|
+
[preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
|
|
657
|
+
.map((id) => document.getElementById(id))
|
|
658
|
+
.filter((element) => element)
|
|
659
|
+
.forEach((existingElement) => existingElement.remove());
|
|
635
660
|
|
|
636
661
|
const preRenderWrapper = document.createElement('div');
|
|
637
662
|
preRenderWrapper.id = preRenderIds.wrapper;
|
|
638
663
|
setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
|
|
639
664
|
|
|
640
|
-
const preRenderShield = document.createElement('div');
|
|
641
|
-
preRenderShield.id = preRenderIds.shield;
|
|
642
|
-
setStyleProperties(preRenderShield, { position: 'absolute',
|
|
665
|
+
// const preRenderShield = document.createElement('div');
|
|
666
|
+
// preRenderShield.id = preRenderIds.shield;
|
|
667
|
+
// setStyleProperties(preRenderShield, { position: 'absolute',
|
|
668
|
+
// width: '100%', height: '100%' });
|
|
643
669
|
|
|
644
670
|
child.id = preRenderIds.child;
|
|
645
671
|
|
|
646
672
|
preRenderWrapper.appendChild(child);
|
|
647
|
-
preRenderWrapper.appendChild(preRenderShield);
|
|
673
|
+
// preRenderWrapper.appendChild(preRenderShield);
|
|
648
674
|
|
|
649
675
|
this.preRenderWrapper = preRenderWrapper;
|
|
650
|
-
this.preRenderShield = preRenderShield;
|
|
676
|
+
// this.preRenderShield = preRenderShield;
|
|
651
677
|
this.preRenderChild = child;
|
|
652
678
|
|
|
653
679
|
return preRenderWrapper;
|
|
@@ -655,24 +681,35 @@ export class TsEmbed {
|
|
|
655
681
|
|
|
656
682
|
protected preRenderWrapper: HTMLElement;
|
|
657
683
|
|
|
658
|
-
protected preRenderShield: HTMLElement;
|
|
684
|
+
// protected preRenderShield: HTMLElement;
|
|
659
685
|
|
|
660
686
|
protected preRenderChild: HTMLElement;
|
|
661
687
|
|
|
662
|
-
protected
|
|
688
|
+
protected connectPreRendered(): boolean {
|
|
663
689
|
const preRenderIds = this.getPreRenderIds();
|
|
664
690
|
this.preRenderWrapper = this.preRenderWrapper
|
|
665
691
|
|| document.getElementById(preRenderIds.wrapper);
|
|
666
|
-
this.preRenderShield = this.preRenderShield
|
|
667
|
-
|
|
692
|
+
// this.preRenderShield = this.preRenderShield
|
|
693
|
+
// || document.getElementById(preRenderIds.shield);
|
|
668
694
|
this.preRenderChild = this.preRenderChild
|
|
669
695
|
|| document.getElementById(preRenderIds.child);
|
|
670
696
|
|
|
671
|
-
|
|
672
|
-
|
|
697
|
+
if (this.preRenderWrapper && this.preRenderChild) {
|
|
698
|
+
this.isPreRendered = true;
|
|
699
|
+
this.iFrame = this.preRenderChild as HTMLIFrameElement;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
return this.isPreRenderAvailable();
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
protected isPreRenderAvailable(): boolean {
|
|
706
|
+
return this.isPreRendered;
|
|
673
707
|
}
|
|
674
708
|
|
|
675
|
-
protected insertIntoDOMForPreRender(
|
|
709
|
+
protected insertIntoDOMForPreRender(
|
|
710
|
+
child: string | HTMLElement,
|
|
711
|
+
showPreRenderByDefault = false,
|
|
712
|
+
): void {
|
|
676
713
|
let childNode: HTMLElement;
|
|
677
714
|
if (typeof child === 'string') {
|
|
678
715
|
const divChildNode = document.createElement('div');
|
|
@@ -684,9 +721,13 @@ export class TsEmbed {
|
|
|
684
721
|
|
|
685
722
|
const preRenderWrapper = this.createPreRenderWrapper(childNode);
|
|
686
723
|
|
|
687
|
-
|
|
724
|
+
if (showPreRenderByDefault) {
|
|
725
|
+
this.showPreRender();
|
|
726
|
+
} else {
|
|
727
|
+
this.hidePreRender();
|
|
728
|
+
}
|
|
688
729
|
|
|
689
|
-
|
|
730
|
+
document.body.appendChild(preRenderWrapper);
|
|
690
731
|
}
|
|
691
732
|
|
|
692
733
|
public hidePreRender(): void {
|
|
@@ -707,35 +748,42 @@ export class TsEmbed {
|
|
|
707
748
|
|
|
708
749
|
const childBoundingRect = this.preRenderChild.getBoundingClientRect();
|
|
709
750
|
|
|
710
|
-
setStyleProperties(this.preRenderShield, {
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
});
|
|
751
|
+
// setStyleProperties(this.preRenderShield, {
|
|
752
|
+
// opacity: '0',
|
|
753
|
+
// pointerEvents: 'none',
|
|
754
|
+
// zIndex: '1',
|
|
755
|
+
// width: `${childBoundingRect.width}px`,
|
|
756
|
+
// height: `${childBoundingRect.height}px`,
|
|
757
|
+
// position: 'absolute',
|
|
758
|
+
// top: '0',
|
|
759
|
+
// left: '0',
|
|
760
|
+
// });
|
|
761
|
+
|
|
762
|
+
this.unsubscribeToEvents();
|
|
720
763
|
}
|
|
721
764
|
|
|
722
|
-
public showPreRender() {
|
|
765
|
+
public showPreRender(): void {
|
|
723
766
|
if (!this.isPreRenderAvailable()) {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
767
|
+
const isAvailable = this.connectPreRendered();
|
|
768
|
+
if (!isAvailable) {
|
|
769
|
+
// if the Embed component is nor preRendered , Render it now and
|
|
770
|
+
// show it (hide is defalt behaviour)
|
|
771
|
+
console.log('No preRender found, creating new ');
|
|
772
|
+
this.preRender(true);
|
|
773
|
+
return;
|
|
774
|
+
}
|
|
729
775
|
}
|
|
730
776
|
|
|
731
777
|
this.syncPreRenderStyle();
|
|
732
778
|
|
|
733
779
|
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
|
|
734
780
|
|
|
735
|
-
setStyleProperties(this.preRenderShield, { zIndex: '-1' });
|
|
781
|
+
// setStyleProperties(this.preRenderShield, { zIndex: '-1' });
|
|
782
|
+
|
|
783
|
+
this.subscribeToEvents();
|
|
736
784
|
}
|
|
737
785
|
|
|
738
|
-
public syncPreRenderStyle() {
|
|
786
|
+
public syncPreRenderStyle(): void {
|
|
739
787
|
if (!this.el) {
|
|
740
788
|
throw new Error('Embed element is not defined');
|
|
741
789
|
}
|
|
@@ -981,8 +1029,10 @@ export class TsEmbed {
|
|
|
981
1029
|
|
|
982
1030
|
/**
|
|
983
1031
|
* Creates the preRender shell
|
|
1032
|
+
*
|
|
1033
|
+
* @param showPreRenderByDefault
|
|
984
1034
|
*/
|
|
985
|
-
public preRender(): TsEmbed {
|
|
1035
|
+
public preRender(showPreRenderByDefault = false): TsEmbed {
|
|
986
1036
|
this.isPreRendered = true;
|
|
987
1037
|
return this;
|
|
988
1038
|
}
|
|
@@ -1025,6 +1075,7 @@ export class TsEmbed {
|
|
|
1025
1075
|
public destroy(): void {
|
|
1026
1076
|
try {
|
|
1027
1077
|
this.insertedDomEl?.parentNode.removeChild(this.insertedDomEl);
|
|
1078
|
+
this.unsubscribeToEvents();
|
|
1028
1079
|
} catch (e) {
|
|
1029
1080
|
console.log('Error destroying TS Embed', e);
|
|
1030
1081
|
}
|
|
@@ -1067,9 +1118,10 @@ export class V1Embed extends TsEmbed {
|
|
|
1067
1118
|
* Render the app in an iframe and set up event handlers
|
|
1068
1119
|
*
|
|
1069
1120
|
* @param iframeSrc
|
|
1121
|
+
* @param showPreRenderByDefault - if true the preRender will be shown by default
|
|
1070
1122
|
*/
|
|
1071
|
-
protected renderV1Embed(iframeSrc: string): any {
|
|
1072
|
-
return this.renderIFrame(iframeSrc);
|
|
1123
|
+
protected renderV1Embed(iframeSrc: string, showPreRenderByDefault = false): any {
|
|
1124
|
+
return this.renderIFrame(iframeSrc, showPreRenderByDefault);
|
|
1073
1125
|
}
|
|
1074
1126
|
|
|
1075
1127
|
protected getRootIframeSrc(): string {
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { AppEmbed, Page, AppViewConfig } from './embed/app';
|
|
11
11
|
import {
|
|
12
12
|
init, prefetch, logout, getEmbedConfig, executeTML, exportTML,
|
|
13
|
+
executeTMLInput, exportTMLInput,
|
|
13
14
|
} from './embed/base';
|
|
14
15
|
import { PinboardEmbed, LiveboardViewConfig, LiveboardEmbed } from './embed/liveboard';
|
|
15
16
|
import { SearchEmbed, SearchViewConfig } from './embed/search';
|
|
@@ -41,6 +42,7 @@ import {
|
|
|
41
42
|
} from './types';
|
|
42
43
|
import { CustomCssVariables } from './css-variables';
|
|
43
44
|
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
45
|
+
import { AnswerService } from './utils/graphql/answerService/answerService';
|
|
44
46
|
|
|
45
47
|
export {
|
|
46
48
|
init,
|
|
@@ -48,6 +50,8 @@ export {
|
|
|
48
50
|
prefetch,
|
|
49
51
|
executeTML,
|
|
50
52
|
exportTML,
|
|
53
|
+
executeTMLInput,
|
|
54
|
+
exportTMLInput,
|
|
51
55
|
getEmbedConfig as getInitConfig,
|
|
52
56
|
getSessionInfo,
|
|
53
57
|
SearchEmbed,
|
|
@@ -60,6 +64,7 @@ export {
|
|
|
60
64
|
AuthStatus,
|
|
61
65
|
AuthEvent,
|
|
62
66
|
AuthEventEmitter,
|
|
67
|
+
AnswerService,
|
|
63
68
|
// types
|
|
64
69
|
Page,
|
|
65
70
|
AuthType,
|
|
@@ -57,6 +57,7 @@ describe('Unit test for mixpanel', () => {
|
|
|
57
57
|
clusterId: sessionInfo.clusterId,
|
|
58
58
|
clusterName: sessionInfo.clusterName,
|
|
59
59
|
releaseVersion: sessionInfo.releaseVersion,
|
|
60
|
+
hostAppUrl: 'localhost',
|
|
60
61
|
});
|
|
61
62
|
expect(mixpanel.identify).not.toHaveBeenCalledWith(sessionInfo.userGUID);
|
|
62
63
|
});
|
package/src/mixpanel-service.ts
CHANGED
|
@@ -71,6 +71,7 @@ export function initMixpanel(sessionInfo: any): void {
|
|
|
71
71
|
clusterId: sessionInfo.clusterId,
|
|
72
72
|
clusterName: sessionInfo.clusterName,
|
|
73
73
|
releaseVersion: sessionInfo.releaseVersion,
|
|
74
|
+
hostAppUrl: window?.location?.host || '',
|
|
74
75
|
});
|
|
75
76
|
isMixpanelInitialized = true;
|
|
76
77
|
emptyQueue();
|
package/src/react/index.tsx
CHANGED
|
@@ -18,32 +18,25 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
18
18
|
(props: U, forwardedRef: React.MutableRefObject<InstanceType<T>>) => {
|
|
19
19
|
const ref = React.useRef<HTMLDivElement>(null);
|
|
20
20
|
const { className, ...embedProps } = props;
|
|
21
|
-
const { viewConfig, listeners } = getViewPropsAndListeners<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
>(embedProps);
|
|
21
|
+
const { viewConfig, listeners } = getViewPropsAndListeners<Omit<U, 'className'>, V>(
|
|
22
|
+
embedProps,
|
|
23
|
+
);
|
|
25
24
|
useDeepCompareEffect(() => {
|
|
26
25
|
const tsEmbed = new EmbedConstructor(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
: '',
|
|
26
|
+
ref!.current,
|
|
27
|
+
deepMerge(
|
|
28
|
+
{
|
|
29
|
+
insertAsSibling: viewConfig.insertAsSibling,
|
|
30
|
+
frameParams: {
|
|
31
|
+
class: viewConfig.insertAsSibling ? className || '' : '',
|
|
32
|
+
},
|
|
35
33
|
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
),
|
|
34
|
+
viewConfig,
|
|
35
|
+
),
|
|
39
36
|
) as InstanceType<T>;
|
|
40
37
|
Object.keys(listeners).forEach((eventName) => {
|
|
41
|
-
tsEmbed.on(
|
|
42
|
-
eventName as EmbedEvent,
|
|
43
|
-
listeners[eventName as EmbedEvent],
|
|
44
|
-
);
|
|
38
|
+
tsEmbed.on(eventName as EmbedEvent, listeners[eventName as EmbedEvent]);
|
|
45
39
|
});
|
|
46
|
-
|
|
47
40
|
if (isPreRenderedComponent) {
|
|
48
41
|
tsEmbed.preRender();
|
|
49
42
|
} else if (props.preRenderId) {
|
|
@@ -64,23 +57,15 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
64
57
|
};
|
|
65
58
|
}, [viewConfig, listeners]);
|
|
66
59
|
|
|
67
|
-
return (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
ref={ref}
|
|
72
|
-
style={{ position: 'absolute' }}
|
|
73
|
-
></span>
|
|
74
|
-
: <div
|
|
75
|
-
data-testid="tsEmbed"
|
|
76
|
-
ref={ref}
|
|
77
|
-
className={className}>
|
|
78
|
-
</div>
|
|
60
|
+
return viewConfig.insertAsSibling ? (
|
|
61
|
+
<span data-testid="tsEmbed" ref={ref} style={{ position: 'absolute' }}></span>
|
|
62
|
+
) : (
|
|
63
|
+
<div data-testid="tsEmbed" ref={ref} className={className}></div>
|
|
79
64
|
);
|
|
80
65
|
},
|
|
81
66
|
);
|
|
82
67
|
|
|
83
|
-
interface SearchProps extends EmbedProps, SearchViewConfig {
|
|
68
|
+
interface SearchProps extends EmbedProps, SearchViewConfig {}
|
|
84
69
|
|
|
85
70
|
/**
|
|
86
71
|
* React component for Search Embed.
|
|
@@ -99,7 +84,7 @@ export const SearchEmbed = componentFactory<typeof _SearchEmbed, SearchProps, Se
|
|
|
99
84
|
_SearchEmbed,
|
|
100
85
|
);
|
|
101
86
|
|
|
102
|
-
interface AppProps extends EmbedProps, AppViewConfig {
|
|
87
|
+
interface AppProps extends EmbedProps, AppViewConfig {}
|
|
103
88
|
|
|
104
89
|
/**
|
|
105
90
|
* React component for Full app Embed.
|
|
@@ -117,7 +102,12 @@ interface AppProps extends EmbedProps, AppViewConfig { }
|
|
|
117
102
|
*/
|
|
118
103
|
export const AppEmbed = componentFactory<typeof _AppEmbed, AppProps, AppViewConfig>(_AppEmbed);
|
|
119
104
|
|
|
120
|
-
|
|
105
|
+
export const PreRenderedAppEmbed = componentFactory<typeof _AppEmbed, AppProps, AppViewConfig>(
|
|
106
|
+
_AppEmbed,
|
|
107
|
+
true,
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
interface LiveboardProps extends EmbedProps, LiveboardViewConfig {}
|
|
121
111
|
|
|
122
112
|
/**
|
|
123
113
|
* React component for Liveboard embed.
|
|
@@ -142,7 +132,15 @@ export const LiveboardEmbed = componentFactory<
|
|
|
142
132
|
|
|
143
133
|
export const PinboardEmbed = LiveboardEmbed;
|
|
144
134
|
|
|
145
|
-
|
|
135
|
+
export const PreRenderedLiveboardEmbed = componentFactory<
|
|
136
|
+
typeof _LiveboardEmbed,
|
|
137
|
+
LiveboardProps,
|
|
138
|
+
LiveboardViewConfig
|
|
139
|
+
>(_LiveboardEmbed, true);
|
|
140
|
+
|
|
141
|
+
export const PreRenderedPinboardEmbed = PreRenderedLiveboardEmbed;
|
|
142
|
+
|
|
143
|
+
interface SearchBarEmbedProps extends EmbedProps, SearchBarViewConfig {}
|
|
146
144
|
|
|
147
145
|
/**
|
|
148
146
|
* React component for Search bar embed.
|
|
@@ -163,7 +161,13 @@ export const SearchBarEmbed = componentFactory<
|
|
|
163
161
|
SearchBarViewConfig
|
|
164
162
|
>(_SearchBarEmbed);
|
|
165
163
|
|
|
166
|
-
|
|
164
|
+
export const PreRenderedSearchBarEmbed = componentFactory<
|
|
165
|
+
typeof _SearchBarEmbed,
|
|
166
|
+
SearchBarEmbedProps,
|
|
167
|
+
SearchBarViewConfig
|
|
168
|
+
>(_SearchBarEmbed, true);
|
|
169
|
+
|
|
170
|
+
interface SageEmbedProps extends EmbedProps, SageViewConfig {}
|
|
167
171
|
|
|
168
172
|
/**
|
|
169
173
|
* React component for LLM based search Sage embed.
|
|
@@ -182,6 +186,12 @@ export const SageEmbed = componentFactory<typeof _SageEmbed, SageEmbedProps, Sag
|
|
|
182
186
|
_SageEmbed,
|
|
183
187
|
);
|
|
184
188
|
|
|
189
|
+
export const PreRenderedSageEmbed = componentFactory<
|
|
190
|
+
typeof _SageEmbed,
|
|
191
|
+
SageEmbedProps,
|
|
192
|
+
SageViewConfig
|
|
193
|
+
>(_SageEmbed, true);
|
|
194
|
+
|
|
185
195
|
type EmbedComponent =
|
|
186
196
|
| typeof SearchEmbed
|
|
187
197
|
| typeof AppEmbed
|
|
@@ -206,17 +216,12 @@ type EmbedComponent =
|
|
|
206
216
|
* ```
|
|
207
217
|
* @returns {React.MutableRefObject<T extends TsEmbed>} ref
|
|
208
218
|
*/
|
|
209
|
-
export function useEmbedRef<T extends EmbedComponent>():
|
|
210
|
-
React.
|
|
219
|
+
export function useEmbedRef<T extends EmbedComponent>(): React.MutableRefObject<
|
|
220
|
+
React.ComponentRef<T>
|
|
221
|
+
> {
|
|
211
222
|
return React.useRef<React.ComponentRef<T>>(null);
|
|
212
223
|
}
|
|
213
224
|
|
|
214
|
-
export const PreRenderedLiveboardEmbed = componentFactory<
|
|
215
|
-
typeof _LiveboardEmbed,
|
|
216
|
-
LiveboardProps,
|
|
217
|
-
LiveboardViewConfig
|
|
218
|
-
>(_LiveboardEmbed, true);
|
|
219
|
-
|
|
220
225
|
export {
|
|
221
226
|
LiveboardViewConfig,
|
|
222
227
|
SearchViewConfig,
|