@thoughtspot/visual-embed-sdk 1.46.5-beta.1 → 1.47.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 +4 -4
- package/cjs/src/css-variables.d.ts +36 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +41 -17
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +26 -47
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +36 -79
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +24 -2
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +18 -33
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +129 -97
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +31 -0
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js +2 -0
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +18 -0
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +69 -9
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +185 -19
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.d.ts +22 -0
- package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -0
- package/cjs/src/embed/hostEventClient/utils.js +57 -0
- package/cjs/src/embed/hostEventClient/utils.js.map +1 -0
- package/cjs/src/embed/hostEventClient/utils.spec.d.ts +2 -0
- package/cjs/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
- package/cjs/src/embed/hostEventClient/utils.spec.js +190 -0
- package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -0
- package/cjs/src/embed/liveboard.d.ts +18 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +9 -11
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +29 -71
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +20 -0
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -0
- package/cjs/src/embed/spotter-utils.js +52 -0
- package/cjs/src/embed/spotter-utils.js.map +1 -0
- package/cjs/src/embed/spotter-utils.spec.d.ts +2 -0
- package/cjs/src/embed/spotter-utils.spec.d.ts.map +1 -0
- package/cjs/src/embed/spotter-utils.spec.js +54 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +25 -5
- 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 +28 -67
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.d.ts +2 -1
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +2 -1
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +1 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +2 -4
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +2 -2
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +1 -3
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/index.d.ts +1 -36
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +1 -34
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/types.d.ts +143 -76
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +118 -47
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils.d.ts +0 -9
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +1 -10
- package/cjs/src/utils.js.map +1 -1
- package/dist/{index-DW2wEHqy.js → index-Bm2Hck8q.js} +1 -1
- package/dist/src/css-variables.d.ts +36 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +41 -17
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +24 -2
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts +31 -0
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +18 -0
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/utils.d.ts +22 -0
- package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -0
- package/dist/src/embed/hostEventClient/utils.spec.d.ts +2 -0
- package/dist/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
- package/dist/src/embed/liveboard.d.ts +18 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +20 -0
- package/dist/src/embed/spotter-utils.d.ts.map +1 -0
- package/dist/src/embed/spotter-utils.spec.d.ts +2 -0
- package/dist/src/embed/spotter-utils.spec.d.ts.map +1 -0
- 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/errors.d.ts +2 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +2 -2
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/react/index.d.ts +1 -36
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +143 -76
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +0 -9
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +378 -304
- package/dist/tsembed-react.js +366 -294
- package/dist/tsembed.es.js +393 -285
- package/dist/tsembed.js +30798 -30691
- package/dist/visual-embed-sdk-react-full.d.ts +310 -273
- package/dist/visual-embed-sdk-react.d.ts +310 -273
- package/dist/visual-embed-sdk.d.ts +308 -243
- package/lib/package.json +4 -4
- package/lib/src/css-variables.d.ts +36 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +41 -17
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +28 -49
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +36 -79
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +24 -2
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +19 -34
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +131 -99
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +31 -0
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js +2 -0
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +18 -0
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +69 -9
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +185 -19
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.d.ts +22 -0
- package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -0
- package/lib/src/embed/hostEventClient/utils.js +49 -0
- package/lib/src/embed/hostEventClient/utils.js.map +1 -0
- package/lib/src/embed/hostEventClient/utils.spec.d.ts +2 -0
- package/lib/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
- package/lib/src/embed/hostEventClient/utils.spec.js +188 -0
- package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -0
- package/lib/src/embed/liveboard.d.ts +18 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +9 -11
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +29 -71
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +20 -0
- package/lib/src/embed/spotter-utils.d.ts.map +1 -0
- package/lib/src/embed/spotter-utils.js +47 -0
- package/lib/src/embed/spotter-utils.js.map +1 -0
- package/lib/src/embed/spotter-utils.spec.d.ts +2 -0
- package/lib/src/embed/spotter-utils.spec.d.ts.map +1 -0
- package/lib/src/embed/spotter-utils.spec.js +52 -0
- package/lib/src/embed/spotter-utils.spec.js.map +1 -0
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +25 -5
- 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 +30 -69
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +2 -1
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +2 -1
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +1 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +1 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +2 -2
- 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 +1 -36
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +0 -33
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/types.d.ts +143 -76
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +118 -47
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +0 -9
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +0 -8
- package/lib/src/utils.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +308 -243
- package/package.json +4 -4
- package/src/css-variables.ts +45 -0
- package/src/embed/app.spec.ts +51 -107
- package/src/embed/app.ts +60 -82
- package/src/embed/conversation.spec.ts +150 -119
- package/src/embed/conversation.ts +34 -58
- package/src/embed/hostEventClient/contracts.ts +31 -0
- package/src/embed/hostEventClient/host-event-client.spec.ts +260 -19
- package/src/embed/hostEventClient/host-event-client.ts +87 -11
- package/src/embed/hostEventClient/utils.spec.ts +225 -0
- package/src/embed/hostEventClient/utils.ts +74 -0
- package/src/embed/liveboard.spec.ts +38 -93
- package/src/embed/liveboard.ts +28 -10
- package/src/embed/spotter-utils.spec.ts +56 -0
- package/src/embed/spotter-utils.ts +65 -0
- package/src/embed/ts-embed.spec.ts +56 -108
- package/src/embed/ts-embed.ts +25 -4
- package/src/errors.ts +2 -1
- package/src/index.ts +2 -5
- package/src/react/all-types-export.ts +0 -3
- package/src/react/index.tsx +15 -59
- package/src/types.ts +206 -138
- package/src/utils.ts +0 -14
- package/cjs/src/embed/sage.d.ts +0 -164
- package/cjs/src/embed/sage.d.ts.map +0 -1
- package/cjs/src/embed/sage.js +0 -88
- package/cjs/src/embed/sage.js.map +0 -1
- package/cjs/src/embed/sage.spec.d.ts +0 -2
- package/cjs/src/embed/sage.spec.d.ts.map +0 -1
- package/cjs/src/embed/sage.spec.js +0 -151
- package/cjs/src/embed/sage.spec.js.map +0 -1
- package/dist/src/embed/sage.d.ts +0 -164
- package/dist/src/embed/sage.d.ts.map +0 -1
- package/dist/src/embed/sage.spec.d.ts +0 -2
- package/dist/src/embed/sage.spec.d.ts.map +0 -1
- package/lib/src/embed/sage.d.ts +0 -164
- package/lib/src/embed/sage.d.ts.map +0 -1
- package/lib/src/embed/sage.js +0 -84
- package/lib/src/embed/sage.js.map +0 -1
- package/lib/src/embed/sage.spec.d.ts +0 -2
- package/lib/src/embed/sage.spec.d.ts.map +0 -1
- package/lib/src/embed/sage.spec.js +0 -148
- package/lib/src/embed/sage.spec.js.map +0 -1
- package/src/embed/sage.spec.ts +0 -206
- package/src/embed/sage.ts +0 -231
|
@@ -11,8 +11,6 @@ import {
|
|
|
11
11
|
AppEmbed,
|
|
12
12
|
LiveboardEmbed,
|
|
13
13
|
AppViewConfig,
|
|
14
|
-
SageEmbed,
|
|
15
|
-
SageViewConfig,
|
|
16
14
|
SearchViewConfig,
|
|
17
15
|
AnswerService,
|
|
18
16
|
SpotterEmbed,
|
|
@@ -2192,28 +2190,6 @@ describe('Unit test case for ts embed', () => {
|
|
|
2192
2190
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}#/embed/viz/${liveboardId}`,
|
|
2193
2191
|
);
|
|
2194
2192
|
});
|
|
2195
|
-
|
|
2196
|
-
const defaultConfig: SageViewConfig = {
|
|
2197
|
-
disableWorksheetChange: false,
|
|
2198
|
-
hideWorksheetSelector: false,
|
|
2199
|
-
hideSageAnswerHeader: false,
|
|
2200
|
-
hideAutocompleteSuggestions: false,
|
|
2201
|
-
hideSampleQuestions: false,
|
|
2202
|
-
isProductTour: false,
|
|
2203
|
-
dataPanelV2: false,
|
|
2204
|
-
};
|
|
2205
|
-
|
|
2206
|
-
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
2207
|
-
...defaultConfig,
|
|
2208
|
-
} as SageViewConfig);
|
|
2209
|
-
|
|
2210
|
-
sageEmbed.render();
|
|
2211
|
-
await executeAfterWait(() => {
|
|
2212
|
-
expectUrlMatch(
|
|
2213
|
-
getIFrameSrc(),
|
|
2214
|
-
`http://${thoughtSpotHost}/?embedApp=true&enableDataPanelV2=false&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSageAnswerHeader=false&hideAction=%5B%22reportError%22%5D#/embed/eureka`,
|
|
2215
|
-
);
|
|
2216
|
-
});
|
|
2217
2193
|
});
|
|
2218
2194
|
|
|
2219
2195
|
it('Should add contextMenuEnabledOnWhichClick flag to the iframe with left value', async () => {
|
|
@@ -2230,29 +2206,6 @@ describe('Unit test case for ts embed', () => {
|
|
|
2230
2206
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&contextMenuEnabledOnWhichClick=left#/embed/viz/${liveboardId}`,
|
|
2231
2207
|
);
|
|
2232
2208
|
});
|
|
2233
|
-
|
|
2234
|
-
const defaultConfig: SageViewConfig = {
|
|
2235
|
-
disableWorksheetChange: false,
|
|
2236
|
-
hideWorksheetSelector: false,
|
|
2237
|
-
hideSageAnswerHeader: false,
|
|
2238
|
-
hideAutocompleteSuggestions: false,
|
|
2239
|
-
hideSampleQuestions: false,
|
|
2240
|
-
isProductTour: false,
|
|
2241
|
-
dataPanelV2: false,
|
|
2242
|
-
};
|
|
2243
|
-
|
|
2244
|
-
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
2245
|
-
...defaultConfig,
|
|
2246
|
-
contextMenuTrigger: ContextMenuTriggerOptions.LEFT_CLICK,
|
|
2247
|
-
} as SageViewConfig);
|
|
2248
|
-
|
|
2249
|
-
sageEmbed.render();
|
|
2250
|
-
await executeAfterWait(() => {
|
|
2251
|
-
expectUrlMatch(
|
|
2252
|
-
getIFrameSrc(),
|
|
2253
|
-
`http://${thoughtSpotHost}/?embedApp=true&enableDataPanelV2=false&contextMenuEnabledOnWhichClick=left&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSageAnswerHeader=false&hideAction=%5B%22reportError%22%5D#/embed/eureka`,
|
|
2254
|
-
);
|
|
2255
|
-
});
|
|
2256
2209
|
});
|
|
2257
2210
|
|
|
2258
2211
|
it('Should add contextMenuEnabledOnWhichClick flag to the iframe with right value', async () => {
|
|
@@ -2269,28 +2222,6 @@ describe('Unit test case for ts embed', () => {
|
|
|
2269
2222
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&contextMenuEnabledOnWhichClick=right#/embed/viz/${liveboardId}`,
|
|
2270
2223
|
);
|
|
2271
2224
|
});
|
|
2272
|
-
const defaultConfig: SageViewConfig = {
|
|
2273
|
-
disableWorksheetChange: false,
|
|
2274
|
-
hideWorksheetSelector: false,
|
|
2275
|
-
hideSageAnswerHeader: false,
|
|
2276
|
-
hideAutocompleteSuggestions: false,
|
|
2277
|
-
hideSampleQuestions: false,
|
|
2278
|
-
isProductTour: false,
|
|
2279
|
-
dataPanelV2: false,
|
|
2280
|
-
};
|
|
2281
|
-
|
|
2282
|
-
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
2283
|
-
...defaultConfig,
|
|
2284
|
-
contextMenuTrigger: ContextMenuTriggerOptions.RIGHT_CLICK,
|
|
2285
|
-
} as SageViewConfig);
|
|
2286
|
-
|
|
2287
|
-
sageEmbed.render();
|
|
2288
|
-
await executeAfterWait(() => {
|
|
2289
|
-
expectUrlMatch(
|
|
2290
|
-
getIFrameSrc(),
|
|
2291
|
-
`http://${thoughtSpotHost}/?embedApp=true&enableDataPanelV2=false&contextMenuEnabledOnWhichClick=right&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSageAnswerHeader=false&hideAction=%5B%22reportError%22%5D#/embed/eureka`,
|
|
2292
|
-
);
|
|
2293
|
-
});
|
|
2294
2225
|
});
|
|
2295
2226
|
|
|
2296
2227
|
it('Should add contextMenuEnabledOnWhichClick flag to the iframe with both value', async () => {
|
|
@@ -2307,28 +2238,6 @@ describe('Unit test case for ts embed', () => {
|
|
|
2307
2238
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&contextMenuEnabledOnWhichClick=both#/embed/viz/${liveboardId}`,
|
|
2308
2239
|
);
|
|
2309
2240
|
});
|
|
2310
|
-
const defaultConfig: SageViewConfig = {
|
|
2311
|
-
disableWorksheetChange: false,
|
|
2312
|
-
hideWorksheetSelector: false,
|
|
2313
|
-
hideSageAnswerHeader: false,
|
|
2314
|
-
hideAutocompleteSuggestions: false,
|
|
2315
|
-
hideSampleQuestions: false,
|
|
2316
|
-
isProductTour: false,
|
|
2317
|
-
dataPanelV2: false,
|
|
2318
|
-
};
|
|
2319
|
-
|
|
2320
|
-
const sageEmbed = new SageEmbed(getRootEl(), {
|
|
2321
|
-
...defaultConfig,
|
|
2322
|
-
contextMenuTrigger: ContextMenuTriggerOptions.BOTH_CLICKS,
|
|
2323
|
-
} as SageViewConfig);
|
|
2324
|
-
|
|
2325
|
-
sageEmbed.render();
|
|
2326
|
-
await executeAfterWait(() => {
|
|
2327
|
-
expectUrlMatch(
|
|
2328
|
-
getIFrameSrc(),
|
|
2329
|
-
`http://${thoughtSpotHost}/?embedApp=true&enableDataPanelV2=false&contextMenuEnabledOnWhichClick=both&isSageEmbed=true&disableWorksheetChange=false&hideWorksheetSelector=false&hideEurekaSuggestions=false&isProductTour=false&hideSageAnswerHeader=false&hideAction=%5B%22reportError%22%5D#/embed/eureka`,
|
|
2330
|
-
);
|
|
2331
|
-
});
|
|
2332
2241
|
});
|
|
2333
2242
|
});
|
|
2334
2243
|
|
|
@@ -3558,6 +3467,45 @@ describe('Unit test case for ts embed', () => {
|
|
|
3558
3467
|
expect(getRootEl().nextElementSibling.innerHTML).toBe('');
|
|
3559
3468
|
});
|
|
3560
3469
|
|
|
3470
|
+
it('should not call trigger or remove DOM if destroy is called before render', () => {
|
|
3471
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
3472
|
+
frameParams: { width: '100%', height: '100%' },
|
|
3473
|
+
});
|
|
3474
|
+
|
|
3475
|
+
const triggerSpy = jest.spyOn(appEmbed, 'trigger');
|
|
3476
|
+
const removeChildSpy = jest.spyOn(Node.prototype, 'removeChild');
|
|
3477
|
+
|
|
3478
|
+
appEmbed.destroy();
|
|
3479
|
+
|
|
3480
|
+
expect(triggerSpy).not.toHaveBeenCalled();
|
|
3481
|
+
expect(removeChildSpy).not.toHaveBeenCalled();
|
|
3482
|
+
});
|
|
3483
|
+
|
|
3484
|
+
it('should still remove DOM element when trigger rejects (waitForCleanupOnDestroy: true)', async () => {
|
|
3485
|
+
const originalEmbedConfig = embedConfig.getEmbedConfig();
|
|
3486
|
+
embedConfig.setEmbedConfig({
|
|
3487
|
+
...originalEmbedConfig,
|
|
3488
|
+
waitForCleanupOnDestroy: true,
|
|
3489
|
+
cleanupTimeout: 1000,
|
|
3490
|
+
});
|
|
3491
|
+
|
|
3492
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
3493
|
+
frameParams: { width: '100%', height: '100%' },
|
|
3494
|
+
});
|
|
3495
|
+
await appEmbed.render();
|
|
3496
|
+
|
|
3497
|
+
jest.spyOn(appEmbed, 'trigger').mockRejectedValue(new Error('trigger failed'));
|
|
3498
|
+
const removeChildSpy = jest.spyOn(Node.prototype, 'removeChild').mockImplementation(() => getRootEl());
|
|
3499
|
+
|
|
3500
|
+
appEmbed.destroy();
|
|
3501
|
+
|
|
3502
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
3503
|
+
|
|
3504
|
+
expect(removeChildSpy).toHaveBeenCalled();
|
|
3505
|
+
|
|
3506
|
+
embedConfig.setEmbedConfig(originalEmbedConfig);
|
|
3507
|
+
});
|
|
3508
|
+
|
|
3561
3509
|
describe('with waitForCleanupOnDestroy configuration', () => {
|
|
3562
3510
|
let originalEmbedConfig: any;
|
|
3563
3511
|
|
|
@@ -4220,9 +4168,9 @@ describe('PreRender replaceExistingPreRender scenarios', () => {
|
|
|
4220
4168
|
preRenderId: 'no-replace-test',
|
|
4221
4169
|
liveboardId: 'lb2',
|
|
4222
4170
|
});
|
|
4223
|
-
|
|
4171
|
+
|
|
4224
4172
|
const result = await embed2.preRender(false, false);
|
|
4225
|
-
|
|
4173
|
+
|
|
4226
4174
|
expect(result).toBe(embed2);
|
|
4227
4175
|
// The original iframe should still have lb1
|
|
4228
4176
|
const iframe = getIFrameEl();
|
|
@@ -4247,17 +4195,17 @@ describe('Destroy error handling', () => {
|
|
|
4247
4195
|
frameParams: { width: '100%', height: '100%' },
|
|
4248
4196
|
});
|
|
4249
4197
|
await appEmbed.render();
|
|
4250
|
-
|
|
4198
|
+
|
|
4251
4199
|
const logSpy = jest.spyOn(logger, 'log').mockImplementation(() => {});
|
|
4252
|
-
|
|
4200
|
+
|
|
4253
4201
|
jest.spyOn(Node.prototype, 'removeChild').mockImplementationOnce(() => {
|
|
4254
4202
|
throw new Error('Remove failed');
|
|
4255
4203
|
});
|
|
4256
|
-
|
|
4204
|
+
|
|
4257
4205
|
expect(() => {
|
|
4258
4206
|
appEmbed.destroy();
|
|
4259
4207
|
}).not.toThrow();
|
|
4260
|
-
|
|
4208
|
+
|
|
4261
4209
|
expect(logSpy).toHaveBeenCalledWith('Error destroying TS Embed', expect.any(Error));
|
|
4262
4210
|
logSpy.mockReset();
|
|
4263
4211
|
});
|
|
@@ -4282,25 +4230,25 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
4282
4230
|
liveboardId: 'test-lb',
|
|
4283
4231
|
});
|
|
4284
4232
|
await liveboardEmbed.render();
|
|
4285
|
-
|
|
4233
|
+
|
|
4286
4234
|
await executeAfterWait(() => {
|
|
4287
4235
|
const iframe = getIFrameEl();
|
|
4288
4236
|
expect(iframe).toBeTruthy();
|
|
4289
4237
|
});
|
|
4290
4238
|
|
|
4291
4239
|
mockProcessTrigger.mockResolvedValue({});
|
|
4292
|
-
|
|
4240
|
+
|
|
4293
4241
|
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
4294
|
-
|
|
4242
|
+
|
|
4295
4243
|
Object.defineProperty(document, 'fullscreenElement', {
|
|
4296
4244
|
value: null,
|
|
4297
4245
|
writable: true,
|
|
4298
4246
|
configurable: true,
|
|
4299
4247
|
});
|
|
4300
|
-
|
|
4248
|
+
|
|
4301
4249
|
const event = new Event('fullscreenchange');
|
|
4302
4250
|
document.dispatchEvent(event);
|
|
4303
|
-
|
|
4251
|
+
|
|
4304
4252
|
await executeAfterWait(() => {
|
|
4305
4253
|
expect(mockProcessTrigger).toHaveBeenLastCalledWith(
|
|
4306
4254
|
expect.any(Object),
|
|
@@ -4318,7 +4266,7 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
4318
4266
|
liveboardId: 'test-lb-fullscreen',
|
|
4319
4267
|
});
|
|
4320
4268
|
await liveboardEmbed.render();
|
|
4321
|
-
|
|
4269
|
+
|
|
4322
4270
|
await executeAfterWait(() => {
|
|
4323
4271
|
const iframe = getIFrameEl();
|
|
4324
4272
|
expect(iframe).toBeTruthy();
|
|
@@ -4326,18 +4274,18 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
4326
4274
|
|
|
4327
4275
|
mockProcessTrigger.mockClear();
|
|
4328
4276
|
mockProcessTrigger.mockResolvedValue({});
|
|
4329
|
-
|
|
4277
|
+
|
|
4330
4278
|
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
4331
|
-
|
|
4279
|
+
|
|
4332
4280
|
Object.defineProperty(document, 'fullscreenElement', {
|
|
4333
4281
|
value: getIFrameEl(),
|
|
4334
4282
|
writable: true,
|
|
4335
4283
|
configurable: true,
|
|
4336
4284
|
});
|
|
4337
|
-
|
|
4285
|
+
|
|
4338
4286
|
const event = new Event('fullscreenchange');
|
|
4339
4287
|
document.dispatchEvent(event);
|
|
4340
|
-
|
|
4288
|
+
|
|
4341
4289
|
await executeAfterWait(() => {
|
|
4342
4290
|
expect(mockProcessTrigger).not.toHaveBeenCalledWith(
|
|
4343
4291
|
expect.any(Object),
|
|
@@ -4365,7 +4313,7 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
4365
4313
|
preRenderId,
|
|
4366
4314
|
...initialConfig,
|
|
4367
4315
|
});
|
|
4368
|
-
|
|
4316
|
+
|
|
4369
4317
|
await embed1.preRender();
|
|
4370
4318
|
await waitFor(() => !!getIFrameEl());
|
|
4371
4319
|
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -1446,7 +1446,21 @@ export class TsEmbed {
|
|
|
1446
1446
|
}
|
|
1447
1447
|
|
|
1448
1448
|
// send an empty object, this is needed for liveboard default handlers
|
|
1449
|
-
return this.hostEventClient.triggerHostEvent(messageType, data, context)
|
|
1449
|
+
return this.hostEventClient.triggerHostEvent(messageType, data, context).catch((err: Error & {
|
|
1450
|
+
isValidationError?: boolean;
|
|
1451
|
+
embedErrorDetails?: { errorType: ErrorDetailsTypes; message: string; code: EmbedErrorCodes; error: string };
|
|
1452
|
+
}): Promise<null> => {
|
|
1453
|
+
if (err?.isValidationError) {
|
|
1454
|
+
const errorDetails = err.embedErrorDetails ?? {
|
|
1455
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1456
|
+
message: err.message || ERROR_MESSAGE.UPDATEFILTERS_INVALID_PAYLOAD,
|
|
1457
|
+
code: EmbedErrorCodes.UPDATEFILTERS_INVALID_PAYLOAD,
|
|
1458
|
+
error: err.message,
|
|
1459
|
+
};
|
|
1460
|
+
this.handleError(errorDetails);
|
|
1461
|
+
}
|
|
1462
|
+
throw err;
|
|
1463
|
+
});
|
|
1450
1464
|
}
|
|
1451
1465
|
|
|
1452
1466
|
/**
|
|
@@ -1588,6 +1602,9 @@ export class TsEmbed {
|
|
|
1588
1602
|
try {
|
|
1589
1603
|
this.removeFullscreenChangeHandler();
|
|
1590
1604
|
this.unsubscribeToEvents();
|
|
1605
|
+
if (!this.isRendered) {
|
|
1606
|
+
return;
|
|
1607
|
+
}
|
|
1591
1608
|
if (!getEmbedConfig().waitForCleanupOnDestroy) {
|
|
1592
1609
|
this.trigger(HostEvent.DestroyEmbed)
|
|
1593
1610
|
this.insertedDomEl?.parentNode?.removeChild(this.insertedDomEl);
|
|
@@ -1596,10 +1613,14 @@ export class TsEmbed {
|
|
|
1596
1613
|
Promise.race([
|
|
1597
1614
|
this.trigger(HostEvent.DestroyEmbed),
|
|
1598
1615
|
new Promise((resolve) => setTimeout(resolve, cleanupTimeout)),
|
|
1599
|
-
]).
|
|
1600
|
-
this.insertedDomEl?.parentNode?.removeChild(this.insertedDomEl);
|
|
1601
|
-
}).catch((e) => {
|
|
1616
|
+
]).catch((e) => {
|
|
1602
1617
|
logger.log('Error destroying TS Embed', e);
|
|
1618
|
+
}).finally(() => {
|
|
1619
|
+
try {
|
|
1620
|
+
this.insertedDomEl?.parentNode?.removeChild(this.insertedDomEl);
|
|
1621
|
+
} catch (e) {
|
|
1622
|
+
logger.log('Error removing DOM element on destroy', e);
|
|
1623
|
+
}
|
|
1603
1624
|
});
|
|
1604
1625
|
}
|
|
1605
1626
|
} catch (e) {
|
package/src/errors.ts
CHANGED
|
@@ -4,7 +4,6 @@ export const ERROR_MESSAGE = {
|
|
|
4
4
|
LIVEBOARD_VIZ_ID_VALIDATION: 'Please select a Liveboard to embed.',
|
|
5
5
|
TRIGGER_TIMED_OUT: 'Trigger timed-out in getting a response',
|
|
6
6
|
SEARCHEMBED_BETA_WRANING_MESSAGE: 'SearchEmbed is in Beta in this release.',
|
|
7
|
-
SAGE_EMBED_BETA_WARNING_MESSAGE: 'SageEmbed is in Beta in this release.',
|
|
8
7
|
THIRD_PARTY_COOKIE_BLOCKED_ALERT: 'Third-party cookie access is blocked on this browser. Please allow third-party cookies for this to work properly. \nYou can use `suppressNoCookieAccessAlert` to suppress this message.',
|
|
9
8
|
DUPLICATE_TOKEN_ERR: 'Duplicate token. Please issue a new token every time getAuthToken callback is called. See https://developers.thoughtspot.com/docs/?pageid=embed-auth#trusted-auth-embed for more details.',
|
|
10
9
|
SDK_NOT_INITIALIZED: 'SDK not initialized',
|
|
@@ -30,6 +29,8 @@ export const ERROR_MESSAGE = {
|
|
|
30
29
|
SSR_ENVIRONMENT_ERROR: 'SSR environment detected. This function cannot be called in SSR environment.',
|
|
31
30
|
UPDATE_PARAMS_FAILED: 'Failed to update embed parameters',
|
|
32
31
|
INVALID_SPOTTER_DOCUMENTATION_URL: 'Invalid spotterDocumentationUrl. Please provide a valid http or https URL.',
|
|
32
|
+
UPDATEFILTERS_INVALID_PAYLOAD: 'UpdateFilters requires a valid filter or filters array. Expected: { filter: { column, oper, values } } or { filters: [{ column, oper, values }, ...] }',
|
|
33
|
+
DRILLDOWN_INVALID_PAYLOAD: 'DrillDown requires a valid points object. Expected: { points: { clickedPoint?, selectedPoints? }, autoDrillDown?, vizId? }',
|
|
33
34
|
};
|
|
34
35
|
|
|
35
36
|
export const CUSTOM_ACTIONS_ERROR_MESSAGE = {
|
package/src/index.ts
CHANGED
|
@@ -67,13 +67,12 @@ import {
|
|
|
67
67
|
CustomActionTarget,
|
|
68
68
|
InterceptedApiType,
|
|
69
69
|
EmbedErrorCodes,
|
|
70
|
-
EmbedErrorDetailsEvent,
|
|
70
|
+
EmbedErrorDetailsEvent,
|
|
71
71
|
ErrorDetailsTypes,
|
|
72
72
|
ContextType,
|
|
73
73
|
AutoMCPFrameRendererViewConfig,
|
|
74
74
|
} from './types';
|
|
75
75
|
import { CustomCssVariables } from './css-variables';
|
|
76
|
-
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
77
76
|
import { AnswerService, SessionInterface, UnderlyingDataPoint } from './utils/graphql/answerService/answerService';
|
|
78
77
|
import { getEmbedConfig } from './embed/embedConfig';
|
|
79
78
|
import { uploadMixpanelEvent, MIXPANEL_EVENT } from './mixpanel-service';
|
|
@@ -100,7 +99,6 @@ export {
|
|
|
100
99
|
SearchBarEmbed,
|
|
101
100
|
PinboardEmbed,
|
|
102
101
|
LiveboardEmbed,
|
|
103
|
-
SageEmbed,
|
|
104
102
|
AppEmbed,
|
|
105
103
|
SpotterAgentEmbed,
|
|
106
104
|
SpotterAgentEmbedViewConfig,
|
|
@@ -134,7 +132,6 @@ export {
|
|
|
134
132
|
SearchViewConfig,
|
|
135
133
|
SearchBarViewConfig,
|
|
136
134
|
LiveboardViewConfig,
|
|
137
|
-
SageViewConfig,
|
|
138
135
|
AppViewConfig,
|
|
139
136
|
PrefetchFeatures,
|
|
140
137
|
FrameParams,
|
|
@@ -171,4 +168,4 @@ export {
|
|
|
171
168
|
};
|
|
172
169
|
|
|
173
170
|
export { resetCachedAuthToken } from './authToken';
|
|
174
|
-
export { startAutoMCPFrameRenderer } from './embed/auto-frame-renderer';
|
|
171
|
+
export { startAutoMCPFrameRenderer } from './embed/auto-frame-renderer';
|
|
@@ -7,8 +7,6 @@ export {
|
|
|
7
7
|
PreRenderedSearchBarEmbed,
|
|
8
8
|
AppEmbed,
|
|
9
9
|
PreRenderedAppEmbed,
|
|
10
|
-
SageEmbed,
|
|
11
|
-
PreRenderedSageEmbed,
|
|
12
10
|
SpotterEmbed,
|
|
13
11
|
ConversationEmbed,
|
|
14
12
|
PreRenderedConversationEmbed,
|
|
@@ -44,7 +42,6 @@ export {
|
|
|
44
42
|
SearchViewConfig,
|
|
45
43
|
SearchBarViewConfig,
|
|
46
44
|
LiveboardViewConfig,
|
|
47
|
-
SageViewConfig,
|
|
48
45
|
AppViewConfig,
|
|
49
46
|
PrefetchFeatures,
|
|
50
47
|
FrameParams,
|
package/src/react/index.tsx
CHANGED
|
@@ -5,7 +5,6 @@ import useDeepCompareEffect from 'use-deep-compare-effect';
|
|
|
5
5
|
import { AuthEventEmitter } from '../auth';
|
|
6
6
|
import { deepMerge } from '../utils';
|
|
7
7
|
import { SearchBarEmbed as _SearchBarEmbed, SearchBarViewConfig } from '../embed/search-bar';
|
|
8
|
-
import { SageEmbed as _SageEmbed, SageViewConfig } from '../embed/sage';
|
|
9
8
|
import { SearchEmbed as _SearchEmbed, SearchViewConfig } from '../embed/search';
|
|
10
9
|
import { AppEmbed as _AppEmbed, AppViewConfig } from '../embed/app';
|
|
11
10
|
import { LiveboardEmbed as _LiveboardEmbed, LiveboardViewConfig } from '../embed/liveboard';
|
|
@@ -299,48 +298,6 @@ export const PreRenderedSearchBarEmbed = componentFactory<
|
|
|
299
298
|
SearchBarViewConfig
|
|
300
299
|
>(_SearchBarEmbed, true);
|
|
301
300
|
|
|
302
|
-
interface SageEmbedProps extends EmbedProps, SageViewConfig { }
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* React component for LLM based search Sage embed.
|
|
306
|
-
* @example
|
|
307
|
-
* ```tsx
|
|
308
|
-
* function Sage() {
|
|
309
|
-
* return <SageEmbed
|
|
310
|
-
* showObjectResults={true}
|
|
311
|
-
* ... other view config props or event listeners.
|
|
312
|
-
* />
|
|
313
|
-
* }
|
|
314
|
-
* ```
|
|
315
|
-
*/
|
|
316
|
-
export const SageEmbed = componentFactory<typeof _SageEmbed, SageEmbedProps, SageViewConfig>(
|
|
317
|
-
_SageEmbed,
|
|
318
|
-
);
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* React component for PreRendered Sage embed.
|
|
322
|
-
*
|
|
323
|
-
* PreRenderedSageEmbed will preRender the SageEmbed and will be hidden by
|
|
324
|
-
* default.
|
|
325
|
-
*
|
|
326
|
-
* SageEmbed with preRenderId passed will call showPreRender on the embed.
|
|
327
|
-
* @example
|
|
328
|
-
* ```tsx
|
|
329
|
-
* function LandingPageComponent() {
|
|
330
|
-
* return <PreRenderedSageEmbed preRenderId="someId" showObjectResults={true} />
|
|
331
|
-
* }
|
|
332
|
-
* ```
|
|
333
|
-
* function MyComponent() {
|
|
334
|
-
* return <SageEmbed preRenderId="someId" showObjectResults={true} />
|
|
335
|
-
* }
|
|
336
|
-
* ```
|
|
337
|
-
*/
|
|
338
|
-
export const PreRenderedSageEmbed = componentFactory<
|
|
339
|
-
typeof _SageEmbed,
|
|
340
|
-
SageEmbedProps & PreRenderProps,
|
|
341
|
-
SageViewConfig
|
|
342
|
-
>(_SageEmbed, true);
|
|
343
|
-
|
|
344
301
|
interface SpotterEmbedProps extends EmbedProps, SpotterEmbedViewConfig { }
|
|
345
302
|
interface ConversationEmbedProps extends EmbedProps, ConversationViewConfig { }
|
|
346
303
|
|
|
@@ -409,24 +366,24 @@ type SpotterMessageProps = {
|
|
|
409
366
|
|
|
410
367
|
/**
|
|
411
368
|
* React component for displaying individual conversation messages from SpotterAgent.
|
|
412
|
-
*
|
|
369
|
+
*
|
|
413
370
|
* This component renders a single message response from your ThoughtSpot conversation,
|
|
414
371
|
* showing charts, visualizations, or text responses based on the user's query.
|
|
415
|
-
*
|
|
372
|
+
*
|
|
416
373
|
* @version SDK: 1.39.0 | ThoughtSpot: 10.11.0.cl
|
|
417
374
|
* @example
|
|
418
375
|
* ```tsx
|
|
419
376
|
* const { sendMessage } = useSpotterAgent({ worksheetId: 'worksheetId' });
|
|
420
377
|
* const result = await sendMessage('show me sales by region');
|
|
421
|
-
*
|
|
378
|
+
*
|
|
422
379
|
* if (!result.error) {
|
|
423
380
|
* // Simple usage - just pass the message data
|
|
424
381
|
* <SpotterMessage message={result.message} />
|
|
425
|
-
*
|
|
382
|
+
*
|
|
426
383
|
* // With optional query for context
|
|
427
|
-
* <SpotterMessage
|
|
428
|
-
* message={result.message}
|
|
429
|
-
* query={result.query}
|
|
384
|
+
* <SpotterMessage
|
|
385
|
+
* message={result.message}
|
|
386
|
+
* query={result.query}
|
|
430
387
|
* />
|
|
431
388
|
* }
|
|
432
389
|
* ```
|
|
@@ -436,7 +393,7 @@ export const SpotterMessage = React.forwardRef<
|
|
|
436
393
|
SpotterMessageProps
|
|
437
394
|
>((props, ref) => {
|
|
438
395
|
const { message, query: _, ...otherProps } = props;
|
|
439
|
-
|
|
396
|
+
|
|
440
397
|
return (
|
|
441
398
|
<ConversationMessage
|
|
442
399
|
ref={ref}
|
|
@@ -475,7 +432,6 @@ type EmbedComponent = typeof SearchEmbed
|
|
|
475
432
|
| typeof AppEmbed
|
|
476
433
|
| typeof LiveboardEmbed
|
|
477
434
|
| typeof SearchBarEmbed
|
|
478
|
-
| typeof SageEmbed
|
|
479
435
|
| typeof ConversationMessage
|
|
480
436
|
| typeof SpotterMessage
|
|
481
437
|
| typeof SpotterEmbed
|
|
@@ -527,20 +483,20 @@ export function useInit(config: EmbedConfig) {
|
|
|
527
483
|
|
|
528
484
|
/**
|
|
529
485
|
* React hook for interacting with SpotterAgent AI conversations.
|
|
530
|
-
*
|
|
486
|
+
*
|
|
531
487
|
* This hook provides a sendMessage function that allows you to send natural language
|
|
532
488
|
* queries to your data and get back AI-generated responses with visualizations.
|
|
533
|
-
*
|
|
489
|
+
*
|
|
534
490
|
* @version SDK: 1.39.0 | ThoughtSpot: 10.11.0.cl
|
|
535
491
|
* @param config - Configuration object containing worksheetId and other options
|
|
536
492
|
* @returns Object with sendMessage function that returns conversation results
|
|
537
493
|
* @example
|
|
538
494
|
* ```tsx
|
|
539
495
|
* const { sendMessage } = useSpotterAgent({ worksheetId: 'worksheetId' });
|
|
540
|
-
*
|
|
496
|
+
*
|
|
541
497
|
* const handleQuery = async () => {
|
|
542
498
|
* const result = await sendMessage('show me sales by region');
|
|
543
|
-
*
|
|
499
|
+
*
|
|
544
500
|
* if (!result.error) {
|
|
545
501
|
* // Display the message response
|
|
546
502
|
* <SpotterMessage message={result.message} />
|
|
@@ -552,14 +508,14 @@ export function useInit(config: EmbedConfig) {
|
|
|
552
508
|
*/
|
|
553
509
|
export function useSpotterAgent(config: SpotterAgentEmbedViewConfig) {
|
|
554
510
|
const serviceRef = useRef<_SpotterAgentEmbed | null>(null);
|
|
555
|
-
|
|
511
|
+
|
|
556
512
|
useDeepCompareEffect(() => {
|
|
557
513
|
if (serviceRef.current) {
|
|
558
514
|
serviceRef.current = null;
|
|
559
515
|
}
|
|
560
|
-
|
|
516
|
+
|
|
561
517
|
serviceRef.current = new _SpotterAgentEmbed(config);
|
|
562
|
-
|
|
518
|
+
|
|
563
519
|
return () => {
|
|
564
520
|
serviceRef.current = null;
|
|
565
521
|
};
|