@thoughtspot/visual-embed-sdk 1.45.2 → 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/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/liveboard.d.ts +38 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +38 -10
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +179 -7
- package/cjs/src/embed/liveboard.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.map +1 -1
- package/cjs/src/types.d.ts +192 -40
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +184 -19
- 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.d.ts +15 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +33 -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-BdkKLLo1.js → index-BuwECGdm.js} +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/liveboard.d.ts +38 -1
- package/dist/src/embed/liveboard.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 +192 -40
- 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.d.ts +15 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +364 -52
- package/dist/tsembed-react.js +363 -51
- package/dist/tsembed.es.js +364 -52
- package/dist/tsembed.js +363 -51
- package/dist/visual-embed-sdk-react-full.d.ts +696 -342
- package/dist/visual-embed-sdk-react.d.ts +685 -331
- package/dist/visual-embed-sdk.d.ts +757 -379
- package/lib/package.json +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/liveboard.d.ts +38 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +39 -11
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +179 -7
- package/lib/src/embed/liveboard.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.map +1 -1
- package/lib/src/types.d.ts +192 -40
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +184 -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.d.ts +15 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +30 -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/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/liveboard.spec.ts +264 -10
- package/src/embed/liveboard.ts +100 -11
- package/src/errors.ts +1 -0
- package/src/index.ts +5 -1
- package/src/types.ts +193 -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.spec.ts +56 -0
- package/src/utils.ts +36 -0
|
@@ -295,7 +295,9 @@ describe('ConversationEmbed', () => {
|
|
|
295
295
|
searchOptions: {
|
|
296
296
|
searchQuery: 'searchQuery',
|
|
297
297
|
},
|
|
298
|
-
|
|
298
|
+
spotterSidebarConfig: {
|
|
299
|
+
enablePastConversationsSidebar: true,
|
|
300
|
+
},
|
|
299
301
|
};
|
|
300
302
|
|
|
301
303
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -312,7 +314,9 @@ describe('ConversationEmbed', () => {
|
|
|
312
314
|
searchOptions: {
|
|
313
315
|
searchQuery: 'searchQuery',
|
|
314
316
|
},
|
|
315
|
-
|
|
317
|
+
spotterSidebarConfig: {
|
|
318
|
+
enablePastConversationsSidebar: false,
|
|
319
|
+
},
|
|
316
320
|
};
|
|
317
321
|
|
|
318
322
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -334,7 +338,9 @@ describe('ConversationEmbed', () => {
|
|
|
334
338
|
dataPanelV2: true,
|
|
335
339
|
showSpotterLimitations: true,
|
|
336
340
|
hideSampleQuestions: true,
|
|
337
|
-
|
|
341
|
+
spotterSidebarConfig: {
|
|
342
|
+
enablePastConversationsSidebar: true,
|
|
343
|
+
},
|
|
338
344
|
};
|
|
339
345
|
|
|
340
346
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -345,6 +351,44 @@ describe('ConversationEmbed', () => {
|
|
|
345
351
|
);
|
|
346
352
|
});
|
|
347
353
|
|
|
354
|
+
it('should render the conversation embed with tool response card branding hidden', async () => {
|
|
355
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
356
|
+
worksheetId: 'worksheetId',
|
|
357
|
+
searchOptions: {
|
|
358
|
+
searchQuery: 'searchQuery',
|
|
359
|
+
},
|
|
360
|
+
spotterChatConfig: {
|
|
361
|
+
hideToolResponseCardBranding: true,
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
366
|
+
await conversationEmbed.render();
|
|
367
|
+
expectUrlMatchesWithParams(
|
|
368
|
+
getIFrameSrc(),
|
|
369
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&hideToolResponseCardBranding=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
370
|
+
);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('should render the conversation embed with custom tool response card branding label', async () => {
|
|
374
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
375
|
+
worksheetId: 'worksheetId',
|
|
376
|
+
searchOptions: {
|
|
377
|
+
searchQuery: 'searchQuery',
|
|
378
|
+
},
|
|
379
|
+
spotterChatConfig: {
|
|
380
|
+
toolResponseCardBrandingLabel: 'MyBrand',
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
385
|
+
await conversationEmbed.render();
|
|
386
|
+
expectUrlMatchesWithParams(
|
|
387
|
+
getIFrameSrc(),
|
|
388
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&toolResponseCardBrandingLabel=MyBrand#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
389
|
+
);
|
|
390
|
+
});
|
|
391
|
+
|
|
348
392
|
it('should ensure deprecated ConversationEmbed class maintains same functionality as SpotterEmbed', async () => {
|
|
349
393
|
const viewConfig: SpotterEmbedViewConfig = {
|
|
350
394
|
worksheetId: 'worksheetId',
|
|
@@ -402,4 +446,74 @@ describe('ConversationEmbed', () => {
|
|
|
402
446
|
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&updatedSpotterChatPrompt=false#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
403
447
|
);
|
|
404
448
|
});
|
|
449
|
+
|
|
450
|
+
describe('spotter sidebar config params', () => {
|
|
451
|
+
it.each([
|
|
452
|
+
['enablePastConversationsSidebar', true, 'enablePastConversationsSidebar=true'],
|
|
453
|
+
['spotterSidebarTitle', 'My Conversations', 'spotterSidebarTitle=My%20Conversations'],
|
|
454
|
+
['spotterSidebarDefaultExpanded', true, 'spotterSidebarDefaultExpanded=true'],
|
|
455
|
+
['spotterChatRenameLabel', 'Edit Name', 'spotterChatRenameLabel=Edit%20Name'],
|
|
456
|
+
['spotterChatDeleteLabel', 'Remove', 'spotterChatDeleteLabel=Remove'],
|
|
457
|
+
['spotterDeleteConversationModalTitle', 'Remove Conversation', 'spotterDeleteConversationModalTitle=Remove%20Conversation'],
|
|
458
|
+
['spotterPastConversationAlertMessage', 'Viewing past conversation', 'spotterPastConversationAlertMessage=Viewing%20past%20conversation'],
|
|
459
|
+
['spotterBestPracticesLabel', 'Help Tips', 'spotterBestPracticesLabel=Help%20Tips'],
|
|
460
|
+
['spotterConversationsBatchSize', 50, 'spotterConversationsBatchSize=50'],
|
|
461
|
+
['spotterNewChatButtonTitle', 'Start New Conversation', 'spotterNewChatButtonTitle=Start%20New%20Conversation'],
|
|
462
|
+
['spotterDocumentationUrl', 'https://docs.example.com/spotter', 'spotterDocumentationUrl=https%3A%2F%2Fdocs.example.com%2Fspotter'],
|
|
463
|
+
])('should render with spotterSidebarConfig.%s', async (configKey, configValue, expectedParam) => {
|
|
464
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
465
|
+
worksheetId: 'worksheetId',
|
|
466
|
+
spotterSidebarConfig: {
|
|
467
|
+
[configKey]: configValue,
|
|
468
|
+
},
|
|
469
|
+
};
|
|
470
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
471
|
+
await conversationEmbed.render();
|
|
472
|
+
expectUrlMatchesWithParams(
|
|
473
|
+
getIFrameSrc(),
|
|
474
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&${expectedParam}#/embed/insights/conv-assist?worksheet=worksheetId&query=`,
|
|
475
|
+
);
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
it.each([
|
|
479
|
+
['invalid URL format', 'invalid-url'],
|
|
480
|
+
['invalid protocol (ftp)', 'ftp://docs.example.com/spotter'],
|
|
481
|
+
])('should handle error for spotterSidebarConfig.spotterDocumentationUrl with %s', async (_, invalidUrl) => {
|
|
482
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
483
|
+
worksheetId: 'worksheetId',
|
|
484
|
+
spotterSidebarConfig: {
|
|
485
|
+
spotterDocumentationUrl: invalidUrl,
|
|
486
|
+
},
|
|
487
|
+
};
|
|
488
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
489
|
+
(conversationEmbed as any).handleError = jest.fn();
|
|
490
|
+
await conversationEmbed.render();
|
|
491
|
+
expect((conversationEmbed as any).handleError).toHaveBeenCalledWith(
|
|
492
|
+
expect.objectContaining({
|
|
493
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
494
|
+
message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
495
|
+
code: EmbedErrorCodes.INVALID_URL,
|
|
496
|
+
}),
|
|
497
|
+
);
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
it('should render with multiple spotterSidebarConfig options', async () => {
|
|
501
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
502
|
+
worksheetId: 'worksheetId',
|
|
503
|
+
spotterSidebarConfig: {
|
|
504
|
+
enablePastConversationsSidebar: true,
|
|
505
|
+
spotterSidebarTitle: 'Chats',
|
|
506
|
+
spotterSidebarDefaultExpanded: true,
|
|
507
|
+
spotterNewChatButtonTitle: 'New',
|
|
508
|
+
spotterConversationsBatchSize: 25,
|
|
509
|
+
},
|
|
510
|
+
};
|
|
511
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
512
|
+
await conversationEmbed.render();
|
|
513
|
+
expectUrlMatchesWithParams(
|
|
514
|
+
getIFrameSrc(),
|
|
515
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&enablePastConversationsSidebar=true&spotterSidebarDefaultExpanded=true&spotterSidebarTitle=Chats&spotterConversationsBatchSize=25&spotterNewChatButtonTitle=New#/embed/insights/conv-assist?worksheet=worksheetId&query=`,
|
|
516
|
+
);
|
|
517
|
+
});
|
|
518
|
+
});
|
|
405
519
|
});
|
|
@@ -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
|
}
|