@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.es.js
CHANGED
|
@@ -1,3 +1,47 @@
|
|
|
1
|
+
// istanbul ignore next
|
|
2
|
+
const isObject = (obj) => {
|
|
3
|
+
if (typeof obj === "object" && obj !== null) {
|
|
4
|
+
if (typeof Object.getPrototypeOf === "function") {
|
|
5
|
+
const prototype = Object.getPrototypeOf(obj);
|
|
6
|
+
return prototype === Object.prototype || prototype === null;
|
|
7
|
+
}
|
|
8
|
+
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
};
|
|
12
|
+
const merge = (...objects) => objects.reduce((result, current) => {
|
|
13
|
+
if (Array.isArray(current)) {
|
|
14
|
+
throw new TypeError("Arguments provided to ts-deepmerge must be objects, not arrays.");
|
|
15
|
+
}
|
|
16
|
+
Object.keys(current).forEach((key) => {
|
|
17
|
+
if (["__proto__", "constructor", "prototype"].includes(key)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(result[key]) && Array.isArray(current[key])) {
|
|
21
|
+
result[key] = merge.options.mergeArrays
|
|
22
|
+
? Array.from(new Set(result[key].concat(current[key])))
|
|
23
|
+
: current[key];
|
|
24
|
+
}
|
|
25
|
+
else if (isObject(result[key]) && isObject(current[key])) {
|
|
26
|
+
result[key] = merge(result[key], current[key]);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
result[key] = current[key];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return result;
|
|
33
|
+
}, {});
|
|
34
|
+
const defaultOptions = {
|
|
35
|
+
mergeArrays: true,
|
|
36
|
+
};
|
|
37
|
+
merge.options = defaultOptions;
|
|
38
|
+
merge.withOptions = (options, ...objects) => {
|
|
39
|
+
merge.options = Object.assign({ mergeArrays: true }, options);
|
|
40
|
+
const result = merge(...objects);
|
|
41
|
+
merge.options = defaultOptions;
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
|
|
1
45
|
/**
|
|
2
46
|
* Copyright (c) 2023
|
|
3
47
|
*
|
|
@@ -194,6 +238,25 @@ const getRuntimeFilters = (runtimefilters) => getFilterQuery(runtimefilters || [
|
|
|
194
238
|
function getDOMNode(domSelector) {
|
|
195
239
|
return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
|
|
196
240
|
}
|
|
241
|
+
const deepMerge = (target, source) => merge(target, source);
|
|
242
|
+
/**
|
|
243
|
+
*
|
|
244
|
+
* @param obj
|
|
245
|
+
*/
|
|
246
|
+
function removeTypename(obj) {
|
|
247
|
+
if (!obj || typeof obj !== 'object')
|
|
248
|
+
return obj;
|
|
249
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
250
|
+
for (const key in obj) {
|
|
251
|
+
if (key === '__typename') {
|
|
252
|
+
delete obj[key];
|
|
253
|
+
}
|
|
254
|
+
else if (typeof obj[key] === 'object') {
|
|
255
|
+
removeTypename(obj[key]);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return obj;
|
|
259
|
+
}
|
|
197
260
|
const setStyleProperties = (element, styleProperties) => {
|
|
198
261
|
if (!element || !styleProperties)
|
|
199
262
|
return;
|
|
@@ -207,6 +270,11 @@ const removeStyleProperties = (element, styleProperties) => {
|
|
|
207
270
|
styleProperties.forEach((styleProperty) => {
|
|
208
271
|
element.style.removeProperty(styleProperty);
|
|
209
272
|
});
|
|
273
|
+
};
|
|
274
|
+
const getOperationNameFromQuery = (query) => {
|
|
275
|
+
const regex = /(?:query|mutation)\s+(\w+)/;
|
|
276
|
+
const matches = query.match(regex);
|
|
277
|
+
return matches === null || matches === void 0 ? void 0 : matches[1];
|
|
210
278
|
};
|
|
211
279
|
|
|
212
280
|
/**
|
|
@@ -470,27 +538,27 @@ var HomepageModule;
|
|
|
470
538
|
/**
|
|
471
539
|
* Search bar
|
|
472
540
|
*/
|
|
473
|
-
HomepageModule["Search"] = "
|
|
541
|
+
HomepageModule["Search"] = "SEARCH";
|
|
474
542
|
/**
|
|
475
543
|
* kPI watchlist module
|
|
476
544
|
*/
|
|
477
|
-
HomepageModule["Watchlist"] = "
|
|
545
|
+
HomepageModule["Watchlist"] = "WATCHLIST";
|
|
478
546
|
/**
|
|
479
547
|
* favorite objects
|
|
480
548
|
*/
|
|
481
|
-
HomepageModule["Favorite"] = "
|
|
549
|
+
HomepageModule["Favorite"] = "FAVORITE";
|
|
482
550
|
/**
|
|
483
551
|
* List of answers and liveboards
|
|
484
552
|
*/
|
|
485
|
-
HomepageModule["MyLibrary"] = "
|
|
553
|
+
HomepageModule["MyLibrary"] = "MY_LIBRARY";
|
|
486
554
|
/**
|
|
487
555
|
* Trending list
|
|
488
556
|
*/
|
|
489
|
-
HomepageModule["Trending"] = "
|
|
557
|
+
HomepageModule["Trending"] = "TRENDING";
|
|
490
558
|
/**
|
|
491
559
|
* Learning videos
|
|
492
560
|
*/
|
|
493
|
-
HomepageModule["Learning"] = "
|
|
561
|
+
HomepageModule["Learning"] = "LEARNING";
|
|
494
562
|
})(HomepageModule || (HomepageModule = {}));
|
|
495
563
|
/**
|
|
496
564
|
* Event types emitted by the embedded ThoughtSpot application.
|
|
@@ -2638,12 +2706,6 @@ var Action;
|
|
|
2638
2706
|
*/
|
|
2639
2707
|
Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
|
|
2640
2708
|
})(Action || (Action = {}));
|
|
2641
|
-
// eslint-disable-next-line no-shadow
|
|
2642
|
-
var OperationType;
|
|
2643
|
-
(function (OperationType) {
|
|
2644
|
-
OperationType["GetChartWithData"] = "GetChartWithData";
|
|
2645
|
-
OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
|
|
2646
|
-
})(OperationType || (OperationType = {}));
|
|
2647
2709
|
var PrefetchFeatures;
|
|
2648
2710
|
(function (PrefetchFeatures) {
|
|
2649
2711
|
PrefetchFeatures["FullApp"] = "FullApp";
|
|
@@ -8759,6 +8821,7 @@ function emptyQueue() {
|
|
|
8759
8821
|
* @param sessionInfo
|
|
8760
8822
|
*/
|
|
8761
8823
|
function initMixpanel(sessionInfo) {
|
|
8824
|
+
var _a;
|
|
8762
8825
|
if (!sessionInfo || !sessionInfo.mixpanelToken) {
|
|
8763
8826
|
return;
|
|
8764
8827
|
}
|
|
@@ -8776,6 +8839,7 @@ function initMixpanel(sessionInfo) {
|
|
|
8776
8839
|
clusterId: sessionInfo.clusterId,
|
|
8777
8840
|
clusterName: sessionInfo.clusterName,
|
|
8778
8841
|
releaseVersion: sessionInfo.releaseVersion,
|
|
8842
|
+
hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
|
|
8779
8843
|
});
|
|
8780
8844
|
isMixpanelInitialized = true;
|
|
8781
8845
|
emptyQueue();
|
|
@@ -9268,12 +9332,12 @@ var _baseGetTag = baseGetTag;
|
|
|
9268
9332
|
* _.isObject(null);
|
|
9269
9333
|
* // => false
|
|
9270
9334
|
*/
|
|
9271
|
-
function isObject(value) {
|
|
9335
|
+
function isObject$1(value) {
|
|
9272
9336
|
var type = typeof value;
|
|
9273
9337
|
return value != null && (type == 'object' || type == 'function');
|
|
9274
9338
|
}
|
|
9275
9339
|
|
|
9276
|
-
var isObject_1 = isObject;
|
|
9340
|
+
var isObject_1 = isObject$1;
|
|
9277
9341
|
|
|
9278
9342
|
/** `Object#toString` result references. */
|
|
9279
9343
|
var asyncTag = '[object AsyncFunction]',
|
|
@@ -10104,9 +10168,9 @@ function cacheHas(cache, key) {
|
|
|
10104
10168
|
var _cacheHas = cacheHas;
|
|
10105
10169
|
|
|
10106
10170
|
/* Built-in method references that are verified to be native. */
|
|
10107
|
-
var Set = _getNative(_root, 'Set');
|
|
10171
|
+
var Set$1 = _getNative(_root, 'Set');
|
|
10108
10172
|
|
|
10109
|
-
var _Set = Set;
|
|
10173
|
+
var _Set = Set$1;
|
|
10110
10174
|
|
|
10111
10175
|
/**
|
|
10112
10176
|
* This method returns `undefined`.
|
|
@@ -10964,6 +11028,7 @@ const renderInQueue = (fn) => {
|
|
|
10964
11028
|
*
|
|
10965
11029
|
* @param data
|
|
10966
11030
|
* @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
|
|
11031
|
+
* @group Global methods
|
|
10967
11032
|
*/
|
|
10968
11033
|
const executeTML = async (data) => {
|
|
10969
11034
|
const { thoughtSpotHost, authType } = config;
|
|
@@ -11011,6 +11076,7 @@ const executeTML = async (data) => {
|
|
|
11011
11076
|
*
|
|
11012
11077
|
* @param data
|
|
11013
11078
|
* @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
|
|
11079
|
+
* @group Global methods
|
|
11014
11080
|
*/
|
|
11015
11081
|
const exportTML = async (data) => {
|
|
11016
11082
|
const { thoughtSpotHost, authType } = config;
|
|
@@ -11056,58 +11122,351 @@ const exportTML = async (data) => {
|
|
|
11056
11122
|
|
|
11057
11123
|
/**
|
|
11058
11124
|
*
|
|
11059
|
-
* @param
|
|
11060
|
-
* @param query
|
|
11061
|
-
* @param
|
|
11125
|
+
* @param root0
|
|
11126
|
+
* @param root0.query
|
|
11127
|
+
* @param root0.variables
|
|
11128
|
+
* @param root0.thoughtSpotHost
|
|
11129
|
+
* @param root0.isCompositeQuery
|
|
11130
|
+
*/
|
|
11131
|
+
async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
|
|
11132
|
+
const operationName = getOperationNameFromQuery(query);
|
|
11133
|
+
try {
|
|
11134
|
+
const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
|
|
11135
|
+
method: 'POST',
|
|
11136
|
+
headers: {
|
|
11137
|
+
'content-type': 'application/json;charset=UTF-8',
|
|
11138
|
+
'x-requested-by': 'ThoughtSpot',
|
|
11139
|
+
accept: '*/*',
|
|
11140
|
+
'accept-language': 'en-us',
|
|
11141
|
+
},
|
|
11142
|
+
body: JSON.stringify({
|
|
11143
|
+
operationName,
|
|
11144
|
+
query,
|
|
11145
|
+
variables,
|
|
11146
|
+
}),
|
|
11147
|
+
credentials: 'include',
|
|
11148
|
+
});
|
|
11149
|
+
const result = await response.json();
|
|
11150
|
+
const dataValues = Object.values(result.data);
|
|
11151
|
+
return (isCompositeQuery) ? result.data : dataValues[0];
|
|
11152
|
+
}
|
|
11153
|
+
catch (error) {
|
|
11154
|
+
return error;
|
|
11155
|
+
}
|
|
11156
|
+
}
|
|
11157
|
+
|
|
11158
|
+
const getSourceDetailQuery = `
|
|
11159
|
+
query GetSourceDetail($ids: [GUID!]!) {
|
|
11160
|
+
getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
|
|
11161
|
+
id
|
|
11162
|
+
name
|
|
11163
|
+
description
|
|
11164
|
+
authorName
|
|
11165
|
+
authorDisplayName
|
|
11166
|
+
isExternal
|
|
11167
|
+
type
|
|
11168
|
+
created
|
|
11169
|
+
modified
|
|
11170
|
+
columns {
|
|
11171
|
+
id
|
|
11172
|
+
name
|
|
11173
|
+
author
|
|
11174
|
+
authorDisplayName
|
|
11175
|
+
description
|
|
11176
|
+
dataType
|
|
11177
|
+
type
|
|
11178
|
+
modified
|
|
11179
|
+
ownerName
|
|
11180
|
+
owner
|
|
11181
|
+
dataRecency
|
|
11182
|
+
sources {
|
|
11183
|
+
tableId
|
|
11184
|
+
tableName
|
|
11185
|
+
columnId
|
|
11186
|
+
columnName
|
|
11187
|
+
__typename
|
|
11188
|
+
}
|
|
11189
|
+
synonyms
|
|
11190
|
+
cohortAnswerId
|
|
11191
|
+
__typename
|
|
11192
|
+
}
|
|
11193
|
+
relationships
|
|
11194
|
+
destinationRelationships
|
|
11195
|
+
dataSourceId
|
|
11196
|
+
__typename
|
|
11197
|
+
}
|
|
11198
|
+
}
|
|
11199
|
+
`;
|
|
11200
|
+
const sourceDetailCache = new Map();
|
|
11201
|
+
/**
|
|
11202
|
+
*
|
|
11062
11203
|
* @param thoughtSpotHost
|
|
11204
|
+
* @param sourceId
|
|
11063
11205
|
*/
|
|
11064
|
-
function
|
|
11065
|
-
|
|
11066
|
-
|
|
11067
|
-
|
|
11068
|
-
|
|
11069
|
-
|
|
11070
|
-
|
|
11071
|
-
|
|
11072
|
-
|
|
11073
|
-
|
|
11074
|
-
|
|
11075
|
-
|
|
11076
|
-
|
|
11077
|
-
|
|
11078
|
-
|
|
11079
|
-
|
|
11080
|
-
|
|
11081
|
-
|
|
11082
|
-
|
|
11083
|
-
|
|
11084
|
-
|
|
11206
|
+
async function getSourceDetail(thoughtSpotHost, sourceId) {
|
|
11207
|
+
if (sourceDetailCache.has(sourceId)) {
|
|
11208
|
+
return sourceDetailCache.get(sourceId);
|
|
11209
|
+
}
|
|
11210
|
+
const details = await graphqlQuery({
|
|
11211
|
+
query: getSourceDetailQuery,
|
|
11212
|
+
variables: {
|
|
11213
|
+
ids: [sourceId],
|
|
11214
|
+
},
|
|
11215
|
+
thoughtSpotHost,
|
|
11216
|
+
});
|
|
11217
|
+
const souceDetails = details[0];
|
|
11218
|
+
sourceDetailCache.set(sourceId, souceDetails);
|
|
11219
|
+
return souceDetails;
|
|
11220
|
+
}
|
|
11221
|
+
|
|
11222
|
+
const bachSessionId = `
|
|
11223
|
+
id {
|
|
11224
|
+
sessionId
|
|
11225
|
+
genNo
|
|
11226
|
+
acSession {
|
|
11227
|
+
sessionId
|
|
11228
|
+
genNo
|
|
11229
|
+
}
|
|
11230
|
+
}
|
|
11231
|
+
`;
|
|
11232
|
+
const getUnaggregatedAnswerSession = `
|
|
11233
|
+
mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
|
|
11234
|
+
Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
|
|
11235
|
+
${bachSessionId}
|
|
11236
|
+
answer {
|
|
11237
|
+
visualizations {
|
|
11238
|
+
... on TableViz {
|
|
11239
|
+
columns {
|
|
11240
|
+
column {
|
|
11241
|
+
id
|
|
11242
|
+
name
|
|
11243
|
+
referencedColumns {
|
|
11244
|
+
guid
|
|
11245
|
+
displayName
|
|
11246
|
+
}
|
|
11247
|
+
}
|
|
11248
|
+
}
|
|
11249
|
+
}
|
|
11250
|
+
}
|
|
11251
|
+
}
|
|
11252
|
+
}
|
|
11253
|
+
}
|
|
11254
|
+
`;
|
|
11255
|
+
const removeColumns = `
|
|
11256
|
+
mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
|
|
11257
|
+
Answer__removeColumns(
|
|
11258
|
+
session: $session
|
|
11259
|
+
logicalColumnIds: $logicalColumnIds
|
|
11260
|
+
columnIds: $columnIds
|
|
11261
|
+
) {
|
|
11262
|
+
${bachSessionId}
|
|
11263
|
+
}
|
|
11264
|
+
}
|
|
11265
|
+
`;
|
|
11266
|
+
const addColumns = `
|
|
11267
|
+
mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
|
|
11268
|
+
Answer__addColumn(session: $session, columns: $columns) {
|
|
11269
|
+
${bachSessionId}
|
|
11270
|
+
}
|
|
11271
|
+
}
|
|
11272
|
+
`;
|
|
11273
|
+
const getAnswerData = `
|
|
11274
|
+
query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
|
|
11275
|
+
getAnswer(session: $session) {
|
|
11276
|
+
${bachSessionId}
|
|
11277
|
+
answer {
|
|
11278
|
+
id
|
|
11279
|
+
visualizations {
|
|
11280
|
+
id
|
|
11281
|
+
... on TableViz {
|
|
11282
|
+
columns {
|
|
11283
|
+
column {
|
|
11284
|
+
id
|
|
11285
|
+
name
|
|
11286
|
+
type
|
|
11287
|
+
aggregationType
|
|
11288
|
+
dataType
|
|
11289
|
+
}
|
|
11290
|
+
}
|
|
11291
|
+
data(deadline: $deadline, pagination: $dataPaginationParams)
|
|
11292
|
+
}
|
|
11293
|
+
}
|
|
11294
|
+
}
|
|
11295
|
+
}
|
|
11296
|
+
}
|
|
11297
|
+
`;
|
|
11298
|
+
|
|
11299
|
+
// eslint-disable-next-line no-shadow
|
|
11300
|
+
var OperationType;
|
|
11301
|
+
(function (OperationType) {
|
|
11302
|
+
OperationType["GetChartWithData"] = "GetChartWithData";
|
|
11303
|
+
OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
|
|
11304
|
+
})(OperationType || (OperationType = {}));
|
|
11305
|
+
/**
|
|
11306
|
+
* Class representing the answer service provided with the
|
|
11307
|
+
* custom action payload. This service could be used to run
|
|
11308
|
+
* graphql queries in the context of the answer on which the
|
|
11309
|
+
* custom action was triggered.
|
|
11310
|
+
*
|
|
11311
|
+
* @example
|
|
11312
|
+
* ```js
|
|
11313
|
+
* embed.on(EmbedEvent.CustomAction, e => {
|
|
11314
|
+
* const underlying = await e.answerService.getUnderlyingDataForPoint([
|
|
11315
|
+
* 'col name 1'
|
|
11316
|
+
* ]);
|
|
11317
|
+
* const data = await underlying.fetchData(0, 100);
|
|
11318
|
+
* })
|
|
11319
|
+
* ```
|
|
11320
|
+
* @version
|
|
11321
|
+
* ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
|
|
11322
|
+
*/
|
|
11323
|
+
class AnswerService {
|
|
11324
|
+
constructor(session, answer, thoughtSpotHost, selectedPoints) {
|
|
11325
|
+
this.session = session;
|
|
11326
|
+
this.answer = answer;
|
|
11327
|
+
this.thoughtSpotHost = thoughtSpotHost;
|
|
11328
|
+
this.selectedPoints = selectedPoints;
|
|
11329
|
+
this.session = removeTypename(session);
|
|
11330
|
+
}
|
|
11331
|
+
async getSourceDetail() {
|
|
11332
|
+
const sourceId = this.answer.sources[0].header.guid;
|
|
11333
|
+
return getSourceDetail(this.thoughtSpotHost, sourceId);
|
|
11334
|
+
}
|
|
11335
|
+
async removeColumns(columnIds) {
|
|
11336
|
+
return this.executeQuery(removeColumns, {
|
|
11337
|
+
logicalColumnIds: columnIds,
|
|
11338
|
+
});
|
|
11339
|
+
}
|
|
11340
|
+
async addColumns(columnIds) {
|
|
11341
|
+
return this.executeQuery(addColumns, {
|
|
11342
|
+
columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
|
|
11343
|
+
});
|
|
11344
|
+
}
|
|
11345
|
+
async fetchData(offset = 0, size = 1000) {
|
|
11346
|
+
const { answer } = await this.executeQuery(getAnswerData, {
|
|
11347
|
+
deadline: 0,
|
|
11348
|
+
dataPaginationParams: {
|
|
11349
|
+
isClientPaginated: true,
|
|
11350
|
+
offset,
|
|
11351
|
+
size,
|
|
11352
|
+
},
|
|
11353
|
+
});
|
|
11354
|
+
const { columns, data } = answer.visualizations[0];
|
|
11355
|
+
return {
|
|
11356
|
+
columns,
|
|
11357
|
+
data,
|
|
11358
|
+
};
|
|
11359
|
+
}
|
|
11360
|
+
/**
|
|
11361
|
+
*
|
|
11362
|
+
* @param userLocale
|
|
11363
|
+
* @param omitInfo Omit the download Info on top of the CSV
|
|
11364
|
+
* @returns Response
|
|
11365
|
+
*/
|
|
11366
|
+
async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
|
|
11367
|
+
if (omitInfo) {
|
|
11368
|
+
console.warn('omitInfo not supported yet.');
|
|
11085
11369
|
}
|
|
11086
|
-
|
|
11087
|
-
|
|
11370
|
+
const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
|
|
11371
|
+
return fetch(fetchUrl, {
|
|
11372
|
+
credentials: 'include',
|
|
11373
|
+
});
|
|
11374
|
+
}
|
|
11375
|
+
async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
|
|
11376
|
+
if (!selectedPoints && !this.selectedPoints) {
|
|
11377
|
+
throw new Error('Needs to be triggered in context of a point');
|
|
11088
11378
|
}
|
|
11089
|
-
|
|
11090
|
-
|
|
11091
|
-
|
|
11092
|
-
|
|
11379
|
+
if (!selectedPoints) {
|
|
11380
|
+
selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
|
|
11381
|
+
}
|
|
11382
|
+
const sourceDetail = await this.getSourceDetail();
|
|
11383
|
+
const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
|
|
11384
|
+
const unAggAnswer = await graphqlQuery({
|
|
11385
|
+
query: getUnaggregatedAnswerSession,
|
|
11386
|
+
variables: {
|
|
11387
|
+
session: this.session,
|
|
11388
|
+
columns: selectedPoints,
|
|
11389
|
+
},
|
|
11390
|
+
thoughtSpotHost: this.thoughtSpotHost,
|
|
11391
|
+
});
|
|
11392
|
+
const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
|
|
11393
|
+
const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
|
|
11394
|
+
.map((c) => c.column.referencedColumns[0].guid));
|
|
11395
|
+
const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
|
|
11396
|
+
if (columnsToAdd.length) {
|
|
11397
|
+
await unaggAnswerSession.addColumns(columnsToAdd);
|
|
11398
|
+
}
|
|
11399
|
+
const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
|
|
11400
|
+
if (columnsToRemove.length) {
|
|
11401
|
+
await unaggAnswerSession.removeColumns(columnsToRemove);
|
|
11402
|
+
}
|
|
11403
|
+
return unaggAnswerSession;
|
|
11404
|
+
}
|
|
11405
|
+
async executeQuery(query, variables) {
|
|
11406
|
+
const data = await graphqlQuery({
|
|
11407
|
+
query,
|
|
11408
|
+
variables: {
|
|
11409
|
+
session: this.session,
|
|
11410
|
+
...variables,
|
|
11411
|
+
},
|
|
11412
|
+
thoughtSpotHost: this.thoughtSpotHost,
|
|
11413
|
+
isCompositeQuery: false,
|
|
11414
|
+
});
|
|
11415
|
+
this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
|
|
11416
|
+
return data;
|
|
11417
|
+
}
|
|
11418
|
+
getSession() {
|
|
11419
|
+
return this.session;
|
|
11420
|
+
}
|
|
11421
|
+
}
|
|
11422
|
+
/**
|
|
11423
|
+
*
|
|
11424
|
+
* @param sourceDetail
|
|
11425
|
+
* @param colNames
|
|
11426
|
+
*/
|
|
11427
|
+
function getGuidsFromColumnNames(sourceDetail, colNames) {
|
|
11428
|
+
const cols = sourceDetail.columns.reduce((colSet, col) => {
|
|
11429
|
+
colSet[col.name] = col;
|
|
11430
|
+
return colSet;
|
|
11431
|
+
}, {});
|
|
11432
|
+
return new Set(colNames.map((colName) => {
|
|
11433
|
+
const col = cols[colName];
|
|
11434
|
+
return col.id;
|
|
11435
|
+
}));
|
|
11436
|
+
}
|
|
11437
|
+
/**
|
|
11438
|
+
*
|
|
11439
|
+
* @param selectedPoints
|
|
11440
|
+
*/
|
|
11441
|
+
function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
|
|
11442
|
+
const underlyingDataPoint = [];
|
|
11443
|
+
/**
|
|
11444
|
+
*
|
|
11445
|
+
* @param colVal
|
|
11446
|
+
*/
|
|
11447
|
+
function addPointFromColVal(colVal) {
|
|
11448
|
+
const dataType = colVal.column.dataType;
|
|
11449
|
+
const id = colVal.column.id;
|
|
11450
|
+
let dataValue;
|
|
11451
|
+
if (dataType === 'DATE') {
|
|
11452
|
+
dataValue = [{
|
|
11453
|
+
epochRange: {
|
|
11454
|
+
startEpoch: colVal.value,
|
|
11455
|
+
},
|
|
11456
|
+
}];
|
|
11093
11457
|
}
|
|
11094
11458
|
else {
|
|
11095
|
-
|
|
11096
|
-
dataPaginationParams: {
|
|
11097
|
-
isClientPaginated: true,
|
|
11098
|
-
offset: offset * batchSize,
|
|
11099
|
-
size: batchSize,
|
|
11100
|
-
},
|
|
11101
|
-
};
|
|
11459
|
+
dataValue = [{ value: colVal.value }];
|
|
11102
11460
|
}
|
|
11103
|
-
|
|
11104
|
-
|
|
11105
|
-
|
|
11461
|
+
underlyingDataPoint.push({
|
|
11462
|
+
columnId: colVal.column.id,
|
|
11463
|
+
dataValue,
|
|
11106
11464
|
});
|
|
11107
|
-
}
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
};
|
|
11465
|
+
}
|
|
11466
|
+
selectedPoints.forEach((p) => {
|
|
11467
|
+
p.selectedAttributes.forEach(addPointFromColVal);
|
|
11468
|
+
});
|
|
11469
|
+
return underlyingDataPoint;
|
|
11111
11470
|
}
|
|
11112
11471
|
|
|
11113
11472
|
/**
|
|
@@ -11116,16 +11475,12 @@ function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
|
|
|
11116
11475
|
* @param thoughtSpotHost
|
|
11117
11476
|
*/
|
|
11118
11477
|
function processCustomAction(e, thoughtSpotHost) {
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11122
|
-
|
|
11123
|
-
|
|
11124
|
-
|
|
11125
|
-
answerService,
|
|
11126
|
-
};
|
|
11127
|
-
}
|
|
11128
|
-
return e;
|
|
11478
|
+
const { session, embedAnswerData, contextMenuPoints } = e.data;
|
|
11479
|
+
const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
|
|
11480
|
+
return {
|
|
11481
|
+
...e,
|
|
11482
|
+
answerService,
|
|
11483
|
+
};
|
|
11129
11484
|
}
|
|
11130
11485
|
/**
|
|
11131
11486
|
*
|
|
@@ -11270,7 +11625,7 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data) {
|
|
|
11270
11625
|
});
|
|
11271
11626
|
}
|
|
11272
11627
|
|
|
11273
|
-
var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-
|
|
11628
|
+
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={".":{"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,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};
|
|
11274
11629
|
|
|
11275
11630
|
/**
|
|
11276
11631
|
* Copyright (c) 2022
|
|
@@ -11302,6 +11657,7 @@ const V1EventMap = {};
|
|
|
11302
11657
|
class TsEmbed {
|
|
11303
11658
|
constructor(domSelector, viewConfig) {
|
|
11304
11659
|
this.isAppInitialized = false;
|
|
11660
|
+
this.embedComponentType = 'TsEmbed';
|
|
11305
11661
|
/**
|
|
11306
11662
|
* Should we encode URL Query Params using base64 encoding which thoughtspot
|
|
11307
11663
|
* will generate for embedding. This provides additional security to
|
|
@@ -11311,6 +11667,7 @@ class TsEmbed {
|
|
|
11311
11667
|
*/
|
|
11312
11668
|
this.shouldEncodeUrlQueryParams = false;
|
|
11313
11669
|
this.defaultHiddenActions = [Action.ReportError];
|
|
11670
|
+
this.subscribedListeners = {};
|
|
11314
11671
|
/**
|
|
11315
11672
|
* Send Custom style as part of payload of APP_INIT
|
|
11316
11673
|
*
|
|
@@ -11333,6 +11690,7 @@ class TsEmbed {
|
|
|
11333
11690
|
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
11334
11691
|
: null,
|
|
11335
11692
|
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
11693
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
11336
11694
|
hostConfig: this.embedConfig.hostConfig,
|
|
11337
11695
|
hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
|
|
11338
11696
|
? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
|
|
@@ -11382,6 +11740,7 @@ class TsEmbed {
|
|
|
11382
11740
|
this.registerAppInit();
|
|
11383
11741
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
11384
11742
|
...viewConfig,
|
|
11743
|
+
embedComponentType: this.embedComponentType,
|
|
11385
11744
|
});
|
|
11386
11745
|
}
|
|
11387
11746
|
/**
|
|
@@ -11450,23 +11809,36 @@ class TsEmbed {
|
|
|
11450
11809
|
* and executes the registered callbacks accordingly.
|
|
11451
11810
|
*/
|
|
11452
11811
|
subscribeToEvents() {
|
|
11453
|
-
|
|
11812
|
+
const messageEventListener = (event) => {
|
|
11454
11813
|
const eventType = this.getEventType(event);
|
|
11455
11814
|
const eventPort = this.getEventPort(event);
|
|
11456
11815
|
const eventData = this.formatEventData(event, eventType);
|
|
11457
11816
|
if (event.source === this.iFrame.contentWindow) {
|
|
11458
11817
|
this.executeCallbacks(eventType, processEventData(eventType, eventData, this.thoughtSpotHost, this.el), eventPort);
|
|
11459
11818
|
}
|
|
11460
|
-
}
|
|
11461
|
-
window.addEventListener('
|
|
11819
|
+
};
|
|
11820
|
+
window.addEventListener('message', messageEventListener);
|
|
11821
|
+
const onlineEventListener = (e) => {
|
|
11462
11822
|
this.trigger(HostEvent.Reload);
|
|
11463
|
-
}
|
|
11464
|
-
window.addEventListener('
|
|
11823
|
+
};
|
|
11824
|
+
window.addEventListener('online', onlineEventListener);
|
|
11825
|
+
const offlineEventListener = (e) => {
|
|
11465
11826
|
const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
|
|
11466
11827
|
this.executeCallbacks(EmbedEvent.Error, {
|
|
11467
11828
|
offlineWarning,
|
|
11468
11829
|
});
|
|
11469
11830
|
console.warn(offlineWarning);
|
|
11831
|
+
};
|
|
11832
|
+
window.addEventListener('offline', offlineEventListener);
|
|
11833
|
+
this.subscribedListeners = {
|
|
11834
|
+
message: messageEventListener,
|
|
11835
|
+
online: onlineEventListener,
|
|
11836
|
+
offline: offlineEventListener,
|
|
11837
|
+
};
|
|
11838
|
+
}
|
|
11839
|
+
unsubscribeToEvents() {
|
|
11840
|
+
Object.keys(this.subscribedListeners).forEach((key) => {
|
|
11841
|
+
window.removeEventListener(key, this.subscribedListeners[key]);
|
|
11470
11842
|
});
|
|
11471
11843
|
}
|
|
11472
11844
|
/**
|
|
@@ -11644,8 +12016,10 @@ class TsEmbed {
|
|
|
11644
12016
|
*
|
|
11645
12017
|
* @param url
|
|
11646
12018
|
* @param frameOptions
|
|
12019
|
+
* @param showPreRender
|
|
12020
|
+
* @param showPreRenderByDefault
|
|
11647
12021
|
*/
|
|
11648
|
-
async renderIFrame(url) {
|
|
12022
|
+
async renderIFrame(url, showPreRenderByDefault = false) {
|
|
11649
12023
|
if (this.isError) {
|
|
11650
12024
|
return null;
|
|
11651
12025
|
}
|
|
@@ -11694,6 +12068,9 @@ class TsEmbed {
|
|
|
11694
12068
|
});
|
|
11695
12069
|
if (this.isPreRendered) {
|
|
11696
12070
|
this.insertIntoDOMForPreRender(this.iFrame);
|
|
12071
|
+
if (showPreRenderByDefault) {
|
|
12072
|
+
this.showPreRender();
|
|
12073
|
+
}
|
|
11697
12074
|
}
|
|
11698
12075
|
else {
|
|
11699
12076
|
this.insertIntoDOM(this.iFrame);
|
|
@@ -11732,11 +12109,10 @@ class TsEmbed {
|
|
|
11732
12109
|
throw new Error('Pre render id is required');
|
|
11733
12110
|
}
|
|
11734
12111
|
const preRenderIds = this.getPreRenderIds();
|
|
11735
|
-
|
|
11736
|
-
|
|
11737
|
-
|
|
11738
|
-
|
|
11739
|
-
}
|
|
12112
|
+
[preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
|
|
12113
|
+
.map((id) => document.getElementById(id))
|
|
12114
|
+
.filter((element) => element)
|
|
12115
|
+
.forEach((existingElement) => existingElement.remove());
|
|
11740
12116
|
const preRenderWrapper = document.createElement('div');
|
|
11741
12117
|
preRenderWrapper.id = preRenderIds.wrapper;
|
|
11742
12118
|
setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
|
|
@@ -11751,7 +12127,7 @@ class TsEmbed {
|
|
|
11751
12127
|
this.preRenderChild = child;
|
|
11752
12128
|
return preRenderWrapper;
|
|
11753
12129
|
}
|
|
11754
|
-
|
|
12130
|
+
connectPreRendered() {
|
|
11755
12131
|
const preRenderIds = this.getPreRenderIds();
|
|
11756
12132
|
this.preRenderWrapper = this.preRenderWrapper
|
|
11757
12133
|
|| document.getElementById(preRenderIds.wrapper);
|
|
@@ -11759,6 +12135,10 @@ class TsEmbed {
|
|
|
11759
12135
|
|| document.getElementById(preRenderIds.shield);
|
|
11760
12136
|
this.preRenderChild = this.preRenderChild
|
|
11761
12137
|
|| document.getElementById(preRenderIds.child);
|
|
12138
|
+
this.iFrame = this.preRenderChild;
|
|
12139
|
+
return this.isPreRenderAvailable();
|
|
12140
|
+
}
|
|
12141
|
+
isPreRenderAvailable() {
|
|
11762
12142
|
return !!this.preRenderWrapper && !!this.preRenderShield
|
|
11763
12143
|
&& !!this.preRenderChild;
|
|
11764
12144
|
}
|
|
@@ -11801,18 +12181,23 @@ class TsEmbed {
|
|
|
11801
12181
|
top: '0',
|
|
11802
12182
|
left: '0',
|
|
11803
12183
|
});
|
|
12184
|
+
this.unsubscribeToEvents();
|
|
11804
12185
|
}
|
|
11805
12186
|
showPreRender() {
|
|
11806
12187
|
if (!this.isPreRenderAvailable()) {
|
|
11807
|
-
|
|
11808
|
-
|
|
11809
|
-
|
|
11810
|
-
|
|
11811
|
-
|
|
12188
|
+
const isAvailable = this.connectPreRendered();
|
|
12189
|
+
if (!isAvailable) {
|
|
12190
|
+
// if the Embed component is nor preRendered , Render it now and
|
|
12191
|
+
// show it (hide is defalt behaviour)
|
|
12192
|
+
console.log('No preRender found, creating new ');
|
|
12193
|
+
this.preRender(true);
|
|
12194
|
+
return;
|
|
12195
|
+
}
|
|
11812
12196
|
}
|
|
11813
12197
|
this.syncPreRenderStyle();
|
|
11814
12198
|
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
|
|
11815
12199
|
setStyleProperties(this.preRenderShield, { zIndex: '-1' });
|
|
12200
|
+
this.subscribeToEvents();
|
|
11816
12201
|
}
|
|
11817
12202
|
syncPreRenderStyle() {
|
|
11818
12203
|
if (!this.el) {
|
|
@@ -12040,7 +12425,7 @@ class TsEmbed {
|
|
|
12040
12425
|
/**
|
|
12041
12426
|
* Creates the preRender shell
|
|
12042
12427
|
*/
|
|
12043
|
-
preRender() {
|
|
12428
|
+
preRender(showPreRenderByDefault = false) {
|
|
12044
12429
|
this.isPreRendered = true;
|
|
12045
12430
|
return this;
|
|
12046
12431
|
}
|
|
@@ -12117,8 +12502,8 @@ class V1Embed extends TsEmbed {
|
|
|
12117
12502
|
*
|
|
12118
12503
|
* @param iframeSrc
|
|
12119
12504
|
*/
|
|
12120
|
-
renderV1Embed(iframeSrc) {
|
|
12121
|
-
return this.renderIFrame(iframeSrc);
|
|
12505
|
+
renderV1Embed(iframeSrc, showPreRenderByDefault = false) {
|
|
12506
|
+
return this.renderIFrame(iframeSrc, showPreRenderByDefault);
|
|
12122
12507
|
}
|
|
12123
12508
|
getRootIframeSrc() {
|
|
12124
12509
|
const queryParams = this.getEmbedParams();
|
|
@@ -12210,6 +12595,7 @@ class AppEmbed extends V1Embed {
|
|
|
12210
12595
|
constructor(domSelector, viewConfig) {
|
|
12211
12596
|
super(domSelector, viewConfig);
|
|
12212
12597
|
this.defaultHeight = '100%';
|
|
12598
|
+
this.embedComponentType = 'AppEmbed';
|
|
12213
12599
|
/**
|
|
12214
12600
|
* Set the iframe height as per the computed height received
|
|
12215
12601
|
* from the ThoughtSpot app.
|
|
@@ -12361,10 +12747,15 @@ class AppEmbed extends V1Embed {
|
|
|
12361
12747
|
* @param renderOptions An object containing the page ID
|
|
12362
12748
|
* to be embedded.
|
|
12363
12749
|
*/
|
|
12364
|
-
render() {
|
|
12750
|
+
render(showPreRenderByDefault = false) {
|
|
12365
12751
|
super.render();
|
|
12366
12752
|
const src = this.getIFrameSrc();
|
|
12367
|
-
this.renderV1Embed(src);
|
|
12753
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
12754
|
+
return this;
|
|
12755
|
+
}
|
|
12756
|
+
preRender(showPreRenderByDefault = false) {
|
|
12757
|
+
super.preRender(showPreRenderByDefault);
|
|
12758
|
+
this.render(showPreRenderByDefault);
|
|
12368
12759
|
return this;
|
|
12369
12760
|
}
|
|
12370
12761
|
}
|
|
@@ -12399,6 +12790,7 @@ class LiveboardEmbed extends V1Embed {
|
|
|
12399
12790
|
constructor(domSelector, viewConfig) {
|
|
12400
12791
|
super(domSelector, viewConfig);
|
|
12401
12792
|
this.defaultHeight = 500;
|
|
12793
|
+
this.embedComponentType = 'LiveboardEmbed';
|
|
12402
12794
|
/**
|
|
12403
12795
|
* Set the iframe height as per the computed height received
|
|
12404
12796
|
* from the ThoughtSpot app.
|
|
@@ -12520,15 +12912,15 @@ class LiveboardEmbed extends V1Embed {
|
|
|
12520
12912
|
* @param renderOptions An object specifying the Liveboard ID,
|
|
12521
12913
|
* visualization ID and the runtime filters.
|
|
12522
12914
|
*/
|
|
12523
|
-
render() {
|
|
12915
|
+
render(showPreRenderByDefault = false) {
|
|
12524
12916
|
super.render();
|
|
12525
12917
|
const src = this.getIFrameSrc();
|
|
12526
|
-
this.renderV1Embed(src);
|
|
12918
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
12527
12919
|
return this;
|
|
12528
12920
|
}
|
|
12529
|
-
preRender() {
|
|
12530
|
-
super.preRender();
|
|
12531
|
-
this.render();
|
|
12921
|
+
preRender(showPreRenderByDefault = false) {
|
|
12922
|
+
super.preRender(showPreRenderByDefault);
|
|
12923
|
+
this.render(showPreRenderByDefault);
|
|
12532
12924
|
return this;
|
|
12533
12925
|
}
|
|
12534
12926
|
navigateToLiveboard(liveboardId, vizId, activeTabId) {
|
|
@@ -12573,6 +12965,7 @@ const HiddenActionItemByDefaultForSearchEmbed = [
|
|
|
12573
12965
|
class SearchEmbed extends TsEmbed {
|
|
12574
12966
|
constructor(domSelector, viewConfig) {
|
|
12575
12967
|
super(domSelector);
|
|
12968
|
+
this.embedComponentType = 'SearchEmbed';
|
|
12576
12969
|
this.viewConfig = viewConfig;
|
|
12577
12970
|
}
|
|
12578
12971
|
/**
|
|
@@ -12653,12 +13046,14 @@ class SearchEmbed extends TsEmbed {
|
|
|
12653
13046
|
}
|
|
12654
13047
|
/**
|
|
12655
13048
|
* Render the embedded ThoughtSpot search
|
|
13049
|
+
*
|
|
13050
|
+
* @param showPreRenderByDefault
|
|
12656
13051
|
*/
|
|
12657
|
-
render() {
|
|
13052
|
+
render(showPreRenderByDefault = false) {
|
|
12658
13053
|
super.render();
|
|
12659
13054
|
const { answerId } = this.viewConfig;
|
|
12660
13055
|
const src = this.getIFrameSrc(answerId);
|
|
12661
|
-
this.renderIFrame(src);
|
|
13056
|
+
this.renderIFrame(src, showPreRenderByDefault);
|
|
12662
13057
|
getAuthPromise().then(() => {
|
|
12663
13058
|
if (checkReleaseVersionInBeta(getReleaseVersion(), getEmbedConfig().suppressSearchEmbedBetaWarning)) {
|
|
12664
13059
|
alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
|
|
@@ -12666,6 +13061,11 @@ class SearchEmbed extends TsEmbed {
|
|
|
12666
13061
|
});
|
|
12667
13062
|
return this;
|
|
12668
13063
|
}
|
|
13064
|
+
preRender(showPreRenderByDefault = false) {
|
|
13065
|
+
super.preRender(showPreRenderByDefault);
|
|
13066
|
+
this.render(showPreRenderByDefault);
|
|
13067
|
+
return this;
|
|
13068
|
+
}
|
|
12669
13069
|
}
|
|
12670
13070
|
|
|
12671
13071
|
/**
|
|
@@ -12677,6 +13077,7 @@ class SearchEmbed extends TsEmbed {
|
|
|
12677
13077
|
class SearchBarEmbed extends TsEmbed {
|
|
12678
13078
|
constructor(domSelector, viewConfig) {
|
|
12679
13079
|
super(domSelector);
|
|
13080
|
+
this.embedComponentType = 'SearchBarEmbed';
|
|
12680
13081
|
this.viewConfig = viewConfig;
|
|
12681
13082
|
}
|
|
12682
13083
|
/**
|
|
@@ -12755,6 +13156,7 @@ class SageEmbed extends V1Embed {
|
|
|
12755
13156
|
// eslint-disable-next-line no-useless-constructor
|
|
12756
13157
|
constructor(domSelector, viewConfig) {
|
|
12757
13158
|
super(domSelector, viewConfig);
|
|
13159
|
+
this.embedComponentType = 'SageEmbed';
|
|
12758
13160
|
}
|
|
12759
13161
|
/**
|
|
12760
13162
|
* Constructs a map of parameters to be passed on to the
|
|
@@ -12806,14 +13208,20 @@ class SageEmbed extends V1Embed {
|
|
|
12806
13208
|
/**
|
|
12807
13209
|
* Render the embedded ThoughtSpot Sage
|
|
12808
13210
|
*
|
|
13211
|
+
* @param showPreRenderByDefault
|
|
12809
13212
|
* @returns {SageEmbed} Eureka/Sage embed
|
|
12810
13213
|
*/
|
|
12811
|
-
render() {
|
|
13214
|
+
render(showPreRenderByDefault = false) {
|
|
12812
13215
|
super.render();
|
|
12813
13216
|
const src = this.getIFrameSrc();
|
|
12814
|
-
this.renderV1Embed(src);
|
|
13217
|
+
this.renderV1Embed(src, showPreRenderByDefault);
|
|
13218
|
+
return this;
|
|
13219
|
+
}
|
|
13220
|
+
preRender(showPreRenderByDefault = false) {
|
|
13221
|
+
super.preRender(showPreRenderByDefault);
|
|
13222
|
+
this.render(showPreRenderByDefault);
|
|
12815
13223
|
return this;
|
|
12816
13224
|
}
|
|
12817
13225
|
}
|
|
12818
13226
|
|
|
12819
|
-
export { Action, AppEmbed, AuthEvent, AuthFailureType, AuthStatus, AuthType, ContextMenuTriggerOptions, DataSourceVisualMode, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed, Page, PinboardEmbed, PrefetchFeatures, RuntimeFilterOp, SageEmbed, SearchBarEmbed, SearchEmbed, executeTML, exportTML, getEmbedConfig as getInitConfig, getSessionInfo, init, logout$1 as logout, prefetch };
|
|
13227
|
+
export { Action, AnswerService, AppEmbed, AuthEvent, AuthFailureType, AuthStatus, AuthType, ContextMenuTriggerOptions, DataSourceVisualMode, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed, Page, PinboardEmbed, PrefetchFeatures, RuntimeFilterOp, SageEmbed, SearchBarEmbed, SearchEmbed, executeTML, exportTML, getEmbedConfig as getInitConfig, getSessionInfo, init, logout$1 as logout, prefetch };
|