@thoughtspot/visual-embed-sdk 1.51.1 → 1.52.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/cjs/package.json +1 -1
- package/cjs/src/api-intercept.d.ts.map +1 -1
- package/cjs/src/api-intercept.js +1 -0
- package/cjs/src/api-intercept.js.map +1 -1
- package/cjs/src/css-variables.d.ts +1 -1
- package/cjs/src/embed/conversation.d.ts +5 -5
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +2 -1
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +4 -4
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search.spec.js +28 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +86 -5
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +30 -19
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +55 -16
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +2 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/index.d.ts +8 -8
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +1 -1
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +7 -7
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +124 -36
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +80 -12
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils.d.ts +5 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +19 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +33 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-DxLfQxoT.js → index-BMppCU63.js} +1 -1
- package/dist/src/api-intercept.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +1 -1
- package/dist/src/embed/conversation.d.ts +5 -5
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +86 -5
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +8 -8
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +124 -36
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +5 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +133 -35
- package/dist/tsembed-react.js +132 -34
- package/dist/tsembed.es.js +133 -35
- package/dist/tsembed.js +131 -33
- package/dist/visual-embed-sdk-react-full.d.ts +223 -54
- package/dist/visual-embed-sdk-react.d.ts +199 -53
- package/dist/visual-embed-sdk.d.ts +215 -46
- package/lib/package.json +1 -1
- package/lib/src/api-intercept.d.ts.map +1 -1
- package/lib/src/api-intercept.js +2 -1
- package/lib/src/api-intercept.js.map +1 -1
- package/lib/src/css-variables.d.ts +1 -1
- package/lib/src/embed/conversation.d.ts +5 -5
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +3 -2
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +4 -4
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search.spec.js +28 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +86 -5
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +32 -21
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +56 -17
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/react/index.d.ts +8 -8
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +1 -1
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +7 -7
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +124 -36
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +79 -11
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +5 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +17 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +34 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +215 -46
- package/package.json +1 -1
- package/src/api-intercept.ts +2 -1
- package/src/css-variables.ts +1 -1
- package/src/embed/conversation.ts +5 -5
- package/src/embed/liveboard.spec.ts +4 -4
- package/src/embed/liveboard.ts +3 -1
- package/src/embed/search.spec.ts +31 -0
- package/src/embed/ts-embed.spec.ts +70 -16
- package/src/embed/ts-embed.ts +32 -20
- package/src/index.ts +2 -0
- package/src/react/all-types-export.ts +1 -0
- package/src/react/index.spec.tsx +7 -7
- package/src/react/index.tsx +9 -9
- package/src/types.ts +125 -36
- package/src/utils.spec.ts +44 -0
- package/src/utils.ts +16 -0
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
DefaultAppInitData,
|
|
32
32
|
ErrorDetailsTypes,
|
|
33
33
|
EmbedErrorCodes,
|
|
34
|
+
EmbedErrorSeverity,
|
|
34
35
|
ContextObject,
|
|
35
36
|
} from '../types';
|
|
36
37
|
import {
|
|
@@ -1897,9 +1898,62 @@ describe('Unit test case for ts embed', () => {
|
|
|
1897
1898
|
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1898
1899
|
message: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
1899
1900
|
code: EmbedErrorCodes.INIT_ERROR,
|
|
1901
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
1900
1902
|
error: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
1901
1903
|
});
|
|
1902
1904
|
});
|
|
1905
|
+
|
|
1906
|
+
test('a missing init is reported to the host as SEV1', async () => {
|
|
1907
|
+
const errorHandler = jest.fn();
|
|
1908
|
+
const tsEmbed = new SearchEmbed(getRootEl(), {});
|
|
1909
|
+
tsEmbed.on(EmbedEvent.Error, errorHandler);
|
|
1910
|
+
await tsEmbed.render();
|
|
1911
|
+
expect(errorHandler.mock.calls[0][0]).toEqual(
|
|
1912
|
+
expect.objectContaining({
|
|
1913
|
+
code: EmbedErrorCodes.INIT_ERROR,
|
|
1914
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
1915
|
+
}),
|
|
1916
|
+
);
|
|
1917
|
+
});
|
|
1918
|
+
});
|
|
1919
|
+
|
|
1920
|
+
describe('error severity', () => {
|
|
1921
|
+
beforeEach(() => {
|
|
1922
|
+
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
|
|
1923
|
+
});
|
|
1924
|
+
|
|
1925
|
+
test('defaults to SEV3 when the raising site does not set one', () => {
|
|
1926
|
+
const errorHandler = jest.fn();
|
|
1927
|
+
const tsEmbed = new SearchEmbed(getRootEl(), {});
|
|
1928
|
+
tsEmbed.on(EmbedEvent.Error, errorHandler);
|
|
1929
|
+
|
|
1930
|
+
(tsEmbed as any).handleError({
|
|
1931
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1932
|
+
message: 'no severity set',
|
|
1933
|
+
code: EmbedErrorCodes.HOST_EVENT_VALIDATION,
|
|
1934
|
+
});
|
|
1935
|
+
|
|
1936
|
+
expect(errorHandler.mock.calls[0][0]).toEqual(
|
|
1937
|
+
expect.objectContaining({ severity: EmbedErrorSeverity.SEV3 }),
|
|
1938
|
+
);
|
|
1939
|
+
});
|
|
1940
|
+
|
|
1941
|
+
test('does not override a severity the raising site set', () => {
|
|
1942
|
+
const errorHandler = jest.fn();
|
|
1943
|
+
const tsEmbed = new SearchEmbed(getRootEl(), {});
|
|
1944
|
+
tsEmbed.on(EmbedEvent.Error, errorHandler);
|
|
1945
|
+
|
|
1946
|
+
(tsEmbed as any).handleError({
|
|
1947
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1948
|
+
message: 'explicitly fatal',
|
|
1949
|
+
code: EmbedErrorCodes.HOST_EVENT_VALIDATION,
|
|
1950
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
1951
|
+
});
|
|
1952
|
+
|
|
1953
|
+
expect(errorHandler.mock.calls[0][0]).toEqual(
|
|
1954
|
+
expect.objectContaining({ severity: EmbedErrorSeverity.SEV1 }),
|
|
1955
|
+
);
|
|
1956
|
+
});
|
|
1903
1957
|
});
|
|
1904
1958
|
|
|
1905
1959
|
describe('V1Embed ', () => {
|
|
@@ -3540,13 +3594,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
3540
3594
|
libEmbed.destroy();
|
|
3541
3595
|
});
|
|
3542
3596
|
|
|
3543
|
-
it('should use preRenderConfig.
|
|
3597
|
+
it('should use preRenderConfig.id to identify the pre-render instance', async () => {
|
|
3544
3598
|
createRootEleForEmbed();
|
|
3545
3599
|
|
|
3546
3600
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3547
3601
|
liveboardId: 'myLiveboardId',
|
|
3548
3602
|
preRenderConfig: {
|
|
3549
|
-
|
|
3603
|
+
id: 'config-level-id',
|
|
3550
3604
|
},
|
|
3551
3605
|
});
|
|
3552
3606
|
|
|
@@ -3560,14 +3614,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
3560
3614
|
libEmbed.destroy();
|
|
3561
3615
|
});
|
|
3562
3616
|
|
|
3563
|
-
it('should prefer preRenderConfig.
|
|
3617
|
+
it('should prefer preRenderConfig.id over top-level preRenderId', async () => {
|
|
3564
3618
|
createRootEleForEmbed();
|
|
3565
3619
|
|
|
3566
3620
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3567
3621
|
liveboardId: 'myLiveboardId',
|
|
3568
3622
|
preRenderId: 'top-level-id',
|
|
3569
3623
|
preRenderConfig: {
|
|
3570
|
-
|
|
3624
|
+
id: 'config-level-id',
|
|
3571
3625
|
},
|
|
3572
3626
|
});
|
|
3573
3627
|
|
|
@@ -3581,7 +3635,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3581
3635
|
libEmbed.destroy();
|
|
3582
3636
|
});
|
|
3583
3637
|
|
|
3584
|
-
it('should mount the wrapper into preRenderConfig.
|
|
3638
|
+
it('should mount the wrapper into preRenderConfig.containerSelector', async () => {
|
|
3585
3639
|
createRootEleForEmbed();
|
|
3586
3640
|
const customContainer = document.createElement('div');
|
|
3587
3641
|
customContainer.id = 'config-level-container';
|
|
@@ -3590,8 +3644,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3590
3644
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3591
3645
|
liveboardId: 'myLiveboardId',
|
|
3592
3646
|
preRenderConfig: {
|
|
3593
|
-
|
|
3594
|
-
|
|
3647
|
+
id: 'container-via-config',
|
|
3648
|
+
containerSelector: '#config-level-container',
|
|
3595
3649
|
},
|
|
3596
3650
|
});
|
|
3597
3651
|
|
|
@@ -3606,7 +3660,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3606
3660
|
customContainer.remove();
|
|
3607
3661
|
});
|
|
3608
3662
|
|
|
3609
|
-
it('should prefer preRenderConfig.
|
|
3663
|
+
it('should prefer preRenderConfig.containerSelector over top-level preRenderContainer', async () => {
|
|
3610
3664
|
createRootEleForEmbed();
|
|
3611
3665
|
const topContainer = document.createElement('div');
|
|
3612
3666
|
topContainer.id = 'top-level-container';
|
|
@@ -3619,8 +3673,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3619
3673
|
liveboardId: 'myLiveboardId',
|
|
3620
3674
|
preRenderContainer: '#top-level-container',
|
|
3621
3675
|
preRenderConfig: {
|
|
3622
|
-
|
|
3623
|
-
|
|
3676
|
+
id: 'container-precedence',
|
|
3677
|
+
containerSelector: '#config-level-container-2',
|
|
3624
3678
|
},
|
|
3625
3679
|
});
|
|
3626
3680
|
|
|
@@ -3637,7 +3691,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3637
3691
|
configContainer.remove();
|
|
3638
3692
|
});
|
|
3639
3693
|
|
|
3640
|
-
it('should not attach ResizeObserver when preRenderConfig.
|
|
3694
|
+
it('should not attach ResizeObserver when preRenderConfig.doNotTrackSize is true', async () => {
|
|
3641
3695
|
createRootEleForEmbed();
|
|
3642
3696
|
const observeMock = jest.fn();
|
|
3643
3697
|
(window as any).ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
@@ -3649,8 +3703,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3649
3703
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3650
3704
|
liveboardId: 'myLiveboardId',
|
|
3651
3705
|
preRenderConfig: {
|
|
3652
|
-
|
|
3653
|
-
|
|
3706
|
+
id: 'no-track-via-config',
|
|
3707
|
+
doNotTrackSize: true,
|
|
3654
3708
|
},
|
|
3655
3709
|
});
|
|
3656
3710
|
|
|
@@ -3663,7 +3717,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3663
3717
|
libEmbed.destroy();
|
|
3664
3718
|
});
|
|
3665
3719
|
|
|
3666
|
-
it('should prefer preRenderConfig.
|
|
3720
|
+
it('should prefer preRenderConfig.doNotTrackSize over top-level doNotTrackPreRenderSize', async () => {
|
|
3667
3721
|
createRootEleForEmbed();
|
|
3668
3722
|
const observeMock = jest.fn();
|
|
3669
3723
|
(window as any).ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
@@ -3676,8 +3730,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3676
3730
|
liveboardId: 'myLiveboardId',
|
|
3677
3731
|
doNotTrackPreRenderSize: false,
|
|
3678
3732
|
preRenderConfig: {
|
|
3679
|
-
|
|
3680
|
-
|
|
3733
|
+
id: 'no-track-precedence',
|
|
3734
|
+
doNotTrackSize: true,
|
|
3681
3735
|
},
|
|
3682
3736
|
});
|
|
3683
3737
|
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
isUndefined,
|
|
39
39
|
getHostEventsConfig,
|
|
40
40
|
getValueFromWindow,
|
|
41
|
+
deserializeParam,
|
|
41
42
|
} from '../utils';
|
|
42
43
|
import { getCustomActions } from '../utils/custom-actions';
|
|
43
44
|
import {
|
|
@@ -62,6 +63,7 @@ import {
|
|
|
62
63
|
DefaultAppInitData,
|
|
63
64
|
AllEmbedViewConfig as ViewConfig,
|
|
64
65
|
EmbedErrorDetailsEvent,
|
|
66
|
+
EmbedErrorSeverity,
|
|
65
67
|
ErrorDetailsTypes,
|
|
66
68
|
EmbedErrorCodes,
|
|
67
69
|
MessagePayload,
|
|
@@ -283,6 +285,7 @@ export class TsEmbed {
|
|
|
283
285
|
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
284
286
|
message: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
285
287
|
code: EmbedErrorCodes.INIT_ERROR,
|
|
288
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
286
289
|
error: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
287
290
|
});
|
|
288
291
|
}
|
|
@@ -294,7 +297,10 @@ export class TsEmbed {
|
|
|
294
297
|
*/
|
|
295
298
|
protected handleError(errorDetails: EmbedErrorDetailsEvent) {
|
|
296
299
|
this.isError = true;
|
|
297
|
-
this.executeCallbacks(EmbedEvent.Error,
|
|
300
|
+
this.executeCallbacks(EmbedEvent.Error, {
|
|
301
|
+
severity: EmbedErrorSeverity.SEV3,
|
|
302
|
+
...errorDetails,
|
|
303
|
+
});
|
|
298
304
|
// Log error
|
|
299
305
|
logger.error(errorDetails);
|
|
300
306
|
}
|
|
@@ -392,6 +398,7 @@ export class TsEmbed {
|
|
|
392
398
|
errorType: ErrorDetailsTypes.NETWORK,
|
|
393
399
|
message: ERROR_MESSAGE.OFFLINE_WARNING,
|
|
394
400
|
code: EmbedErrorCodes.NETWORK_ERROR,
|
|
401
|
+
severity: EmbedErrorSeverity.SEV2,
|
|
395
402
|
offlineWarning: ERROR_MESSAGE.OFFLINE_WARNING,
|
|
396
403
|
};
|
|
397
404
|
this.executeCallbacks(EmbedEvent.Error, errorDetails);
|
|
@@ -706,11 +713,14 @@ export class TsEmbed {
|
|
|
706
713
|
}
|
|
707
714
|
|
|
708
715
|
protected async getUpdateEmbedParamsObject() {
|
|
709
|
-
|
|
716
|
+
const queryParams = this.getEmbedParamsObject();
|
|
717
|
+
// Values are URL-serialized (e.g. dataSources as '["guid"]'); parse
|
|
718
|
+
// them back so the event payload matches a URL load (SCAL-334713).
|
|
719
|
+
Object.keys(queryParams).forEach((key) => {
|
|
720
|
+
queryParams[key] = deserializeParam(queryParams[key]);
|
|
721
|
+
});
|
|
710
722
|
const appInitData = await this.getAppInitData();
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
return queryParams;
|
|
723
|
+
return { ...this.viewConfig, ...queryParams, ...appInitData };
|
|
714
724
|
}
|
|
715
725
|
|
|
716
726
|
/**
|
|
@@ -963,18 +973,19 @@ export class TsEmbed {
|
|
|
963
973
|
}
|
|
964
974
|
|
|
965
975
|
/**
|
|
966
|
-
* Returns a merged {@link PreRenderConfig} object where each
|
|
967
|
-
*
|
|
968
|
-
*
|
|
976
|
+
* Returns a merged {@link PreRenderConfig} object where each key prefers the
|
|
977
|
+
* value from `preRenderConfig` over its deprecated top-level `viewConfig`
|
|
978
|
+
* counterpart (`id`/`preRenderId`, `containerSelector`/`preRenderContainer`,
|
|
979
|
+
* `doNotTrackSize`/`doNotTrackPreRenderSize`) for backward compatibility.
|
|
969
980
|
*/
|
|
970
981
|
protected getPreRenderConfig(): PreRenderConfig {
|
|
971
982
|
const viewCfg = this.viewConfig as BaseViewConfig;
|
|
972
983
|
const preRenderCfg = viewCfg.preRenderConfig ?? {};
|
|
973
984
|
return {
|
|
974
985
|
...preRenderCfg,
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
986
|
+
id: preRenderCfg.id ?? viewCfg.preRenderId,
|
|
987
|
+
containerSelector: preRenderCfg.containerSelector ?? viewCfg.preRenderContainer,
|
|
988
|
+
doNotTrackSize: preRenderCfg.doNotTrackSize ?? viewCfg.doNotTrackPreRenderSize,
|
|
978
989
|
};
|
|
979
990
|
}
|
|
980
991
|
|
|
@@ -982,7 +993,7 @@ export class TsEmbed {
|
|
|
982
993
|
* Returns true if this embed instance is configured for pre-rendering.
|
|
983
994
|
*/
|
|
984
995
|
protected isPreRenderEmbed() {
|
|
985
|
-
return !!this.getPreRenderConfig().
|
|
996
|
+
return !!this.getPreRenderConfig().id;
|
|
986
997
|
}
|
|
987
998
|
protected handleInsertionIntoDOM(child: string | Node): void {
|
|
988
999
|
if (this.isPreRenderEmbed()) {
|
|
@@ -1088,6 +1099,7 @@ export class TsEmbed {
|
|
|
1088
1099
|
errorType: ErrorDetailsTypes.API,
|
|
1089
1100
|
message: error.message || ERROR_MESSAGE.LOGIN_FAILED,
|
|
1090
1101
|
code: EmbedErrorCodes.LOGIN_FAILED,
|
|
1102
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
1091
1103
|
error: error,
|
|
1092
1104
|
});
|
|
1093
1105
|
});
|
|
@@ -1196,7 +1208,7 @@ export class TsEmbed {
|
|
|
1196
1208
|
* fresh element; an element passed directly cannot be re-resolved.
|
|
1197
1209
|
*/
|
|
1198
1210
|
private resolvePreRenderContainerTarget(): HTMLElement {
|
|
1199
|
-
const containerConfig = this.getPreRenderConfig().
|
|
1211
|
+
const containerConfig = this.getPreRenderConfig().containerSelector;
|
|
1200
1212
|
let container: Element | null = null;
|
|
1201
1213
|
if (typeof containerConfig === 'string') {
|
|
1202
1214
|
try {
|
|
@@ -1220,7 +1232,7 @@ export class TsEmbed {
|
|
|
1220
1232
|
}
|
|
1221
1233
|
const ownerContainer = preRenderedObject.preRenderContainerEl ?? document.body;
|
|
1222
1234
|
if (
|
|
1223
|
-
this.getPreRenderConfig().
|
|
1235
|
+
this.getPreRenderConfig().containerSelector
|
|
1224
1236
|
&& this.resolvePreRenderContainerTarget() !== ownerContainer
|
|
1225
1237
|
) {
|
|
1226
1238
|
logger.warn(
|
|
@@ -1846,7 +1858,7 @@ export class TsEmbed {
|
|
|
1846
1858
|
showPreRenderByDefault,
|
|
1847
1859
|
replaceExistingPreRender,
|
|
1848
1860
|
});
|
|
1849
|
-
if (!this.getPreRenderConfig().
|
|
1861
|
+
if (!this.getPreRenderConfig().id) {
|
|
1850
1862
|
logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
|
|
1851
1863
|
return this;
|
|
1852
1864
|
}
|
|
@@ -2032,14 +2044,14 @@ export class TsEmbed {
|
|
|
2032
2044
|
*/
|
|
2033
2045
|
public async showPreRender(): Promise<TsEmbed> {
|
|
2034
2046
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_SHOW_PRE_RENDER, {
|
|
2035
|
-
preRenderId: this.getPreRenderConfig().
|
|
2047
|
+
preRenderId: this.getPreRenderConfig().id,
|
|
2036
2048
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
2037
2049
|
});
|
|
2038
2050
|
|
|
2039
2051
|
if (this.shouldWaitForRenderPromise) await this.isReadyForRenderPromise;
|
|
2040
2052
|
|
|
2041
2053
|
|
|
2042
|
-
if (!this.getPreRenderConfig().
|
|
2054
|
+
if (!this.getPreRenderConfig().id) {
|
|
2043
2055
|
logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
|
|
2044
2056
|
return this;
|
|
2045
2057
|
}
|
|
@@ -2081,7 +2093,7 @@ export class TsEmbed {
|
|
|
2081
2093
|
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
2082
2094
|
}
|
|
2083
2095
|
|
|
2084
|
-
if (!this.getPreRenderConfig().
|
|
2096
|
+
if (!this.getPreRenderConfig().doNotTrackSize) {
|
|
2085
2097
|
const observeTarget = (this.insertedDomEl as HTMLElement) ?? this.hostElement;
|
|
2086
2098
|
this.resizeObserver = new ResizeObserver((entries) => {
|
|
2087
2099
|
entries.forEach((entry) => {
|
|
@@ -2156,7 +2168,7 @@ export class TsEmbed {
|
|
|
2156
2168
|
*/
|
|
2157
2169
|
public hidePreRender(): void {
|
|
2158
2170
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_HIDE_PRE_RENDER, {
|
|
2159
|
-
preRenderId: this.getPreRenderConfig().
|
|
2171
|
+
preRenderId: this.getPreRenderConfig().id,
|
|
2160
2172
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
2161
2173
|
});
|
|
2162
2174
|
|
|
@@ -2200,7 +2212,7 @@ export class TsEmbed {
|
|
|
2200
2212
|
* @property {string} child - The HTML element ID for the PreRender child.
|
|
2201
2213
|
*/
|
|
2202
2214
|
public getPreRenderIds() {
|
|
2203
|
-
const preRenderId = this.getPreRenderConfig().
|
|
2215
|
+
const preRenderId = this.getPreRenderConfig().id;
|
|
2204
2216
|
return {
|
|
2205
2217
|
wrapper: `${PRERENDER_WRAPPER_ID_PREFIX}${preRenderId}`,
|
|
2206
2218
|
child: `tsEmbed-pre-render-child-${preRenderId}`,
|
package/src/index.ts
CHANGED
|
@@ -69,6 +69,7 @@ import {
|
|
|
69
69
|
InterceptedApiType,
|
|
70
70
|
EmbedErrorCodes,
|
|
71
71
|
EmbedErrorDetailsEvent,
|
|
72
|
+
EmbedErrorSeverity,
|
|
72
73
|
ErrorDetailsTypes,
|
|
73
74
|
ContextType,
|
|
74
75
|
AutoMCPFrameRendererViewConfig,
|
|
@@ -218,6 +219,7 @@ export {
|
|
|
218
219
|
InterceptedApiType,
|
|
219
220
|
EmbedErrorCodes,
|
|
220
221
|
EmbedErrorDetailsEvent,
|
|
222
|
+
EmbedErrorSeverity,
|
|
221
223
|
ErrorDetailsTypes,
|
|
222
224
|
AutoMCPFrameRendererViewConfig,
|
|
223
225
|
VisualizationOverrides,
|
package/src/react/index.spec.tsx
CHANGED
|
@@ -358,10 +358,10 @@ describe('React Components', () => {
|
|
|
358
358
|
].forEach((spy) => spy.mockRestore());
|
|
359
359
|
});
|
|
360
360
|
|
|
361
|
-
it('Should preRender PreRenderedLiveboardEmbed with preRenderConfig.
|
|
361
|
+
it('Should preRender PreRenderedLiveboardEmbed with preRenderConfig.id', () => {
|
|
362
362
|
render(
|
|
363
363
|
<PreRenderedLiveboardEmbed
|
|
364
|
-
preRenderConfig={{ preRenderId }}
|
|
364
|
+
preRenderConfig={{ id: preRenderId }}
|
|
365
365
|
liveboardId="test-liveboard"
|
|
366
366
|
/>,
|
|
367
367
|
);
|
|
@@ -386,7 +386,7 @@ describe('React Components', () => {
|
|
|
386
386
|
it('Should showPreRender the LiveboardEmbed connected via preRenderConfig', () => {
|
|
387
387
|
const { unmount } = render(
|
|
388
388
|
<LiveboardEmbed
|
|
389
|
-
preRenderConfig={{ preRenderId }}
|
|
389
|
+
preRenderConfig={{ id: preRenderId }}
|
|
390
390
|
liveboardId="test-liveboard"
|
|
391
391
|
/>,
|
|
392
392
|
);
|
|
@@ -447,10 +447,10 @@ describe('React Components', () => {
|
|
|
447
447
|
.forEach((el) => el.remove());
|
|
448
448
|
});
|
|
449
449
|
|
|
450
|
-
it('Should create the wrapper with preRenderConfig.
|
|
450
|
+
it('Should create the wrapper with preRenderConfig.id', async () => {
|
|
451
451
|
render(
|
|
452
452
|
<PreRenderedLiveboardEmbed
|
|
453
|
-
preRenderConfig={{ preRenderId }}
|
|
453
|
+
preRenderConfig={{ id: preRenderId }}
|
|
454
454
|
liveboardId="test-liveboard"
|
|
455
455
|
/>,
|
|
456
456
|
);
|
|
@@ -458,11 +458,11 @@ describe('React Components', () => {
|
|
|
458
458
|
await waitFor(() => expect(document.getElementById(wrapperId(preRenderId))).not.toBe(null));
|
|
459
459
|
});
|
|
460
460
|
|
|
461
|
-
it('Should prefer preRenderConfig.
|
|
461
|
+
it('Should prefer preRenderConfig.id over the top-level preRenderId', async () => {
|
|
462
462
|
render(
|
|
463
463
|
<PreRenderedLiveboardEmbed
|
|
464
464
|
preRenderId="top-level-pre-render-id"
|
|
465
|
-
preRenderConfig={{
|
|
465
|
+
preRenderConfig={{ id: 'config-pre-render-id' }}
|
|
466
466
|
liveboardId="test-liveboard"
|
|
467
467
|
/>,
|
|
468
468
|
);
|
package/src/react/index.tsx
CHANGED
|
@@ -34,7 +34,7 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
34
34
|
const { viewConfig, listeners } = getViewPropsAndListeners<Omit<U, 'className' | 'style'>, V>(
|
|
35
35
|
embedProps,
|
|
36
36
|
);
|
|
37
|
-
const preRenderId = props.preRenderConfig?.
|
|
37
|
+
const preRenderId = props.preRenderConfig?.id ?? props.preRenderId;
|
|
38
38
|
|
|
39
39
|
const handleDestroy = (tsEmbed: InstanceType<T>) => {
|
|
40
40
|
// do not destroy if it is a preRender component
|
|
@@ -116,9 +116,9 @@ interface SearchProps extends EmbedProps, SearchViewConfig { }
|
|
|
116
116
|
|
|
117
117
|
/**
|
|
118
118
|
* The PreRendered components require a preRender id. It can be supplied either
|
|
119
|
-
* through `preRenderConfig.
|
|
119
|
+
* through `preRenderConfig.id` (SDK: 1.52.0 and later) or through the
|
|
120
120
|
* top-level `preRenderId` prop (SDK: 1.25.0 and later, now deprecated).
|
|
121
|
-
* `preRenderConfig.
|
|
121
|
+
* `preRenderConfig.id` takes precedence when both are set.
|
|
122
122
|
*
|
|
123
123
|
* Use PreRender to render the embed in the background and then
|
|
124
124
|
* show or hide the rendered embed using showPreRender or hidePreRender respectively.
|
|
@@ -127,14 +127,14 @@ interface SearchProps extends EmbedProps, SearchViewConfig { }
|
|
|
127
127
|
* // Preferred, SDK: 1.52.0 and later.
|
|
128
128
|
* function LandingPageComponent() {
|
|
129
129
|
* return <PreRenderedLiveboardEmbed
|
|
130
|
-
* preRenderConfig={{
|
|
130
|
+
* preRenderConfig={{ id: "someId" }}
|
|
131
131
|
* liveboardId="libId"
|
|
132
132
|
* />
|
|
133
133
|
* }
|
|
134
134
|
*
|
|
135
135
|
* function MyComponent() {
|
|
136
136
|
* return <LiveboardEmbed
|
|
137
|
-
* preRenderConfig={{
|
|
137
|
+
* preRenderConfig={{ id: "someId" }}
|
|
138
138
|
* liveboardId="libId"
|
|
139
139
|
* />
|
|
140
140
|
* }
|
|
@@ -152,7 +152,7 @@ type PreRenderProps =
|
|
|
152
152
|
/**
|
|
153
153
|
* PreRender id to be used for PreRendering the embed.
|
|
154
154
|
* @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl
|
|
155
|
-
* @deprecated Use `preRenderConfig.
|
|
155
|
+
* @deprecated Use `preRenderConfig.id` instead.
|
|
156
156
|
*/
|
|
157
157
|
preRenderId: string;
|
|
158
158
|
/**
|
|
@@ -166,16 +166,16 @@ type PreRenderProps =
|
|
|
166
166
|
/**
|
|
167
167
|
* PreRender id to be used for PreRendering the embed.
|
|
168
168
|
* @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl
|
|
169
|
-
* @deprecated Use `preRenderConfig.
|
|
169
|
+
* @deprecated Use `preRenderConfig.id` instead.
|
|
170
170
|
*/
|
|
171
171
|
preRenderId?: string;
|
|
172
172
|
/**
|
|
173
|
-
* Configuration for the pre-render wrapper element. `
|
|
173
|
+
* Configuration for the pre-render wrapper element. `id` is
|
|
174
174
|
* required here when the top-level `preRenderId` prop is not passed.
|
|
175
175
|
* See {@link PreRenderConfig} for available options.
|
|
176
176
|
* @version SDK: 1.52.0
|
|
177
177
|
*/
|
|
178
|
-
preRenderConfig: PreRenderConfig & {
|
|
178
|
+
preRenderConfig: PreRenderConfig & { id: string };
|
|
179
179
|
};
|
|
180
180
|
|
|
181
181
|
/**
|