@thoughtspot/visual-embed-sdk 1.45.1 → 1.45.3
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 +1 -1
- package/cjs/src/authToken.d.ts +1 -1
- package/cjs/src/authToken.d.ts.map +1 -1
- package/cjs/src/authToken.js +2 -2
- package/cjs/src/authToken.js.map +1 -1
- package/cjs/src/authToken.spec.js +71 -0
- package/cjs/src/authToken.spec.js.map +1 -1
- package/cjs/src/css-variables.d.ts +48 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +37 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +37 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +24 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +127 -9
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +41 -18
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +96 -3
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +3 -3
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +18 -18
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +7 -7
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +40 -3
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +40 -12
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +180 -8
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +23 -2
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +64 -22
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +138 -19
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.d.ts +1 -0
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +1 -0
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +3 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -2
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/types.d.ts +356 -42
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +227 -20
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js +23 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.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 +9 -1
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +73 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/processTrigger.d.ts +3 -2
- package/cjs/src/utils/processTrigger.d.ts.map +1 -1
- package/cjs/src/utils/processTrigger.js +4 -2
- package/cjs/src/utils/processTrigger.js.map +1 -1
- package/cjs/src/utils.d.ts +20 -1
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +40 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +49 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-Dgzjq7qH.js → index-BuwECGdm.js} +1 -1
- package/dist/src/authToken.d.ts +1 -1
- package/dist/src/authToken.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +48 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +37 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +127 -9
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts +3 -3
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +40 -3
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +23 -2
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +356 -42
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/dist/src/utils/graphql/answerService/answer-queries.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/processTrigger.d.ts +3 -2
- package/dist/src/utils/processTrigger.d.ts.map +1 -1
- package/dist/src/utils.d.ts +20 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +501 -98
- package/dist/tsembed-react.js +500 -97
- package/dist/tsembed.es.js +516 -113
- package/dist/tsembed.js +29956 -29553
- package/dist/visual-embed-sdk-react-full.d.ts +819 -282
- package/dist/visual-embed-sdk-react.d.ts +818 -281
- package/dist/visual-embed-sdk.d.ts +882 -321
- package/lib/package.json +1 -1
- package/lib/src/authToken.d.ts +1 -1
- package/lib/src/authToken.d.ts.map +1 -1
- package/lib/src/authToken.js +2 -2
- package/lib/src/authToken.js.map +1 -1
- package/lib/src/authToken.spec.js +72 -1
- package/lib/src/authToken.spec.js.map +1 -1
- package/lib/src/css-variables.d.ts +48 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +37 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +39 -3
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +24 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +127 -9
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +42 -19
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +96 -3
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +3 -3
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +8 -8
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +18 -18
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +7 -7
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +40 -3
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +41 -13
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +180 -8
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +23 -2
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +64 -22
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +139 -20
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +1 -0
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +1 -0
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +3 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/types.d.ts +356 -42
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +226 -19
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.js +22 -0
- package/lib/src/utils/graphql/answerService/answer-queries.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 +9 -1
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +73 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/processTrigger.d.ts +3 -2
- package/lib/src/utils/processTrigger.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.js +4 -2
- package/lib/src/utils/processTrigger.js.map +1 -1
- package/lib/src/utils.d.ts +20 -1
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +36 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +50 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/package.json +1 -1
- package/src/authToken.spec.ts +91 -2
- package/src/authToken.ts +2 -2
- package/src/css-variables.ts +60 -0
- package/src/embed/app.spec.ts +32 -0
- package/src/embed/app.ts +97 -1
- package/src/embed/conversation.spec.ts +117 -3
- package/src/embed/conversation.ts +188 -29
- package/src/embed/hostEventClient/contracts.ts +4 -4
- package/src/embed/hostEventClient/host-event-client.spec.ts +7 -1
- package/src/embed/hostEventClient/host-event-client.ts +22 -11
- package/src/embed/liveboard.spec.ts +264 -10
- package/src/embed/liveboard.ts +105 -14
- package/src/embed/ts-embed.spec.ts +184 -8
- package/src/embed/ts-embed.ts +81 -24
- package/src/errors.ts +1 -0
- package/src/index.ts +7 -1
- package/src/types.ts +364 -40
- package/src/utils/graphql/answerService/answer-queries.ts +23 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +87 -0
- package/src/utils/graphql/answerService/answerService.ts +13 -1
- package/src/utils/processTrigger.ts +6 -3
- package/src/utils.spec.ts +56 -0
- package/src/utils.ts +44 -0
|
@@ -2,7 +2,7 @@ import isUndefined from 'lodash/isUndefined';
|
|
|
2
2
|
import { ERROR_MESSAGE } from '../errors';
|
|
3
3
|
import { Param, BaseViewConfig, RuntimeFilter, RuntimeParameter, ErrorDetailsTypes, EmbedErrorCodes } from '../types';
|
|
4
4
|
import { TsEmbed } from './ts-embed';
|
|
5
|
-
import { getQueryParamString, getFilterQuery, getRuntimeParameters } from '../utils';
|
|
5
|
+
import { getQueryParamString, getFilterQuery, getRuntimeParameters, validateHttpUrl, setParamIfDefined } from '../utils';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Configuration for search options
|
|
@@ -14,6 +14,106 @@ export interface SearchOptions {
|
|
|
14
14
|
searchQuery: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Configuration for the Spotter sidebar.
|
|
19
|
+
* Can be used in SpotterEmbed and AppEmbed.
|
|
20
|
+
* @group Embed components
|
|
21
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
22
|
+
*/
|
|
23
|
+
export interface SpotterSidebarViewConfig {
|
|
24
|
+
/**
|
|
25
|
+
* Controls the visibility of the past conversations sidebar.
|
|
26
|
+
* @default false
|
|
27
|
+
* @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl
|
|
28
|
+
*/
|
|
29
|
+
enablePastConversationsSidebar?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Custom title text for the sidebar header.
|
|
32
|
+
* Defaults to translated "Spotter" text.
|
|
33
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
34
|
+
*/
|
|
35
|
+
spotterSidebarTitle?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Boolean to set the default expanded state of the sidebar.
|
|
38
|
+
* @default false
|
|
39
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
40
|
+
*/
|
|
41
|
+
spotterSidebarDefaultExpanded?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Custom label text for the rename action in the conversation edit menu.
|
|
44
|
+
* Defaults to translated "Rename" text.
|
|
45
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
46
|
+
*/
|
|
47
|
+
spotterChatRenameLabel?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Custom label text for the delete action in the conversation edit menu.
|
|
50
|
+
* Defaults to translated "DELETE" text.
|
|
51
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
52
|
+
*/
|
|
53
|
+
spotterChatDeleteLabel?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Custom title text for the delete conversation confirmation modal.
|
|
56
|
+
* Defaults to translated "Delete chat" text.
|
|
57
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
58
|
+
*/
|
|
59
|
+
spotterDeleteConversationModalTitle?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Custom message text for the past conversation banner alert.
|
|
62
|
+
* Defaults to translated alert message.
|
|
63
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
64
|
+
*/
|
|
65
|
+
spotterPastConversationAlertMessage?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Custom URL for the documentation/best practices link.
|
|
68
|
+
* Defaults to ThoughtSpot docs URL based on release version.
|
|
69
|
+
* Note: URL must include the protocol (e.g., `https://www.example.com`).
|
|
70
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
71
|
+
*/
|
|
72
|
+
spotterDocumentationUrl?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Custom label text for the best practices button in the footer.
|
|
75
|
+
* Defaults to translated "Best Practices" text.
|
|
76
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
77
|
+
*/
|
|
78
|
+
spotterBestPracticesLabel?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Number of conversations to fetch per batch when loading conversation history.
|
|
81
|
+
* @default 30
|
|
82
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
83
|
+
*/
|
|
84
|
+
spotterConversationsBatchSize?: number;
|
|
85
|
+
/**
|
|
86
|
+
* Custom title text for the "New Chat" button in the sidebar.
|
|
87
|
+
* Defaults to translated "New Chat" text.
|
|
88
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
89
|
+
*/
|
|
90
|
+
spotterNewChatButtonTitle?: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Configuration for customizing Spotter chat UI branding.
|
|
95
|
+
* @group Embed components
|
|
96
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl
|
|
97
|
+
*/
|
|
98
|
+
export interface SpotterChatViewConfig {
|
|
99
|
+
/**
|
|
100
|
+
* Hides the ThoughtSpot logo/icon in tool response
|
|
101
|
+
* cards. The branding label prefix is controlled
|
|
102
|
+
* separately via `toolResponseCardBrandingLabel`.
|
|
103
|
+
* External MCP tool branding is not affected.
|
|
104
|
+
* @default false
|
|
105
|
+
*/
|
|
106
|
+
hideToolResponseCardBranding?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Custom label to replace the "ThoughtSpot" prefix
|
|
109
|
+
* in tool response cards. Set to an empty string
|
|
110
|
+
* `''` to hide the prefix entirely. Works
|
|
111
|
+
* independently of `hideToolResponseCardBranding`.
|
|
112
|
+
* External MCP tool branding is not affected.
|
|
113
|
+
*/
|
|
114
|
+
toolResponseCardBrandingLabel?: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
17
117
|
/**
|
|
18
118
|
* The configuration for the embedded spotterEmbed options.
|
|
19
119
|
* @group Embed components
|
|
@@ -169,8 +269,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
|
|
|
169
269
|
*/
|
|
170
270
|
excludeRuntimeParametersfromURL?: boolean;
|
|
171
271
|
/**
|
|
172
|
-
*
|
|
173
|
-
* sidebar.
|
|
272
|
+
* updatedSpotterChatPrompt : Controls the updated spotter chat prompt.
|
|
174
273
|
*
|
|
175
274
|
* Supported embed types: `SpotterEmbed`
|
|
176
275
|
* @default false
|
|
@@ -178,28 +277,48 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
|
|
|
178
277
|
* ```js
|
|
179
278
|
* const embed = new SpotterEmbed('#tsEmbed', {
|
|
180
279
|
* ... //other embed view config
|
|
181
|
-
*
|
|
280
|
+
* updatedSpotterChatPrompt : true,
|
|
182
281
|
* })
|
|
183
282
|
* ```
|
|
184
283
|
* @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl
|
|
185
284
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
285
|
+
updatedSpotterChatPrompt?: boolean;
|
|
188
286
|
/**
|
|
189
|
-
*
|
|
287
|
+
* Configuration for the Spotter sidebar UI customization.
|
|
288
|
+
*
|
|
289
|
+
* Supported embed types: `SpotterEmbed`, `AppEmbed`
|
|
290
|
+
* @example
|
|
291
|
+
* ```js
|
|
292
|
+
* const embed = new SpotterEmbed('#tsEmbed', {
|
|
293
|
+
* ... //other embed view config
|
|
294
|
+
* spotterSidebarConfig: {
|
|
295
|
+
* enablePastConversationsSidebar: true,
|
|
296
|
+
* spotterSidebarTitle: 'My Conversations',
|
|
297
|
+
* spotterSidebarDefaultExpanded: true,
|
|
298
|
+
* },
|
|
299
|
+
* })
|
|
300
|
+
* ```
|
|
301
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
302
|
+
*/
|
|
303
|
+
spotterSidebarConfig?: SpotterSidebarViewConfig;
|
|
304
|
+
/**
|
|
305
|
+
* Configuration for customizing Spotter chat UI
|
|
306
|
+
* branding in tool response cards.
|
|
190
307
|
*
|
|
191
308
|
* Supported embed types: `SpotterEmbed`
|
|
192
|
-
* @default false
|
|
193
309
|
* @example
|
|
194
310
|
* ```js
|
|
195
311
|
* const embed = new SpotterEmbed('#tsEmbed', {
|
|
196
312
|
* ... //other embed view config
|
|
197
|
-
*
|
|
313
|
+
* spotterChatConfig: {
|
|
314
|
+
* hideToolResponseCardBranding: true,
|
|
315
|
+
* toolResponseCardBrandingLabel: 'MyBrand',
|
|
316
|
+
* },
|
|
198
317
|
* })
|
|
199
318
|
* ```
|
|
200
|
-
* @version SDK: 1.
|
|
319
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl
|
|
201
320
|
*/
|
|
202
|
-
|
|
321
|
+
spotterChatConfig?: SpotterChatViewConfig;
|
|
203
322
|
}
|
|
204
323
|
|
|
205
324
|
/**
|
|
@@ -246,14 +365,30 @@ export class SpotterEmbed extends TsEmbed {
|
|
|
246
365
|
dataPanelV2,
|
|
247
366
|
showSpotterLimitations,
|
|
248
367
|
hideSampleQuestions,
|
|
249
|
-
enablePastConversationsSidebar,
|
|
250
368
|
runtimeFilters,
|
|
251
369
|
excludeRuntimeFiltersfromURL,
|
|
252
370
|
runtimeParameters,
|
|
253
371
|
excludeRuntimeParametersfromURL,
|
|
254
372
|
updatedSpotterChatPrompt,
|
|
373
|
+
spotterSidebarConfig,
|
|
374
|
+
spotterChatConfig,
|
|
255
375
|
} = this.viewConfig;
|
|
256
376
|
|
|
377
|
+
// Extract sidebar config properties
|
|
378
|
+
const {
|
|
379
|
+
enablePastConversationsSidebar,
|
|
380
|
+
spotterSidebarTitle,
|
|
381
|
+
spotterSidebarDefaultExpanded,
|
|
382
|
+
spotterChatRenameLabel,
|
|
383
|
+
spotterChatDeleteLabel,
|
|
384
|
+
spotterDeleteConversationModalTitle,
|
|
385
|
+
spotterPastConversationAlertMessage,
|
|
386
|
+
spotterDocumentationUrl,
|
|
387
|
+
spotterBestPracticesLabel,
|
|
388
|
+
spotterConversationsBatchSize,
|
|
389
|
+
spotterNewChatButtonTitle,
|
|
390
|
+
} = spotterSidebarConfig || {};
|
|
391
|
+
|
|
257
392
|
if (!worksheetId) {
|
|
258
393
|
this.handleError({
|
|
259
394
|
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
@@ -264,27 +399,50 @@ export class SpotterEmbed extends TsEmbed {
|
|
|
264
399
|
}
|
|
265
400
|
const queryParams = this.getBaseQueryParams();
|
|
266
401
|
queryParams[Param.SpotterEnabled] = true;
|
|
267
|
-
if (!isUndefined(disableSourceSelection)) {
|
|
268
|
-
queryParams[Param.DisableSourceSelection] = !!disableSourceSelection;
|
|
269
|
-
}
|
|
270
|
-
if (!isUndefined(hideSourceSelection)) {
|
|
271
|
-
queryParams[Param.HideSourceSelection] = !!hideSourceSelection;
|
|
272
|
-
}
|
|
273
402
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
403
|
+
// Boolean params
|
|
404
|
+
setParamIfDefined(queryParams, Param.DisableSourceSelection, disableSourceSelection, true);
|
|
405
|
+
setParamIfDefined(queryParams, Param.HideSourceSelection, hideSourceSelection, true);
|
|
406
|
+
setParamIfDefined(queryParams, Param.DataPanelV2Enabled, dataPanelV2, true);
|
|
407
|
+
setParamIfDefined(queryParams, Param.ShowSpotterLimitations, showSpotterLimitations, true);
|
|
408
|
+
setParamIfDefined(queryParams, Param.HideSampleQuestions, hideSampleQuestions, true);
|
|
409
|
+
setParamIfDefined(queryParams, Param.UpdatedSpotterChatPrompt, updatedSpotterChatPrompt, true);
|
|
410
|
+
setParamIfDefined(queryParams, Param.SpotterSidebarDefaultExpanded, spotterSidebarDefaultExpanded, true);
|
|
277
411
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
412
|
+
// String params
|
|
413
|
+
setParamIfDefined(queryParams, Param.SpotterSidebarTitle, spotterSidebarTitle);
|
|
414
|
+
setParamIfDefined(queryParams, Param.SpotterChatRenameLabel, spotterChatRenameLabel);
|
|
415
|
+
setParamIfDefined(queryParams, Param.SpotterChatDeleteLabel, spotterChatDeleteLabel);
|
|
416
|
+
setParamIfDefined(queryParams, Param.SpotterDeleteConversationModalTitle, spotterDeleteConversationModalTitle);
|
|
417
|
+
setParamIfDefined(queryParams, Param.SpotterPastConversationAlertMessage, spotterPastConversationAlertMessage);
|
|
418
|
+
setParamIfDefined(queryParams, Param.SpotterBestPracticesLabel, spotterBestPracticesLabel);
|
|
419
|
+
setParamIfDefined(queryParams, Param.SpotterConversationsBatchSize, spotterConversationsBatchSize);
|
|
420
|
+
setParamIfDefined(queryParams, Param.SpotterNewChatButtonTitle, spotterNewChatButtonTitle);
|
|
281
421
|
|
|
282
|
-
|
|
283
|
-
|
|
422
|
+
// URL param with validation
|
|
423
|
+
if (spotterDocumentationUrl !== undefined) {
|
|
424
|
+
const [isValid, validationError] = validateHttpUrl(spotterDocumentationUrl);
|
|
425
|
+
if (isValid) {
|
|
426
|
+
queryParams[Param.SpotterDocumentationUrl] = spotterDocumentationUrl;
|
|
427
|
+
} else {
|
|
428
|
+
this.handleError({
|
|
429
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
430
|
+
message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
431
|
+
code: EmbedErrorCodes.INVALID_URL,
|
|
432
|
+
error: validationError?.message || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
284
435
|
}
|
|
285
436
|
|
|
286
|
-
|
|
287
|
-
|
|
437
|
+
// Handle spotterChatConfig params
|
|
438
|
+
if (spotterChatConfig) {
|
|
439
|
+
const {
|
|
440
|
+
hideToolResponseCardBranding,
|
|
441
|
+
toolResponseCardBrandingLabel,
|
|
442
|
+
} = spotterChatConfig;
|
|
443
|
+
|
|
444
|
+
setParamIfDefined(queryParams, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
|
|
445
|
+
setParamIfDefined(queryParams, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
|
|
288
446
|
}
|
|
289
447
|
|
|
290
448
|
return queryParams;
|
|
@@ -298,11 +456,12 @@ export class SpotterEmbed extends TsEmbed {
|
|
|
298
456
|
excludeRuntimeFiltersfromURL,
|
|
299
457
|
runtimeParameters,
|
|
300
458
|
excludeRuntimeParametersfromURL,
|
|
301
|
-
|
|
459
|
+
spotterSidebarConfig,
|
|
302
460
|
} = this.viewConfig;
|
|
303
461
|
const path = 'insights/conv-assist';
|
|
304
462
|
const queryParams = this.getEmbedParamsObject();
|
|
305
463
|
|
|
464
|
+
const enablePastConversationsSidebar = spotterSidebarConfig?.enablePastConversationsSidebar;
|
|
306
465
|
if (!isUndefined(enablePastConversationsSidebar)) {
|
|
307
466
|
queryParams[Param.EnablePastConversationsSidebar] = !!enablePastConversationsSidebar;
|
|
308
467
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HostEvent } from '../../types';
|
|
1
|
+
import { ContextType, HostEvent } from '../../types';
|
|
2
2
|
|
|
3
3
|
export enum UIPassthroughEvent {
|
|
4
4
|
PinAnswerToLiveboard = 'addVizToPinboard',
|
|
@@ -103,7 +103,7 @@ export type HostEventRequest<HostEventT extends HostEvent> =
|
|
|
103
103
|
? UIPassthroughRequest<EmbedApiHostEventMapping[HostEventT]>
|
|
104
104
|
: any;
|
|
105
105
|
|
|
106
|
-
export type HostEventResponse<HostEventT extends HostEvent> =
|
|
106
|
+
export type HostEventResponse<HostEventT extends HostEvent, ContextT extends ContextType> =
|
|
107
107
|
HostEventT extends keyof EmbedApiHostEventMapping
|
|
108
108
|
? UIPassthroughResponse<EmbedApiHostEventMapping[HostEventT]>
|
|
109
109
|
: any;
|
|
@@ -111,5 +111,5 @@ export type HostEventResponse<HostEventT extends HostEvent> =
|
|
|
111
111
|
// trigger response and request
|
|
112
112
|
export type TriggerPayload<PayloadT, HostEventT extends HostEvent> =
|
|
113
113
|
PayloadT | HostEventRequest<HostEventT>;
|
|
114
|
-
export type TriggerResponse<PayloadT, HostEventT extends HostEvent> =
|
|
115
|
-
PayloadT extends HostEventRequest<HostEventT> ? HostEventResponse<HostEventT> : any;
|
|
114
|
+
export type TriggerResponse<PayloadT, HostEventT extends HostEvent, ContextT extends ContextType> =
|
|
115
|
+
PayloadT extends HostEventRequest<HostEventT> ? HostEventResponse<HostEventT, ContextT> : any;
|
|
@@ -54,6 +54,7 @@ describe('HostEventClient', () => {
|
|
|
54
54
|
type: apiName,
|
|
55
55
|
parameters,
|
|
56
56
|
},
|
|
57
|
+
undefined,
|
|
57
58
|
);
|
|
58
59
|
expect(result).toEqual(await triggerResponse);
|
|
59
60
|
});
|
|
@@ -148,6 +149,7 @@ describe('HostEventClient', () => {
|
|
|
148
149
|
HostEvent.UIPassthrough,
|
|
149
150
|
'http://localhost',
|
|
150
151
|
{ parameters: payload, type: UIPassthroughEvent.PinAnswerToLiveboard },
|
|
152
|
+
undefined,
|
|
151
153
|
);
|
|
152
154
|
expect(result).toEqual(mockResponse.value);
|
|
153
155
|
});
|
|
@@ -185,6 +187,7 @@ describe('HostEventClient', () => {
|
|
|
185
187
|
parameters: payload,
|
|
186
188
|
type: 'saveAnswer',
|
|
187
189
|
},
|
|
190
|
+
undefined,
|
|
188
191
|
);
|
|
189
192
|
expect(result).toEqual({ answerId: 'newAnswer', ...mockResponse[0].value });
|
|
190
193
|
});
|
|
@@ -198,7 +201,7 @@ describe('HostEventClient', () => {
|
|
|
198
201
|
|
|
199
202
|
const result = await client.triggerHostEvent(hostEvent, payload);
|
|
200
203
|
|
|
201
|
-
expect(client.hostEventFallback).toHaveBeenCalledWith(hostEvent, payload);
|
|
204
|
+
expect(client.hostEventFallback).toHaveBeenCalledWith(hostEvent, payload, undefined);
|
|
202
205
|
expect(result).toEqual(mockResponse);
|
|
203
206
|
});
|
|
204
207
|
|
|
@@ -223,6 +226,7 @@ describe('HostEventClient', () => {
|
|
|
223
226
|
HostEvent.Pin,
|
|
224
227
|
mockThoughtSpotHost,
|
|
225
228
|
{},
|
|
229
|
+
undefined,
|
|
226
230
|
);
|
|
227
231
|
expect(result).toEqual([mockResponse]);
|
|
228
232
|
});
|
|
@@ -248,6 +252,7 @@ describe('HostEventClient', () => {
|
|
|
248
252
|
HostEvent.Save,
|
|
249
253
|
mockThoughtSpotHost,
|
|
250
254
|
{},
|
|
255
|
+
undefined,
|
|
251
256
|
);
|
|
252
257
|
expect(result).toEqual([mockResponse]);
|
|
253
258
|
});
|
|
@@ -303,6 +308,7 @@ describe('HostEventClient', () => {
|
|
|
303
308
|
parameters: { ...payload, pinboardId: 'test', newPinboardName: 'testLiveboard' },
|
|
304
309
|
type: 'addVizToPinboard',
|
|
305
310
|
},
|
|
311
|
+
undefined,
|
|
306
312
|
);
|
|
307
313
|
expect(result).toEqual({
|
|
308
314
|
pinboardId: 'testLiveboard',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HostEvent } from '../../types';
|
|
1
|
+
import { ContextType, HostEvent } from '../../types';
|
|
2
2
|
import { processTrigger as processTriggerService } from '../../utils/processTrigger';
|
|
3
3
|
import { getEmbedConfig } from '../embedConfig';
|
|
4
4
|
import {
|
|
@@ -23,7 +23,7 @@ export class HostEventClient {
|
|
|
23
23
|
* @param {any} data Data to send with the host event
|
|
24
24
|
* @returns {Promise<any>} - the response from the process trigger
|
|
25
25
|
*/
|
|
26
|
-
protected async processTrigger(message: HostEvent, data: any): Promise<any> {
|
|
26
|
+
protected async processTrigger(message: HostEvent, data: any, context?: ContextType): Promise<any> {
|
|
27
27
|
if (!this.iFrame) {
|
|
28
28
|
throw new Error('Iframe element is not set');
|
|
29
29
|
}
|
|
@@ -34,14 +34,16 @@ export class HostEventClient {
|
|
|
34
34
|
message,
|
|
35
35
|
thoughtspotHost,
|
|
36
36
|
data,
|
|
37
|
+
context,
|
|
37
38
|
);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
public async handleHostEventWithParam<UIPassthroughEventT extends UIPassthroughEvent>(
|
|
41
42
|
apiName: UIPassthroughEventT,
|
|
42
43
|
parameters: UIPassthroughRequest<UIPassthroughEventT>,
|
|
44
|
+
context?: ContextType,
|
|
43
45
|
): Promise<UIPassthroughResponse<UIPassthroughEventT>> {
|
|
44
|
-
const response = (await this.triggerUIPassthroughApi(apiName, parameters))
|
|
46
|
+
const response = (await this.triggerUIPassthroughApi(apiName, parameters, context))
|
|
45
47
|
?.filter?.((r) => r.error || r.value)[0];
|
|
46
48
|
|
|
47
49
|
if (!response) {
|
|
@@ -65,8 +67,9 @@ export class HostEventClient {
|
|
|
65
67
|
public async hostEventFallback(
|
|
66
68
|
hostEvent: HostEvent,
|
|
67
69
|
data: any,
|
|
70
|
+
context?: ContextType,
|
|
68
71
|
): Promise<any> {
|
|
69
|
-
return this.processTrigger(hostEvent, data);
|
|
72
|
+
return this.processTrigger(hostEvent, data, context);
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
/**
|
|
@@ -80,20 +83,22 @@ export class HostEventClient {
|
|
|
80
83
|
public async triggerUIPassthroughApi<UIPassthroughEventT extends UIPassthroughEvent>(
|
|
81
84
|
apiName: UIPassthroughEventT,
|
|
82
85
|
parameters: UIPassthroughRequest<UIPassthroughEventT>,
|
|
86
|
+
context?: ContextType,
|
|
83
87
|
): Promise<UIPassthroughArrayResponse<UIPassthroughEventT>> {
|
|
84
88
|
const res = await this.processTrigger(HostEvent.UIPassthrough, {
|
|
85
89
|
type: apiName,
|
|
86
90
|
parameters,
|
|
87
|
-
});
|
|
91
|
+
}, context);
|
|
88
92
|
|
|
89
93
|
return res;
|
|
90
94
|
}
|
|
91
95
|
|
|
92
96
|
protected async handlePinEvent(
|
|
93
97
|
payload: HostEventRequest<HostEvent.Pin>,
|
|
94
|
-
|
|
98
|
+
context?: ContextType,
|
|
99
|
+
): Promise<HostEventResponse<HostEvent.Pin, ContextType>> {
|
|
95
100
|
if (!payload || !('newVizName' in payload)) {
|
|
96
|
-
return this.hostEventFallback(HostEvent.Pin, payload);
|
|
101
|
+
return this.hostEventFallback(HostEvent.Pin, payload, context);
|
|
97
102
|
}
|
|
98
103
|
|
|
99
104
|
const formattedPayload = {
|
|
@@ -104,6 +109,7 @@ export class HostEventClient {
|
|
|
104
109
|
|
|
105
110
|
const data = await this.handleHostEventWithParam(
|
|
106
111
|
UIPassthroughEvent.PinAnswerToLiveboard, formattedPayload,
|
|
112
|
+
context as ContextType,
|
|
107
113
|
);
|
|
108
114
|
|
|
109
115
|
return {
|
|
@@ -114,14 +120,16 @@ export class HostEventClient {
|
|
|
114
120
|
|
|
115
121
|
protected async handleSaveAnswerEvent(
|
|
116
122
|
payload: HostEventRequest<HostEvent.SaveAnswer>,
|
|
123
|
+
context?: ContextType,
|
|
117
124
|
): Promise<any> {
|
|
118
125
|
if (!payload || !('name' in payload) || !('description' in payload)) {
|
|
119
126
|
// Save is the fallback for SaveAnswer
|
|
120
|
-
return this.hostEventFallback(HostEvent.Save, payload);
|
|
127
|
+
return this.hostEventFallback(HostEvent.Save, payload, context);
|
|
121
128
|
}
|
|
122
129
|
|
|
123
130
|
const data = await this.handleHostEventWithParam(
|
|
124
131
|
UIPassthroughEvent.SaveAnswer, payload,
|
|
132
|
+
context as ContextType,
|
|
125
133
|
);
|
|
126
134
|
return {
|
|
127
135
|
...data,
|
|
@@ -132,19 +140,22 @@ export class HostEventClient {
|
|
|
132
140
|
public async triggerHostEvent<
|
|
133
141
|
HostEventT extends HostEvent,
|
|
134
142
|
PayloadT,
|
|
143
|
+
ContextT extends ContextType,
|
|
135
144
|
>(
|
|
136
145
|
hostEvent: HostEventT,
|
|
137
146
|
payload?: TriggerPayload<PayloadT, HostEventT>,
|
|
138
|
-
|
|
147
|
+
context?: ContextT,
|
|
148
|
+
): Promise<TriggerResponse<PayloadT, HostEventT, ContextType>> {
|
|
139
149
|
switch (hostEvent) {
|
|
140
150
|
case HostEvent.Pin:
|
|
141
|
-
return this.handlePinEvent(payload as HostEventRequest<HostEvent.Pin
|
|
151
|
+
return this.handlePinEvent(payload as HostEventRequest<HostEvent.Pin>, context as ContextType) as any;
|
|
142
152
|
case HostEvent.SaveAnswer:
|
|
143
153
|
return this.handleSaveAnswerEvent(
|
|
144
154
|
payload as HostEventRequest<HostEvent.SaveAnswer>,
|
|
155
|
+
context as ContextType,
|
|
145
156
|
) as any;
|
|
146
157
|
default:
|
|
147
|
-
return this.hostEventFallback(hostEvent, payload);
|
|
158
|
+
return this.hostEventFallback(hostEvent, payload, context);
|
|
148
159
|
}
|
|
149
160
|
}
|
|
150
161
|
}
|