@thoughtspot/visual-embed-sdk 1.21.0-react.2 → 1.21.0-sage.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 (91) hide show
  1. package/cjs/package.json +5 -5
  2. package/cjs/src/embed/nls.spec.d.ts +1 -0
  3. package/cjs/src/embed/nls.spec.d.ts.map +1 -0
  4. package/cjs/src/embed/nls.spec.js +1 -0
  5. package/cjs/src/embed/nls.spec.js.map +1 -0
  6. package/cjs/src/embed/sage-fullscreen.d.ts +87 -0
  7. package/cjs/src/embed/sage-fullscreen.d.ts.map +1 -0
  8. package/cjs/src/embed/sage-fullscreen.js +114 -0
  9. package/cjs/src/embed/sage-fullscreen.js.map +1 -0
  10. package/cjs/src/embed/sage.d.ts +79 -0
  11. package/cjs/src/embed/sage.d.ts.map +1 -0
  12. package/cjs/src/embed/sage.js +112 -0
  13. package/cjs/src/embed/sage.js.map +1 -0
  14. package/cjs/src/errors.d.ts +1 -0
  15. package/cjs/src/errors.d.ts.map +1 -1
  16. package/cjs/src/errors.js +1 -0
  17. package/cjs/src/errors.js.map +1 -1
  18. package/cjs/src/index.d.ts +2 -1
  19. package/cjs/src/index.d.ts.map +1 -1
  20. package/cjs/src/index.js +3 -1
  21. package/cjs/src/index.js.map +1 -1
  22. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  23. package/cjs/src/mixpanel-service.js +6 -11
  24. package/cjs/src/mixpanel-service.js.map +1 -1
  25. package/cjs/src/react/index.d.ts +9 -5
  26. package/cjs/src/react/index.d.ts.map +1 -1
  27. package/cjs/src/react/index.js +3 -1
  28. package/cjs/src/react/index.js.map +1 -1
  29. package/cjs/src/types.d.ts +9 -1
  30. package/cjs/src/types.d.ts.map +1 -1
  31. package/cjs/src/types.js +4 -0
  32. package/cjs/src/types.js.map +1 -1
  33. package/dist/src/embed/sage-fullscreen.d.ts +87 -0
  34. package/dist/src/embed/sage-fullscreen.d.ts.map +1 -0
  35. package/dist/src/embed/sage.d.ts +79 -0
  36. package/dist/src/embed/sage.d.ts.map +1 -0
  37. package/dist/src/errors.d.ts +1 -0
  38. package/dist/src/errors.d.ts.map +1 -1
  39. package/dist/src/index.d.ts +2 -1
  40. package/dist/src/index.d.ts.map +1 -1
  41. package/dist/src/mixpanel-service.d.ts.map +1 -1
  42. package/dist/src/react/index.d.ts +9 -5
  43. package/dist/src/react/index.d.ts.map +1 -1
  44. package/dist/src/types.d.ts +9 -1
  45. package/dist/src/types.d.ts.map +1 -1
  46. package/dist/tsembed-react.es.js +119 -13
  47. package/dist/tsembed-react.js +119 -12
  48. package/dist/tsembed.es.js +118 -13
  49. package/dist/tsembed.js +118 -12
  50. package/dist/visual-embed-sdk-react-full.d.ts +74 -3
  51. package/dist/visual-embed-sdk.d.ts +70 -2
  52. package/lib/package.json +5 -5
  53. package/lib/src/embed/nls.spec.d.ts +1 -0
  54. package/lib/src/embed/nls.spec.d.ts.map +1 -0
  55. package/lib/src/embed/nls.spec.js +1 -0
  56. package/lib/src/embed/nls.spec.js.map +1 -0
  57. package/lib/src/embed/sage-fullscreen.d.ts +87 -0
  58. package/lib/src/embed/sage-fullscreen.d.ts.map +1 -0
  59. package/lib/src/embed/sage-fullscreen.js +110 -0
  60. package/lib/src/embed/sage-fullscreen.js.map +1 -0
  61. package/lib/src/embed/sage.d.ts +79 -0
  62. package/lib/src/embed/sage.d.ts.map +1 -0
  63. package/lib/src/embed/sage.js +108 -0
  64. package/lib/src/embed/sage.js.map +1 -0
  65. package/lib/src/errors.d.ts +1 -0
  66. package/lib/src/errors.d.ts.map +1 -1
  67. package/lib/src/errors.js +1 -0
  68. package/lib/src/errors.js.map +1 -1
  69. package/lib/src/index.d.ts +2 -1
  70. package/lib/src/index.d.ts.map +1 -1
  71. package/lib/src/index.js +2 -1
  72. package/lib/src/index.js.map +1 -1
  73. package/lib/src/mixpanel-service.d.ts.map +1 -1
  74. package/lib/src/mixpanel-service.js +6 -11
  75. package/lib/src/mixpanel-service.js.map +1 -1
  76. package/lib/src/react/index.d.ts +9 -5
  77. package/lib/src/react/index.d.ts.map +1 -1
  78. package/lib/src/react/index.js +2 -0
  79. package/lib/src/react/index.js.map +1 -1
  80. package/lib/src/types.d.ts +9 -1
  81. package/lib/src/types.d.ts.map +1 -1
  82. package/lib/src/types.js +4 -0
  83. package/lib/src/types.js.map +1 -1
  84. package/package.json +5 -5
  85. package/src/embed/sage.ts +153 -0
  86. package/src/errors.ts +1 -0
  87. package/src/index.ts +2 -0
  88. package/src/mixpanel-service.ts +6 -10
  89. package/src/react/index.tsx +10 -1
  90. package/src/types.ts +8 -0
  91. package/dist/visual-embed-sdk-react.d.ts +0 -2781
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Copyright (c) 2022
3
+ *
4
+ * Embed ThoughtSpot Sage
5
+ *
6
+ * @summary TS Sage embed
7
+ * @author Mourya Balabhadra <mourya.balabhadra@thoughtspot.com>
8
+ */
9
+
10
+ import {
11
+ Action, DOMSelector, EmbedEvent, MessagePayload, Param, ViewConfig,
12
+ } from '../types';
13
+ import { getQueryParamString } from '../utils';
14
+ import { V1Embed } from './ts-embed';
15
+
16
+ /**
17
+ * The configuration attributes for the embedded search view.
18
+ *
19
+ * @group Embed components
20
+ */
21
+ export interface SageViewConfig extends ViewConfig {
22
+ /**
23
+ * If set to false, eureka results are hidden
24
+ */
25
+ hideEurekaResults?: boolean;
26
+ /**
27
+ * primary flag to enable eureka(/sage) page embedding.
28
+ */
29
+ isSageEmbed?: boolean,
30
+ /**
31
+ * flag to disable changing worksheet. default false.
32
+ */
33
+ disableWorksheetChange?: boolean,
34
+ /**
35
+ * flag to hide worksheet selector. default false.
36
+ */
37
+ hideWorksheetSelector?: boolean,
38
+ fullHeight?:boolean;
39
+ }
40
+ export const HiddenActionItemByDefaultForSageEmbed = [
41
+ Action.Save,
42
+ Action.Pin,
43
+ ];
44
+ /**
45
+ * Embed ThoughtSpot search
46
+ *
47
+ * @group Embed components
48
+ */
49
+ export class SageEmbed extends V1Embed {
50
+ /**
51
+ * The view configuration for the embedded ThoughtSpot sage.
52
+ *
53
+ */
54
+ protected viewConfig: SageViewConfig;
55
+
56
+ private defaultHeight = 500;
57
+
58
+ // eslint-disable-next-line no-useless-constructor
59
+ constructor(domSelector: DOMSelector, viewConfig: SageViewConfig) {
60
+ super(domSelector, viewConfig);
61
+ if (this.viewConfig.fullHeight === true) {
62
+ this.on(EmbedEvent.RouteChange, this.setIframeHeightForNonEmbedLiveboard);
63
+ this.on(EmbedEvent.EmbedHeight, this.updateIFrameHeight);
64
+ this.on(EmbedEvent.EmbedIframeCenter, this.embedIframeCenter);
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Constructs a map of parameters to be passed on to the
70
+ * embedded Eureka or Sage search page.
71
+ *
72
+ * @returns {string} query string
73
+ */
74
+ protected getEmbedParams(): string {
75
+ const {
76
+ hideEurekaResults, isSageEmbed, disableWorksheetChange, hideWorksheetSelector,
77
+ } = this.viewConfig;
78
+
79
+ const params = {};
80
+ params[Param.EmbedApp] = true;
81
+ params[Param.HideActions] = [...(params[Param.HideActions] ?? [])];
82
+ params[Param.HideActions] = [
83
+ ...(params[Param.HideActions] ?? []),
84
+ ...HiddenActionItemByDefaultForSageEmbed,
85
+ ];
86
+ if (hideEurekaResults) {
87
+ params[Param.HideEurekaResults] = true;
88
+ }
89
+ if (isSageEmbed) {
90
+ params[Param.IsSageEmbed] = true;
91
+ }
92
+ if (disableWorksheetChange) {
93
+ params[Param.DisableWorksheetChange] = true;
94
+ }
95
+ if (hideWorksheetSelector) {
96
+ params[Param.HideWorksheetSelector] = true;
97
+ }
98
+ const queryParamsString = getQueryParamString(params, true);
99
+ let query = '';
100
+ if (queryParamsString) {
101
+ query = `?${queryParamsString}`;
102
+ }
103
+ return query;
104
+ }
105
+
106
+ /**
107
+ * Set the iframe height as per the computed height received
108
+ * from the ThoughtSpot app.
109
+ *
110
+ * @param {MessagePayload} data The event payload
111
+ */
112
+ private updateIFrameHeight = (data: MessagePayload) => {
113
+ this.setIFrameHeight(Math.max(data.data, this.defaultHeight));
114
+ };
115
+
116
+ private embedIframeCenter = (data: MessagePayload, responder: any) => {
117
+ const obj = this.getIframeCenter();
118
+ responder({ type: EmbedEvent.EmbedIframeCenter, data: obj });
119
+ };
120
+
121
+ private setIframeHeightForNonEmbedLiveboard = (data: MessagePayload) => {
122
+ if (!data.data.currentPath.startsWith('/embed/viz/')) {
123
+ this.setIFrameHeight(this.defaultHeight);
124
+ }
125
+ };
126
+
127
+ /**
128
+ * Construct the URL of the embedded ThoughtSpot sage to be
129
+ * loaded in the iframe
130
+ *
131
+ * @returns {string} iframe url
132
+ */
133
+ private getIFrameSrc() {
134
+ const path = 'eureka';
135
+ const tsPostHashParams = this.getThoughtSpotPostUrlParams();
136
+
137
+ return `${this.getRootIframeSrc()}/embed/${path}${tsPostHashParams}`;
138
+ }
139
+
140
+ /**
141
+ * Render the embedded ThoughtSpot Sage
142
+ *
143
+ * @returns {SageEmbed} Eureka/Sage embed
144
+ */
145
+ public render(): SageEmbed {
146
+ super.render();
147
+
148
+ const src = this.getIFrameSrc();
149
+ this.renderV1Embed(src);
150
+
151
+ return this;
152
+ }
153
+ }
package/src/errors.ts CHANGED
@@ -3,4 +3,5 @@ export const ERROR_MESSAGE = {
3
3
  LIVEBOARD_VIZ_ID_VALIDATION: 'Please provide either liveboardId or pinboardId',
4
4
  TRIGGER_TIMED_OUT: 'Trigger timedout in getting response',
5
5
  SEARCHEMBED_BETA_WRANING_MESSAGE: 'Search Embed is in Beta in this release.',
6
+ SAGE_EMBED_BETA_WARNING_MESSAGE: 'Sage Embed is in Beta in this release.',
6
7
  };
package/src/index.ts CHANGED
@@ -37,6 +37,7 @@ import {
37
37
  customCssInterface,
38
38
  ContextMenuTriggerOptions,
39
39
  } from './types';
40
+ import { SageEmbed } from './embed/sage';
40
41
 
41
42
  export {
42
43
  init,
@@ -50,6 +51,7 @@ export {
50
51
  SearchBarEmbed,
51
52
  PinboardEmbed,
52
53
  LiveboardEmbed,
54
+ SageEmbed,
53
55
  AppEmbed,
54
56
  AuthFailureType,
55
57
  AuthStatus,
@@ -56,17 +56,13 @@ export function initMixpanel(sessionInfo: any): void {
56
56
  // userGUID
57
57
  const isPublicCluster = !!sessionInfo.isPublicUser;
58
58
  const token = sessionInfo.mixpanelToken;
59
- try {
60
- if (token) {
61
- mixpanel.init(token);
62
- if (!isPublicCluster) {
63
- mixpanel.identify(sessionInfo.userGUID);
64
- }
65
- isMixpanelInitialized = true;
66
- emptyQueue();
59
+ if (token) {
60
+ mixpanel.init(token);
61
+ if (!isPublicCluster) {
62
+ mixpanel.identify(sessionInfo.userGUID);
67
63
  }
68
- } catch (e) {
69
- console.error('Error initializing mixpanel', e);
64
+ isMixpanelInitialized = true;
65
+ emptyQueue();
70
66
  }
71
67
  }
72
68
 
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import useDeepCompareEffect from 'use-deep-compare-effect';
3
3
  import { deepMerge } from '../utils';
4
4
  import { SearchBarEmbed as _SearchBarEmbed, SearchBarViewConfig } from '../embed/search-bar';
5
+ import { SageEmbed as _SageEmbed, SageViewConfig } from '../embed/sage';
5
6
  import { SearchEmbed as _SearchEmbed, SearchViewConfig } from '../embed/search';
6
7
  import { AppEmbed as _AppEmbed, AppViewConfig } from '../embed/app';
7
8
  import { LiveboardEmbed as _LiveboardEmbed, LiveboardViewConfig } from '../embed/liveboard';
@@ -150,6 +151,14 @@ export const SearchBarEmbed = componentFactory<
150
151
  SearchBarViewConfig
151
152
  >(_SearchBarEmbed);
152
153
 
154
+ interface SageEmbedProps extends EmbedProps, SageViewConfig {}
155
+
156
+ export const SageEmbed = componentFactory<
157
+ typeof _SageEmbed,
158
+ SageEmbedProps,
159
+ SageViewConfig
160
+ >(_SageEmbed);
161
+
153
162
  /**
154
163
  * Get a reference to the embed component to trigger events on the component.
155
164
  *
@@ -167,7 +176,7 @@ export const SearchBarEmbed = componentFactory<
167
176
  * ```
168
177
  * @returns {React.MutableRefObject<TsEmbed>} ref
169
178
  */
170
- export const useEmbedRef = (): React.MutableRefObject<_AppEmbed | _LiveboardEmbed | _SearchEmbed | _SearchBarEmbed> => React.useRef<_AppEmbed | _LiveboardEmbed | _SearchEmbed | _SearchBarEmbed>(null);
179
+ export const useEmbedRef = (): React.MutableRefObject<TsEmbed> => React.useRef<TsEmbed>(null);
171
180
 
172
181
  export {
173
182
  LiveboardViewConfig,
package/src/types.ts CHANGED
@@ -407,6 +407,10 @@ export interface EmbedConfig {
407
407
  * @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1-sw*
408
408
  */
409
409
  suppressSearchEmbedBetaWarning?: boolean;
410
+ /**
411
+ * Hide beta alert warning message for SearchEmbed.
412
+ */
413
+ suppressSageEmbedBetaWarning?: boolean;
410
414
  /**
411
415
  * Custom style params for embed Config.
412
416
  *
@@ -1842,6 +1846,10 @@ export enum Param {
1842
1846
  HideProfleAndHelp = 'profileAndHelpInNavBarHidden',
1843
1847
  HideApplicationSwitcher= 'applicationSwitcherHidden',
1844
1848
  HideOrgSwitcher= 'orgSwitcherHidden',
1849
+ IsSageEmbed = 'isSageEmbed',
1850
+ HideWorksheetSelector = 'hideWorksheetSelector',
1851
+ DisableWorksheetChange = 'disableWorksheetChange',
1852
+ HideEurekaResults = 'hideEurekaResults',
1845
1853
  }
1846
1854
 
1847
1855
  /**