@thoughtspot/visual-embed-sdk 1.41.0 → 1.41.1
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 +2 -4
- package/cjs/package.json +1 -1
- package/cjs/src/authToken.d.ts +1 -0
- package/cjs/src/authToken.d.ts.map +1 -1
- package/cjs/src/authToken.js +13 -3
- package/cjs/src/authToken.js.map +1 -1
- package/cjs/src/authToken.spec.js +29 -0
- package/cjs/src/authToken.spec.js.map +1 -1
- package/cjs/src/css-variables.d.ts +2 -1
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +16 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +4 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +10 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +2 -2
- package/cjs/src/embed/liveboard.d.ts +32 -0
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +7 -1
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +85 -11
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.spec.js +20 -10
- package/cjs/src/embed/sage.spec.js.map +1 -1
- package/cjs/src/embed/search.js +1 -1
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +10 -10
- package/cjs/src/embed/search.spec.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 +5 -1
- package/cjs/src/embed/ts-embed.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/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +2 -1
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +1 -1
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +29 -5
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +25 -1
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils.d.ts +14 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +22 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +10 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-B_mxAan8.js → index-DQueHwfQ.js} +1 -1
- package/dist/src/authToken.d.ts +1 -0
- package/dist/src/authToken.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +2 -1
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +16 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +2 -2
- package/dist/src/embed/liveboard.d.ts +32 -0
- package/dist/src/embed/liveboard.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/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +29 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +14 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +77 -9
- package/dist/tsembed-react.js +76 -8
- package/dist/tsembed.es.js +75 -8
- package/dist/tsembed.js +74 -7
- package/dist/visual-embed-sdk-react-full.d.ts +83 -9
- package/dist/visual-embed-sdk-react.d.ts +83 -9
- package/dist/visual-embed-sdk.d.ts +83 -9
- package/lib/package.json +1 -1
- package/lib/src/authToken.d.ts +1 -0
- package/lib/src/authToken.d.ts.map +1 -1
- package/lib/src/authToken.js +11 -2
- package/lib/src/authToken.js.map +1 -1
- package/lib/src/authToken.spec.js +30 -1
- package/lib/src/authToken.spec.js.map +1 -1
- package/lib/src/css-variables.d.ts +2 -1
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +16 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +4 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +10 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +2 -2
- package/lib/src/embed/liveboard.d.ts +32 -0
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +7 -1
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +85 -11
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.spec.js +20 -10
- package/lib/src/embed/sage.spec.js.map +1 -1
- package/lib/src/embed/search.js +1 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +11 -11
- package/lib/src/embed/search.spec.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 +5 -1
- package/lib/src/embed/ts-embed.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/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +2 -1
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +1 -1
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +29 -5
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +25 -1
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +14 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +20 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +11 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +83 -9
- package/package.json +1 -1
- package/src/authToken.spec.ts +48 -1
- package/src/authToken.ts +13 -2
- package/src/css-variables.ts +2 -1
- package/src/embed/app.spec.ts +14 -0
- package/src/embed/app.ts +23 -1
- package/src/embed/conversation.ts +2 -2
- package/src/embed/liveboard.spec.ts +112 -14
- package/src/embed/liveboard.ts +65 -23
- package/src/embed/sage.spec.ts +24 -10
- package/src/embed/search.spec.ts +13 -14
- package/src/embed/search.ts +1 -1
- package/src/embed/ts-embed.ts +7 -1
- package/src/errors.ts +1 -0
- package/src/react/index.spec.tsx +1 -1
- package/src/react/index.tsx +4 -2
- package/src/types.ts +27 -3
- package/src/utils.spec.ts +18 -0
- package/src/utils.ts +21 -0
package/src/embed/search.spec.ts
CHANGED
|
@@ -6,9 +6,7 @@ import {
|
|
|
6
6
|
} from './search';
|
|
7
7
|
import * as authInstance from '../auth';
|
|
8
8
|
import { init } from '../index';
|
|
9
|
-
import {
|
|
10
|
-
Action, AuthType, EmbedEvent, RuntimeFilterOp,
|
|
11
|
-
} from '../types';
|
|
9
|
+
import { Action, AuthType, EmbedEvent, RuntimeFilterOp } from '../types';
|
|
12
10
|
import {
|
|
13
11
|
executeAfterWait,
|
|
14
12
|
getDocumentBody,
|
|
@@ -58,7 +56,7 @@ describe('Search embed tests', () => {
|
|
|
58
56
|
await executeAfterWait(() => {
|
|
59
57
|
expectUrlMatchesWithParams(
|
|
60
58
|
getIFrameSrc(),
|
|
61
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&enableDataPanelV2=
|
|
59
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&enableDataPanelV2=true&dataSourceMode=expand&useLastSelectedSources=false${prefixParams}#/embed/answer`,
|
|
62
60
|
);
|
|
63
61
|
});
|
|
64
62
|
});
|
|
@@ -444,7 +442,7 @@ describe('Search embed tests', () => {
|
|
|
444
442
|
await executeAfterWait(() => {
|
|
445
443
|
expectUrlMatchesWithParams(
|
|
446
444
|
getIFrameSrc(),
|
|
447
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
445
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=true${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
448
446
|
);
|
|
449
447
|
});
|
|
450
448
|
});
|
|
@@ -459,7 +457,7 @@ describe('Search embed tests', () => {
|
|
|
459
457
|
await executeAfterWait(() => {
|
|
460
458
|
expectUrlMatchesWithParams(
|
|
461
459
|
getIFrameSrc(),
|
|
462
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSources=[%22data-source-1%22]&dataSourceMode=expand&enableDataPanelV2=
|
|
460
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSources=[%22data-source-1%22]&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
463
461
|
);
|
|
464
462
|
});
|
|
465
463
|
});
|
|
@@ -474,7 +472,7 @@ describe('Search embed tests', () => {
|
|
|
474
472
|
await executeAfterWait(() => {
|
|
475
473
|
expectUrlMatchesWithParams(
|
|
476
474
|
getIFrameSrc(),
|
|
477
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSources=[%22data-source-1%22]&dataSourceMode=expand&enableDataPanelV2=
|
|
475
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSources=[%22data-source-1%22]&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
478
476
|
);
|
|
479
477
|
});
|
|
480
478
|
});
|
|
@@ -505,7 +503,7 @@ describe('Search embed tests', () => {
|
|
|
505
503
|
await executeAfterWait(() => {
|
|
506
504
|
expectUrlMatchesWithParams(
|
|
507
505
|
getIFrameSrc(),
|
|
508
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
506
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false&hideSearchBar=true${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
509
507
|
);
|
|
510
508
|
});
|
|
511
509
|
});
|
|
@@ -528,13 +526,14 @@ describe('Search embed tests', () => {
|
|
|
528
526
|
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
529
527
|
...defaultViewConfig,
|
|
530
528
|
// eslint-disable-next-line max-len
|
|
531
|
-
dataPanelCustomGroupsAccordionInitialState:
|
|
529
|
+
dataPanelCustomGroupsAccordionInitialState:
|
|
530
|
+
DataPanelCustomColumnGroupsAccordionState.EXPAND_FIRST,
|
|
532
531
|
});
|
|
533
532
|
searchEmbed.render();
|
|
534
533
|
await executeAfterWait(() => {
|
|
535
534
|
expectUrlMatchesWithParams(
|
|
536
535
|
getIFrameSrc(),
|
|
537
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
536
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false&dataPanelCustomGroupsAccordionInitialState=EXPAND_FIRST${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
538
537
|
);
|
|
539
538
|
});
|
|
540
539
|
});
|
|
@@ -566,7 +565,7 @@ describe('Search embed tests', () => {
|
|
|
566
565
|
await executeAfterWait(() => {
|
|
567
566
|
expectUrlMatchesWithParams(
|
|
568
567
|
getIFrameSrc(),
|
|
569
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
568
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
570
569
|
);
|
|
571
570
|
});
|
|
572
571
|
|
|
@@ -612,7 +611,7 @@ describe('Search embed tests', () => {
|
|
|
612
611
|
await executeAfterWait(() => {
|
|
613
612
|
expectUrlMatchesWithParams(
|
|
614
613
|
getIFrameSrc(),
|
|
615
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&executeSearch=true&dataSourceMode=expand&enableDataPanelV2=
|
|
614
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&executeSearch=true&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
616
615
|
);
|
|
617
616
|
});
|
|
618
617
|
|
|
@@ -640,7 +639,7 @@ describe('Search embed tests', () => {
|
|
|
640
639
|
await executeAfterWait(() => {
|
|
641
640
|
expectUrlMatchesWithParams(
|
|
642
641
|
getIFrameSrc(),
|
|
643
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
642
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false&searchTokenString=[commit date][revenue]${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
644
643
|
);
|
|
645
644
|
});
|
|
646
645
|
});
|
|
@@ -660,7 +659,7 @@ describe('Search embed tests', () => {
|
|
|
660
659
|
await executeAfterWait(() => {
|
|
661
660
|
expectUrlMatchesWithParams(
|
|
662
661
|
getIFrameSrc(),
|
|
663
|
-
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=
|
|
662
|
+
`http://${thoughtSpotHost}/v2/?${defaultParamsWithHiddenActions}&dataSourceMode=expand&enableDataPanelV2=true&useLastSelectedSources=false&searchTokenString=[commit date][revenue]${prefixParams}#/embed/saved-answer/${answerId}`,
|
|
664
663
|
);
|
|
665
664
|
});
|
|
666
665
|
|
package/src/embed/search.ts
CHANGED
|
@@ -392,7 +392,7 @@ export class SearchEmbed extends TsEmbed {
|
|
|
392
392
|
dataSources,
|
|
393
393
|
excludeRuntimeFiltersfromURL,
|
|
394
394
|
hideSearchBar,
|
|
395
|
-
dataPanelV2 =
|
|
395
|
+
dataPanelV2 = true,
|
|
396
396
|
useLastSelectedSources = false,
|
|
397
397
|
runtimeParameters,
|
|
398
398
|
collapseSearchBarInitially = false,
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -1279,13 +1279,19 @@ export class TsEmbed {
|
|
|
1279
1279
|
* Creates the preRender shell
|
|
1280
1280
|
* @param showPreRenderByDefault - Show the preRender after render, hidden by default
|
|
1281
1281
|
*/
|
|
1282
|
-
public async preRender(showPreRenderByDefault = false): Promise<TsEmbed> {
|
|
1282
|
+
public async preRender(showPreRenderByDefault = false, replaceExistingPreRender = false): Promise<TsEmbed> {
|
|
1283
1283
|
if (!this.viewConfig.preRenderId) {
|
|
1284
1284
|
logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
|
|
1285
1285
|
return this;
|
|
1286
1286
|
}
|
|
1287
1287
|
this.isPreRendered = true;
|
|
1288
1288
|
this.showPreRenderByDefault = showPreRenderByDefault;
|
|
1289
|
+
|
|
1290
|
+
const isAlreadyRendered = this.connectPreRendered();
|
|
1291
|
+
if (isAlreadyRendered && !replaceExistingPreRender) {
|
|
1292
|
+
return this;
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1289
1295
|
return this.handleRenderForPrerender();
|
|
1290
1296
|
}
|
|
1291
1297
|
|
package/src/errors.ts
CHANGED
|
@@ -10,6 +10,7 @@ export const ERROR_MESSAGE = {
|
|
|
10
10
|
SDK_NOT_INITIALIZED: 'SDK not initialized',
|
|
11
11
|
SESSION_INFO_FAILED: 'Failed to get session information',
|
|
12
12
|
INVALID_TOKEN_ERROR: 'Received invalid token from getAuthToken callback or authToken endpoint.',
|
|
13
|
+
INVALID_TOKEN_TYPE_ERROR: 'Expected getAuthToken to return a string, but received a {invalidType}.',
|
|
13
14
|
MIXPANEL_TOKEN_NOT_FOUND: 'Mixpanel token not found in session info',
|
|
14
15
|
PRERENDER_ID_MISSING: 'PreRender ID is required for preRender',
|
|
15
16
|
SYNC_STYLE_CALLED_BEFORE_RENDER: 'PreRender should be called before using syncPreRenderStyle',
|
package/src/react/index.spec.tsx
CHANGED
|
@@ -56,7 +56,7 @@ describe('React Components', () => {
|
|
|
56
56
|
),
|
|
57
57
|
).toBe(true);
|
|
58
58
|
expect(getIFrameSrc(container)).toBe(
|
|
59
|
-
`http://${thoughtSpotHost}/?embedApp=true&hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22,%22editACopy%22,%22saveAsView%22,%22updateTSL%22,%22editTSL%22,%22onDeleteAnswer%22]&preAuthCache=true&overrideConsoleLogs=true&clientLogLevel=ERROR&enableDataPanelV2=
|
|
59
|
+
`http://${thoughtSpotHost}/?embedApp=true&hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${Action.ReportError}%22,%22editACopy%22,%22saveAsView%22,%22updateTSL%22,%22editTSL%22,%22onDeleteAnswer%22]&preAuthCache=true&overrideConsoleLogs=true&clientLogLevel=ERROR&enableDataPanelV2=true&dataSourceMode=hide&useLastSelectedSources=false&isSearchEmbed=true&collapseSearchBarInitially=true&enableCustomColumnGroups=false&dataPanelCustomGroupsAccordionInitialState=EXPAND_ALL#/embed/answer`,
|
|
60
60
|
);
|
|
61
61
|
});
|
|
62
62
|
|
package/src/react/index.tsx
CHANGED
|
@@ -94,10 +94,12 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
94
94
|
};
|
|
95
95
|
}, [viewConfig, listeners]);
|
|
96
96
|
|
|
97
|
+
const preRenderStyles = isPreRenderedComponent ? { display: 'none' } : {};
|
|
98
|
+
|
|
97
99
|
return viewConfig.insertAsSibling ? (
|
|
98
|
-
<span data-testid="tsEmbed" ref={ref} style={{ position: 'absolute' }}></span>
|
|
100
|
+
<span data-testid="tsEmbed" ref={ref} style={{ position: 'absolute', ...preRenderStyles }}></span>
|
|
99
101
|
) : (
|
|
100
|
-
<div data-testid="tsEmbed" ref={ref} style={style} className={`ts-embed-container ${className}`}></div>
|
|
102
|
+
<div data-testid="tsEmbed" ref={ref} style={{ ...style, ...preRenderStyles }} className={`ts-embed-container ${className}`}></div>
|
|
101
103
|
);
|
|
102
104
|
},
|
|
103
105
|
);
|
package/src/types.ts
CHANGED
|
@@ -1281,8 +1281,8 @@ export interface SearchLiveboardCommonViewConfig {
|
|
|
1281
1281
|
* Flag to control Data panel experience
|
|
1282
1282
|
*
|
|
1283
1283
|
* Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed`
|
|
1284
|
-
* @default
|
|
1285
|
-
* @version SDK: 1.
|
|
1284
|
+
* @default true
|
|
1285
|
+
* @version SDK: 1.43.0 | ThoughtSpot Cloud: 10.14.0.cl
|
|
1286
1286
|
* @example
|
|
1287
1287
|
* ```js
|
|
1288
1288
|
* // Replace <EmbedComponent> with embed component name. For example, SageEmbed, AppEmbed, or SearchBarEmbed
|
|
@@ -3823,7 +3823,7 @@ export enum HostEvent {
|
|
|
3823
3823
|
* column: "Date",
|
|
3824
3824
|
* oper: 'EQ',
|
|
3825
3825
|
* values: ["2023-07-31"],
|
|
3826
|
-
*
|
|
3826
|
+
* type: "EXACT_DATE"
|
|
3827
3827
|
* }]
|
|
3828
3828
|
* });
|
|
3829
3829
|
* ```
|
|
@@ -4317,6 +4317,7 @@ export enum Param {
|
|
|
4317
4317
|
IsLazyLoadingForEmbedEnabled = 'isLazyLoadingForEmbedEnabled',
|
|
4318
4318
|
RootMarginForLazyLoad = 'rootMarginForLazyLoad',
|
|
4319
4319
|
LiveboardXLSXCSVDownload = 'isLiveboardXLSXCSVDownloadEnabled',
|
|
4320
|
+
isPNGInScheduledEmailsEnabled = 'isPNGInScheduledEmailsEnabled',
|
|
4320
4321
|
}
|
|
4321
4322
|
|
|
4322
4323
|
/**
|
|
@@ -5616,6 +5617,29 @@ export enum Action {
|
|
|
5616
5617
|
* @version SDK: 1.41.0 | ThoughtSpot Cloud: 10.13.0.cl
|
|
5617
5618
|
*/
|
|
5618
5619
|
SpotterTokenQuickEdit = 'SpotterTokenQuickEdit',
|
|
5620
|
+
/**
|
|
5621
|
+
* The **PNG screenshot in email** option in the schedule email dialog.
|
|
5622
|
+
* Includes a PNG screenshot in the notification email body.
|
|
5623
|
+
* @example
|
|
5624
|
+
* ```js
|
|
5625
|
+
* disabledActions: [Action.PngScreenshotInEmail]
|
|
5626
|
+
* ```
|
|
5627
|
+
* ```
|
|
5628
|
+
* @version SDK: 1.42.0 | ThoughtSpot Cloud: 10.14.0.cl
|
|
5629
|
+
*/
|
|
5630
|
+
PngScreenshotInEmail = 'pngScreenshotInEmail',
|
|
5631
|
+
/**
|
|
5632
|
+
* The **Remove attachment** action in the schedule email dialog.
|
|
5633
|
+
* Removes an attachment from the email configuration.
|
|
5634
|
+
* @example
|
|
5635
|
+
* ```js
|
|
5636
|
+
* disabledActions: [Action.RemoveAttachment]
|
|
5637
|
+
* ```
|
|
5638
|
+
* ```
|
|
5639
|
+
* ```
|
|
5640
|
+
* @version SDK: 1.42.0 | ThoughtSpot Cloud: 10.14.0.cl
|
|
5641
|
+
*/
|
|
5642
|
+
RemoveAttachment = 'removeAttachment',
|
|
5619
5643
|
}
|
|
5620
5644
|
|
|
5621
5645
|
export interface AnswerServiceType {
|
package/src/utils.spec.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
getTypeFromValue,
|
|
19
19
|
arrayIncludesString,
|
|
20
20
|
calculateVisibleElementData,
|
|
21
|
+
formatTemplate,
|
|
21
22
|
} from './utils';
|
|
22
23
|
import { RuntimeFilterOp } from './types';
|
|
23
24
|
import { logger } from './utils/logger';
|
|
@@ -718,3 +719,20 @@ describe('calculateVisibleElementData', () => {
|
|
|
718
719
|
});
|
|
719
720
|
});
|
|
720
721
|
});
|
|
722
|
+
|
|
723
|
+
describe('formatTemplate', () => {
|
|
724
|
+
it('should replace placeholders with provided values', () => {
|
|
725
|
+
expect(
|
|
726
|
+
formatTemplate('Hello {name}, you are {age} years old', { name: 'John', age: 30 }),
|
|
727
|
+
).toBe('Hello John, you are 30 years old');
|
|
728
|
+
expect(
|
|
729
|
+
formatTemplate('Expected {type}, but received {actual}', {
|
|
730
|
+
type: 'string',
|
|
731
|
+
actual: 'number',
|
|
732
|
+
}),
|
|
733
|
+
).toBe('Expected string, but received number');
|
|
734
|
+
expect(
|
|
735
|
+
formatTemplate('Hello {name}, you are {age} years old', { name: 'John' }),
|
|
736
|
+
).toBe('Hello John, you are {age} years old');
|
|
737
|
+
});
|
|
738
|
+
});
|
package/src/utils.ts
CHANGED
|
@@ -499,3 +499,24 @@ export const calculateVisibleElementData = (element: HTMLElement) => {
|
|
|
499
499
|
|
|
500
500
|
return data;
|
|
501
501
|
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Replaces placeholders in a template string with provided values.
|
|
505
|
+
* Placeholders should be in the format {key}.
|
|
506
|
+
* @param template - The template string with placeholders
|
|
507
|
+
* @param values - An object containing key-value pairs to replace placeholders
|
|
508
|
+
* @returns The template string with placeholders replaced
|
|
509
|
+
* @example
|
|
510
|
+
* formatTemplate('Hello {name}, you are {age} years old', { name: 'John', age: 30 })
|
|
511
|
+
* // Returns: 'Hello John, you are 30 years old'
|
|
512
|
+
*
|
|
513
|
+
* formatTemplate('Expected {type}, but received {actual}', { type: 'string', actual: 'number' })
|
|
514
|
+
* // Returns: 'Expected string, but received number'
|
|
515
|
+
*/
|
|
516
|
+
export const formatTemplate = (template: string, values: Record<string, any>): string => {
|
|
517
|
+
// This regex /\{(\w+)\}/g finds all placeholders in the format {word}
|
|
518
|
+
// and captures the word inside the braces for replacement.
|
|
519
|
+
return template.replace(/\{(\w+)\}/g, (match, key) => {
|
|
520
|
+
return values[key] !== undefined ? String(values[key]) : match;
|
|
521
|
+
});
|
|
522
|
+
};
|