@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.0
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/app.d.ts +3 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +8 -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 +9 -3
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +50 -20
- 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 +46 -18
- 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 +3 -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 +9 -3
- 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 +46 -18
- 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 +468 -107
- package/dist/tsembed-react.js +471 -106
- package/dist/tsembed.es.js +511 -103
- package/dist/tsembed.js +511 -102
- package/dist/visual-embed-sdk-react-full.d.ts +132 -28
- package/dist/visual-embed-sdk-react.d.ts +132 -28
- package/dist/visual-embed-sdk.d.ts +127 -27
- package/lib/package.json +2 -3
- package/lib/src/embed/app.d.ts +3 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +8 -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 +9 -3
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +50 -20
- 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 +46 -18
- 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 +133 -28
- package/package.json +2 -3
- package/src/embed/app.ts +12 -2
- 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 +61 -22
- 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 +40 -37
- package/src/types.ts +50 -19
- 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 +25 -0
- package/src/utils/answerService.spec.ts +0 -41
- package/src/utils/answerService.ts +0 -63
package/dist/tsembed-react.js
CHANGED
|
@@ -361,6 +361,24 @@
|
|
|
361
361
|
return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
|
|
362
362
|
}
|
|
363
363
|
const deepMerge = (target, source) => merge(target, source);
|
|
364
|
+
/**
|
|
365
|
+
*
|
|
366
|
+
* @param obj
|
|
367
|
+
*/
|
|
368
|
+
function removeTypename(obj) {
|
|
369
|
+
if (!obj || typeof obj !== 'object')
|
|
370
|
+
return obj;
|
|
371
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
372
|
+
for (const key in obj) {
|
|
373
|
+
if (key === '__typename') {
|
|
374
|
+
delete obj[key];
|
|
375
|
+
}
|
|
376
|
+
else if (typeof obj[key] === 'object') {
|
|
377
|
+
removeTypename(obj[key]);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return obj;
|
|
381
|
+
}
|
|
364
382
|
const setStyleProperties = (element, styleProperties) => {
|
|
365
383
|
if (!element || !styleProperties)
|
|
366
384
|
return;
|
|
@@ -374,6 +392,11 @@
|
|
|
374
392
|
styleProperties.forEach((styleProperty) => {
|
|
375
393
|
element.style.removeProperty(styleProperty);
|
|
376
394
|
});
|
|
395
|
+
};
|
|
396
|
+
const getOperationNameFromQuery = (query) => {
|
|
397
|
+
const regex = /(?:query|mutation)\s+(\w+)/;
|
|
398
|
+
const matches = query.match(regex);
|
|
399
|
+
return matches === null || matches === void 0 ? void 0 : matches[1];
|
|
377
400
|
};
|
|
378
401
|
|
|
379
402
|
/**
|
|
@@ -626,27 +649,27 @@
|
|
|
626
649
|
/**
|
|
627
650
|
* Search bar
|
|
628
651
|
*/
|
|
629
|
-
HomepageModule["Search"] = "
|
|
652
|
+
HomepageModule["Search"] = "SEARCH";
|
|
630
653
|
/**
|
|
631
654
|
* kPI watchlist module
|
|
632
655
|
*/
|
|
633
|
-
HomepageModule["Watchlist"] = "
|
|
656
|
+
HomepageModule["Watchlist"] = "WATCHLIST";
|
|
634
657
|
/**
|
|
635
658
|
* favorite objects
|
|
636
659
|
*/
|
|
637
|
-
HomepageModule["Favorite"] = "
|
|
660
|
+
HomepageModule["Favorite"] = "FAVORITE";
|
|
638
661
|
/**
|
|
639
662
|
* List of answers and liveboards
|
|
640
663
|
*/
|
|
641
|
-
HomepageModule["MyLibrary"] = "
|
|
664
|
+
HomepageModule["MyLibrary"] = "MY_LIBRARY";
|
|
642
665
|
/**
|
|
643
666
|
* Trending list
|
|
644
667
|
*/
|
|
645
|
-
HomepageModule["Trending"] = "
|
|
668
|
+
HomepageModule["Trending"] = "TRENDING";
|
|
646
669
|
/**
|
|
647
670
|
* Learning videos
|
|
648
671
|
*/
|
|
649
|
-
HomepageModule["Learning"] = "
|
|
672
|
+
HomepageModule["Learning"] = "LEARNING";
|
|
650
673
|
})(exports.HomepageModule || (exports.HomepageModule = {}));
|
|
651
674
|
(function (EmbedEvent) {
|
|
652
675
|
/**
|
|
@@ -2719,12 +2742,6 @@
|
|
|
2719
2742
|
*/
|
|
2720
2743
|
Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
|
|
2721
2744
|
})(exports.Action || (exports.Action = {}));
|
|
2722
|
-
// eslint-disable-next-line no-shadow
|
|
2723
|
-
var OperationType;
|
|
2724
|
-
(function (OperationType) {
|
|
2725
|
-
OperationType["GetChartWithData"] = "GetChartWithData";
|
|
2726
|
-
OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
|
|
2727
|
-
})(OperationType || (OperationType = {}));
|
|
2728
2745
|
var PrefetchFeatures;
|
|
2729
2746
|
(function (PrefetchFeatures) {
|
|
2730
2747
|
PrefetchFeatures["FullApp"] = "FullApp";
|
|
@@ -8840,6 +8857,7 @@
|
|
|
8840
8857
|
* @param sessionInfo
|
|
8841
8858
|
*/
|
|
8842
8859
|
function initMixpanel(sessionInfo) {
|
|
8860
|
+
var _a;
|
|
8843
8861
|
if (!sessionInfo || !sessionInfo.mixpanelToken) {
|
|
8844
8862
|
return;
|
|
8845
8863
|
}
|
|
@@ -8857,6 +8875,7 @@
|
|
|
8857
8875
|
clusterId: sessionInfo.clusterId,
|
|
8858
8876
|
clusterName: sessionInfo.clusterName,
|
|
8859
8877
|
releaseVersion: sessionInfo.releaseVersion,
|
|
8878
|
+
hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
|
|
8860
8879
|
});
|
|
8861
8880
|
isMixpanelInitialized = true;
|
|
8862
8881
|
emptyQueue();
|
|
@@ -10118,58 +10137,351 @@
|
|
|
10118
10137
|
|
|
10119
10138
|
/**
|
|
10120
10139
|
*
|
|
10121
|
-
* @param
|
|
10122
|
-
* @param query
|
|
10123
|
-
* @param
|
|
10140
|
+
* @param root0
|
|
10141
|
+
* @param root0.query
|
|
10142
|
+
* @param root0.variables
|
|
10143
|
+
* @param root0.thoughtSpotHost
|
|
10144
|
+
* @param root0.isCompositeQuery
|
|
10145
|
+
*/
|
|
10146
|
+
async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
|
|
10147
|
+
const operationName = getOperationNameFromQuery(query);
|
|
10148
|
+
try {
|
|
10149
|
+
const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
|
|
10150
|
+
method: 'POST',
|
|
10151
|
+
headers: {
|
|
10152
|
+
'content-type': 'application/json;charset=UTF-8',
|
|
10153
|
+
'x-requested-by': 'ThoughtSpot',
|
|
10154
|
+
accept: '*/*',
|
|
10155
|
+
'accept-language': 'en-us',
|
|
10156
|
+
},
|
|
10157
|
+
body: JSON.stringify({
|
|
10158
|
+
operationName,
|
|
10159
|
+
query,
|
|
10160
|
+
variables,
|
|
10161
|
+
}),
|
|
10162
|
+
credentials: 'include',
|
|
10163
|
+
});
|
|
10164
|
+
const result = await response.json();
|
|
10165
|
+
const dataValues = Object.values(result.data);
|
|
10166
|
+
return (isCompositeQuery) ? result.data : dataValues[0];
|
|
10167
|
+
}
|
|
10168
|
+
catch (error) {
|
|
10169
|
+
return error;
|
|
10170
|
+
}
|
|
10171
|
+
}
|
|
10172
|
+
|
|
10173
|
+
const getSourceDetailQuery = `
|
|
10174
|
+
query GetSourceDetail($ids: [GUID!]!) {
|
|
10175
|
+
getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
|
|
10176
|
+
id
|
|
10177
|
+
name
|
|
10178
|
+
description
|
|
10179
|
+
authorName
|
|
10180
|
+
authorDisplayName
|
|
10181
|
+
isExternal
|
|
10182
|
+
type
|
|
10183
|
+
created
|
|
10184
|
+
modified
|
|
10185
|
+
columns {
|
|
10186
|
+
id
|
|
10187
|
+
name
|
|
10188
|
+
author
|
|
10189
|
+
authorDisplayName
|
|
10190
|
+
description
|
|
10191
|
+
dataType
|
|
10192
|
+
type
|
|
10193
|
+
modified
|
|
10194
|
+
ownerName
|
|
10195
|
+
owner
|
|
10196
|
+
dataRecency
|
|
10197
|
+
sources {
|
|
10198
|
+
tableId
|
|
10199
|
+
tableName
|
|
10200
|
+
columnId
|
|
10201
|
+
columnName
|
|
10202
|
+
__typename
|
|
10203
|
+
}
|
|
10204
|
+
synonyms
|
|
10205
|
+
cohortAnswerId
|
|
10206
|
+
__typename
|
|
10207
|
+
}
|
|
10208
|
+
relationships
|
|
10209
|
+
destinationRelationships
|
|
10210
|
+
dataSourceId
|
|
10211
|
+
__typename
|
|
10212
|
+
}
|
|
10213
|
+
}
|
|
10214
|
+
`;
|
|
10215
|
+
const sourceDetailCache = new Map();
|
|
10216
|
+
/**
|
|
10217
|
+
*
|
|
10124
10218
|
* @param thoughtSpotHost
|
|
10219
|
+
* @param sourceId
|
|
10125
10220
|
*/
|
|
10126
|
-
function
|
|
10127
|
-
|
|
10128
|
-
|
|
10129
|
-
|
|
10130
|
-
|
|
10131
|
-
|
|
10132
|
-
|
|
10133
|
-
|
|
10134
|
-
|
|
10135
|
-
|
|
10136
|
-
|
|
10137
|
-
|
|
10138
|
-
|
|
10139
|
-
|
|
10140
|
-
|
|
10141
|
-
|
|
10142
|
-
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
10221
|
+
async function getSourceDetail(thoughtSpotHost, sourceId) {
|
|
10222
|
+
if (sourceDetailCache.has(sourceId)) {
|
|
10223
|
+
return sourceDetailCache.get(sourceId);
|
|
10224
|
+
}
|
|
10225
|
+
const details = await graphqlQuery({
|
|
10226
|
+
query: getSourceDetailQuery,
|
|
10227
|
+
variables: {
|
|
10228
|
+
ids: [sourceId],
|
|
10229
|
+
},
|
|
10230
|
+
thoughtSpotHost,
|
|
10231
|
+
});
|
|
10232
|
+
const souceDetails = details[0];
|
|
10233
|
+
sourceDetailCache.set(sourceId, souceDetails);
|
|
10234
|
+
return souceDetails;
|
|
10235
|
+
}
|
|
10236
|
+
|
|
10237
|
+
const bachSessionId = `
|
|
10238
|
+
id {
|
|
10239
|
+
sessionId
|
|
10240
|
+
genNo
|
|
10241
|
+
acSession {
|
|
10242
|
+
sessionId
|
|
10243
|
+
genNo
|
|
10244
|
+
}
|
|
10245
|
+
}
|
|
10246
|
+
`;
|
|
10247
|
+
const getUnaggregatedAnswerSession = `
|
|
10248
|
+
mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
|
|
10249
|
+
Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
|
|
10250
|
+
${bachSessionId}
|
|
10251
|
+
answer {
|
|
10252
|
+
visualizations {
|
|
10253
|
+
... on TableViz {
|
|
10254
|
+
columns {
|
|
10255
|
+
column {
|
|
10256
|
+
id
|
|
10257
|
+
name
|
|
10258
|
+
referencedColumns {
|
|
10259
|
+
guid
|
|
10260
|
+
displayName
|
|
10261
|
+
}
|
|
10262
|
+
}
|
|
10263
|
+
}
|
|
10264
|
+
}
|
|
10265
|
+
}
|
|
10266
|
+
}
|
|
10267
|
+
}
|
|
10268
|
+
}
|
|
10269
|
+
`;
|
|
10270
|
+
const removeColumns = `
|
|
10271
|
+
mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
|
|
10272
|
+
Answer__removeColumns(
|
|
10273
|
+
session: $session
|
|
10274
|
+
logicalColumnIds: $logicalColumnIds
|
|
10275
|
+
columnIds: $columnIds
|
|
10276
|
+
) {
|
|
10277
|
+
${bachSessionId}
|
|
10278
|
+
}
|
|
10279
|
+
}
|
|
10280
|
+
`;
|
|
10281
|
+
const addColumns = `
|
|
10282
|
+
mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
|
|
10283
|
+
Answer__addColumn(session: $session, columns: $columns) {
|
|
10284
|
+
${bachSessionId}
|
|
10285
|
+
}
|
|
10286
|
+
}
|
|
10287
|
+
`;
|
|
10288
|
+
const getAnswerData = `
|
|
10289
|
+
query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
|
|
10290
|
+
getAnswer(session: $session) {
|
|
10291
|
+
${bachSessionId}
|
|
10292
|
+
answer {
|
|
10293
|
+
id
|
|
10294
|
+
visualizations {
|
|
10295
|
+
id
|
|
10296
|
+
... on TableViz {
|
|
10297
|
+
columns {
|
|
10298
|
+
column {
|
|
10299
|
+
id
|
|
10300
|
+
name
|
|
10301
|
+
type
|
|
10302
|
+
aggregationType
|
|
10303
|
+
dataType
|
|
10304
|
+
}
|
|
10305
|
+
}
|
|
10306
|
+
data(deadline: $deadline, pagination: $dataPaginationParams)
|
|
10307
|
+
}
|
|
10308
|
+
}
|
|
10309
|
+
}
|
|
10310
|
+
}
|
|
10311
|
+
}
|
|
10312
|
+
`;
|
|
10313
|
+
|
|
10314
|
+
// eslint-disable-next-line no-shadow
|
|
10315
|
+
var OperationType;
|
|
10316
|
+
(function (OperationType) {
|
|
10317
|
+
OperationType["GetChartWithData"] = "GetChartWithData";
|
|
10318
|
+
OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
|
|
10319
|
+
})(OperationType || (OperationType = {}));
|
|
10320
|
+
/**
|
|
10321
|
+
* Class representing the answer service provided with the
|
|
10322
|
+
* custom action payload. This service could be used to run
|
|
10323
|
+
* graphql queries in the context of the answer on which the
|
|
10324
|
+
* custom action was triggered.
|
|
10325
|
+
*
|
|
10326
|
+
* @example
|
|
10327
|
+
* ```js
|
|
10328
|
+
* embed.on(EmbedEvent.CustomAction, e => {
|
|
10329
|
+
* const underlying = await e.answerService.getUnderlyingDataForPoint([
|
|
10330
|
+
* 'col name 1'
|
|
10331
|
+
* ]);
|
|
10332
|
+
* const data = await underlying.fetchData(0, 100);
|
|
10333
|
+
* })
|
|
10334
|
+
* ```
|
|
10335
|
+
* @version
|
|
10336
|
+
* ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
|
|
10337
|
+
*/
|
|
10338
|
+
class AnswerService {
|
|
10339
|
+
constructor(session, answer, thoughtSpotHost, selectedPoints) {
|
|
10340
|
+
this.session = session;
|
|
10341
|
+
this.answer = answer;
|
|
10342
|
+
this.thoughtSpotHost = thoughtSpotHost;
|
|
10343
|
+
this.selectedPoints = selectedPoints;
|
|
10344
|
+
this.session = removeTypename(session);
|
|
10345
|
+
}
|
|
10346
|
+
async getSourceDetail() {
|
|
10347
|
+
const sourceId = this.answer.sources[0].header.guid;
|
|
10348
|
+
return getSourceDetail(this.thoughtSpotHost, sourceId);
|
|
10349
|
+
}
|
|
10350
|
+
async removeColumns(columnIds) {
|
|
10351
|
+
return this.executeQuery(removeColumns, {
|
|
10352
|
+
logicalColumnIds: columnIds,
|
|
10353
|
+
});
|
|
10354
|
+
}
|
|
10355
|
+
async addColumns(columnIds) {
|
|
10356
|
+
return this.executeQuery(addColumns, {
|
|
10357
|
+
columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
|
|
10358
|
+
});
|
|
10359
|
+
}
|
|
10360
|
+
async fetchData(offset = 0, size = 1000) {
|
|
10361
|
+
const { answer } = await this.executeQuery(getAnswerData, {
|
|
10362
|
+
deadline: 0,
|
|
10363
|
+
dataPaginationParams: {
|
|
10364
|
+
isClientPaginated: true,
|
|
10365
|
+
offset,
|
|
10366
|
+
size,
|
|
10367
|
+
},
|
|
10368
|
+
});
|
|
10369
|
+
const { columns, data } = answer.visualizations[0];
|
|
10370
|
+
return {
|
|
10371
|
+
columns,
|
|
10372
|
+
data,
|
|
10373
|
+
};
|
|
10374
|
+
}
|
|
10375
|
+
/**
|
|
10376
|
+
*
|
|
10377
|
+
* @param userLocale
|
|
10378
|
+
* @param omitInfo Omit the download Info on top of the CSV
|
|
10379
|
+
* @returns Response
|
|
10380
|
+
*/
|
|
10381
|
+
async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
|
|
10382
|
+
if (omitInfo) {
|
|
10383
|
+
console.warn('omitInfo not supported yet.');
|
|
10147
10384
|
}
|
|
10148
|
-
|
|
10149
|
-
|
|
10385
|
+
const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
|
|
10386
|
+
return fetch(fetchUrl, {
|
|
10387
|
+
credentials: 'include',
|
|
10388
|
+
});
|
|
10389
|
+
}
|
|
10390
|
+
async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
|
|
10391
|
+
if (!selectedPoints && !this.selectedPoints) {
|
|
10392
|
+
throw new Error('Needs to be triggered in context of a point');
|
|
10150
10393
|
}
|
|
10151
|
-
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10394
|
+
if (!selectedPoints) {
|
|
10395
|
+
selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
|
|
10396
|
+
}
|
|
10397
|
+
const sourceDetail = await this.getSourceDetail();
|
|
10398
|
+
const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
|
|
10399
|
+
const unAggAnswer = await graphqlQuery({
|
|
10400
|
+
query: getUnaggregatedAnswerSession,
|
|
10401
|
+
variables: {
|
|
10402
|
+
session: this.session,
|
|
10403
|
+
columns: selectedPoints,
|
|
10404
|
+
},
|
|
10405
|
+
thoughtSpotHost: this.thoughtSpotHost,
|
|
10406
|
+
});
|
|
10407
|
+
const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
|
|
10408
|
+
const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
|
|
10409
|
+
.map((c) => c.column.referencedColumns[0].guid));
|
|
10410
|
+
const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
|
|
10411
|
+
if (columnsToAdd.length) {
|
|
10412
|
+
await unaggAnswerSession.addColumns(columnsToAdd);
|
|
10413
|
+
}
|
|
10414
|
+
const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
|
|
10415
|
+
if (columnsToRemove.length) {
|
|
10416
|
+
await unaggAnswerSession.removeColumns(columnsToRemove);
|
|
10417
|
+
}
|
|
10418
|
+
return unaggAnswerSession;
|
|
10419
|
+
}
|
|
10420
|
+
async executeQuery(query, variables) {
|
|
10421
|
+
const data = await graphqlQuery({
|
|
10422
|
+
query,
|
|
10423
|
+
variables: {
|
|
10424
|
+
session: this.session,
|
|
10425
|
+
...variables,
|
|
10426
|
+
},
|
|
10427
|
+
thoughtSpotHost: this.thoughtSpotHost,
|
|
10428
|
+
isCompositeQuery: false,
|
|
10429
|
+
});
|
|
10430
|
+
this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
|
|
10431
|
+
return data;
|
|
10432
|
+
}
|
|
10433
|
+
getSession() {
|
|
10434
|
+
return this.session;
|
|
10435
|
+
}
|
|
10436
|
+
}
|
|
10437
|
+
/**
|
|
10438
|
+
*
|
|
10439
|
+
* @param sourceDetail
|
|
10440
|
+
* @param colNames
|
|
10441
|
+
*/
|
|
10442
|
+
function getGuidsFromColumnNames(sourceDetail, colNames) {
|
|
10443
|
+
const cols = sourceDetail.columns.reduce((colSet, col) => {
|
|
10444
|
+
colSet[col.name] = col;
|
|
10445
|
+
return colSet;
|
|
10446
|
+
}, {});
|
|
10447
|
+
return new Set(colNames.map((colName) => {
|
|
10448
|
+
const col = cols[colName];
|
|
10449
|
+
return col.id;
|
|
10450
|
+
}));
|
|
10451
|
+
}
|
|
10452
|
+
/**
|
|
10453
|
+
*
|
|
10454
|
+
* @param selectedPoints
|
|
10455
|
+
*/
|
|
10456
|
+
function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
|
|
10457
|
+
const underlyingDataPoint = [];
|
|
10458
|
+
/**
|
|
10459
|
+
*
|
|
10460
|
+
* @param colVal
|
|
10461
|
+
*/
|
|
10462
|
+
function addPointFromColVal(colVal) {
|
|
10463
|
+
const dataType = colVal.column.dataType;
|
|
10464
|
+
const id = colVal.column.id;
|
|
10465
|
+
let dataValue;
|
|
10466
|
+
if (dataType === 'DATE') {
|
|
10467
|
+
dataValue = [{
|
|
10468
|
+
epochRange: {
|
|
10469
|
+
startEpoch: colVal.value,
|
|
10470
|
+
},
|
|
10471
|
+
}];
|
|
10155
10472
|
}
|
|
10156
10473
|
else {
|
|
10157
|
-
|
|
10158
|
-
dataPaginationParams: {
|
|
10159
|
-
isClientPaginated: true,
|
|
10160
|
-
offset: offset * batchSize,
|
|
10161
|
-
size: batchSize,
|
|
10162
|
-
},
|
|
10163
|
-
};
|
|
10474
|
+
dataValue = [{ value: colVal.value }];
|
|
10164
10475
|
}
|
|
10165
|
-
|
|
10166
|
-
|
|
10167
|
-
|
|
10476
|
+
underlyingDataPoint.push({
|
|
10477
|
+
columnId: colVal.column.id,
|
|
10478
|
+
dataValue,
|
|
10168
10479
|
});
|
|
10169
|
-
}
|
|
10170
|
-
|
|
10171
|
-
|
|
10172
|
-
};
|
|
10480
|
+
}
|
|
10481
|
+
selectedPoints.forEach((p) => {
|
|
10482
|
+
p.selectedAttributes.forEach(addPointFromColVal);
|
|
10483
|
+
});
|
|
10484
|
+
return underlyingDataPoint;
|
|
10173
10485
|
}
|
|
10174
10486
|
|
|
10175
10487
|
/**
|
|
@@ -10178,16 +10490,12 @@
|
|
|
10178
10490
|
* @param thoughtSpotHost
|
|
10179
10491
|
*/
|
|
10180
10492
|
function processCustomAction(e, thoughtSpotHost) {
|
|
10181
|
-
|
|
10182
|
-
|
|
10183
|
-
|
|
10184
|
-
|
|
10185
|
-
|
|
10186
|
-
|
|
10187
|
-
answerService,
|
|
10188
|
-
};
|
|
10189
|
-
}
|
|
10190
|
-
return e;
|
|
10493
|
+
const { session, embedAnswerData, contextMenuPoints } = e.data;
|
|
10494
|
+
const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
|
|
10495
|
+
return {
|
|
10496
|
+
...e,
|
|
10497
|
+
answerService,
|
|
10498
|
+
};
|
|
10191
10499
|
}
|
|
10192
10500
|
/**
|
|
10193
10501
|
*
|
|
@@ -10332,7 +10640,7 @@
|
|
|
10332
10640
|
});
|
|
10333
10641
|
}
|
|
10334
10642
|
|
|
10335
|
-
var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-
|
|
10643
|
+
var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-preRender.0";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports$1={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false; tsc -p . --incremental false --module commonjs --outDir cjs",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts","bundle-dts":"dts-bundle --name ../../dist/visual-embed-sdk --main lib/src/index.d.ts --outputAsModuleFolder=true","bundle-dts-react":"dts-bundle --name ../../../dist/visual-embed-sdk-react --main lib/src/react/index.d.ts --outputAsModuleFolder=true","bundle-dts-react-full":"dts-bundle --name ../../../dist/visual-embed-sdk-react-full --main lib/src/react/all-types-export.d.ts --outputAsModuleFolder=true",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js --runInBand","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs",posttest:"cat ./coverage/sdk/lcov.info | coveralls","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1",dompurify:"^2.3.4","eslint-plugin-comment-length":"^0.9.2","eslint-plugin-jsdoc":"^40.1.0",eventemitter3:"^4.0.7","gatsby-plugin-vercel":"^1.0.3","html-react-parser":"^1.4.12",lodash:"^4.17.21","mixpanel-browser":"^2.45.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^8.2.6","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","current-git-branch":"^1.1.0","dts-bundle":"^0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.13.1","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"6.7.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-fetch-mock":"^3.0.3",jsdom:"^17.0.0","node-sass":"^8.0.0",prettier:"2.1.2",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports$1,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.js",limit:"40 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
|
|
10336
10644
|
|
|
10337
10645
|
/**
|
|
10338
10646
|
* Copyright (c) 2022
|
|
@@ -10364,6 +10672,7 @@
|
|
|
10364
10672
|
class TsEmbed {
|
|
10365
10673
|
constructor(domSelector, viewConfig) {
|
|
10366
10674
|
this.isAppInitialized = false;
|
|
10675
|
+
this.embedComponentType = 'TsEmbed';
|
|
10367
10676
|
/**
|
|
10368
10677
|
* Should we encode URL Query Params using base64 encoding which thoughtspot
|
|
10369
10678
|
* will generate for embedding. This provides additional security to
|
|
@@ -10373,6 +10682,7 @@
|
|
|
10373
10682
|
*/
|
|
10374
10683
|
this.shouldEncodeUrlQueryParams = false;
|
|
10375
10684
|
this.defaultHiddenActions = [exports.Action.ReportError];
|
|
10685
|
+
this.subscribedListeners = {};
|
|
10376
10686
|
/**
|
|
10377
10687
|
* Send Custom style as part of payload of APP_INIT
|
|
10378
10688
|
*
|
|
@@ -10395,6 +10705,7 @@
|
|
|
10395
10705
|
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
10396
10706
|
: null,
|
|
10397
10707
|
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
10708
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
10398
10709
|
hostConfig: this.embedConfig.hostConfig,
|
|
10399
10710
|
hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
|
|
10400
10711
|
? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
|
|
@@ -10444,6 +10755,7 @@
|
|
|
10444
10755
|
this.registerAppInit();
|
|
10445
10756
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
10446
10757
|
...viewConfig,
|
|
10758
|
+
embedComponentType: this.embedComponentType,
|
|
10447
10759
|
});
|
|
10448
10760
|
}
|
|
10449
10761
|
/**
|
|
@@ -10512,23 +10824,36 @@
|
|
|
10512
10824
|
* and executes the registered callbacks accordingly.
|
|
10513
10825
|
*/
|
|
10514
10826
|
subscribeToEvents() {
|
|
10515
|
-
|
|
10827
|
+
const messageEventListener = (event) => {
|
|
10516
10828
|
const eventType = this.getEventType(event);
|
|
10517
10829
|
const eventPort = this.getEventPort(event);
|
|
10518
10830
|
const eventData = this.formatEventData(event, eventType);
|
|
10519
10831
|
if (event.source === this.iFrame.contentWindow) {
|
|
10520
10832
|
this.executeCallbacks(eventType, processEventData(eventType, eventData, this.thoughtSpotHost, this.el), eventPort);
|
|
10521
10833
|
}
|
|
10522
|
-
}
|
|
10523
|
-
window.addEventListener('
|
|
10834
|
+
};
|
|
10835
|
+
window.addEventListener('message', messageEventListener);
|
|
10836
|
+
const onlineEventListener = (e) => {
|
|
10524
10837
|
this.trigger(exports.HostEvent.Reload);
|
|
10525
|
-
}
|
|
10526
|
-
window.addEventListener('
|
|
10838
|
+
};
|
|
10839
|
+
window.addEventListener('online', onlineEventListener);
|
|
10840
|
+
const offlineEventListener = (e) => {
|
|
10527
10841
|
const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
|
|
10528
10842
|
this.executeCallbacks(exports.EmbedEvent.Error, {
|
|
10529
10843
|
offlineWarning,
|
|
10530
10844
|
});
|
|
10531
10845
|
console.warn(offlineWarning);
|
|
10846
|
+
};
|
|
10847
|
+
window.addEventListener('offline', offlineEventListener);
|
|
10848
|
+
this.subscribedListeners = {
|
|
10849
|
+
message: messageEventListener,
|
|
10850
|
+
online: onlineEventListener,
|
|
10851
|
+
offline: offlineEventListener,
|
|
10852
|
+
};
|
|
10853
|
+
}
|
|
10854
|
+
unsubscribeToEvents() {
|
|
10855
|
+
Object.keys(this.subscribedListeners).forEach((key) => {
|
|
10856
|
+
window.removeEventListener(key, this.subscribedListeners[key]);
|
|
10532
10857
|
});
|
|
10533
10858
|
}
|
|
10534
10859
|
/**
|
|
@@ -10706,8 +11031,10 @@
|
|
|
10706
11031
|
*
|
|
10707
11032
|
* @param url
|
|
10708
11033
|
* @param frameOptions
|
|
11034
|
+
* @param showPreRender
|
|
11035
|
+
* @param showPreRenderByDefault
|
|
10709
11036
|
*/
|
|
10710
|
-
async renderIFrame(url) {
|
|
11037
|
+
async renderIFrame(url, showPreRenderByDefault = false) {
|
|
10711
11038
|
if (this.isError) {
|
|
10712
11039
|
return null;
|
|
10713
11040
|
}
|
|
@@ -10756,6 +11083,9 @@
|
|
|
10756
11083
|
});
|
|
10757
11084
|
if (this.isPreRendered) {
|
|
10758
11085
|
this.insertIntoDOMForPreRender(this.iFrame);
|
|
11086
|
+
if (showPreRenderByDefault) {
|
|
11087
|
+
this.showPreRender();
|
|
11088
|
+
}
|
|
10759
11089
|
}
|
|
10760
11090
|
else {
|
|
10761
11091
|
this.insertIntoDOM(this.iFrame);
|
|
@@ -10794,11 +11124,10 @@
|
|
|
10794
11124
|
throw new Error('Pre render id is required');
|
|
10795
11125
|
}
|
|
10796
11126
|
const preRenderIds = this.getPreRenderIds();
|
|
10797
|
-
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
}
|
|
11127
|
+
[preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
|
|
11128
|
+
.map((id) => document.getElementById(id))
|
|
11129
|
+
.filter((element) => element)
|
|
11130
|
+
.forEach((existingElement) => existingElement.remove());
|
|
10802
11131
|
const preRenderWrapper = document.createElement('div');
|
|
10803
11132
|
preRenderWrapper.id = preRenderIds.wrapper;
|
|
10804
11133
|
setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
|
|
@@ -10813,7 +11142,7 @@
|
|
|
10813
11142
|
this.preRenderChild = child;
|
|
10814
11143
|
return preRenderWrapper;
|
|
10815
11144
|
}
|
|
10816
|
-
|
|
11145
|
+
connectPreRendered() {
|
|
10817
11146
|
const preRenderIds = this.getPreRenderIds();
|
|
10818
11147
|
this.preRenderWrapper = this.preRenderWrapper
|
|
10819
11148
|
|| document.getElementById(preRenderIds.wrapper);
|
|
@@ -10821,6 +11150,10 @@
|
|
|
10821
11150
|
|| document.getElementById(preRenderIds.shield);
|
|
10822
11151
|
this.preRenderChild = this.preRenderChild
|
|
10823
11152
|
|| document.getElementById(preRenderIds.child);
|
|
11153
|
+
this.iFrame = this.preRenderChild;
|
|
11154
|
+
return this.isPreRenderAvailable();
|
|
11155
|
+
}
|
|
11156
|
+
isPreRenderAvailable() {
|
|
10824
11157
|
return !!this.preRenderWrapper && !!this.preRenderShield
|
|
10825
11158
|
&& !!this.preRenderChild;
|
|
10826
11159
|
}
|
|
@@ -10863,18 +11196,23 @@
|
|
|
10863
11196
|
top: '0',
|
|
10864
11197
|
left: '0',
|
|
10865
11198
|
});
|
|
11199
|
+
this.unsubscribeToEvents();
|
|
10866
11200
|
}
|
|
10867
11201
|
showPreRender() {
|
|
10868
11202
|
if (!this.isPreRenderAvailable()) {
|
|
10869
|
-
|
|
10870
|
-
|
|
10871
|
-
|
|
10872
|
-
|
|
10873
|
-
|
|
11203
|
+
const isAvailable = this.connectPreRendered();
|
|
11204
|
+
if (!isAvailable) {
|
|
11205
|
+
// if the Embed component is nor preRendered , Render it now and
|
|
11206
|
+
// show it (hide is defalt behaviour)
|
|
11207
|
+
console.log('No preRender found, creating new ');
|
|
11208
|
+
this.preRender(true);
|
|
11209
|
+
return;
|
|
11210
|
+
}
|
|
10874
11211
|
}
|
|
10875
11212
|
this.syncPreRenderStyle();
|
|
10876
11213
|
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
|
|
10877
11214
|
setStyleProperties(this.preRenderShield, { zIndex: '-1' });
|
|
11215
|
+
this.subscribeToEvents();
|
|
10878
11216
|
}
|
|
10879
11217
|
syncPreRenderStyle() {
|
|
10880
11218
|
if (!this.el) {
|
|
@@ -11102,7 +11440,7 @@
|
|
|
11102
11440
|
/**
|
|
11103
11441
|
* Creates the preRender shell
|
|
11104
11442
|
*/
|
|
11105
|
-
preRender() {
|
|
11443
|
+
preRender(showPreRenderByDefault = false) {
|
|
11106
11444
|
this.isPreRendered = true;
|
|
11107
11445
|
return this;
|
|
11108
11446
|
}
|
|
@@ -11179,8 +11517,8 @@
|
|
|
11179
11517
|
*
|
|
11180
11518
|
* @param iframeSrc
|
|
11181
11519
|
*/
|
|
11182
|
-
renderV1Embed(iframeSrc) {
|
|
11183
|
-
return this.renderIFrame(iframeSrc);
|
|
11520
|
+
renderV1Embed(iframeSrc, showPreRenderByDefault = false) {
|
|
11521
|
+
return this.renderIFrame(iframeSrc, showPreRenderByDefault);
|
|
11184
11522
|
}
|
|
11185
11523
|
getRootIframeSrc() {
|
|
11186
11524
|
const queryParams = this.getEmbedParams();
|
|
@@ -11226,6 +11564,7 @@
|
|
|
11226
11564
|
class SearchBarEmbed extends TsEmbed {
|
|
11227
11565
|
constructor(domSelector, viewConfig) {
|
|
11228
11566
|
super(domSelector);
|
|
11567
|
+
this.embedComponentType = 'SearchBarEmbed';
|
|
11229
11568
|
this.viewConfig = viewConfig;
|
|
11230
11569
|
}
|
|
11231
11570
|
/**
|
|
@@ -11304,6 +11643,7 @@
|
|
|
11304
11643
|
// eslint-disable-next-line no-useless-constructor
|
|
11305
11644
|
constructor(domSelector, viewConfig) {
|
|
11306
11645
|
super(domSelector, viewConfig);
|
|
11646
|
+
this.embedComponentType = 'SageEmbed';
|
|
11307
11647
|
}
|
|
11308
11648
|
/**
|
|
11309
11649
|
* Constructs a map of parameters to be passed on to the
|
|
@@ -11355,12 +11695,18 @@
|
|
|
11355
11695
|
/**
|
|
11356
11696
|
* Render the embedded ThoughtSpot Sage
|
|
11357
11697
|
*
|
|
11698
|
+
* @param showPreRenderByDefault
|
|
11358
11699
|
* @returns {SageEmbed} Eureka/Sage embed
|
|
11359
11700
|
*/
|
|
11360
|
-
render() {
|
|
11701
|
+
render(showPreRenderByDefault = false) {
|
|
11361
11702
|
super.render();
|
|
11362
11703
|
const src = this.getIFrameSrc();
|
|
11363
|
-
this.renderV1Embed(src);
|
|
11704
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
11705
|
+
return this;
|
|
11706
|
+
}
|
|
11707
|
+
preRender(showPreRenderByDefault = false) {
|
|
11708
|
+
super.preRender(showPreRenderByDefault);
|
|
11709
|
+
this.render(showPreRenderByDefault);
|
|
11364
11710
|
return this;
|
|
11365
11711
|
}
|
|
11366
11712
|
}
|
|
@@ -11388,6 +11734,7 @@
|
|
|
11388
11734
|
class SearchEmbed extends TsEmbed {
|
|
11389
11735
|
constructor(domSelector, viewConfig) {
|
|
11390
11736
|
super(domSelector);
|
|
11737
|
+
this.embedComponentType = 'SearchEmbed';
|
|
11391
11738
|
this.viewConfig = viewConfig;
|
|
11392
11739
|
}
|
|
11393
11740
|
/**
|
|
@@ -11468,12 +11815,14 @@
|
|
|
11468
11815
|
}
|
|
11469
11816
|
/**
|
|
11470
11817
|
* Render the embedded ThoughtSpot search
|
|
11818
|
+
*
|
|
11819
|
+
* @param showPreRenderByDefault
|
|
11471
11820
|
*/
|
|
11472
|
-
render() {
|
|
11821
|
+
render(showPreRenderByDefault = false) {
|
|
11473
11822
|
super.render();
|
|
11474
11823
|
const { answerId } = this.viewConfig;
|
|
11475
11824
|
const src = this.getIFrameSrc(answerId);
|
|
11476
|
-
this.renderIFrame(src);
|
|
11825
|
+
this.renderIFrame(src, showPreRenderByDefault);
|
|
11477
11826
|
getAuthPromise().then(() => {
|
|
11478
11827
|
if (checkReleaseVersionInBeta(getReleaseVersion(), getEmbedConfig().suppressSearchEmbedBetaWarning)) {
|
|
11479
11828
|
alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
|
|
@@ -11481,6 +11830,11 @@
|
|
|
11481
11830
|
});
|
|
11482
11831
|
return this;
|
|
11483
11832
|
}
|
|
11833
|
+
preRender(showPreRenderByDefault = false) {
|
|
11834
|
+
super.preRender(showPreRenderByDefault);
|
|
11835
|
+
this.render(showPreRenderByDefault);
|
|
11836
|
+
return this;
|
|
11837
|
+
}
|
|
11484
11838
|
}
|
|
11485
11839
|
|
|
11486
11840
|
/**
|
|
@@ -11533,6 +11887,7 @@
|
|
|
11533
11887
|
constructor(domSelector, viewConfig) {
|
|
11534
11888
|
super(domSelector, viewConfig);
|
|
11535
11889
|
this.defaultHeight = '100%';
|
|
11890
|
+
this.embedComponentType = 'AppEmbed';
|
|
11536
11891
|
/**
|
|
11537
11892
|
* Set the iframe height as per the computed height received
|
|
11538
11893
|
* from the ThoughtSpot app.
|
|
@@ -11684,10 +12039,15 @@
|
|
|
11684
12039
|
* @param renderOptions An object containing the page ID
|
|
11685
12040
|
* to be embedded.
|
|
11686
12041
|
*/
|
|
11687
|
-
render() {
|
|
12042
|
+
render(showPreRenderByDefault = false) {
|
|
11688
12043
|
super.render();
|
|
11689
12044
|
const src = this.getIFrameSrc();
|
|
11690
|
-
this.renderV1Embed(src);
|
|
12045
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
12046
|
+
return this;
|
|
12047
|
+
}
|
|
12048
|
+
preRender(showPreRenderByDefault = false) {
|
|
12049
|
+
super.preRender(showPreRenderByDefault);
|
|
12050
|
+
this.render(showPreRenderByDefault);
|
|
11691
12051
|
return this;
|
|
11692
12052
|
}
|
|
11693
12053
|
}
|
|
@@ -11722,6 +12082,7 @@
|
|
|
11722
12082
|
constructor(domSelector, viewConfig) {
|
|
11723
12083
|
super(domSelector, viewConfig);
|
|
11724
12084
|
this.defaultHeight = 500;
|
|
12085
|
+
this.embedComponentType = 'LiveboardEmbed';
|
|
11725
12086
|
/**
|
|
11726
12087
|
* Set the iframe height as per the computed height received
|
|
11727
12088
|
* from the ThoughtSpot app.
|
|
@@ -11843,15 +12204,15 @@
|
|
|
11843
12204
|
* @param renderOptions An object specifying the Liveboard ID,
|
|
11844
12205
|
* visualization ID and the runtime filters.
|
|
11845
12206
|
*/
|
|
11846
|
-
render() {
|
|
12207
|
+
render(showPreRenderByDefault = false) {
|
|
11847
12208
|
super.render();
|
|
11848
12209
|
const src = this.getIFrameSrc();
|
|
11849
|
-
this.renderV1Embed(src);
|
|
12210
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
11850
12211
|
return this;
|
|
11851
12212
|
}
|
|
11852
|
-
preRender() {
|
|
11853
|
-
super.preRender();
|
|
11854
|
-
this.render();
|
|
12213
|
+
preRender(showPreRenderByDefault = false) {
|
|
12214
|
+
super.preRender(showPreRenderByDefault);
|
|
12215
|
+
this.render(showPreRenderByDefault);
|
|
11855
12216
|
return this;
|
|
11856
12217
|
}
|
|
11857
12218
|
navigateToLiveboard(liveboardId, vizId, activeTabId) {
|
|
@@ -11896,9 +12257,7 @@
|
|
|
11896
12257
|
const tsEmbed = new EmbedConstructor(ref.current, deepMerge({
|
|
11897
12258
|
insertAsSibling: viewConfig.insertAsSibling,
|
|
11898
12259
|
frameParams: {
|
|
11899
|
-
class: viewConfig.insertAsSibling
|
|
11900
|
-
? className || ''
|
|
11901
|
-
: '',
|
|
12260
|
+
class: viewConfig.insertAsSibling ? className || '' : '',
|
|
11902
12261
|
},
|
|
11903
12262
|
}, viewConfig));
|
|
11904
12263
|
Object.keys(listeners).forEach((eventName) => {
|
|
@@ -11926,9 +12285,7 @@
|
|
|
11926
12285
|
}
|
|
11927
12286
|
};
|
|
11928
12287
|
}, [viewConfig, listeners]);
|
|
11929
|
-
return
|
|
11930
|
-
? React__default['default'].createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })
|
|
11931
|
-
: React__default['default'].createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
|
|
12288
|
+
return viewConfig.insertAsSibling ? (React__default['default'].createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })) : (React__default['default'].createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
|
|
11932
12289
|
});
|
|
11933
12290
|
/**
|
|
11934
12291
|
* React component for Search Embed.
|
|
@@ -11959,6 +12316,7 @@
|
|
|
11959
12316
|
* ```
|
|
11960
12317
|
*/
|
|
11961
12318
|
const AppEmbed$1 = componentFactory(AppEmbed);
|
|
12319
|
+
const PreRenderedAppEmbed = componentFactory(AppEmbed, true);
|
|
11962
12320
|
/**
|
|
11963
12321
|
* React component for Liveboard embed.
|
|
11964
12322
|
*
|
|
@@ -11976,6 +12334,8 @@
|
|
|
11976
12334
|
*/
|
|
11977
12335
|
const LiveboardEmbed$1 = componentFactory(LiveboardEmbed);
|
|
11978
12336
|
const PinboardEmbed = LiveboardEmbed$1;
|
|
12337
|
+
const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
|
|
12338
|
+
const PreRenderedPinboardEmbed = PreRenderedLiveboardEmbed;
|
|
11979
12339
|
/**
|
|
11980
12340
|
* React component for Search bar embed.
|
|
11981
12341
|
*
|
|
@@ -11990,6 +12350,7 @@
|
|
|
11990
12350
|
* ```
|
|
11991
12351
|
*/
|
|
11992
12352
|
const SearchBarEmbed$1 = componentFactory(SearchBarEmbed);
|
|
12353
|
+
const PreRenderedSearchBarEmbed = componentFactory(SearchBarEmbed, true);
|
|
11993
12354
|
/**
|
|
11994
12355
|
* React component for LLM based search Sage embed.
|
|
11995
12356
|
*
|
|
@@ -12004,6 +12365,7 @@
|
|
|
12004
12365
|
* ```
|
|
12005
12366
|
*/
|
|
12006
12367
|
const SageEmbed$1 = componentFactory(SageEmbed);
|
|
12368
|
+
const PreRenderedSageEmbed = componentFactory(SageEmbed, true);
|
|
12007
12369
|
/**
|
|
12008
12370
|
* Get a reference to the embed component to trigger events on the component.
|
|
12009
12371
|
*
|
|
@@ -12023,13 +12385,16 @@
|
|
|
12023
12385
|
*/
|
|
12024
12386
|
function useEmbedRef() {
|
|
12025
12387
|
return React__default['default'].useRef(null);
|
|
12026
|
-
}
|
|
12027
|
-
const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
|
|
12388
|
+
}
|
|
12028
12389
|
|
|
12029
12390
|
exports.AppEmbed = AppEmbed$1;
|
|
12030
12391
|
exports.LiveboardEmbed = LiveboardEmbed$1;
|
|
12031
12392
|
exports.PinboardEmbed = PinboardEmbed;
|
|
12393
|
+
exports.PreRenderedAppEmbed = PreRenderedAppEmbed;
|
|
12032
12394
|
exports.PreRenderedLiveboardEmbed = PreRenderedLiveboardEmbed;
|
|
12395
|
+
exports.PreRenderedPinboardEmbed = PreRenderedPinboardEmbed;
|
|
12396
|
+
exports.PreRenderedSageEmbed = PreRenderedSageEmbed;
|
|
12397
|
+
exports.PreRenderedSearchBarEmbed = PreRenderedSearchBarEmbed;
|
|
12033
12398
|
exports.SageEmbed = SageEmbed$1;
|
|
12034
12399
|
exports.SearchBarEmbed = SearchBarEmbed$1;
|
|
12035
12400
|
exports.SearchEmbed = SearchEmbed$1;
|