@thoughtspot/visual-embed-sdk 1.51.2 → 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/ts-embed.d.ts +4 -3
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +23 -16
- 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/dist/{index-D8_Zs-Nr.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 +4 -3
- 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/tsembed-react.es.js +109 -32
- package/dist/tsembed-react.js +108 -31
- package/dist/tsembed.es.js +109 -32
- package/dist/tsembed.js +107 -30
- package/dist/visual-embed-sdk-react-full.d.ts +142 -53
- package/dist/visual-embed-sdk-react.d.ts +118 -52
- package/dist/visual-embed-sdk.d.ts +134 -45
- 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/ts-embed.d.ts +4 -3
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +24 -17
- 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/visual-embed-sdk.d.ts +134 -45
- 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/ts-embed.spec.ts +70 -16
- package/src/embed/ts-embed.ts +24 -16
- 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
|
@@ -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
|
@@ -63,6 +63,7 @@ import {
|
|
|
63
63
|
DefaultAppInitData,
|
|
64
64
|
AllEmbedViewConfig as ViewConfig,
|
|
65
65
|
EmbedErrorDetailsEvent,
|
|
66
|
+
EmbedErrorSeverity,
|
|
66
67
|
ErrorDetailsTypes,
|
|
67
68
|
EmbedErrorCodes,
|
|
68
69
|
MessagePayload,
|
|
@@ -284,6 +285,7 @@ export class TsEmbed {
|
|
|
284
285
|
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
285
286
|
message: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
286
287
|
code: EmbedErrorCodes.INIT_ERROR,
|
|
288
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
287
289
|
error: ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
288
290
|
});
|
|
289
291
|
}
|
|
@@ -295,7 +297,10 @@ export class TsEmbed {
|
|
|
295
297
|
*/
|
|
296
298
|
protected handleError(errorDetails: EmbedErrorDetailsEvent) {
|
|
297
299
|
this.isError = true;
|
|
298
|
-
this.executeCallbacks(EmbedEvent.Error,
|
|
300
|
+
this.executeCallbacks(EmbedEvent.Error, {
|
|
301
|
+
severity: EmbedErrorSeverity.SEV3,
|
|
302
|
+
...errorDetails,
|
|
303
|
+
});
|
|
299
304
|
// Log error
|
|
300
305
|
logger.error(errorDetails);
|
|
301
306
|
}
|
|
@@ -393,6 +398,7 @@ export class TsEmbed {
|
|
|
393
398
|
errorType: ErrorDetailsTypes.NETWORK,
|
|
394
399
|
message: ERROR_MESSAGE.OFFLINE_WARNING,
|
|
395
400
|
code: EmbedErrorCodes.NETWORK_ERROR,
|
|
401
|
+
severity: EmbedErrorSeverity.SEV2,
|
|
396
402
|
offlineWarning: ERROR_MESSAGE.OFFLINE_WARNING,
|
|
397
403
|
};
|
|
398
404
|
this.executeCallbacks(EmbedEvent.Error, errorDetails);
|
|
@@ -967,18 +973,19 @@ export class TsEmbed {
|
|
|
967
973
|
}
|
|
968
974
|
|
|
969
975
|
/**
|
|
970
|
-
* Returns a merged {@link PreRenderConfig} object where each
|
|
971
|
-
*
|
|
972
|
-
*
|
|
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.
|
|
973
980
|
*/
|
|
974
981
|
protected getPreRenderConfig(): PreRenderConfig {
|
|
975
982
|
const viewCfg = this.viewConfig as BaseViewConfig;
|
|
976
983
|
const preRenderCfg = viewCfg.preRenderConfig ?? {};
|
|
977
984
|
return {
|
|
978
985
|
...preRenderCfg,
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
986
|
+
id: preRenderCfg.id ?? viewCfg.preRenderId,
|
|
987
|
+
containerSelector: preRenderCfg.containerSelector ?? viewCfg.preRenderContainer,
|
|
988
|
+
doNotTrackSize: preRenderCfg.doNotTrackSize ?? viewCfg.doNotTrackPreRenderSize,
|
|
982
989
|
};
|
|
983
990
|
}
|
|
984
991
|
|
|
@@ -986,7 +993,7 @@ export class TsEmbed {
|
|
|
986
993
|
* Returns true if this embed instance is configured for pre-rendering.
|
|
987
994
|
*/
|
|
988
995
|
protected isPreRenderEmbed() {
|
|
989
|
-
return !!this.getPreRenderConfig().
|
|
996
|
+
return !!this.getPreRenderConfig().id;
|
|
990
997
|
}
|
|
991
998
|
protected handleInsertionIntoDOM(child: string | Node): void {
|
|
992
999
|
if (this.isPreRenderEmbed()) {
|
|
@@ -1092,6 +1099,7 @@ export class TsEmbed {
|
|
|
1092
1099
|
errorType: ErrorDetailsTypes.API,
|
|
1093
1100
|
message: error.message || ERROR_MESSAGE.LOGIN_FAILED,
|
|
1094
1101
|
code: EmbedErrorCodes.LOGIN_FAILED,
|
|
1102
|
+
severity: EmbedErrorSeverity.SEV1,
|
|
1095
1103
|
error: error,
|
|
1096
1104
|
});
|
|
1097
1105
|
});
|
|
@@ -1200,7 +1208,7 @@ export class TsEmbed {
|
|
|
1200
1208
|
* fresh element; an element passed directly cannot be re-resolved.
|
|
1201
1209
|
*/
|
|
1202
1210
|
private resolvePreRenderContainerTarget(): HTMLElement {
|
|
1203
|
-
const containerConfig = this.getPreRenderConfig().
|
|
1211
|
+
const containerConfig = this.getPreRenderConfig().containerSelector;
|
|
1204
1212
|
let container: Element | null = null;
|
|
1205
1213
|
if (typeof containerConfig === 'string') {
|
|
1206
1214
|
try {
|
|
@@ -1224,7 +1232,7 @@ export class TsEmbed {
|
|
|
1224
1232
|
}
|
|
1225
1233
|
const ownerContainer = preRenderedObject.preRenderContainerEl ?? document.body;
|
|
1226
1234
|
if (
|
|
1227
|
-
this.getPreRenderConfig().
|
|
1235
|
+
this.getPreRenderConfig().containerSelector
|
|
1228
1236
|
&& this.resolvePreRenderContainerTarget() !== ownerContainer
|
|
1229
1237
|
) {
|
|
1230
1238
|
logger.warn(
|
|
@@ -1850,7 +1858,7 @@ export class TsEmbed {
|
|
|
1850
1858
|
showPreRenderByDefault,
|
|
1851
1859
|
replaceExistingPreRender,
|
|
1852
1860
|
});
|
|
1853
|
-
if (!this.getPreRenderConfig().
|
|
1861
|
+
if (!this.getPreRenderConfig().id) {
|
|
1854
1862
|
logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
|
|
1855
1863
|
return this;
|
|
1856
1864
|
}
|
|
@@ -2036,14 +2044,14 @@ export class TsEmbed {
|
|
|
2036
2044
|
*/
|
|
2037
2045
|
public async showPreRender(): Promise<TsEmbed> {
|
|
2038
2046
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_SHOW_PRE_RENDER, {
|
|
2039
|
-
preRenderId: this.getPreRenderConfig().
|
|
2047
|
+
preRenderId: this.getPreRenderConfig().id,
|
|
2040
2048
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
2041
2049
|
});
|
|
2042
2050
|
|
|
2043
2051
|
if (this.shouldWaitForRenderPromise) await this.isReadyForRenderPromise;
|
|
2044
2052
|
|
|
2045
2053
|
|
|
2046
|
-
if (!this.getPreRenderConfig().
|
|
2054
|
+
if (!this.getPreRenderConfig().id) {
|
|
2047
2055
|
logger.error(ERROR_MESSAGE.PRERENDER_ID_MISSING);
|
|
2048
2056
|
return this;
|
|
2049
2057
|
}
|
|
@@ -2085,7 +2093,7 @@ export class TsEmbed {
|
|
|
2085
2093
|
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
2086
2094
|
}
|
|
2087
2095
|
|
|
2088
|
-
if (!this.getPreRenderConfig().
|
|
2096
|
+
if (!this.getPreRenderConfig().doNotTrackSize) {
|
|
2089
2097
|
const observeTarget = (this.insertedDomEl as HTMLElement) ?? this.hostElement;
|
|
2090
2098
|
this.resizeObserver = new ResizeObserver((entries) => {
|
|
2091
2099
|
entries.forEach((entry) => {
|
|
@@ -2160,7 +2168,7 @@ export class TsEmbed {
|
|
|
2160
2168
|
*/
|
|
2161
2169
|
public hidePreRender(): void {
|
|
2162
2170
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_HIDE_PRE_RENDER, {
|
|
2163
|
-
preRenderId: this.getPreRenderConfig().
|
|
2171
|
+
preRenderId: this.getPreRenderConfig().id,
|
|
2164
2172
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
2165
2173
|
});
|
|
2166
2174
|
|
|
@@ -2204,7 +2212,7 @@ export class TsEmbed {
|
|
|
2204
2212
|
* @property {string} child - The HTML element ID for the PreRender child.
|
|
2205
2213
|
*/
|
|
2206
2214
|
public getPreRenderIds() {
|
|
2207
|
-
const preRenderId = this.getPreRenderConfig().
|
|
2215
|
+
const preRenderId = this.getPreRenderConfig().id;
|
|
2208
2216
|
return {
|
|
2209
2217
|
wrapper: `${PRERENDER_WRAPPER_ID_PREFIX}${preRenderId}`,
|
|
2210
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
|
/**
|