@thoughtspot/visual-embed-sdk 1.39.0 → 1.39.2-alpha.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/cjs/package.json +1 -1
- package/cjs/src/embed/app.d.ts +13 -13
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +2 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +18 -8
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +64 -6
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +9 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +130 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/embedConfig.d.ts +49 -4
- package/cjs/src/embed/embedConfig.d.ts.map +1 -1
- package/cjs/src/embed/embedConfig.js +49 -4
- package/cjs/src/embed/embedConfig.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +2 -19
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +3 -5
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +12 -11
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +10 -10
- package/cjs/src/embed/search.d.ts +4 -4
- package/cjs/src/embed/ts-embed.d.ts +5 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +16 -1
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +164 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/types.d.ts +41 -8
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +23 -6
- package/cjs/src/types.js.map +1 -1
- package/dist/{index-sSREbWM-.js → index-CmEQfuE3.js} +1 -1
- package/dist/index-DeFzsyFF.js +7371 -0
- package/dist/index-Dpf0rd6w.js +7371 -0
- package/dist/index-UuEbsISo.js +7447 -0
- package/dist/src/embed/app.d.ts +13 -13
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +64 -6
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/embedConfig.d.ts +49 -4
- package/dist/src/embed/embedConfig.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +2 -19
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +10 -10
- package/dist/src/embed/search.d.ts +4 -4
- package/dist/src/embed/ts-embed.d.ts +5 -0
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/types.d.ts +41 -8
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +105 -21
- package/dist/tsembed-react.js +104 -20
- package/dist/tsembed.es.js +105 -21
- package/dist/tsembed.js +104 -20
- package/dist/visual-embed-sdk-react-full.d.ts +182 -63
- package/dist/visual-embed-sdk-react.d.ts +182 -63
- package/dist/visual-embed-sdk.d.ts +182 -63
- package/lib/package.json +1 -1
- package/lib/src/embed/app.d.ts +13 -13
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +2 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +19 -9
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +64 -6
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +10 -2
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +133 -3
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/embedConfig.d.ts +49 -4
- package/lib/src/embed/embedConfig.d.ts.map +1 -1
- package/lib/src/embed/embedConfig.js +49 -4
- package/lib/src/embed/embedConfig.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +2 -19
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +3 -5
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +12 -11
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +10 -10
- package/lib/src/embed/search.d.ts +4 -4
- package/lib/src/embed/ts-embed.d.ts +5 -0
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +16 -1
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +164 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/types.d.ts +41 -8
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +23 -6
- package/lib/src/types.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +183 -64
- package/package.json +1 -1
- package/src/embed/app.spec.ts +36 -23
- package/src/embed/app.ts +15 -13
- package/src/embed/conversation.spec.ts +170 -6
- package/src/embed/conversation.ts +86 -14
- package/src/embed/embedConfig.ts +50 -5
- package/src/embed/liveboard.spec.ts +5 -4
- package/src/embed/liveboard.ts +4 -24
- package/src/embed/sage.ts +10 -10
- package/src/embed/search.ts +4 -4
- package/src/embed/ts-embed.spec.ts +225 -0
- package/src/embed/ts-embed.ts +19 -0
- package/src/types.ts +82 -49
package/src/embed/sage.ts
CHANGED
|
@@ -48,39 +48,39 @@ export interface SageViewConfig
|
|
|
48
48
|
showObjectResults?: boolean;
|
|
49
49
|
/**
|
|
50
50
|
* flag used by the TS product tour page to show the blue search bar
|
|
51
|
-
* even after the search is completed. This is different from
|
|
51
|
+
* even after the search is completed. This is different from ThoughtSpot Embedded
|
|
52
52
|
* Sage Embed experience where it mimics closer to the non-embed case.
|
|
53
53
|
* The Sample questions container is collapsed when this value is set after
|
|
54
54
|
* does a search.
|
|
55
|
-
* @version SDK: 1.26.0 |
|
|
55
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl
|
|
56
56
|
* @hidden
|
|
57
57
|
*/
|
|
58
58
|
isProductTour?: boolean;
|
|
59
59
|
/**
|
|
60
60
|
* Show or hide the search bar title.
|
|
61
|
-
* @version SDK: 1.29.0 |
|
|
62
|
-
* @deprecated
|
|
61
|
+
* @version SDK: 1.29.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
62
|
+
* @deprecated ThoughtSpot: 9.10.0.cl | search bar doesn't have the title from 9.10.0.cl
|
|
63
63
|
*/
|
|
64
64
|
hideSearchBarTitle?: boolean;
|
|
65
65
|
/**
|
|
66
66
|
* Show or hide the Answer header, that is, the `AI Answer` title
|
|
67
67
|
* at the top of the Answer page.
|
|
68
|
-
* @version SDK: 1.26.0 |
|
|
68
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.10.0.cl
|
|
69
69
|
*/
|
|
70
70
|
hideSageAnswerHeader?: boolean;
|
|
71
71
|
/**
|
|
72
72
|
* Disable the worksheet selection option.
|
|
73
|
-
* @version SDK: 1.26.0 |
|
|
73
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
74
74
|
*/
|
|
75
75
|
disableWorksheetChange?: boolean;
|
|
76
76
|
/**
|
|
77
77
|
* Hide the worksheet selection panel.
|
|
78
|
-
* @version SDK: 1.26.0 |
|
|
78
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
79
79
|
*/
|
|
80
80
|
hideWorksheetSelector?: boolean;
|
|
81
81
|
/**
|
|
82
82
|
* Show or hide autocomplete suggestions for the search query string.
|
|
83
|
-
* @version SDK: 1.26.0 |
|
|
83
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
84
84
|
*/
|
|
85
85
|
hideAutocompleteSuggestions?: boolean;
|
|
86
86
|
/**
|
|
@@ -96,7 +96,7 @@ export interface SageViewConfig
|
|
|
96
96
|
* selected for the search operation.
|
|
97
97
|
*
|
|
98
98
|
* Supported embed types: `SageEmbed`
|
|
99
|
-
* @version SDK: 1.26.0 |
|
|
99
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
100
100
|
* @example
|
|
101
101
|
* ```js
|
|
102
102
|
* const embed = new SageEmbed('#tsEmbed', {
|
|
@@ -129,7 +129,7 @@ export interface SageViewConfig
|
|
|
129
129
|
* executeSearch: true,
|
|
130
130
|
* }
|
|
131
131
|
* ```
|
|
132
|
-
* @version SDK: 1.26.0 |
|
|
132
|
+
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
|
|
133
133
|
*/
|
|
134
134
|
searchOptions?: SearchOptions;
|
|
135
135
|
}
|
package/src/embed/search.ts
CHANGED
|
@@ -272,7 +272,7 @@ export interface SearchViewConfig
|
|
|
272
272
|
/**
|
|
273
273
|
* To set the initial state of the search bar in case of saved-answers.
|
|
274
274
|
* @default false
|
|
275
|
-
* @version SDK: 1.32.0 |
|
|
275
|
+
* @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl
|
|
276
276
|
* @deprecated Use {@link collapseSearchBar} instead
|
|
277
277
|
*/
|
|
278
278
|
collapseSearchBarInitially?: boolean;
|
|
@@ -280,7 +280,7 @@ export interface SearchViewConfig
|
|
|
280
280
|
* Flag to enable onBeforeSearchExecute Embed Event
|
|
281
281
|
*
|
|
282
282
|
* Supported embed types: `SearchEmbed`
|
|
283
|
-
* @version: SDK: 1.29.0 |
|
|
283
|
+
* @version: SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl
|
|
284
284
|
*/
|
|
285
285
|
isOnBeforeGetVizDataInterceptEnabled?: boolean;
|
|
286
286
|
/**
|
|
@@ -292,7 +292,7 @@ export interface SearchViewConfig
|
|
|
292
292
|
* - EXPAND_FIRST: Expand the first accordion and collapse the rest.
|
|
293
293
|
*
|
|
294
294
|
* Supported embed types: `SearchEmbed`
|
|
295
|
-
* @version SDK: 1.32.0 |
|
|
295
|
+
* @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl
|
|
296
296
|
* @default DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL
|
|
297
297
|
* @example
|
|
298
298
|
* ```js
|
|
@@ -309,7 +309,7 @@ export interface SearchViewConfig
|
|
|
309
309
|
* lands on search embed page.
|
|
310
310
|
*
|
|
311
311
|
* Supported embed types: `SearchEmbed`
|
|
312
|
-
* @version SDK: 1.32.0 |
|
|
312
|
+
* @version SDK: 1.32.0 | ThoughtSpot: 10.3.0.cl
|
|
313
313
|
* @default true
|
|
314
314
|
* @example
|
|
315
315
|
* ```js
|
|
@@ -1360,6 +1360,231 @@ describe('Unit test case for ts embed', () => {
|
|
|
1360
1360
|
});
|
|
1361
1361
|
});
|
|
1362
1362
|
|
|
1363
|
+
describe('Preauth Cache for FullAppEmbed with PrimaryNavBar', () => {
|
|
1364
|
+
beforeAll(() => {
|
|
1365
|
+
jest.clearAllMocks();
|
|
1366
|
+
init({
|
|
1367
|
+
thoughtSpotHost,
|
|
1368
|
+
authType: AuthType.None,
|
|
1369
|
+
});
|
|
1370
|
+
});
|
|
1371
|
+
afterEach(() => {
|
|
1372
|
+
jest.clearAllMocks();
|
|
1373
|
+
});
|
|
1374
|
+
|
|
1375
|
+
afterAll(() => {
|
|
1376
|
+
jest.clearAllMocks();
|
|
1377
|
+
});
|
|
1378
|
+
|
|
1379
|
+
const setupPreauthTest = async (
|
|
1380
|
+
embedType: 'AppEmbed' | 'SearchEmbed',
|
|
1381
|
+
showPrimaryNavbar?: boolean,
|
|
1382
|
+
overrideOrgId?: number,
|
|
1383
|
+
disablePreauthCache?: boolean
|
|
1384
|
+
) => {
|
|
1385
|
+
jest.spyOn(window, 'addEventListener').mockImplementationOnce(
|
|
1386
|
+
(event, handler, options) => {
|
|
1387
|
+
handler({
|
|
1388
|
+
data: { type: 'xyz' },
|
|
1389
|
+
ports: [3000],
|
|
1390
|
+
source: null,
|
|
1391
|
+
});
|
|
1392
|
+
},
|
|
1393
|
+
);
|
|
1394
|
+
mockProcessTrigger.mockResolvedValueOnce({ session: 'test' });
|
|
1395
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValueOnce(true);
|
|
1396
|
+
|
|
1397
|
+
let mockGetPreauthInfo = null;
|
|
1398
|
+
|
|
1399
|
+
// Determine if preauth cache should be enabled
|
|
1400
|
+
const isAppEmbedWithPrimaryNavbar = embedType === 'AppEmbed' && showPrimaryNavbar === true;
|
|
1401
|
+
const shouldDisableCache = overrideOrgId || disablePreauthCache || isAppEmbedWithPrimaryNavbar;
|
|
1402
|
+
|
|
1403
|
+
if (shouldDisableCache) {
|
|
1404
|
+
mockGetPreauthInfo = jest.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1405
|
+
.mockImplementation(jest.fn());
|
|
1406
|
+
} else {
|
|
1407
|
+
mockGetPreauthInfo = jest.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1408
|
+
.mockResolvedValue({ info: { test: 'data' } });
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
const mockPreauthInfoFetch = jest.spyOn(authService, 'fetchPreauthInfoService')
|
|
1412
|
+
.mockResolvedValueOnce({
|
|
1413
|
+
ok: true,
|
|
1414
|
+
headers: new Headers({ 'content-type': 'application/json' }),
|
|
1415
|
+
json: async () => ({
|
|
1416
|
+
info: { test: 'data' },
|
|
1417
|
+
}),
|
|
1418
|
+
} as any);
|
|
1419
|
+
|
|
1420
|
+
const viewConfig: any = {
|
|
1421
|
+
frameParams: { width: 1280, height: 720 },
|
|
1422
|
+
};
|
|
1423
|
+
|
|
1424
|
+
if (showPrimaryNavbar !== undefined) {
|
|
1425
|
+
viewConfig.showPrimaryNavbar = showPrimaryNavbar;
|
|
1426
|
+
}
|
|
1427
|
+
if (overrideOrgId !== undefined) {
|
|
1428
|
+
viewConfig.overrideOrgId = overrideOrgId;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
// Mock getEmbedConfig for disablePreauthCache
|
|
1432
|
+
if (disablePreauthCache !== undefined) {
|
|
1433
|
+
jest.spyOn(embedConfig, 'getEmbedConfig').mockReturnValueOnce({
|
|
1434
|
+
thoughtSpotHost,
|
|
1435
|
+
authType: AuthType.None,
|
|
1436
|
+
disablePreauthCache,
|
|
1437
|
+
});
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
let embed;
|
|
1441
|
+
if (embedType === 'AppEmbed') {
|
|
1442
|
+
embed = new AppEmbed(getRootEl(), viewConfig);
|
|
1443
|
+
} else {
|
|
1444
|
+
embed = new SearchEmbed(getRootEl(), viewConfig);
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
const iFrame: any = document.createElement('div');
|
|
1448
|
+
iFrame.contentWindow = {
|
|
1449
|
+
postMessage: jest.fn(),
|
|
1450
|
+
};
|
|
1451
|
+
jest.spyOn(iFrame, 'addEventListener').mockImplementationOnce(
|
|
1452
|
+
(event, handler, options) => {
|
|
1453
|
+
handler({});
|
|
1454
|
+
},
|
|
1455
|
+
);
|
|
1456
|
+
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
1457
|
+
|
|
1458
|
+
await embed.render();
|
|
1459
|
+
|
|
1460
|
+
return {
|
|
1461
|
+
embed,
|
|
1462
|
+
mockGetPreauthInfo,
|
|
1463
|
+
mockPreauthInfoFetch,
|
|
1464
|
+
iFrame,
|
|
1465
|
+
};
|
|
1466
|
+
};
|
|
1467
|
+
|
|
1468
|
+
test('should disable preauth cache for FullAppEmbed with showPrimaryNavbar = true (default)', async () => {
|
|
1469
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('AppEmbed', true);
|
|
1470
|
+
|
|
1471
|
+
// Wait for any async operations
|
|
1472
|
+
await executeAfterWait(() => {
|
|
1473
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(0);
|
|
1474
|
+
});
|
|
1475
|
+
});
|
|
1476
|
+
|
|
1477
|
+
test('should enable preauth cache for FullAppEmbed with showPrimaryNavbar = undefined (no longer defaults to true)', async () => {
|
|
1478
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('AppEmbed', undefined);
|
|
1479
|
+
|
|
1480
|
+
await executeAfterWait(() => {
|
|
1481
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(1);
|
|
1482
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
1483
|
+
expect.any(Object),
|
|
1484
|
+
HostEvent.InfoSuccess,
|
|
1485
|
+
'http://tshost',
|
|
1486
|
+
expect.objectContaining({ info: expect.any(Object) }),
|
|
1487
|
+
);
|
|
1488
|
+
});
|
|
1489
|
+
});
|
|
1490
|
+
|
|
1491
|
+
test('should enable preauth cache for FullAppEmbed with showPrimaryNavbar = false', async () => {
|
|
1492
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('AppEmbed', false);
|
|
1493
|
+
|
|
1494
|
+
await executeAfterWait(() => {
|
|
1495
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(1);
|
|
1496
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
1497
|
+
expect.any(Object),
|
|
1498
|
+
HostEvent.InfoSuccess,
|
|
1499
|
+
'http://tshost',
|
|
1500
|
+
expect.objectContaining({ info: expect.any(Object) }),
|
|
1501
|
+
);
|
|
1502
|
+
});
|
|
1503
|
+
});
|
|
1504
|
+
|
|
1505
|
+
test('should enable preauth cache for SearchEmbed regardless of showPrimaryNavbar', async () => {
|
|
1506
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('SearchEmbed', true);
|
|
1507
|
+
|
|
1508
|
+
await executeAfterWait(() => {
|
|
1509
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(1);
|
|
1510
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
1511
|
+
expect.any(Object),
|
|
1512
|
+
HostEvent.InfoSuccess,
|
|
1513
|
+
'http://tshost',
|
|
1514
|
+
expect.objectContaining({ info: expect.any(Object) }),
|
|
1515
|
+
);
|
|
1516
|
+
});
|
|
1517
|
+
});
|
|
1518
|
+
|
|
1519
|
+
test('should enable preauth cache for SearchEmbed (verifies fix for embed type regression)', async () => {
|
|
1520
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('SearchEmbed', false);
|
|
1521
|
+
|
|
1522
|
+
await executeAfterWait(() => {
|
|
1523
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(1);
|
|
1524
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
1525
|
+
expect.any(Object),
|
|
1526
|
+
HostEvent.InfoSuccess,
|
|
1527
|
+
'http://tshost',
|
|
1528
|
+
expect.objectContaining({ info: expect.any(Object) }),
|
|
1529
|
+
);
|
|
1530
|
+
});
|
|
1531
|
+
});
|
|
1532
|
+
|
|
1533
|
+
test('should disable preauth cache for FullAppEmbed with overrideOrgId (combined condition)', async () => {
|
|
1534
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('AppEmbed', false, 123);
|
|
1535
|
+
|
|
1536
|
+
await executeAfterWait(() => {
|
|
1537
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(0);
|
|
1538
|
+
});
|
|
1539
|
+
});
|
|
1540
|
+
|
|
1541
|
+
test('should disable preauth cache for FullAppEmbed with disablePreauthCache = true', async () => {
|
|
1542
|
+
const { mockGetPreauthInfo } = await setupPreauthTest('AppEmbed', false, undefined, true);
|
|
1543
|
+
|
|
1544
|
+
await executeAfterWait(() => {
|
|
1545
|
+
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(0);
|
|
1546
|
+
});
|
|
1547
|
+
});
|
|
1548
|
+
});
|
|
1549
|
+
|
|
1550
|
+
describe('isFullAppEmbedWithVisiblePrimaryNavbar helper method', () => {
|
|
1551
|
+
beforeAll(() => {
|
|
1552
|
+
init({
|
|
1553
|
+
thoughtSpotHost,
|
|
1554
|
+
authType: AuthType.None,
|
|
1555
|
+
});
|
|
1556
|
+
});
|
|
1557
|
+
|
|
1558
|
+
afterEach(() => {
|
|
1559
|
+
jest.clearAllMocks();
|
|
1560
|
+
});
|
|
1561
|
+
|
|
1562
|
+
test('should return true for AppEmbed with showPrimaryNavbar = true', () => {
|
|
1563
|
+
const appEmbed = new AppEmbed(getRootEl(), { showPrimaryNavbar: true });
|
|
1564
|
+
expect(appEmbed['isFullAppEmbedWithVisiblePrimaryNavbar']()).toBe(true);
|
|
1565
|
+
});
|
|
1566
|
+
|
|
1567
|
+
test('should return false for AppEmbed with showPrimaryNavbar = undefined (no longer defaults to true)', () => {
|
|
1568
|
+
const appEmbed = new AppEmbed(getRootEl(), {});
|
|
1569
|
+
expect(appEmbed['isFullAppEmbedWithVisiblePrimaryNavbar']()).toBe(false);
|
|
1570
|
+
});
|
|
1571
|
+
|
|
1572
|
+
test('should return false for AppEmbed with showPrimaryNavbar = false', () => {
|
|
1573
|
+
const appEmbed = new AppEmbed(getRootEl(), { showPrimaryNavbar: false });
|
|
1574
|
+
expect(appEmbed['isFullAppEmbedWithVisiblePrimaryNavbar']()).toBe(false);
|
|
1575
|
+
});
|
|
1576
|
+
|
|
1577
|
+
test('should return false for SearchEmbed (not FullAppEmbed)', () => {
|
|
1578
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
1579
|
+
expect(searchEmbed['isFullAppEmbedWithVisiblePrimaryNavbar']()).toBe(false);
|
|
1580
|
+
});
|
|
1581
|
+
|
|
1582
|
+
test('should return false for LiveboardEmbed (not FullAppEmbed)', () => {
|
|
1583
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), { liveboardId: 'test-id' });
|
|
1584
|
+
expect(liveboardEmbed['isFullAppEmbedWithVisiblePrimaryNavbar']()).toBe(false);
|
|
1585
|
+
});
|
|
1586
|
+
});
|
|
1587
|
+
|
|
1363
1588
|
describe('when thoughtSpotHost have value and authPromise return error', () => {
|
|
1364
1589
|
beforeAll(() => {
|
|
1365
1590
|
init({
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -264,13 +264,32 @@ export class TsEmbed {
|
|
|
264
264
|
// - cached auth info would be for wrong org
|
|
265
265
|
// - info call response changes for each different overrideOrgId
|
|
266
266
|
// 2. disablePreauthCache is explicitly set to true
|
|
267
|
+
// 3. FullAppEmbed has primary navbar visible since:
|
|
268
|
+
// - primary navbar requires fresh auth state for navigation
|
|
269
|
+
// - cached auth may not reflect current user permissions
|
|
267
270
|
const isDisabled = (
|
|
268
271
|
this.viewConfig.overrideOrgId !== undefined
|
|
269
272
|
|| this.embedConfig.disablePreauthCache === true
|
|
273
|
+
|| this.isFullAppEmbedWithVisiblePrimaryNavbar()
|
|
270
274
|
);
|
|
271
275
|
return !isDisabled;
|
|
272
276
|
}
|
|
273
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Checks if current embed is FullAppEmbed with visible primary navbar
|
|
280
|
+
* @returns boolean
|
|
281
|
+
*/
|
|
282
|
+
private isFullAppEmbedWithVisiblePrimaryNavbar(): boolean {
|
|
283
|
+
const appViewConfig = this.viewConfig as any;
|
|
284
|
+
|
|
285
|
+
// Check if this is a FullAppEmbed (AppEmbed)
|
|
286
|
+
// showPrimaryNavbar defaults to true if not explicitly set to false
|
|
287
|
+
return (
|
|
288
|
+
appViewConfig.embedComponentType === 'AppEmbed'
|
|
289
|
+
&& appViewConfig.showPrimaryNavbar === true
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
274
293
|
/**
|
|
275
294
|
* fix for ts7.sep.cl
|
|
276
295
|
* will be removed for ts7.oct.cl
|