@thoughtspot/visual-embed-sdk 1.24.0-preRender.5 → 1.24.0-preRender.7
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/README.md +1 -1
- package/cjs/package.json +2 -2
- package/cjs/src/embed/app.d.ts +35 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +5 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +19 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +35 -5
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +14 -9
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +14 -3
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +45 -7
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +9 -3
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/sage.spec.js +85 -6
- package/cjs/src/embed/sage.spec.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +1 -1
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +2 -6
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +1 -1
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +45 -41
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +50 -11
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/index.d.ts +12 -0
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +37 -16
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/types.d.ts +30 -33
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +20 -5
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +2 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.js +3 -5
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -1
- package/cjs/src/utils/graphql/sourceService.js +3 -1
- package/cjs/src/utils/graphql/sourceService.js.map +1 -1
- package/cjs/src/utils.d.ts +1 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +5 -3
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +18 -8
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/src/embed/app.d.ts +35 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +35 -5
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +45 -7
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +1 -1
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +2 -6
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +1 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +12 -0
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +30 -33
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answerService.d.ts +2 -1
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/dist/src/utils/graphql/sourceService.d.ts.map +1 -1
- package/dist/src/utils.d.ts +1 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +3752 -19027
- package/dist/tsembed-react.js +3752 -19027
- package/dist/tsembed.es.js +7586 -23428
- package/dist/tsembed.js +7586 -23428
- package/dist/visual-embed-sdk-react-full.d.ts +161 -53
- package/dist/visual-embed-sdk-react.d.ts +161 -53
- package/dist/visual-embed-sdk.d.ts +149 -53
- package/lib/package.json +2 -2
- package/lib/src/embed/app.d.ts +35 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +5 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +19 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +35 -5
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +15 -9
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +14 -3
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +45 -7
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +9 -3
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/sage.spec.js +85 -6
- package/lib/src/embed/sage.spec.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +1 -1
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +2 -6
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +1 -1
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +46 -42
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +50 -11
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/react/index.d.ts +12 -0
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +37 -16
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/types.d.ts +30 -33
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +20 -5
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts +2 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.js +3 -5
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/graphql/sourceService.d.ts.map +1 -1
- package/lib/src/utils/graphql/sourceService.js +3 -1
- package/lib/src/utils/graphql/sourceService.js.map +1 -1
- package/lib/src/utils.d.ts +1 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +3 -2
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +19 -9
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +152 -56
- package/package.json +2 -2
- package/src/embed/app.spec.ts +29 -0
- package/src/embed/app.ts +43 -1
- package/src/embed/liveboard.spec.ts +19 -3
- package/src/embed/liveboard.ts +53 -13
- package/src/embed/sage.spec.ts +119 -6
- package/src/embed/sage.ts +63 -13
- package/src/embed/search-bar.tsx +11 -1
- package/src/embed/search.ts +5 -6
- package/src/embed/ts-embed.spec.ts +57 -12
- package/src/embed/ts-embed.ts +55 -45
- package/src/index.ts +2 -0
- package/src/react/all-types-export.ts +1 -0
- package/src/react/index.tsx +54 -12
- package/src/types.ts +36 -39
- package/src/utils/graphql/answerService/answerService.spec.ts +1 -1
- package/src/utils/graphql/answerService/answerService.ts +3 -5
- package/src/utils/graphql/sourceService.ts +4 -1
- package/src/utils.spec.ts +23 -8
- package/src/utils.ts +4 -2
package/src/embed/liveboard.ts
CHANGED
|
@@ -9,19 +9,17 @@
|
|
|
9
9
|
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import _ from 'lodash';
|
|
13
12
|
import { ERROR_MESSAGE } from '../errors';
|
|
14
13
|
import {
|
|
15
14
|
EmbedEvent,
|
|
16
15
|
MessagePayload,
|
|
17
16
|
Param,
|
|
18
17
|
RuntimeFilter,
|
|
19
|
-
RuntimeParameter,
|
|
20
18
|
DOMSelector,
|
|
21
19
|
HostEvent,
|
|
22
20
|
ViewConfig,
|
|
23
21
|
} from '../types';
|
|
24
|
-
import { getQueryParamString,
|
|
22
|
+
import { getQueryParamString, isUndefined } from '../utils';
|
|
25
23
|
import { getAuthPromise } from './base';
|
|
26
24
|
import { V1Embed } from './ts-embed';
|
|
27
25
|
|
|
@@ -30,7 +28,7 @@ import { V1Embed } from './ts-embed';
|
|
|
30
28
|
*
|
|
31
29
|
* @group Embed components
|
|
32
30
|
*/
|
|
33
|
-
export interface LiveboardViewConfig extends ViewConfig {
|
|
31
|
+
export interface LiveboardViewConfig extends Omit<ViewConfig, 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems'| 'reorderedHomepageModules'> {
|
|
34
32
|
/**
|
|
35
33
|
* If set to true, the embedded object container dynamically resizes
|
|
36
34
|
* according to the height of the Liveboard.
|
|
@@ -96,7 +94,7 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
96
94
|
*/
|
|
97
95
|
liveboardV2?: boolean;
|
|
98
96
|
/**
|
|
99
|
-
* Tab
|
|
97
|
+
* Tab ID of the Liveboard that is supposed to be active
|
|
100
98
|
*
|
|
101
99
|
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1-sw
|
|
102
100
|
*/
|
|
@@ -108,9 +106,39 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
108
106
|
*/
|
|
109
107
|
hideTabPanel?: boolean;
|
|
110
108
|
/**
|
|
111
|
-
*
|
|
109
|
+
* Show or hide Liveboard header
|
|
110
|
+
*
|
|
111
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
|
|
112
|
+
* @default false
|
|
113
|
+
*/
|
|
114
|
+
hideLiveboardHeader?: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Show or hide Liveboard title
|
|
117
|
+
*
|
|
118
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
|
|
119
|
+
* @default false
|
|
120
|
+
*/
|
|
121
|
+
showLiveboardTitle?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Show or hide Liveboard description
|
|
124
|
+
*
|
|
125
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
|
|
126
|
+
* @default false
|
|
112
127
|
*/
|
|
113
|
-
|
|
128
|
+
showLiveboardDescription?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Boolean for sticky Liveboard header.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```js
|
|
134
|
+
* const embed = new LiveboardEmbed('#embed', {
|
|
135
|
+
* ... // other liveboard view config
|
|
136
|
+
* isLiveboardHeaderSticky: true,
|
|
137
|
+
* });
|
|
138
|
+
* ```
|
|
139
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
|
|
140
|
+
*/
|
|
141
|
+
isLiveboardHeaderSticky?: boolean;
|
|
114
142
|
}
|
|
115
143
|
|
|
116
144
|
/**
|
|
@@ -162,7 +190,10 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
162
190
|
vizId,
|
|
163
191
|
hideTabPanel,
|
|
164
192
|
activeTabId,
|
|
165
|
-
|
|
193
|
+
hideLiveboardHeader,
|
|
194
|
+
showLiveboardDescription,
|
|
195
|
+
showLiveboardTitle,
|
|
196
|
+
isLiveboardHeaderSticky = true,
|
|
166
197
|
} = this.viewConfig;
|
|
167
198
|
|
|
168
199
|
const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
|
|
@@ -193,10 +224,19 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
193
224
|
if (hideTabPanel) {
|
|
194
225
|
params[Param.HideTabPanel] = hideTabPanel;
|
|
195
226
|
}
|
|
196
|
-
|
|
227
|
+
if (hideLiveboardHeader) {
|
|
228
|
+
params[Param.HideLiveboardHeader] = hideLiveboardHeader;
|
|
229
|
+
}
|
|
230
|
+
if (showLiveboardDescription) {
|
|
231
|
+
params[Param.ShowLiveboardDescription] = showLiveboardDescription;
|
|
232
|
+
}
|
|
233
|
+
if (showLiveboardTitle) {
|
|
234
|
+
params[Param.ShowLiveboardTitle] = showLiveboardTitle;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
params[Param.LiveboardHeaderSticky] = isLiveboardHeaderSticky;
|
|
197
238
|
|
|
198
|
-
const
|
|
199
|
-
if (parameterQuery) queryParams += `&${parameterQuery}`;
|
|
239
|
+
const queryParams = getQueryParamString(params, true);
|
|
200
240
|
|
|
201
241
|
return queryParams;
|
|
202
242
|
}
|
|
@@ -264,7 +304,7 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
264
304
|
protected beforePrerenderVisible(): void {
|
|
265
305
|
const embedObj = this.insertedDomEl?.[this.embedNodeKey] as LiveboardEmbed;
|
|
266
306
|
|
|
267
|
-
if (
|
|
307
|
+
if (isUndefined(embedObj)) return;
|
|
268
308
|
|
|
269
309
|
const showDifferentLib = this.viewConfig.liveboardId
|
|
270
310
|
&& embedObj.viewConfig.liveboardId !== this.viewConfig.liveboardId;
|
|
@@ -276,7 +316,7 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
276
316
|
}
|
|
277
317
|
|
|
278
318
|
protected handleRenderForPrerender(): void {
|
|
279
|
-
if (
|
|
319
|
+
if (isUndefined(this.viewConfig.liveboardId)) {
|
|
280
320
|
this.prerenderGeneric();
|
|
281
321
|
return;
|
|
282
322
|
}
|
package/src/embed/sage.spec.ts
CHANGED
|
@@ -10,10 +10,13 @@ import {
|
|
|
10
10
|
} from '../test/test-utils';
|
|
11
11
|
|
|
12
12
|
const defaultConfig: SageViewConfig = {
|
|
13
|
-
showObjectResults: true,
|
|
14
13
|
disableWorksheetChange: false,
|
|
15
|
-
hideWorksheetSelector:
|
|
16
|
-
|
|
14
|
+
hideWorksheetSelector: false,
|
|
15
|
+
hideSearchBarTitle: false,
|
|
16
|
+
hideSageAnswerHeader: false,
|
|
17
|
+
hideAutocompleteSuggestions: false,
|
|
18
|
+
hideSampleQuestions: false,
|
|
19
|
+
isProductTour: false,
|
|
17
20
|
};
|
|
18
21
|
|
|
19
22
|
const thoughtSpotHost = 'tshost';
|
|
@@ -37,10 +40,119 @@ describe('Sage embed tests', () => {
|
|
|
37
40
|
await executeAfterWait(() => {
|
|
38
41
|
expectUrlMatch(
|
|
39
42
|
getIFrameSrc(),
|
|
40
|
-
`http://${thoughtSpotHost}/?embedApp=true&
|
|
43
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
41
44
|
);
|
|
42
45
|
});
|
|
43
46
|
});
|
|
47
|
+
|
|
48
|
+
test('should render sage with product tour flag set', async () => {
|
|
49
|
+
const sageEmbed = new SageEmbed(getRootEl(), { ...defaultConfig, isProductTour: true });
|
|
50
|
+
sageEmbed.render();
|
|
51
|
+
await executeAfterWait(() => {
|
|
52
|
+
expectUrlMatch(
|
|
53
|
+
getIFrameSrc(),
|
|
54
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=true&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('should render sage with disable worksheet change flag', async () => {
|
|
60
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
61
|
+
...defaultConfig,
|
|
62
|
+
disableWorksheetChange: true,
|
|
63
|
+
});
|
|
64
|
+
sageEmbed.render();
|
|
65
|
+
await executeAfterWait(() => {
|
|
66
|
+
expectUrlMatch(
|
|
67
|
+
getIFrameSrc(),
|
|
68
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=true&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('should render sage with hide worksheet selector flag', async () => {
|
|
74
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
75
|
+
...defaultConfig,
|
|
76
|
+
hideWorksheetSelector: true,
|
|
77
|
+
});
|
|
78
|
+
sageEmbed.render();
|
|
79
|
+
await executeAfterWait(() => {
|
|
80
|
+
expectUrlMatch(
|
|
81
|
+
getIFrameSrc(),
|
|
82
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=true&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('should render sage with hideSearchBarTitle flag', async () => {
|
|
88
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
89
|
+
...defaultConfig,
|
|
90
|
+
hideSearchBarTitle: true,
|
|
91
|
+
});
|
|
92
|
+
sageEmbed.render();
|
|
93
|
+
await executeAfterWait(() => {
|
|
94
|
+
expectUrlMatch(
|
|
95
|
+
getIFrameSrc(),
|
|
96
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=true&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('should render sage with hide Sage Answer Header flag', async () => {
|
|
102
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
103
|
+
...defaultConfig,
|
|
104
|
+
hideSageAnswerHeader: true,
|
|
105
|
+
});
|
|
106
|
+
sageEmbed.render();
|
|
107
|
+
await executeAfterWait(() => {
|
|
108
|
+
expectUrlMatch(
|
|
109
|
+
getIFrameSrc(),
|
|
110
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=true&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
111
|
+
);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('should render sage with hide Autocomplete suggestions flag', async () => {
|
|
116
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
117
|
+
...defaultConfig,
|
|
118
|
+
hideAutocompleteSuggestions: true,
|
|
119
|
+
});
|
|
120
|
+
sageEmbed.render();
|
|
121
|
+
await executeAfterWait(() => {
|
|
122
|
+
expectUrlMatch(
|
|
123
|
+
getIFrameSrc(),
|
|
124
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=true&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('should render sage with deprecated showObjectSuggestions flag', async () => {
|
|
130
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
131
|
+
showObjectSuggestions: true,
|
|
132
|
+
});
|
|
133
|
+
sageEmbed.render();
|
|
134
|
+
await executeAfterWait(() => {
|
|
135
|
+
expectUrlMatch(
|
|
136
|
+
getIFrameSrc(),
|
|
137
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka`,
|
|
138
|
+
);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('embed url include pre-seed dataSource without populating searchOptions', async () => {
|
|
143
|
+
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
144
|
+
...defaultConfig,
|
|
145
|
+
dataSource: 'worksheet-id',
|
|
146
|
+
});
|
|
147
|
+
sageEmbed.render();
|
|
148
|
+
await executeAfterWait(() => {
|
|
149
|
+
expectUrlMatch(
|
|
150
|
+
getIFrameSrc(),
|
|
151
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?worksheet=worksheet-id`,
|
|
152
|
+
);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
|
|
44
156
|
test('embed url include pre-seed dataSource and query', async () => {
|
|
45
157
|
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
46
158
|
...defaultConfig,
|
|
@@ -53,10 +165,11 @@ describe('Sage embed tests', () => {
|
|
|
53
165
|
await executeAfterWait(() => {
|
|
54
166
|
expectUrlMatch(
|
|
55
167
|
getIFrameSrc(),
|
|
56
|
-
`http://${thoughtSpotHost}/?embedApp=true&
|
|
168
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSearchBarTitle=false&hideSageAnswerHeader=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?worksheet=worksheet-id&query=test-query`,
|
|
57
169
|
);
|
|
58
170
|
});
|
|
59
171
|
});
|
|
172
|
+
|
|
60
173
|
test('embed url include pre-seed execute flag with query', async () => {
|
|
61
174
|
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
62
175
|
...defaultConfig,
|
|
@@ -69,7 +182,7 @@ describe('Sage embed tests', () => {
|
|
|
69
182
|
await executeAfterWait(() => {
|
|
70
183
|
expectUrlMatch(
|
|
71
184
|
getIFrameSrc(),
|
|
72
|
-
`http://${thoughtSpotHost}/?embedApp=true&
|
|
185
|
+
`http://${thoughtSpotHost}/?embedApp=true&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&hideAction=%5B"reportError","save","pin","editACopy","saveAsView","updateTSL","editTSL","onDeleteAnswer","share"%5D#/embed/eureka?query=test-query&executeSearch=true`,
|
|
73
186
|
);
|
|
74
187
|
});
|
|
75
188
|
});
|
package/src/embed/sage.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { V1Embed } from './ts-embed';
|
|
|
18
18
|
*/
|
|
19
19
|
export interface SearchOptions {
|
|
20
20
|
/**
|
|
21
|
-
* The
|
|
21
|
+
* The query string to pre-fill in natual language search bar
|
|
22
22
|
*/
|
|
23
23
|
searchQuery: string;
|
|
24
24
|
/**
|
|
@@ -37,34 +37,74 @@ export interface SearchOptions {
|
|
|
37
37
|
* @version: SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.1-sw
|
|
38
38
|
* @group Embed components
|
|
39
39
|
*/
|
|
40
|
-
export interface SageViewConfig
|
|
40
|
+
export interface SageViewConfig
|
|
41
|
+
extends Omit<
|
|
42
|
+
ViewConfig,
|
|
43
|
+
'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'hiddenTabs' | 'visibleTabs' | 'reorderedHomepageModules'
|
|
44
|
+
> {
|
|
41
45
|
/**
|
|
42
46
|
* If set to true, a list of liveboard and answers related
|
|
43
47
|
* to the natural language search will be shown below the
|
|
44
48
|
* AI generated answer.
|
|
49
|
+
*
|
|
50
|
+
* @deprecated Currently liveboard and answers related
|
|
51
|
+
* to the natural language search will not be shown for sage
|
|
52
|
+
* embed
|
|
45
53
|
*/
|
|
46
54
|
showObjectResults?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* flag used by the TS product tour page to show the blue search bar
|
|
57
|
+
* even after the search is completed. This is different from TSE Sage Embed
|
|
58
|
+
* experience where it mimics closer to the non-embed case.
|
|
59
|
+
* The Sample questions container is collapsed when this value is set after
|
|
60
|
+
* does a search.
|
|
61
|
+
*
|
|
62
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
|
|
63
|
+
* @hidden
|
|
64
|
+
*/
|
|
65
|
+
isProductTour?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* flag to hide search bar title. default false.
|
|
68
|
+
*
|
|
69
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
|
|
70
|
+
*/
|
|
71
|
+
hideSearchBarTitle?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* flag to disable Sage Answer header(`AI Answer` title section on top of the Sage
|
|
74
|
+
* answer). default false.
|
|
75
|
+
*
|
|
76
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
|
|
77
|
+
*/
|
|
78
|
+
hideSageAnswerHeader?: boolean;
|
|
47
79
|
/**
|
|
48
80
|
* flag to disable changing worksheet. default false.
|
|
81
|
+
*
|
|
82
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
|
|
49
83
|
*/
|
|
50
|
-
disableWorksheetChange?: boolean
|
|
84
|
+
disableWorksheetChange?: boolean;
|
|
51
85
|
/**
|
|
52
86
|
* flag to hide worksheet selector. default false.
|
|
53
87
|
*/
|
|
54
|
-
hideWorksheetSelector?: boolean
|
|
88
|
+
hideWorksheetSelector?: boolean;
|
|
55
89
|
/**
|
|
56
|
-
* If set to true, the search suggestions will
|
|
57
|
-
*
|
|
90
|
+
* If set to true, the search bar auto complete search suggestions will not be shown.
|
|
91
|
+
* default false
|
|
58
92
|
*
|
|
93
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.9.0.cl
|
|
59
94
|
*/
|
|
60
|
-
|
|
95
|
+
hideAutocompleteSuggestions?: boolean;
|
|
61
96
|
/**
|
|
62
|
-
*
|
|
97
|
+
* If set to false, the auto complete search suggestions not be shown
|
|
98
|
+
*
|
|
99
|
+
* @deprecated currently, object suggestions will not be shown for sage embed
|
|
100
|
+
* earlier this flag was used to show Auto complete suggestions
|
|
63
101
|
*/
|
|
64
|
-
|
|
102
|
+
showObjectSuggestions?: boolean;
|
|
65
103
|
/**
|
|
66
104
|
* If set to true, sample questions would be hidden to user.
|
|
67
105
|
* These sample questions are autogenerated based on selected datasource.
|
|
106
|
+
*
|
|
107
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.10.0.cl
|
|
68
108
|
*/
|
|
69
109
|
hideSampleQuestions?: boolean;
|
|
70
110
|
/**
|
|
@@ -73,9 +113,10 @@ export interface SageViewConfig extends ViewConfig {
|
|
|
73
113
|
dataSource?: string;
|
|
74
114
|
/**
|
|
75
115
|
* Configuration for search options
|
|
116
|
+
*
|
|
117
|
+
* @version SDK: 1.26.0 | Thoughtspot: 9.8.0.cl
|
|
76
118
|
*/
|
|
77
119
|
searchOptions?: SearchOptions;
|
|
78
|
-
|
|
79
120
|
}
|
|
80
121
|
export const HiddenActionItemByDefaultForSageEmbed = [
|
|
81
122
|
Action.Save,
|
|
@@ -115,21 +156,30 @@ export class SageEmbed extends V1Embed {
|
|
|
115
156
|
*/
|
|
116
157
|
protected getEmbedParams(): string {
|
|
117
158
|
const {
|
|
118
|
-
showObjectResults,
|
|
119
159
|
disableWorksheetChange,
|
|
120
160
|
hideWorksheetSelector,
|
|
121
161
|
showObjectSuggestions,
|
|
122
162
|
hideSampleQuestions,
|
|
163
|
+
isProductTour,
|
|
164
|
+
hideSearchBarTitle,
|
|
165
|
+
hideSageAnswerHeader,
|
|
166
|
+
hideAutocompleteSuggestions,
|
|
123
167
|
} = this.viewConfig;
|
|
124
168
|
|
|
125
169
|
const params = this.getBaseQueryParams();
|
|
126
170
|
params[Param.EmbedApp] = true;
|
|
127
|
-
params[Param.HideEurekaResults] = !showObjectResults;
|
|
128
171
|
params[Param.IsSageEmbed] = true;
|
|
129
172
|
params[Param.DisableWorksheetChange] = !!disableWorksheetChange;
|
|
130
173
|
params[Param.HideWorksheetSelector] = !!hideWorksheetSelector;
|
|
131
|
-
params[Param.HideEurekaSuggestions] =
|
|
174
|
+
params[Param.HideEurekaSuggestions] = !!hideAutocompleteSuggestions;
|
|
175
|
+
if (showObjectSuggestions) {
|
|
176
|
+
params[Param.HideEurekaSuggestions] = !showObjectSuggestions;
|
|
177
|
+
// support backwards compatibility
|
|
178
|
+
}
|
|
132
179
|
params[Param.HideSampleQuestions] = !!hideSampleQuestions;
|
|
180
|
+
params[Param.IsProductTour] = !!isProductTour;
|
|
181
|
+
params[Param.HideSearchBarTitle] = !!hideSearchBarTitle;
|
|
182
|
+
params[Param.HideSageAnswerHeader] = !!hideSageAnswerHeader;
|
|
133
183
|
params[Param.HideActions] = [
|
|
134
184
|
...(params[Param.HideActions] ?? []),
|
|
135
185
|
...HiddenActionItemByDefaultForSageEmbed,
|
package/src/embed/search-bar.tsx
CHANGED
|
@@ -7,7 +7,17 @@ import { SearchOptions } from './search';
|
|
|
7
7
|
* @group Embed components
|
|
8
8
|
*/
|
|
9
9
|
export interface SearchBarViewConfig
|
|
10
|
-
extends Omit<
|
|
10
|
+
extends Omit<
|
|
11
|
+
ViewConfig,
|
|
12
|
+
| 'runtimeFilters'
|
|
13
|
+
| 'showAlerts'
|
|
14
|
+
| 'dataPanelV2'
|
|
15
|
+
| 'hiddenHomepageModules'
|
|
16
|
+
| 'hiddenHomeLeftNavItems'
|
|
17
|
+
| 'hiddenTabs'
|
|
18
|
+
| 'visibleTabs'
|
|
19
|
+
| 'reorderedHomepageModules'
|
|
20
|
+
> {
|
|
11
21
|
/**
|
|
12
22
|
* The array of data source GUIDs to set on load.
|
|
13
23
|
* Only a single dataSource supported currently.
|
package/src/embed/search.ts
CHANGED
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
Action,
|
|
15
15
|
ViewConfig,
|
|
16
16
|
RuntimeFilter,
|
|
17
|
-
RuntimeParameter,
|
|
18
17
|
} from '../types';
|
|
19
18
|
import {
|
|
20
19
|
getQueryParamString,
|
|
@@ -50,7 +49,11 @@ export interface SearchOptions {
|
|
|
50
49
|
*
|
|
51
50
|
* @group Embed components
|
|
52
51
|
*/
|
|
53
|
-
export interface SearchViewConfig
|
|
52
|
+
export interface SearchViewConfig
|
|
53
|
+
extends Omit<
|
|
54
|
+
ViewConfig,
|
|
55
|
+
'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'hiddenTabs' | 'visibleTabs' | 'reorderedHomepageModules'
|
|
56
|
+
> {
|
|
54
57
|
/**
|
|
55
58
|
* If set to true, the data sources panel is collapsed on load,
|
|
56
59
|
* but can be expanded manually.
|
|
@@ -124,10 +127,6 @@ export interface SearchViewConfig extends ViewConfig {
|
|
|
124
127
|
* @version: SDK: 1.24.0
|
|
125
128
|
*/
|
|
126
129
|
useLastSelectedSources?: boolean;
|
|
127
|
-
/**
|
|
128
|
-
* The list of parameter override to apply to a search answer.
|
|
129
|
-
*/
|
|
130
|
-
runtimeParameters?: RuntimeParameter[];
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
export const HiddenActionItemByDefaultForSearchEmbed = [
|
|
@@ -48,6 +48,15 @@ const tabId2 = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
|
|
|
48
48
|
const thoughtSpotHost = 'tshost';
|
|
49
49
|
const defaultParamsPost = '';
|
|
50
50
|
|
|
51
|
+
const createRootEleForEmbed = () => {
|
|
52
|
+
const rootEle = document.createElement('div');
|
|
53
|
+
rootEle.id = 'myRoot';
|
|
54
|
+
const tsEmbedDiv = document.createElement('div');
|
|
55
|
+
tsEmbedDiv.id = 'tsEmbedDiv';
|
|
56
|
+
rootEle.appendChild(tsEmbedDiv);
|
|
57
|
+
document.body.appendChild(rootEle);
|
|
58
|
+
};
|
|
59
|
+
|
|
51
60
|
beforeAll(() => {
|
|
52
61
|
spyOn(window, 'alert');
|
|
53
62
|
});
|
|
@@ -164,7 +173,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
164
173
|
HomepageModule.Learning,
|
|
165
174
|
];
|
|
166
175
|
|
|
167
|
-
const searchEmbed = new
|
|
176
|
+
const searchEmbed = new AppEmbed(getRootEl(), {
|
|
168
177
|
...defaultViewConfig,
|
|
169
178
|
hiddenHomepageModules: mockedHiddenHomepageModules,
|
|
170
179
|
});
|
|
@@ -201,7 +210,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
201
210
|
HomepageModule.Watchlist,
|
|
202
211
|
];
|
|
203
212
|
|
|
204
|
-
const searchEmbed = new
|
|
213
|
+
const searchEmbed = new AppEmbed(getRootEl(), {
|
|
205
214
|
...defaultViewConfig,
|
|
206
215
|
reorderedHomepageModules: mockedReorderedHomepageModules,
|
|
207
216
|
});
|
|
@@ -318,7 +327,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
318
327
|
HomeLeftNavItem.Documentation,
|
|
319
328
|
];
|
|
320
329
|
|
|
321
|
-
const searchEmbed = new
|
|
330
|
+
const searchEmbed = new AppEmbed(getRootEl(), {
|
|
322
331
|
...defaultViewConfig,
|
|
323
332
|
hiddenHomeLeftNavItems: mockedHiddenHomeLeftNavItems,
|
|
324
333
|
});
|
|
@@ -1273,15 +1282,6 @@ describe('Unit test case for ts embed', () => {
|
|
|
1273
1282
|
rootEle.remove();
|
|
1274
1283
|
});
|
|
1275
1284
|
|
|
1276
|
-
const createRootEleForEmbed = () => {
|
|
1277
|
-
const rootEle = document.createElement('div');
|
|
1278
|
-
rootEle.id = 'myRoot';
|
|
1279
|
-
const tsEmbedDiv = document.createElement('div');
|
|
1280
|
-
tsEmbedDiv.id = 'tsEmbedDiv';
|
|
1281
|
-
rootEle.appendChild(tsEmbedDiv);
|
|
1282
|
-
document.body.appendChild(rootEle);
|
|
1283
|
-
};
|
|
1284
|
-
|
|
1285
1285
|
it('should preRender and hide the iframe', async () => {
|
|
1286
1286
|
createRootEleForEmbed();
|
|
1287
1287
|
|
|
@@ -1416,5 +1416,50 @@ describe('Unit test case for ts embed', () => {
|
|
|
1416
1416
|
|
|
1417
1417
|
expect(warnSpy).toHaveBeenCalledTimes(2);
|
|
1418
1418
|
});
|
|
1419
|
+
it('showPreRender should not preRender if not available', async () => {
|
|
1420
|
+
createRootEleForEmbed();
|
|
1421
|
+
|
|
1422
|
+
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1423
|
+
liveboardId: 'myLiveboardId',
|
|
1424
|
+
});
|
|
1425
|
+
spyOn(libEmbed, 'preRender');
|
|
1426
|
+
spyOn(console, 'error');
|
|
1427
|
+
libEmbed.showPreRender();
|
|
1428
|
+
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
1429
|
+
expect(console.error).toHaveBeenCalledTimes(1);
|
|
1430
|
+
});
|
|
1431
|
+
|
|
1432
|
+
it('should get underlying iframe', async () => {
|
|
1433
|
+
createRootEleForEmbed();
|
|
1434
|
+
|
|
1435
|
+
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1436
|
+
liveboardId: 'myLiveboardId',
|
|
1437
|
+
});
|
|
1438
|
+
libEmbed.render();
|
|
1439
|
+
await waitFor(() => !!getIFrameEl());
|
|
1440
|
+
|
|
1441
|
+
expect(libEmbed.getUnderlyingFrameElement()).toEqual(getIFrameEl());
|
|
1442
|
+
});
|
|
1443
|
+
|
|
1444
|
+
it('should render error message properly', async () => {
|
|
1445
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValueOnce(false);
|
|
1446
|
+
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1447
|
+
liveboardId: 'myLiveboardId',
|
|
1448
|
+
preRenderId: 'test',
|
|
1449
|
+
});
|
|
1450
|
+
await libEmbed.preRender();
|
|
1451
|
+
|
|
1452
|
+
expect(document.getElementById('tsEmbed-pre-render-child-test').innerHTML).toBe('Not logged in');
|
|
1453
|
+
});
|
|
1454
|
+
it('should log error if sync is called before preRender', async () => {
|
|
1455
|
+
jest.spyOn(console, 'error').mockImplementation(jest.fn());
|
|
1456
|
+
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
1457
|
+
liveboardId: 'myLiveboardId',
|
|
1458
|
+
preRenderId: 'test',
|
|
1459
|
+
});
|
|
1460
|
+
await libEmbed.syncPreRenderStyle();
|
|
1461
|
+
expect(console.error).toBeCalledWith('PreRender should be called before using syncPreRenderStyle');
|
|
1462
|
+
(console.error as any).mockClear();
|
|
1463
|
+
});
|
|
1419
1464
|
});
|
|
1420
1465
|
});
|