@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.
Files changed (130) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/api-intercept.d.ts.map +1 -1
  3. package/cjs/src/api-intercept.js +1 -0
  4. package/cjs/src/api-intercept.js.map +1 -1
  5. package/cjs/src/css-variables.d.ts +1 -1
  6. package/cjs/src/embed/conversation.d.ts +5 -5
  7. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  8. package/cjs/src/embed/liveboard.js +2 -1
  9. package/cjs/src/embed/liveboard.js.map +1 -1
  10. package/cjs/src/embed/liveboard.spec.js +4 -4
  11. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  12. package/cjs/src/embed/search.spec.js +28 -0
  13. package/cjs/src/embed/search.spec.js.map +1 -1
  14. package/cjs/src/embed/ts-embed.d.ts +86 -5
  15. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  16. package/cjs/src/embed/ts-embed.js +30 -19
  17. package/cjs/src/embed/ts-embed.js.map +1 -1
  18. package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
  19. package/cjs/src/embed/ts-embed.spec.js +55 -16
  20. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  21. package/cjs/src/index.d.ts +2 -2
  22. package/cjs/src/index.d.ts.map +1 -1
  23. package/cjs/src/index.js +2 -1
  24. package/cjs/src/index.js.map +1 -1
  25. package/cjs/src/react/all-types-export.d.ts +1 -1
  26. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  27. package/cjs/src/react/all-types-export.js +2 -1
  28. package/cjs/src/react/all-types-export.js.map +1 -1
  29. package/cjs/src/react/index.d.ts +8 -8
  30. package/cjs/src/react/index.d.ts.map +1 -1
  31. package/cjs/src/react/index.js +1 -1
  32. package/cjs/src/react/index.js.map +1 -1
  33. package/cjs/src/react/index.spec.js +7 -7
  34. package/cjs/src/react/index.spec.js.map +1 -1
  35. package/cjs/src/types.d.ts +124 -36
  36. package/cjs/src/types.d.ts.map +1 -1
  37. package/cjs/src/types.js +80 -12
  38. package/cjs/src/types.js.map +1 -1
  39. package/cjs/src/utils.d.ts +5 -0
  40. package/cjs/src/utils.d.ts.map +1 -1
  41. package/cjs/src/utils.js +19 -1
  42. package/cjs/src/utils.js.map +1 -1
  43. package/cjs/src/utils.spec.js +33 -0
  44. package/cjs/src/utils.spec.js.map +1 -1
  45. package/dist/{index-DxLfQxoT.js → index-BMppCU63.js} +1 -1
  46. package/dist/src/api-intercept.d.ts.map +1 -1
  47. package/dist/src/css-variables.d.ts +1 -1
  48. package/dist/src/embed/conversation.d.ts +5 -5
  49. package/dist/src/embed/liveboard.d.ts.map +1 -1
  50. package/dist/src/embed/ts-embed.d.ts +86 -5
  51. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  52. package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
  53. package/dist/src/index.d.ts +2 -2
  54. package/dist/src/index.d.ts.map +1 -1
  55. package/dist/src/react/all-types-export.d.ts +1 -1
  56. package/dist/src/react/all-types-export.d.ts.map +1 -1
  57. package/dist/src/react/index.d.ts +8 -8
  58. package/dist/src/react/index.d.ts.map +1 -1
  59. package/dist/src/types.d.ts +124 -36
  60. package/dist/src/types.d.ts.map +1 -1
  61. package/dist/src/utils.d.ts +5 -0
  62. package/dist/src/utils.d.ts.map +1 -1
  63. package/dist/tsembed-react.es.js +133 -35
  64. package/dist/tsembed-react.js +132 -34
  65. package/dist/tsembed.es.js +133 -35
  66. package/dist/tsembed.js +131 -33
  67. package/dist/visual-embed-sdk-react-full.d.ts +223 -54
  68. package/dist/visual-embed-sdk-react.d.ts +199 -53
  69. package/dist/visual-embed-sdk.d.ts +215 -46
  70. package/lib/package.json +1 -1
  71. package/lib/src/api-intercept.d.ts.map +1 -1
  72. package/lib/src/api-intercept.js +2 -1
  73. package/lib/src/api-intercept.js.map +1 -1
  74. package/lib/src/css-variables.d.ts +1 -1
  75. package/lib/src/embed/conversation.d.ts +5 -5
  76. package/lib/src/embed/liveboard.d.ts.map +1 -1
  77. package/lib/src/embed/liveboard.js +3 -2
  78. package/lib/src/embed/liveboard.js.map +1 -1
  79. package/lib/src/embed/liveboard.spec.js +4 -4
  80. package/lib/src/embed/liveboard.spec.js.map +1 -1
  81. package/lib/src/embed/search.spec.js +28 -0
  82. package/lib/src/embed/search.spec.js.map +1 -1
  83. package/lib/src/embed/ts-embed.d.ts +86 -5
  84. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  85. package/lib/src/embed/ts-embed.js +32 -21
  86. package/lib/src/embed/ts-embed.js.map +1 -1
  87. package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
  88. package/lib/src/embed/ts-embed.spec.js +56 -17
  89. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  90. package/lib/src/index.d.ts +2 -2
  91. package/lib/src/index.d.ts.map +1 -1
  92. package/lib/src/index.js +2 -2
  93. package/lib/src/index.js.map +1 -1
  94. package/lib/src/react/all-types-export.d.ts +1 -1
  95. package/lib/src/react/all-types-export.d.ts.map +1 -1
  96. package/lib/src/react/all-types-export.js +1 -1
  97. package/lib/src/react/all-types-export.js.map +1 -1
  98. package/lib/src/react/index.d.ts +8 -8
  99. package/lib/src/react/index.d.ts.map +1 -1
  100. package/lib/src/react/index.js +1 -1
  101. package/lib/src/react/index.js.map +1 -1
  102. package/lib/src/react/index.spec.js +7 -7
  103. package/lib/src/react/index.spec.js.map +1 -1
  104. package/lib/src/types.d.ts +124 -36
  105. package/lib/src/types.d.ts.map +1 -1
  106. package/lib/src/types.js +79 -11
  107. package/lib/src/types.js.map +1 -1
  108. package/lib/src/utils.d.ts +5 -0
  109. package/lib/src/utils.d.ts.map +1 -1
  110. package/lib/src/utils.js +17 -0
  111. package/lib/src/utils.js.map +1 -1
  112. package/lib/src/utils.spec.js +34 -1
  113. package/lib/src/utils.spec.js.map +1 -1
  114. package/lib/src/visual-embed-sdk.d.ts +215 -46
  115. package/package.json +1 -1
  116. package/src/api-intercept.ts +2 -1
  117. package/src/css-variables.ts +1 -1
  118. package/src/embed/conversation.ts +5 -5
  119. package/src/embed/liveboard.spec.ts +4 -4
  120. package/src/embed/liveboard.ts +3 -1
  121. package/src/embed/search.spec.ts +31 -0
  122. package/src/embed/ts-embed.spec.ts +70 -16
  123. package/src/embed/ts-embed.ts +32 -20
  124. package/src/index.ts +2 -0
  125. package/src/react/all-types-export.ts +1 -0
  126. package/src/react/index.spec.tsx +7 -7
  127. package/src/react/index.tsx +9 -9
  128. package/src/types.ts +125 -36
  129. package/src/utils.spec.ts +44 -0
  130. 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.preRenderId to identify the pre-render instance', async () => {
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
- preRenderId: 'config-level-id',
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.preRenderId over top-level preRenderId', async () => {
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
- preRenderId: 'config-level-id',
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.preRenderContainer', async () => {
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
- preRenderId: 'container-via-config',
3594
- preRenderContainer: '#config-level-container',
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.preRenderContainer over top-level preRenderContainer', async () => {
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
- preRenderId: 'container-precedence',
3623
- preRenderContainer: '#config-level-container-2',
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.doNotTrackPreRenderSize is true', async () => {
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
- preRenderId: 'no-track-via-config',
3653
- doNotTrackPreRenderSize: true,
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.doNotTrackPreRenderSize over top-level doNotTrackPreRenderSize', async () => {
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
- preRenderId: 'no-track-precedence',
3680
- doNotTrackPreRenderSize: true,
3733
+ id: 'no-track-precedence',
3734
+ doNotTrackSize: true,
3681
3735
  },
3682
3736
  });
3683
3737
 
@@ -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, errorDetails);
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
- let queryParams = this.getEmbedParamsObject();
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
- queryParams = { ...this.viewConfig, ...queryParams, ...appInitData };
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 shared key
967
- * prefers `preRenderConfig.key` over the top-level `viewConfig.key` for
968
- * backward compatibility.
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
- preRenderId: preRenderCfg.preRenderId ?? viewCfg.preRenderId,
976
- preRenderContainer: preRenderCfg.preRenderContainer ?? viewCfg.preRenderContainer,
977
- doNotTrackPreRenderSize: preRenderCfg.doNotTrackPreRenderSize ?? viewCfg.doNotTrackPreRenderSize,
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().preRenderId;
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().preRenderContainer;
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().preRenderContainer
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().preRenderId) {
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().preRenderId,
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().preRenderId) {
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().doNotTrackPreRenderSize) {
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().preRenderId,
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().preRenderId;
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,
@@ -75,6 +75,7 @@ export {
75
75
  LiveboardParameter,
76
76
  DataPanelCustomColumnGroupsAccordionState,
77
77
  InterceptedApiType,
78
+ EmbedErrorSeverity,
78
79
  CustomActionsPosition,
79
80
  CustomActionTarget,
80
81
  SpotterAnalystConfig,
@@ -358,10 +358,10 @@ describe('React Components', () => {
358
358
  ].forEach((spy) => spy.mockRestore());
359
359
  });
360
360
 
361
- it('Should preRender PreRenderedLiveboardEmbed with preRenderConfig.preRenderId', () => {
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.preRenderId', async () => {
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.preRenderId over the top-level preRenderId', async () => {
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={{ preRenderId: 'config-pre-render-id' }}
465
+ preRenderConfig={{ id: 'config-pre-render-id' }}
466
466
  liveboardId="test-liveboard"
467
467
  />,
468
468
  );
@@ -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?.preRenderId ?? props.preRenderId;
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.preRenderId` (SDK: 1.52.0 and later) or through the
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.preRenderId` takes precedence when both are set.
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={{ preRenderId: "someId" }}
130
+ * preRenderConfig={{ id: "someId" }}
131
131
  * liveboardId="libId"
132
132
  * />
133
133
  * }
134
134
  *
135
135
  * function MyComponent() {
136
136
  * return <LiveboardEmbed
137
- * preRenderConfig={{ preRenderId: "someId" }}
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.preRenderId` instead.
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.preRenderId` instead.
169
+ * @deprecated Use `preRenderConfig.id` instead.
170
170
  */
171
171
  preRenderId?: string;
172
172
  /**
173
- * Configuration for the pre-render wrapper element. `preRenderId` is
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 & { preRenderId: string };
178
+ preRenderConfig: PreRenderConfig & { id: string };
179
179
  };
180
180
 
181
181
  /**