@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.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 +2 -3
- package/cjs/src/embed/app.d.ts +3 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +8 -2
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/base.d.ts +2 -0
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +2 -0
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +3 -2
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +6 -5
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +4 -1
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +9 -2
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +1 -0
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +1 -0
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +5 -1
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +10 -2
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +9 -3
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +50 -20
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +47 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +3 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +2 -0
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/mixpanel-service.spec.js +1 -0
- package/cjs/src/mixpanel-service.spec.js.map +1 -1
- package/cjs/src/react/index.d.ts +5 -1
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +8 -8
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/types.d.ts +46 -18
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +7 -13
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.js +40 -0
- package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
- package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.js +69 -0
- package/cjs/src/utils/graphql/sourceService.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
- package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/cjs/src/utils/processData.d.ts.map +1 -1
- package/cjs/src/utils/processData.js +7 -11
- package/cjs/src/utils/processData.js.map +1 -1
- package/cjs/src/utils/processData.spec.js +13 -17
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +6 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +26 -1
- package/cjs/src/utils.js.map +1 -1
- package/dist/src/embed/app.d.ts +3 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +2 -0
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +3 -2
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +4 -1
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +1 -0
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +5 -1
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +9 -3
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +5 -1
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +46 -18
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
- package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.d.ts +8 -0
- package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +468 -107
- package/dist/tsembed-react.js +471 -106
- package/dist/tsembed.es.js +511 -103
- package/dist/tsembed.js +511 -102
- package/dist/visual-embed-sdk-react-full.d.ts +132 -28
- package/dist/visual-embed-sdk-react.d.ts +132 -28
- package/dist/visual-embed-sdk.d.ts +127 -27
- package/lib/package.json +2 -3
- package/lib/src/embed/app.d.ts +3 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +8 -2
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/base.d.ts +2 -0
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +2 -0
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +3 -2
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +6 -5
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/sage.d.ts +4 -1
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +9 -2
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +1 -0
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +1 -0
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +5 -1
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +10 -2
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +9 -3
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +50 -20
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +47 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +3 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +2 -0
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/mixpanel-service.spec.js +1 -0
- package/lib/src/mixpanel-service.spec.js.map +1 -1
- package/lib/src/react/index.d.ts +5 -1
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +7 -7
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/types.d.ts +46 -18
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +6 -12
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.js +177 -0
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
- package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/lib/src/utils/graphql/graphql-request.js +36 -0
- package/lib/src/utils/graphql/graphql-request.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.d.ts +8 -0
- package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.js +65 -0
- package/lib/src/utils/graphql/sourceService.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.js +10 -0
- package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +8 -12
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js +14 -18
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils.d.ts +6 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +23 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +133 -28
- package/package.json +2 -3
- package/src/embed/app.ts +12 -2
- package/src/embed/base.ts +2 -0
- package/src/embed/liveboard.ts +7 -5
- package/src/embed/sage.ts +13 -2
- package/src/embed/search-bar.tsx +2 -0
- package/src/embed/search.ts +14 -2
- package/src/embed/ts-embed.spec.ts +49 -0
- package/src/embed/ts-embed.ts +61 -22
- package/src/index.ts +5 -0
- package/src/mixpanel-service.spec.ts +1 -0
- package/src/mixpanel-service.ts +1 -0
- package/src/react/index.tsx +40 -37
- package/src/types.ts +50 -19
- package/src/utils/graphql/answerService/answer-queries.ts +80 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
- package/src/utils/graphql/answerService/answerService.ts +234 -0
- package/src/utils/graphql/graphql-request.ts +45 -0
- package/src/utils/graphql/sourceService.spec.ts +10 -0
- package/src/utils/graphql/sourceService.ts +71 -0
- package/src/utils/processData.spec.ts +15 -25
- package/src/utils/processData.ts +13 -15
- package/src/utils.ts +25 -0
- package/src/utils/answerService.spec.ts +0 -41
- package/src/utils/answerService.ts +0 -63
package/src/embed/search-bar.tsx
CHANGED
|
@@ -45,6 +45,8 @@ export class SearchBarEmbed extends TsEmbed {
|
|
|
45
45
|
*/
|
|
46
46
|
protected viewConfig: SearchBarViewConfig;
|
|
47
47
|
|
|
48
|
+
protected embedComponentType = 'SearchBarEmbed';
|
|
49
|
+
|
|
48
50
|
constructor(domSelector: string, viewConfig: SearchBarViewConfig) {
|
|
49
51
|
super(domSelector);
|
|
50
52
|
this.viewConfig = viewConfig;
|
package/src/embed/search.ts
CHANGED
|
@@ -149,6 +149,8 @@ export class SearchEmbed extends TsEmbed {
|
|
|
149
149
|
*/
|
|
150
150
|
protected viewConfig: SearchViewConfig;
|
|
151
151
|
|
|
152
|
+
protected embedComponentType = 'SearchEmbed';
|
|
153
|
+
|
|
152
154
|
constructor(domSelector: DOMSelector, viewConfig: SearchViewConfig) {
|
|
153
155
|
super(domSelector);
|
|
154
156
|
this.viewConfig = viewConfig;
|
|
@@ -257,13 +259,15 @@ export class SearchEmbed extends TsEmbed {
|
|
|
257
259
|
|
|
258
260
|
/**
|
|
259
261
|
* Render the embedded ThoughtSpot search
|
|
262
|
+
*
|
|
263
|
+
* @param showPreRenderByDefault
|
|
260
264
|
*/
|
|
261
|
-
public render(): SearchEmbed {
|
|
265
|
+
public render(showPreRenderByDefault = false): SearchEmbed {
|
|
262
266
|
super.render();
|
|
263
267
|
const { answerId } = this.viewConfig;
|
|
264
268
|
|
|
265
269
|
const src = this.getIFrameSrc(answerId);
|
|
266
|
-
this.renderIFrame(src);
|
|
270
|
+
this.renderIFrame(src, showPreRenderByDefault);
|
|
267
271
|
getAuthPromise().then(() => {
|
|
268
272
|
if (
|
|
269
273
|
checkReleaseVersionInBeta(
|
|
@@ -276,4 +280,12 @@ export class SearchEmbed extends TsEmbed {
|
|
|
276
280
|
});
|
|
277
281
|
return this;
|
|
278
282
|
}
|
|
283
|
+
|
|
284
|
+
public preRender(showPreRenderByDefault = false): SearchEmbed {
|
|
285
|
+
super.preRender(showPreRenderByDefault);
|
|
286
|
+
|
|
287
|
+
this.render(showPreRenderByDefault);
|
|
288
|
+
|
|
289
|
+
return this;
|
|
290
|
+
}
|
|
279
291
|
}
|
|
@@ -113,6 +113,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
113
113
|
runtimeFilterParams: null,
|
|
114
114
|
hiddenHomeLeftNavItems: [],
|
|
115
115
|
hiddenHomepageModules: [],
|
|
116
|
+
hostConfig: undefined,
|
|
117
|
+
reorderedHomepageModules: [],
|
|
116
118
|
},
|
|
117
119
|
});
|
|
118
120
|
});
|
|
@@ -142,6 +144,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
142
144
|
runtimeFilterParams: null,
|
|
143
145
|
hiddenHomeLeftNavItems: [],
|
|
144
146
|
hiddenHomepageModules: [],
|
|
147
|
+
hostConfig: undefined,
|
|
148
|
+
reorderedHomepageModules: [],
|
|
145
149
|
},
|
|
146
150
|
});
|
|
147
151
|
expect(getIFrameSrc()).toContain(
|
|
@@ -181,6 +185,44 @@ describe('Unit test case for ts embed', () => {
|
|
|
181
185
|
hiddenHomeLeftNavItems: [],
|
|
182
186
|
hiddenHomepageModules: [HomepageModule.MyLibrary,
|
|
183
187
|
HomepageModule.Learning],
|
|
188
|
+
reorderedHomepageModules: [],
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('Reordering the home page modules from view Config should be part of app_init payload', async () => {
|
|
194
|
+
const mockEmbedEventPayload = {
|
|
195
|
+
type: EmbedEvent.APP_INIT,
|
|
196
|
+
data: {},
|
|
197
|
+
};
|
|
198
|
+
const mockedReorderedHomepageModules: HomepageModule[] = [
|
|
199
|
+
HomepageModule.MyLibrary,
|
|
200
|
+
HomepageModule.Watchlist,
|
|
201
|
+
];
|
|
202
|
+
|
|
203
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
204
|
+
...defaultViewConfig,
|
|
205
|
+
reorderedHomepageModules: mockedReorderedHomepageModules,
|
|
206
|
+
});
|
|
207
|
+
searchEmbed.render();
|
|
208
|
+
const mockPort: any = {
|
|
209
|
+
postMessage: jest.fn(),
|
|
210
|
+
};
|
|
211
|
+
await executeAfterWait(() => {
|
|
212
|
+
const iframe = getIFrameEl();
|
|
213
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
214
|
+
});
|
|
215
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
216
|
+
type: EmbedEvent.APP_INIT,
|
|
217
|
+
data: {
|
|
218
|
+
customisations,
|
|
219
|
+
authToken: '',
|
|
220
|
+
hostConfig: undefined,
|
|
221
|
+
runtimeFilterParams: null,
|
|
222
|
+
hiddenHomeLeftNavItems: [],
|
|
223
|
+
hiddenHomepageModules: [],
|
|
224
|
+
reorderedHomepageModules: [HomepageModule.MyLibrary,
|
|
225
|
+
HomepageModule.Watchlist],
|
|
184
226
|
},
|
|
185
227
|
});
|
|
186
228
|
});
|
|
@@ -219,6 +261,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
219
261
|
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
220
262
|
hiddenHomeLeftNavItems: [],
|
|
221
263
|
hiddenHomepageModules: [],
|
|
264
|
+
hostConfig: undefined,
|
|
265
|
+
reorderedHomepageModules: [],
|
|
222
266
|
},
|
|
223
267
|
});
|
|
224
268
|
});
|
|
@@ -257,6 +301,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
257
301
|
runtimeFilterParams: null,
|
|
258
302
|
hiddenHomeLeftNavItems: [],
|
|
259
303
|
hiddenHomepageModules: [],
|
|
304
|
+
hostConfig: undefined,
|
|
305
|
+
reorderedHomepageModules: [],
|
|
260
306
|
},
|
|
261
307
|
});
|
|
262
308
|
});
|
|
@@ -293,6 +339,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
293
339
|
hiddenHomeLeftNavItems: [HomeLeftNavItem.Home,
|
|
294
340
|
HomeLeftNavItem.Documentation],
|
|
295
341
|
hiddenHomepageModules: [],
|
|
342
|
+
reorderedHomepageModules: [],
|
|
296
343
|
},
|
|
297
344
|
});
|
|
298
345
|
});
|
|
@@ -448,6 +495,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
448
495
|
runtimeFilterParams: null,
|
|
449
496
|
hiddenHomeLeftNavItems: [],
|
|
450
497
|
hiddenHomepageModules: [],
|
|
498
|
+
hostConfig: undefined,
|
|
499
|
+
reorderedHomepageModules: [],
|
|
451
500
|
},
|
|
452
501
|
});
|
|
453
502
|
});
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -117,6 +117,8 @@ export class TsEmbed {
|
|
|
117
117
|
*/
|
|
118
118
|
protected thoughtSpotV2Base: string;
|
|
119
119
|
|
|
120
|
+
protected embedComponentType = 'TsEmbed';
|
|
121
|
+
|
|
120
122
|
/**
|
|
121
123
|
* A map of event handlers for particular message types triggered
|
|
122
124
|
* by the embedded app; multiple event handlers can be registered
|
|
@@ -161,6 +163,7 @@ export class TsEmbed {
|
|
|
161
163
|
this.registerAppInit();
|
|
162
164
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
163
165
|
...viewConfig,
|
|
166
|
+
embedComponentType: this.embedComponentType,
|
|
164
167
|
});
|
|
165
168
|
}
|
|
166
169
|
|
|
@@ -227,6 +230,8 @@ export class TsEmbed {
|
|
|
227
230
|
return eventData;
|
|
228
231
|
}
|
|
229
232
|
|
|
233
|
+
private subscribedListeners = {};
|
|
234
|
+
|
|
230
235
|
/**
|
|
231
236
|
* Adds a global event listener to window for "message" events.
|
|
232
237
|
* ThoughtSpot detects if a particular event is targeted to this
|
|
@@ -234,7 +239,7 @@ export class TsEmbed {
|
|
|
234
239
|
* and executes the registered callbacks accordingly.
|
|
235
240
|
*/
|
|
236
241
|
private subscribeToEvents() {
|
|
237
|
-
|
|
242
|
+
const messageEventListener = (event: MessageEvent<any>) => {
|
|
238
243
|
const eventType = this.getEventType(event);
|
|
239
244
|
const eventPort = this.getEventPort(event);
|
|
240
245
|
const eventData = this.formatEventData(event, eventType);
|
|
@@ -245,16 +250,33 @@ export class TsEmbed {
|
|
|
245
250
|
eventPort,
|
|
246
251
|
);
|
|
247
252
|
}
|
|
248
|
-
}
|
|
249
|
-
window.addEventListener('
|
|
253
|
+
};
|
|
254
|
+
window.addEventListener('message', messageEventListener);
|
|
255
|
+
|
|
256
|
+
const onlineEventListener = (e: Event) => {
|
|
250
257
|
this.trigger(HostEvent.Reload);
|
|
251
|
-
}
|
|
252
|
-
window.addEventListener('
|
|
258
|
+
};
|
|
259
|
+
window.addEventListener('online', onlineEventListener);
|
|
260
|
+
|
|
261
|
+
const offlineEventListener = (e: Event) => {
|
|
253
262
|
const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
|
|
254
263
|
this.executeCallbacks(EmbedEvent.Error, {
|
|
255
264
|
offlineWarning,
|
|
256
265
|
});
|
|
257
266
|
console.warn(offlineWarning);
|
|
267
|
+
};
|
|
268
|
+
window.addEventListener('offline', offlineEventListener);
|
|
269
|
+
|
|
270
|
+
this.subscribedListeners = {
|
|
271
|
+
message: messageEventListener,
|
|
272
|
+
online: onlineEventListener,
|
|
273
|
+
offline: offlineEventListener,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
private unsubscribeToEvents() {
|
|
278
|
+
Object.keys(this.subscribedListeners).forEach((key) => {
|
|
279
|
+
window.removeEventListener(key, this.subscribedListeners[key]);
|
|
258
280
|
});
|
|
259
281
|
}
|
|
260
282
|
|
|
@@ -279,6 +301,7 @@ export class TsEmbed {
|
|
|
279
301
|
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
280
302
|
: null,
|
|
281
303
|
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
304
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
282
305
|
hostConfig: this.embedConfig.hostConfig,
|
|
283
306
|
hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
|
|
284
307
|
? this.viewConfig?.hiddenHomeLeftNavItems
|
|
@@ -525,14 +548,17 @@ export class TsEmbed {
|
|
|
525
548
|
return iFrame;
|
|
526
549
|
}
|
|
527
550
|
|
|
551
|
+
|
|
528
552
|
/**
|
|
529
553
|
* Renders the embedded ThoughtSpot app in an iframe and sets up
|
|
530
554
|
* event listeners.
|
|
531
555
|
*
|
|
532
556
|
* @param url
|
|
533
557
|
* @param frameOptions
|
|
558
|
+
* @param showPreRender
|
|
559
|
+
* @param showPreRenderByDefault
|
|
534
560
|
*/
|
|
535
|
-
protected async renderIFrame(url: string): Promise<any> {
|
|
561
|
+
protected async renderIFrame(url: string, showPreRenderByDefault = false): Promise<any> {
|
|
536
562
|
if (this.isError) {
|
|
537
563
|
return null;
|
|
538
564
|
}
|
|
@@ -586,6 +612,9 @@ export class TsEmbed {
|
|
|
586
612
|
});
|
|
587
613
|
if (this.isPreRendered) {
|
|
588
614
|
this.insertIntoDOMForPreRender(this.iFrame);
|
|
615
|
+
if (showPreRenderByDefault) {
|
|
616
|
+
this.showPreRender();
|
|
617
|
+
}
|
|
589
618
|
} else {
|
|
590
619
|
this.insertIntoDOM(this.iFrame);
|
|
591
620
|
}
|
|
@@ -627,11 +656,10 @@ export class TsEmbed {
|
|
|
627
656
|
|
|
628
657
|
const preRenderIds = this.getPreRenderIds();
|
|
629
658
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
}
|
|
659
|
+
[preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
|
|
660
|
+
.map((id) => document.getElementById(id))
|
|
661
|
+
.filter((element) => element)
|
|
662
|
+
.forEach((existingElement) => existingElement.remove());
|
|
635
663
|
|
|
636
664
|
const preRenderWrapper = document.createElement('div');
|
|
637
665
|
preRenderWrapper.id = preRenderIds.wrapper;
|
|
@@ -659,7 +687,7 @@ export class TsEmbed {
|
|
|
659
687
|
|
|
660
688
|
protected preRenderChild: HTMLElement;
|
|
661
689
|
|
|
662
|
-
protected
|
|
690
|
+
protected connectPreRendered(): boolean {
|
|
663
691
|
const preRenderIds = this.getPreRenderIds();
|
|
664
692
|
this.preRenderWrapper = this.preRenderWrapper
|
|
665
693
|
|| document.getElementById(preRenderIds.wrapper);
|
|
@@ -667,7 +695,11 @@ export class TsEmbed {
|
|
|
667
695
|
|| document.getElementById(preRenderIds.shield);
|
|
668
696
|
this.preRenderChild = this.preRenderChild
|
|
669
697
|
|| document.getElementById(preRenderIds.child);
|
|
698
|
+
this.iFrame = this.preRenderChild as HTMLIFrameElement;
|
|
699
|
+
return this.isPreRenderAvailable();
|
|
700
|
+
}
|
|
670
701
|
|
|
702
|
+
protected isPreRenderAvailable(): boolean {
|
|
671
703
|
return !!this.preRenderWrapper && !!this.preRenderShield
|
|
672
704
|
&& !!this.preRenderChild;
|
|
673
705
|
}
|
|
@@ -717,15 +749,20 @@ export class TsEmbed {
|
|
|
717
749
|
top: '0',
|
|
718
750
|
left: '0',
|
|
719
751
|
});
|
|
752
|
+
|
|
753
|
+
this.unsubscribeToEvents();
|
|
720
754
|
}
|
|
721
755
|
|
|
722
|
-
public showPreRender() {
|
|
756
|
+
public showPreRender(): void {
|
|
723
757
|
if (!this.isPreRenderAvailable()) {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
758
|
+
const isAvailable = this.connectPreRendered();
|
|
759
|
+
if (!isAvailable) {
|
|
760
|
+
// if the Embed component is nor preRendered , Render it now and
|
|
761
|
+
// show it (hide is defalt behaviour)
|
|
762
|
+
console.log('No preRender found, creating new ');
|
|
763
|
+
this.preRender(true);
|
|
764
|
+
return;
|
|
765
|
+
}
|
|
729
766
|
}
|
|
730
767
|
|
|
731
768
|
this.syncPreRenderStyle();
|
|
@@ -733,9 +770,11 @@ export class TsEmbed {
|
|
|
733
770
|
removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
|
|
734
771
|
|
|
735
772
|
setStyleProperties(this.preRenderShield, { zIndex: '-1' });
|
|
773
|
+
|
|
774
|
+
this.subscribeToEvents();
|
|
736
775
|
}
|
|
737
776
|
|
|
738
|
-
public syncPreRenderStyle() {
|
|
777
|
+
public syncPreRenderStyle(): void {
|
|
739
778
|
if (!this.el) {
|
|
740
779
|
throw new Error('Embed element is not defined');
|
|
741
780
|
}
|
|
@@ -982,7 +1021,7 @@ export class TsEmbed {
|
|
|
982
1021
|
/**
|
|
983
1022
|
* Creates the preRender shell
|
|
984
1023
|
*/
|
|
985
|
-
public preRender(): TsEmbed {
|
|
1024
|
+
public preRender(showPreRenderByDefault = false): TsEmbed {
|
|
986
1025
|
this.isPreRendered = true;
|
|
987
1026
|
return this;
|
|
988
1027
|
}
|
|
@@ -1068,8 +1107,8 @@ export class V1Embed extends TsEmbed {
|
|
|
1068
1107
|
*
|
|
1069
1108
|
* @param iframeSrc
|
|
1070
1109
|
*/
|
|
1071
|
-
protected renderV1Embed(iframeSrc: string): any {
|
|
1072
|
-
return this.renderIFrame(iframeSrc);
|
|
1110
|
+
protected renderV1Embed(iframeSrc: string, showPreRenderByDefault = false): any {
|
|
1111
|
+
return this.renderIFrame(iframeSrc, showPreRenderByDefault);
|
|
1073
1112
|
}
|
|
1074
1113
|
|
|
1075
1114
|
protected getRootIframeSrc(): string {
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { AppEmbed, Page, AppViewConfig } from './embed/app';
|
|
11
11
|
import {
|
|
12
12
|
init, prefetch, logout, getEmbedConfig, executeTML, exportTML,
|
|
13
|
+
executeTMLInput, exportTMLInput,
|
|
13
14
|
} from './embed/base';
|
|
14
15
|
import { PinboardEmbed, LiveboardViewConfig, LiveboardEmbed } from './embed/liveboard';
|
|
15
16
|
import { SearchEmbed, SearchViewConfig } from './embed/search';
|
|
@@ -41,6 +42,7 @@ import {
|
|
|
41
42
|
} from './types';
|
|
42
43
|
import { CustomCssVariables } from './css-variables';
|
|
43
44
|
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
45
|
+
import { AnswerService } from './utils/graphql/answerService/answerService';
|
|
44
46
|
|
|
45
47
|
export {
|
|
46
48
|
init,
|
|
@@ -48,6 +50,8 @@ export {
|
|
|
48
50
|
prefetch,
|
|
49
51
|
executeTML,
|
|
50
52
|
exportTML,
|
|
53
|
+
executeTMLInput,
|
|
54
|
+
exportTMLInput,
|
|
51
55
|
getEmbedConfig as getInitConfig,
|
|
52
56
|
getSessionInfo,
|
|
53
57
|
SearchEmbed,
|
|
@@ -60,6 +64,7 @@ export {
|
|
|
60
64
|
AuthStatus,
|
|
61
65
|
AuthEvent,
|
|
62
66
|
AuthEventEmitter,
|
|
67
|
+
AnswerService,
|
|
63
68
|
// types
|
|
64
69
|
Page,
|
|
65
70
|
AuthType,
|
|
@@ -57,6 +57,7 @@ describe('Unit test for mixpanel', () => {
|
|
|
57
57
|
clusterId: sessionInfo.clusterId,
|
|
58
58
|
clusterName: sessionInfo.clusterName,
|
|
59
59
|
releaseVersion: sessionInfo.releaseVersion,
|
|
60
|
+
hostAppUrl: 'localhost',
|
|
60
61
|
});
|
|
61
62
|
expect(mixpanel.identify).not.toHaveBeenCalledWith(sessionInfo.userGUID);
|
|
62
63
|
});
|
package/src/mixpanel-service.ts
CHANGED
|
@@ -71,6 +71,7 @@ export function initMixpanel(sessionInfo: any): void {
|
|
|
71
71
|
clusterId: sessionInfo.clusterId,
|
|
72
72
|
clusterName: sessionInfo.clusterName,
|
|
73
73
|
releaseVersion: sessionInfo.releaseVersion,
|
|
74
|
+
hostAppUrl: window?.location?.host || '',
|
|
74
75
|
});
|
|
75
76
|
isMixpanelInitialized = true;
|
|
76
77
|
emptyQueue();
|
package/src/react/index.tsx
CHANGED
|
@@ -18,10 +18,9 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
18
18
|
(props: U, forwardedRef: React.MutableRefObject<InstanceType<T>>) => {
|
|
19
19
|
const ref = React.useRef<HTMLDivElement>(null);
|
|
20
20
|
const { className, ...embedProps } = props;
|
|
21
|
-
const { viewConfig, listeners } = getViewPropsAndListeners<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
>(embedProps);
|
|
21
|
+
const { viewConfig, listeners } = getViewPropsAndListeners<Omit<U, 'className'>, V>(
|
|
22
|
+
embedProps,
|
|
23
|
+
);
|
|
25
24
|
useDeepCompareEffect(() => {
|
|
26
25
|
const tsEmbed = new EmbedConstructor(
|
|
27
26
|
ref!.current,
|
|
@@ -29,19 +28,14 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
29
28
|
{
|
|
30
29
|
insertAsSibling: viewConfig.insertAsSibling,
|
|
31
30
|
frameParams: {
|
|
32
|
-
class: viewConfig.insertAsSibling
|
|
33
|
-
? className || ''
|
|
34
|
-
: '',
|
|
31
|
+
class: viewConfig.insertAsSibling ? className || '' : '',
|
|
35
32
|
},
|
|
36
33
|
},
|
|
37
34
|
viewConfig,
|
|
38
35
|
),
|
|
39
36
|
) as InstanceType<T>;
|
|
40
37
|
Object.keys(listeners).forEach((eventName) => {
|
|
41
|
-
tsEmbed.on(
|
|
42
|
-
eventName as EmbedEvent,
|
|
43
|
-
listeners[eventName as EmbedEvent],
|
|
44
|
-
);
|
|
38
|
+
tsEmbed.on(eventName as EmbedEvent, listeners[eventName as EmbedEvent]);
|
|
45
39
|
});
|
|
46
40
|
|
|
47
41
|
if (isPreRenderedComponent) {
|
|
@@ -64,23 +58,15 @@ const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V exte
|
|
|
64
58
|
};
|
|
65
59
|
}, [viewConfig, listeners]);
|
|
66
60
|
|
|
67
|
-
return (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
ref={ref}
|
|
72
|
-
style={{ position: 'absolute' }}
|
|
73
|
-
></span>
|
|
74
|
-
: <div
|
|
75
|
-
data-testid="tsEmbed"
|
|
76
|
-
ref={ref}
|
|
77
|
-
className={className}>
|
|
78
|
-
</div>
|
|
61
|
+
return viewConfig.insertAsSibling ? (
|
|
62
|
+
<span data-testid="tsEmbed" ref={ref} style={{ position: 'absolute' }}></span>
|
|
63
|
+
) : (
|
|
64
|
+
<div data-testid="tsEmbed" ref={ref} className={className}></div>
|
|
79
65
|
);
|
|
80
66
|
},
|
|
81
67
|
);
|
|
82
68
|
|
|
83
|
-
interface SearchProps extends EmbedProps, SearchViewConfig {
|
|
69
|
+
interface SearchProps extends EmbedProps, SearchViewConfig {}
|
|
84
70
|
|
|
85
71
|
/**
|
|
86
72
|
* React component for Search Embed.
|
|
@@ -99,7 +85,7 @@ export const SearchEmbed = componentFactory<typeof _SearchEmbed, SearchProps, Se
|
|
|
99
85
|
_SearchEmbed,
|
|
100
86
|
);
|
|
101
87
|
|
|
102
|
-
interface AppProps extends EmbedProps, AppViewConfig {
|
|
88
|
+
interface AppProps extends EmbedProps, AppViewConfig {}
|
|
103
89
|
|
|
104
90
|
/**
|
|
105
91
|
* React component for Full app Embed.
|
|
@@ -116,8 +102,12 @@ interface AppProps extends EmbedProps, AppViewConfig { }
|
|
|
116
102
|
* ```
|
|
117
103
|
*/
|
|
118
104
|
export const AppEmbed = componentFactory<typeof _AppEmbed, AppProps, AppViewConfig>(_AppEmbed);
|
|
105
|
+
export const PreRenderedAppEmbed = componentFactory<typeof _AppEmbed, AppProps, AppViewConfig>(
|
|
106
|
+
_AppEmbed,
|
|
107
|
+
true,
|
|
108
|
+
);
|
|
119
109
|
|
|
120
|
-
interface LiveboardProps extends EmbedProps, LiveboardViewConfig {
|
|
110
|
+
interface LiveboardProps extends EmbedProps, LiveboardViewConfig {}
|
|
121
111
|
|
|
122
112
|
/**
|
|
123
113
|
* React component for Liveboard embed.
|
|
@@ -139,10 +129,17 @@ export const LiveboardEmbed = componentFactory<
|
|
|
139
129
|
LiveboardProps,
|
|
140
130
|
LiveboardViewConfig
|
|
141
131
|
>(_LiveboardEmbed);
|
|
142
|
-
|
|
143
132
|
export const PinboardEmbed = LiveboardEmbed;
|
|
144
133
|
|
|
145
|
-
|
|
134
|
+
export const PreRenderedLiveboardEmbed = componentFactory<
|
|
135
|
+
typeof _LiveboardEmbed,
|
|
136
|
+
LiveboardProps,
|
|
137
|
+
LiveboardViewConfig
|
|
138
|
+
>(_LiveboardEmbed, true);
|
|
139
|
+
|
|
140
|
+
export const PreRenderedPinboardEmbed = PreRenderedLiveboardEmbed;
|
|
141
|
+
|
|
142
|
+
interface SearchBarEmbedProps extends EmbedProps, SearchBarViewConfig {}
|
|
146
143
|
|
|
147
144
|
/**
|
|
148
145
|
* React component for Search bar embed.
|
|
@@ -163,7 +160,13 @@ export const SearchBarEmbed = componentFactory<
|
|
|
163
160
|
SearchBarViewConfig
|
|
164
161
|
>(_SearchBarEmbed);
|
|
165
162
|
|
|
166
|
-
|
|
163
|
+
export const PreRenderedSearchBarEmbed = componentFactory<
|
|
164
|
+
typeof _SearchBarEmbed,
|
|
165
|
+
SearchBarEmbedProps,
|
|
166
|
+
SearchBarViewConfig
|
|
167
|
+
>(_SearchBarEmbed, true);
|
|
168
|
+
|
|
169
|
+
interface SageEmbedProps extends EmbedProps, SageViewConfig {}
|
|
167
170
|
|
|
168
171
|
/**
|
|
169
172
|
* React component for LLM based search Sage embed.
|
|
@@ -181,6 +184,11 @@ interface SageEmbedProps extends EmbedProps, SageViewConfig { }
|
|
|
181
184
|
export const SageEmbed = componentFactory<typeof _SageEmbed, SageEmbedProps, SageViewConfig>(
|
|
182
185
|
_SageEmbed,
|
|
183
186
|
);
|
|
187
|
+
export const PreRenderedSageEmbed = componentFactory<
|
|
188
|
+
typeof _SageEmbed,
|
|
189
|
+
SageEmbedProps,
|
|
190
|
+
SageViewConfig
|
|
191
|
+
>(_SageEmbed, true);
|
|
184
192
|
|
|
185
193
|
type EmbedComponent =
|
|
186
194
|
| typeof SearchEmbed
|
|
@@ -206,17 +214,12 @@ type EmbedComponent =
|
|
|
206
214
|
* ```
|
|
207
215
|
* @returns {React.MutableRefObject<T extends TsEmbed>} ref
|
|
208
216
|
*/
|
|
209
|
-
export function useEmbedRef<T extends EmbedComponent>():
|
|
210
|
-
React.
|
|
217
|
+
export function useEmbedRef<T extends EmbedComponent>(): React.MutableRefObject<
|
|
218
|
+
React.ComponentRef<T>
|
|
219
|
+
> {
|
|
211
220
|
return React.useRef<React.ComponentRef<T>>(null);
|
|
212
221
|
}
|
|
213
222
|
|
|
214
|
-
export const PreRenderedLiveboardEmbed = componentFactory<
|
|
215
|
-
typeof _LiveboardEmbed,
|
|
216
|
-
LiveboardProps,
|
|
217
|
-
LiveboardViewConfig
|
|
218
|
-
>(_LiveboardEmbed, true);
|
|
219
|
-
|
|
220
223
|
export {
|
|
221
224
|
LiveboardViewConfig,
|
|
222
225
|
SearchViewConfig,
|
package/src/types.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { CustomCssVariables } from './css-variables';
|
|
11
|
+
import type { SessionInterface } from './utils/graphql/answerService/answerService';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* The authentication mechanism for allowing access to the
|
|
@@ -532,7 +533,7 @@ export interface EmbedConfig {
|
|
|
532
533
|
}
|
|
533
534
|
|
|
534
535
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
535
|
-
export interface LayoutConfig {}
|
|
536
|
+
export interface LayoutConfig { }
|
|
536
537
|
|
|
537
538
|
/**
|
|
538
539
|
* Embedded iFrame configuration
|
|
@@ -756,6 +757,12 @@ export interface ViewConfig {
|
|
|
756
757
|
* @version SDK: 1.27.0 | Thoughtspot: 9.8.0.cl
|
|
757
758
|
*/
|
|
758
759
|
hiddenHomepageModules?: HomepageModule[];
|
|
760
|
+
/**
|
|
761
|
+
* reordering the home page modules
|
|
762
|
+
* eg: reorderedHomepageModules = [HomepageModule.MyLibrary, HomepageModule.Watchlist]
|
|
763
|
+
* @version SDK: 1.28.0 | Thoughtspot: 9.9.0.cl
|
|
764
|
+
*/
|
|
765
|
+
reorderedHomepageModules?: HomepageModule[];
|
|
759
766
|
/**
|
|
760
767
|
* The list of tab IDs to show in the embedded.
|
|
761
768
|
* Only this Tabs will be shown in their respective LBs.
|
|
@@ -921,27 +928,27 @@ export enum HomepageModule {
|
|
|
921
928
|
/**
|
|
922
929
|
* Search bar
|
|
923
930
|
*/
|
|
924
|
-
Search = '
|
|
931
|
+
Search = 'SEARCH',
|
|
925
932
|
/**
|
|
926
933
|
* kPI watchlist module
|
|
927
934
|
*/
|
|
928
|
-
Watchlist = '
|
|
935
|
+
Watchlist = 'WATCHLIST',
|
|
929
936
|
/**
|
|
930
937
|
* favorite objects
|
|
931
938
|
*/
|
|
932
|
-
Favorite = '
|
|
939
|
+
Favorite = 'FAVORITE',
|
|
933
940
|
/**
|
|
934
941
|
* List of answers and liveboards
|
|
935
942
|
*/
|
|
936
|
-
MyLibrary = '
|
|
943
|
+
MyLibrary = 'MY_LIBRARY',
|
|
937
944
|
/**
|
|
938
945
|
* Trending list
|
|
939
946
|
*/
|
|
940
|
-
Trending = '
|
|
947
|
+
Trending = 'TRENDING',
|
|
941
948
|
/**
|
|
942
949
|
* Learning videos
|
|
943
950
|
*/
|
|
944
|
-
Learning = '
|
|
951
|
+
Learning = 'LEARNING',
|
|
945
952
|
}
|
|
946
953
|
|
|
947
954
|
/**
|
|
@@ -3126,18 +3133,6 @@ export enum Action {
|
|
|
3126
3133
|
PersonalisedViewsDropdown = 'personalisedViewsDropdown',
|
|
3127
3134
|
}
|
|
3128
3135
|
|
|
3129
|
-
export interface SessionInterface {
|
|
3130
|
-
sessionId: string;
|
|
3131
|
-
genNo: number;
|
|
3132
|
-
acSession: { sessionId: string; genNo: number };
|
|
3133
|
-
}
|
|
3134
|
-
|
|
3135
|
-
// eslint-disable-next-line no-shadow
|
|
3136
|
-
export enum OperationType {
|
|
3137
|
-
GetChartWithData = 'GetChartWithData',
|
|
3138
|
-
GetTableWithHeadlineData = 'GetTableWithHeadlineData',
|
|
3139
|
-
}
|
|
3140
|
-
|
|
3141
3136
|
export interface AnswerServiceType {
|
|
3142
3137
|
getAnswer?: (offset: number, batchSize: number) => any;
|
|
3143
3138
|
}
|
|
@@ -3156,3 +3151,39 @@ export enum ContextMenuTriggerOptions {
|
|
|
3156
3151
|
LEFT_CLICK = 'left-click',
|
|
3157
3152
|
RIGHT_CLICK = 'right-click',
|
|
3158
3153
|
}
|
|
3154
|
+
|
|
3155
|
+
export interface ColumnValue {
|
|
3156
|
+
column: {
|
|
3157
|
+
id: string,
|
|
3158
|
+
name: string,
|
|
3159
|
+
dataType: string,
|
|
3160
|
+
[key: string]: any
|
|
3161
|
+
},
|
|
3162
|
+
value: string | number | boolean;
|
|
3163
|
+
}
|
|
3164
|
+
|
|
3165
|
+
export interface VizPoint {
|
|
3166
|
+
selectedAttributes: ColumnValue[],
|
|
3167
|
+
selectedMeasures: ColumnValue[]
|
|
3168
|
+
}
|
|
3169
|
+
|
|
3170
|
+
export interface CustomActionPayload {
|
|
3171
|
+
contextMenuPoints?: {
|
|
3172
|
+
clickedPoint: VizPoint
|
|
3173
|
+
selectedPoints: VizPoint[]
|
|
3174
|
+
};
|
|
3175
|
+
embedAnswerData: {
|
|
3176
|
+
name: string,
|
|
3177
|
+
id: string,
|
|
3178
|
+
sources: {
|
|
3179
|
+
header: {
|
|
3180
|
+
guid: string
|
|
3181
|
+
}
|
|
3182
|
+
},
|
|
3183
|
+
columns: any[],
|
|
3184
|
+
data: any[],
|
|
3185
|
+
[key: string]: any
|
|
3186
|
+
};
|
|
3187
|
+
session: SessionInterface;
|
|
3188
|
+
vizId?: string;
|
|
3189
|
+
}
|