@thoughtspot/visual-embed-sdk 1.28.0-preRender → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cjs/package.json +3 -4
- package/cjs/src/auth.d.ts +16 -1
- package/cjs/src/auth.d.ts.map +1 -1
- package/cjs/src/auth.js +7 -3
- package/cjs/src/auth.js.map +1 -1
- package/cjs/src/auth.spec.d.ts.map +1 -1
- package/cjs/src/auth.spec.js +9 -0
- package/cjs/src/auth.spec.js.map +1 -1
- package/cjs/src/embed/app.d.ts +150 -7
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +5 -5
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +19 -1
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/base.d.ts +1 -1
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +5 -8
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/base.spec.js +1 -1
- package/cjs/src/embed/base.spec.js.map +1 -1
- package/cjs/src/embed/embed.spec.js +0 -15
- package/cjs/src/embed/embed.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +113 -4
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +2 -2
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +20 -1
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/pinboard.spec.js +20 -1
- package/cjs/src/embed/pinboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +1 -1
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +2 -2
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +37 -6
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +2 -2
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +85 -2
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +6 -6
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +25 -1
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed-trigger.spec.d.ts +2 -0
- package/cjs/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
- package/cjs/src/embed/ts-embed-trigger.spec.js +34 -0
- package/cjs/src/embed/ts-embed-trigger.spec.js.map +1 -0
- package/cjs/src/embed/ts-embed.d.ts +2 -2
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +18 -13
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +64 -25
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -1
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +13 -1
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/test/test-utils.d.ts +1 -0
- package/cjs/src/test/test-utils.d.ts.map +1 -1
- package/cjs/src/test/test-utils.js +10 -1
- package/cjs/src/test/test-utils.js.map +1 -1
- package/cjs/src/tokenizedFetch.d.ts +9 -0
- package/cjs/src/tokenizedFetch.d.ts.map +1 -1
- package/cjs/src/tokenizedFetch.js +9 -0
- package/cjs/src/tokenizedFetch.js.map +1 -1
- package/cjs/src/types.d.ts +279 -43
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +95 -20
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/authService/authService.d.ts.map +1 -1
- package/cjs/src/utils/authService/authService.js +9 -3
- package/cjs/src/utils/authService/authService.js.map +1 -1
- package/cjs/src/utils/authService/authService.spec.js +22 -0
- package/cjs/src/utils/authService/authService.spec.js.map +1 -1
- package/dist/src/auth.d.ts +16 -1
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/auth.spec.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +150 -7
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +1 -1
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +113 -4
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +1 -1
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +37 -6
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +85 -2
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed-trigger.spec.d.ts +2 -0
- package/dist/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
- package/dist/src/embed/ts-embed.d.ts +2 -2
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/test/test-utils.d.ts +1 -0
- package/dist/src/test/test-utils.d.ts.map +1 -1
- package/dist/src/tokenizedFetch.d.ts +9 -0
- package/dist/src/tokenizedFetch.d.ts.map +1 -1
- package/dist/src/types.d.ts +279 -43
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/authService/authService.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +1543 -1445
- package/dist/tsembed-react.js +6614 -6529
- package/dist/tsembed.es.js +1921 -1826
- package/dist/tsembed.js +15342 -15259
- package/dist/visual-embed-sdk-react-full.d.ts +692 -64
- package/dist/visual-embed-sdk-react.d.ts +692 -64
- package/dist/visual-embed-sdk.d.ts +692 -64
- package/lib/package.json +3 -4
- package/lib/src/auth.d.ts +16 -1
- package/lib/src/auth.d.ts.map +1 -1
- package/lib/src/auth.js +8 -4
- package/lib/src/auth.js.map +1 -1
- package/lib/src/auth.spec.d.ts.map +1 -1
- package/lib/src/auth.spec.js +9 -0
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/embed/app.d.ts +150 -7
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +5 -5
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +19 -1
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +1 -1
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +5 -8
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/base.spec.js +2 -2
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +2 -17
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +113 -4
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +3 -3
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +20 -1
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/pinboard.spec.js +20 -1
- package/lib/src/embed/pinboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +1 -1
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +2 -2
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +37 -6
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +2 -2
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +85 -2
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +7 -7
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +25 -1
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/ts-embed-trigger.spec.d.ts +2 -0
- package/lib/src/embed/ts-embed-trigger.spec.d.ts.map +1 -0
- package/lib/src/embed/ts-embed-trigger.spec.js +32 -0
- package/lib/src/embed/ts-embed-trigger.spec.js.map +1 -0
- package/lib/src/embed/ts-embed.d.ts +2 -2
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +21 -16
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +57 -18
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -1
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/index.spec.js +13 -1
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/test/test-utils.d.ts +1 -0
- package/lib/src/test/test-utils.d.ts.map +1 -1
- package/lib/src/test/test-utils.js +8 -0
- package/lib/src/test/test-utils.js.map +1 -1
- package/lib/src/tokenizedFetch.d.ts +9 -0
- package/lib/src/tokenizedFetch.d.ts.map +1 -1
- package/lib/src/tokenizedFetch.js +9 -0
- package/lib/src/tokenizedFetch.js.map +1 -1
- package/lib/src/types.d.ts +279 -43
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +95 -20
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/authService/authService.d.ts.map +1 -1
- package/lib/src/utils/authService/authService.js +9 -3
- package/lib/src/utils/authService/authService.js.map +1 -1
- package/lib/src/utils/authService/authService.spec.js +23 -1
- package/lib/src/utils/authService/authService.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +699 -68
- package/package.json +3 -4
- package/src/auth.spec.ts +10 -0
- package/src/auth.ts +27 -8
- package/src/embed/app.spec.ts +24 -1
- package/src/embed/app.ts +154 -13
- package/src/embed/base.spec.ts +3 -3
- package/src/embed/base.ts +13 -17
- package/src/embed/embed.spec.ts +0 -18
- package/src/embed/liveboard.spec.ts +24 -1
- package/src/embed/liveboard.ts +121 -15
- package/src/embed/pinboard.spec.ts +24 -1
- package/src/embed/sage.ts +2 -2
- package/src/embed/search-bar.tsx +38 -7
- package/src/embed/search.spec.ts +29 -1
- package/src/embed/search.ts +93 -9
- package/src/embed/ts-embed-trigger.spec.ts +39 -0
- package/src/embed/ts-embed.spec.ts +71 -30
- package/src/embed/ts-embed.ts +48 -45
- package/src/index.ts +2 -0
- package/src/react/index.spec.tsx +30 -0
- package/src/test/test-utils.ts +9 -0
- package/src/tokenizedFetch.ts +9 -0
- package/src/types.ts +288 -50
- package/src/utils/authService/authService.spec.ts +31 -4
- package/src/utils/authService/authService.ts +14 -13
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
/* eslint-disable dot-notation */
|
|
2
|
+
import * as authInstance from '../auth';
|
|
2
3
|
import { resetCachedAuthToken } from '../authToken';
|
|
4
|
+
import * as config from '../config';
|
|
3
5
|
import {
|
|
6
|
+
AppEmbed,
|
|
4
7
|
AuthType,
|
|
5
|
-
init,
|
|
6
8
|
EmbedEvent,
|
|
7
|
-
SearchEmbed,
|
|
8
|
-
PinboardEmbed,
|
|
9
|
-
LiveboardViewConfig,
|
|
10
|
-
AppEmbed,
|
|
11
9
|
LiveboardEmbed,
|
|
10
|
+
LiveboardViewConfig,
|
|
11
|
+
PinboardEmbed,
|
|
12
|
+
SearchEmbed,
|
|
13
|
+
init,
|
|
12
14
|
} from '../index';
|
|
15
|
+
import * as mixpanelInstance from '../mixpanel-service';
|
|
16
|
+
import { MIXPANEL_EVENT } from '../mixpanel-service';
|
|
13
17
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import {
|
|
18
|
+
createRootEleForEmbed,
|
|
19
|
+
defaultParamsForPinboardEmbed,
|
|
17
20
|
executeAfterWait,
|
|
21
|
+
expectUrlMatchesWithParams,
|
|
18
22
|
getDocumentBody,
|
|
19
23
|
getIFrameEl,
|
|
20
24
|
getIFrameSrc,
|
|
21
25
|
getRootEl,
|
|
26
|
+
mockMessageChannel,
|
|
22
27
|
postMessageToParent,
|
|
23
|
-
defaultParamsForPinboardEmbed,
|
|
24
28
|
waitFor,
|
|
25
|
-
expectUrlMatchesWithParams,
|
|
26
|
-
mockMessageChannel,
|
|
27
29
|
} from '../test/test-utils';
|
|
28
|
-
import
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
import * as authInstance from '../auth';
|
|
32
|
-
import * as baseInstance from './base';
|
|
33
|
-
import { MIXPANEL_EVENT } from '../mixpanel-service';
|
|
30
|
+
import {
|
|
31
|
+
Action, HomeLeftNavItem, HomepageModule, RuntimeFilter, RuntimeFilterOp,
|
|
32
|
+
} from '../types';
|
|
34
33
|
import * as authService from '../utils/authService/authService';
|
|
35
34
|
import { logger } from '../utils/logger';
|
|
35
|
+
import * as baseInstance from './base';
|
|
36
|
+
import * as tsEmbedInstance from './ts-embed';
|
|
36
37
|
|
|
37
38
|
const defaultViewConfig = {
|
|
38
39
|
frameParams: {
|
|
@@ -47,15 +48,6 @@ const tabId2 = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
|
|
|
47
48
|
const thoughtSpotHost = 'tshost';
|
|
48
49
|
const defaultParamsPost = '';
|
|
49
50
|
|
|
50
|
-
const createRootEleForEmbed = () => {
|
|
51
|
-
const rootEle = document.createElement('div');
|
|
52
|
-
rootEle.id = 'myRoot';
|
|
53
|
-
const tsEmbedDiv = document.createElement('div');
|
|
54
|
-
tsEmbedDiv.id = 'tsEmbedDiv';
|
|
55
|
-
rootEle.appendChild(tsEmbedDiv);
|
|
56
|
-
document.body.appendChild(rootEle);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
51
|
beforeAll(() => {
|
|
60
52
|
spyOn(window, 'alert');
|
|
61
53
|
});
|
|
@@ -317,6 +309,46 @@ describe('Unit test case for ts embed', () => {
|
|
|
317
309
|
});
|
|
318
310
|
});
|
|
319
311
|
|
|
312
|
+
test('Runtime filters from view Config should be part of app_init payload when excludeRuntimeFiltersfromURL is undefined', async () => {
|
|
313
|
+
const mockEmbedEventPayload = {
|
|
314
|
+
type: EmbedEvent.APP_INIT,
|
|
315
|
+
data: {},
|
|
316
|
+
};
|
|
317
|
+
const mockRuntimeFilters: RuntimeFilter[] = [
|
|
318
|
+
{
|
|
319
|
+
columnName: 'color',
|
|
320
|
+
operator: RuntimeFilterOp.EQ,
|
|
321
|
+
values: ['blue'],
|
|
322
|
+
},
|
|
323
|
+
];
|
|
324
|
+
|
|
325
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
326
|
+
...defaultViewConfig,
|
|
327
|
+
excludeRuntimeFiltersfromURL: true,
|
|
328
|
+
runtimeFilters: mockRuntimeFilters,
|
|
329
|
+
});
|
|
330
|
+
searchEmbed.render();
|
|
331
|
+
const mockPort: any = {
|
|
332
|
+
postMessage: jest.fn(),
|
|
333
|
+
};
|
|
334
|
+
await executeAfterWait(() => {
|
|
335
|
+
const iframe = getIFrameEl();
|
|
336
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
337
|
+
});
|
|
338
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
339
|
+
type: EmbedEvent.APP_INIT,
|
|
340
|
+
data: {
|
|
341
|
+
customisations,
|
|
342
|
+
authToken: '',
|
|
343
|
+
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
344
|
+
hiddenHomeLeftNavItems: [],
|
|
345
|
+
hiddenHomepageModules: [],
|
|
346
|
+
hostConfig: undefined,
|
|
347
|
+
reorderedHomepageModules: [],
|
|
348
|
+
},
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
|
|
320
352
|
test('Runtime filters from view Config should not be part of app_init payload when excludeRuntimeFiltersfromURL is false', async () => {
|
|
321
353
|
const mockEmbedEventPayload = {
|
|
322
354
|
type: EmbedEvent.APP_INIT,
|
|
@@ -364,7 +396,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
364
396
|
};
|
|
365
397
|
const mockedHiddenHomeLeftNavItems: HomeLeftNavItem[] = [
|
|
366
398
|
HomeLeftNavItem.Home,
|
|
367
|
-
HomeLeftNavItem.
|
|
399
|
+
HomeLeftNavItem.MonitorSubscription,
|
|
368
400
|
];
|
|
369
401
|
|
|
370
402
|
const searchEmbed = new AppEmbed(getRootEl(), {
|
|
@@ -386,7 +418,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
386
418
|
authToken: '',
|
|
387
419
|
hostConfig: undefined,
|
|
388
420
|
runtimeFilterParams: null,
|
|
389
|
-
hiddenHomeLeftNavItems: [
|
|
421
|
+
hiddenHomeLeftNavItems: [
|
|
422
|
+
HomeLeftNavItem.Home,
|
|
423
|
+
HomeLeftNavItem.MonitorSubscription,
|
|
424
|
+
],
|
|
390
425
|
hiddenHomepageModules: [],
|
|
391
426
|
reorderedHomepageModules: [],
|
|
392
427
|
},
|
|
@@ -615,7 +650,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
615
650
|
type: EmbedEvent.APP_INIT,
|
|
616
651
|
data: {},
|
|
617
652
|
};
|
|
618
|
-
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
653
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
654
|
+
...defaultViewConfig,
|
|
655
|
+
preRenderId: 'test',
|
|
656
|
+
});
|
|
619
657
|
searchEmbed.preRender();
|
|
620
658
|
const mockPort: any = {
|
|
621
659
|
postMessage: jest.fn(),
|
|
@@ -672,7 +710,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
672
710
|
type: EmbedEvent.AuthExpire,
|
|
673
711
|
data: {},
|
|
674
712
|
};
|
|
675
|
-
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
713
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
714
|
+
...defaultViewConfig,
|
|
715
|
+
preRenderId: 'test',
|
|
716
|
+
});
|
|
676
717
|
jest.spyOn(baseInstance, 'notifyAuthFailure');
|
|
677
718
|
searchEmbed.preRender();
|
|
678
719
|
const mockPort: any = {
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -8,57 +8,54 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import isEqual from 'lodash/isEqual';
|
|
11
|
-
import
|
|
11
|
+
import pkgInfo from '../../package.json';
|
|
12
|
+
import { AuthFailureType } from '../auth';
|
|
12
13
|
import { getAuthenticationToken } from '../authToken';
|
|
13
|
-
import { AnswerService } from '../utils/graphql/answerService/answerService';
|
|
14
14
|
import {
|
|
15
|
-
getEncodedQueryParamsString,
|
|
16
|
-
getCssDimension,
|
|
17
|
-
getOffsetTop,
|
|
18
|
-
embedEventStatus,
|
|
19
|
-
setAttributes,
|
|
20
|
-
getCustomisations,
|
|
21
|
-
getRuntimeFilters,
|
|
22
|
-
getDOMNode,
|
|
23
|
-
getFilterQuery,
|
|
24
|
-
getQueryParamString,
|
|
25
|
-
getRuntimeParameters,
|
|
26
|
-
setStyleProperties,
|
|
27
|
-
removeStyleProperties,
|
|
28
|
-
isUndefined,
|
|
29
|
-
} from '../utils';
|
|
30
|
-
import {
|
|
31
|
-
getThoughtSpotHost,
|
|
32
|
-
URL_MAX_LENGTH,
|
|
33
|
-
DEFAULT_EMBED_WIDTH,
|
|
34
15
|
DEFAULT_EMBED_HEIGHT,
|
|
16
|
+
DEFAULT_EMBED_WIDTH,
|
|
17
|
+
URL_MAX_LENGTH,
|
|
18
|
+
getThoughtSpotHost,
|
|
35
19
|
getV2BasePath,
|
|
36
20
|
} from '../config';
|
|
21
|
+
import { MIXPANEL_EVENT, uploadMixpanelEvent } from '../mixpanel-service';
|
|
37
22
|
import {
|
|
23
|
+
Action,
|
|
38
24
|
AuthType,
|
|
25
|
+
ContextMenuTriggerOptions,
|
|
39
26
|
DOMSelector,
|
|
40
|
-
|
|
27
|
+
EmbedConfig,
|
|
41
28
|
EmbedEvent,
|
|
29
|
+
HostEvent,
|
|
42
30
|
MessageCallback,
|
|
43
|
-
Action,
|
|
44
|
-
Param,
|
|
45
|
-
EmbedConfig,
|
|
46
|
-
MessageOptions,
|
|
47
|
-
MessagePayload,
|
|
48
31
|
MessageCallbackObj,
|
|
32
|
+
MessageOptions,
|
|
33
|
+
Param,
|
|
49
34
|
ViewConfig,
|
|
50
|
-
FrameParams,
|
|
51
|
-
ContextMenuTriggerOptions,
|
|
52
|
-
RuntimeFilter,
|
|
53
35
|
} from '../types';
|
|
54
|
-
import {
|
|
55
|
-
|
|
36
|
+
import {
|
|
37
|
+
embedEventStatus,
|
|
38
|
+
getCssDimension,
|
|
39
|
+
getCustomisations,
|
|
40
|
+
getDOMNode,
|
|
41
|
+
getEncodedQueryParamsString,
|
|
42
|
+
getFilterQuery,
|
|
43
|
+
getOffsetTop,
|
|
44
|
+
getQueryParamString,
|
|
45
|
+
getRuntimeFilters,
|
|
46
|
+
getRuntimeParameters,
|
|
47
|
+
isUndefined,
|
|
48
|
+
removeStyleProperties,
|
|
49
|
+
setAttributes,
|
|
50
|
+
setStyleProperties,
|
|
51
|
+
} from '../utils';
|
|
52
|
+
import { AnswerService } from '../utils/graphql/answerService/answerService';
|
|
53
|
+
import { logger } from '../utils/logger';
|
|
54
|
+
import { processAuthFailure, processEventData } from '../utils/processData';
|
|
56
55
|
import { processTrigger } from '../utils/processTrigger';
|
|
57
|
-
import pkgInfo from '../../package.json';
|
|
58
56
|
import {
|
|
59
|
-
getAuthPromise,
|
|
57
|
+
getAuthPromise, handleAuth, notifyAuthFailure, renderInQueue,
|
|
60
58
|
} from './base';
|
|
61
|
-
import { AuthFailureType } from '../auth';
|
|
62
59
|
import { getEmbedConfig } from './embedConfig';
|
|
63
60
|
|
|
64
61
|
const { version } = pkgInfo;
|
|
@@ -170,7 +167,7 @@ export class TsEmbed {
|
|
|
170
167
|
this.thoughtSpotV2Base = getV2BasePath(this.embedConfig);
|
|
171
168
|
this.eventHandlerMap = new Map();
|
|
172
169
|
this.isError = false;
|
|
173
|
-
this.viewConfig = viewConfig;
|
|
170
|
+
this.viewConfig = { excludeRuntimeFiltersfromURL: true, ...viewConfig };
|
|
174
171
|
this.shouldEncodeUrlQueryParams = this.embedConfig.shouldEncodeUrlQueryParams;
|
|
175
172
|
this.registerAppInit();
|
|
176
173
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
@@ -518,10 +515,7 @@ export class TsEmbed {
|
|
|
518
515
|
const queryParams = this.shouldEncodeUrlQueryParams
|
|
519
516
|
? `?base64UrlEncodedFlags=${getEncodedQueryParamsString(queryString)}`
|
|
520
517
|
: `?${queryString}`;
|
|
521
|
-
|
|
522
|
-
if (!isUndefined(this.embedConfig.enableReactShell)) {
|
|
523
|
-
host = this.embedConfig.enableReactShell as boolean ? '/v2' : '/v1';
|
|
524
|
-
}
|
|
518
|
+
const host = this.thoughtSpotHost;
|
|
525
519
|
const path = `${host}/${queryParams}#`;
|
|
526
520
|
return path;
|
|
527
521
|
}
|
|
@@ -559,8 +553,7 @@ export class TsEmbed {
|
|
|
559
553
|
|
|
560
554
|
const {
|
|
561
555
|
height: frameHeight,
|
|
562
|
-
width: frameWidth,
|
|
563
|
-
...restParams
|
|
556
|
+
width: frameWidth, ...restParams
|
|
564
557
|
} = this.viewConfig.frameParams || {};
|
|
565
558
|
const width = getCssDimension(frameWidth || DEFAULT_EMBED_WIDTH);
|
|
566
559
|
const height = getCssDimension(frameHeight || DEFAULT_EMBED_HEIGHT);
|
|
@@ -682,7 +675,7 @@ export class TsEmbed {
|
|
|
682
675
|
protected connectPreRendered(): boolean {
|
|
683
676
|
const preRenderIds = this.getPreRenderIds();
|
|
684
677
|
this.preRenderWrapper = this.preRenderWrapper
|
|
685
|
-
|
|
678
|
+
|| document.getElementById(preRenderIds.wrapper);
|
|
686
679
|
|
|
687
680
|
this.preRenderChild = this.preRenderChild || document.getElementById(preRenderIds.child);
|
|
688
681
|
|
|
@@ -968,6 +961,16 @@ export class TsEmbed {
|
|
|
968
961
|
*/
|
|
969
962
|
public trigger(messageType: HostEvent, data: any = {}): Promise<any> {
|
|
970
963
|
uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`);
|
|
964
|
+
|
|
965
|
+
if (!this.isRendered) {
|
|
966
|
+
this.handleError('Please call render before triggering events');
|
|
967
|
+
return null;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
if (!messageType) {
|
|
971
|
+
this.handleError('Host event type is undefined');
|
|
972
|
+
return null;
|
|
973
|
+
}
|
|
971
974
|
return processTrigger(this.iFrame, messageType, this.thoughtSpotHost, data);
|
|
972
975
|
}
|
|
973
976
|
|
|
@@ -978,7 +981,7 @@ export class TsEmbed {
|
|
|
978
981
|
*
|
|
979
982
|
* @param args
|
|
980
983
|
*/
|
|
981
|
-
public render(): TsEmbed {
|
|
984
|
+
public async render(): Promise<TsEmbed> {
|
|
982
985
|
this.isRendered = true;
|
|
983
986
|
|
|
984
987
|
return this;
|
|
@@ -1236,7 +1239,7 @@ export class V1Embed extends TsEmbed {
|
|
|
1236
1239
|
|
|
1237
1240
|
constructor(domSelector: DOMSelector, viewConfig: ViewConfig) {
|
|
1238
1241
|
super(domSelector, viewConfig);
|
|
1239
|
-
this.viewConfig = viewConfig;
|
|
1242
|
+
this.viewConfig = { excludeRuntimeFiltersfromURL: true, ...viewConfig };
|
|
1240
1243
|
}
|
|
1241
1244
|
|
|
1242
1245
|
/**
|
package/src/index.ts
CHANGED
|
@@ -54,6 +54,7 @@ import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
|
54
54
|
import { AnswerService, SessionInterface, UnderlyingDataPoint } from './utils/graphql/answerService/answerService';
|
|
55
55
|
import { getEmbedConfig } from './embed/embedConfig';
|
|
56
56
|
import { uploadMixpanelEvent, MIXPANEL_EVENT } from './mixpanel-service';
|
|
57
|
+
import { tokenizedFetch } from './tokenizedFetch';
|
|
57
58
|
|
|
58
59
|
export {
|
|
59
60
|
init,
|
|
@@ -65,6 +66,7 @@ export {
|
|
|
65
66
|
exportTMLInput,
|
|
66
67
|
getEmbedConfig as getInitConfig,
|
|
67
68
|
getSessionInfo,
|
|
69
|
+
tokenizedFetch,
|
|
68
70
|
SearchEmbed,
|
|
69
71
|
SearchBarEmbed,
|
|
70
72
|
PinboardEmbed,
|
package/src/react/index.spec.tsx
CHANGED
|
@@ -135,6 +135,7 @@ describe('React Components', () => {
|
|
|
135
135
|
values: [100],
|
|
136
136
|
},
|
|
137
137
|
]}
|
|
138
|
+
excludeRuntimeFiltersfromURL={false}
|
|
138
139
|
/>,
|
|
139
140
|
);
|
|
140
141
|
|
|
@@ -199,6 +200,35 @@ describe('React Components', () => {
|
|
|
199
200
|
).toBe(true);
|
|
200
201
|
expect(containerSibling.querySelector('div')).toBe(null);
|
|
201
202
|
});
|
|
203
|
+
|
|
204
|
+
it('Should have the correct container element', async () => {
|
|
205
|
+
const { container } = render(
|
|
206
|
+
<LiveboardEmbed liveboardId="abcd" className="def" />,
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
await waitFor(() => getIFrameEl(container));
|
|
210
|
+
expect(container.querySelector('div')).not.toBe(null);
|
|
211
|
+
expect(
|
|
212
|
+
container.querySelector('div').classList.contains('def'),
|
|
213
|
+
).toBe(true);
|
|
214
|
+
|
|
215
|
+
const { container: containerSibling } = render(
|
|
216
|
+
<LiveboardEmbed
|
|
217
|
+
liveboardId="abcd"
|
|
218
|
+
className="def"
|
|
219
|
+
insertAsSibling={true}
|
|
220
|
+
/>,
|
|
221
|
+
);
|
|
222
|
+
await waitFor(() => getIFrameEl(containerSibling));
|
|
223
|
+
expect(containerSibling.querySelector('span')).not.toBe(null);
|
|
224
|
+
expect(containerSibling.querySelector('span').style.position).toBe(
|
|
225
|
+
'absolute',
|
|
226
|
+
);
|
|
227
|
+
expect(
|
|
228
|
+
getIFrameEl(containerSibling).classList.contains('def'),
|
|
229
|
+
).toBe(true);
|
|
230
|
+
expect(containerSibling.querySelector('div')).toBe(null);
|
|
231
|
+
});
|
|
202
232
|
});
|
|
203
233
|
|
|
204
234
|
describe('SearchBarEmbed', () => {
|
package/src/test/test-utils.ts
CHANGED
|
@@ -116,3 +116,12 @@ export const expectUrlMatch = (source: string, target: string) => {
|
|
|
116
116
|
const targetUrl = new URL(target);
|
|
117
117
|
expect(sourceUrl.hash).toBe(targetUrl.hash);
|
|
118
118
|
};
|
|
119
|
+
|
|
120
|
+
export const createRootEleForEmbed = () => {
|
|
121
|
+
const rootEle = document.createElement('div');
|
|
122
|
+
rootEle.id = 'myRoot';
|
|
123
|
+
const tsEmbedDiv = document.createElement('div');
|
|
124
|
+
tsEmbedDiv.id = 'tsEmbedDiv';
|
|
125
|
+
rootEle.appendChild(tsEmbedDiv);
|
|
126
|
+
document.body.appendChild(rootEle);
|
|
127
|
+
};
|
package/src/tokenizedFetch.ts
CHANGED
|
@@ -3,6 +3,15 @@ import { getEmbedConfig } from './embed/embedConfig';
|
|
|
3
3
|
|
|
4
4
|
import { AuthType } from './types';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Fetch wrapper that adds the authentication token to the request.
|
|
8
|
+
* Use this to call the ThoughtSpot APIs when using the visual embed sdk.
|
|
9
|
+
*
|
|
10
|
+
* @param input
|
|
11
|
+
* @param init
|
|
12
|
+
* @version SDK: 1.28.0
|
|
13
|
+
* @group Global methods
|
|
14
|
+
*/
|
|
6
15
|
export const tokenizedFetch: typeof fetch = async (input, init): Promise<Response> => {
|
|
7
16
|
const embedConfig = getEmbedConfig();
|
|
8
17
|
if (embedConfig.authType !== AuthType.TrustedAuthTokenCookieless) {
|