@thoughtspot/visual-embed-sdk 1.10.0-alpha.2 → 1.10.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/CHANGELOG.md +14 -2
- package/README.md +22 -3
- package/dist/src/embed/app.d.ts +9 -3
- package/dist/src/embed/search.d.ts +4 -0
- package/dist/src/embed/ts-embed.d.ts +18 -4
- package/dist/src/types.d.ts +139 -3
- package/dist/src/utils.d.ts +4 -0
- package/dist/tsembed.es.js +179 -21
- package/dist/tsembed.js +179 -21
- package/lib/package.json +2 -2
- package/lib/src/embed/app.d.ts +9 -3
- package/lib/src/embed/app.js +23 -7
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +36 -2
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.spec.js +13 -1
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +30 -1
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/search.d.ts +4 -0
- package/lib/src/embed/search.js +1 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +18 -4
- package/lib/src/embed/ts-embed.js +36 -14
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +123 -14
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/types.d.ts +139 -3
- package/lib/src/types.js +116 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +4 -0
- package/lib/src/utils.js +4 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +170 -10
- package/package.json +2 -2
- package/src/embed/app.spec.ts +49 -1
- package/src/embed/app.ts +24 -6
- package/src/embed/base.spec.ts +14 -0
- package/src/embed/events.spec.ts +32 -0
- package/src/embed/search.ts +5 -0
- package/src/embed/ts-embed.spec.ts +166 -14
- package/src/embed/ts-embed.ts +56 -16
- package/src/types.ts +148 -1
- package/src/utils.ts +5 -0
package/dist/tsembed.js
CHANGED
|
@@ -115,6 +115,10 @@
|
|
|
115
115
|
const rect = element.getBoundingClientRect();
|
|
116
116
|
return rect.top + window.scrollY;
|
|
117
117
|
};
|
|
118
|
+
const embedEventStatus = {
|
|
119
|
+
START: 'start',
|
|
120
|
+
END: 'end',
|
|
121
|
+
};
|
|
118
122
|
const setAttributes = (element, attributes) => {
|
|
119
123
|
Object.keys(attributes).forEach((key) => {
|
|
120
124
|
element.setAttribute(key, attributes[key].toString());
|
|
@@ -272,6 +276,12 @@
|
|
|
272
276
|
* @version 1.5.0 or later
|
|
273
277
|
*/
|
|
274
278
|
EmbedEvent["VizPointDoubleClick"] = "vizPointDoubleClick";
|
|
279
|
+
/**
|
|
280
|
+
* A click has been triggered on table/chart
|
|
281
|
+
* @return ContextMenuInputPoints - data point that is clicked
|
|
282
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
283
|
+
*/
|
|
284
|
+
EmbedEvent["VizPointClick"] = "vizPointClick";
|
|
275
285
|
/**
|
|
276
286
|
* An error has occurred.
|
|
277
287
|
* @return error - An error object or message
|
|
@@ -337,6 +347,107 @@
|
|
|
337
347
|
* @version 1.9.1 or later
|
|
338
348
|
*/
|
|
339
349
|
EmbedEvent["LiveboardRendered"] = "PinboardRendered";
|
|
350
|
+
/**
|
|
351
|
+
* This can be used to register an event listener which
|
|
352
|
+
* is triggered on all events.
|
|
353
|
+
* @version SDK: 1.10.0 | ThoughtSpot: any
|
|
354
|
+
*/
|
|
355
|
+
EmbedEvent["ALL"] = "*";
|
|
356
|
+
/**
|
|
357
|
+
* Emitted when answer is saved in the app
|
|
358
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
359
|
+
*/
|
|
360
|
+
EmbedEvent["Save"] = "save";
|
|
361
|
+
/**
|
|
362
|
+
* Emitted when the download action is triggered on an answer
|
|
363
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
364
|
+
*/
|
|
365
|
+
EmbedEvent["Download"] = "download";
|
|
366
|
+
/**
|
|
367
|
+
* Emitted when the Download as PDF action is triggered on an answer
|
|
368
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
369
|
+
*/
|
|
370
|
+
EmbedEvent["DownloadAsPdf"] = "downloadAsPdf";
|
|
371
|
+
/**
|
|
372
|
+
* Emitted when the Download as CSV action is triggered on an answer
|
|
373
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
374
|
+
*/
|
|
375
|
+
EmbedEvent["DownloadAsCsv"] = "downloadAsCsv";
|
|
376
|
+
/**
|
|
377
|
+
* Emitted when the Download as XLSX action is triggered on an answer
|
|
378
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
379
|
+
*/
|
|
380
|
+
EmbedEvent["DownloadAsXlsx"] = "downloadAsXlsx";
|
|
381
|
+
/**
|
|
382
|
+
* Emitted when an answer is deleted in the app
|
|
383
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
384
|
+
*/
|
|
385
|
+
EmbedEvent["AnswerDelete"] = "answerDelete";
|
|
386
|
+
/**
|
|
387
|
+
* Emitted when an answer is pinned to a Liveboard
|
|
388
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
389
|
+
*/
|
|
390
|
+
EmbedEvent["Pin"] = "pin";
|
|
391
|
+
/**
|
|
392
|
+
* Emitted when SpotIQ analysis is triggered
|
|
393
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
394
|
+
*/
|
|
395
|
+
EmbedEvent["SpotIQAnalyze"] = "spotIQAnalyze";
|
|
396
|
+
/**
|
|
397
|
+
* Emitted when a user shares an object with another user or group
|
|
398
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
399
|
+
*/
|
|
400
|
+
EmbedEvent["Share"] = "share";
|
|
401
|
+
/**
|
|
402
|
+
* Emitted when a user clicks the Include action to include a specific value or data on a chart or table
|
|
403
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
404
|
+
*/
|
|
405
|
+
EmbedEvent["DrillInclude"] = "context-menu-item-include";
|
|
406
|
+
/**
|
|
407
|
+
* Emitted when a user clicks the Exclude action to exclude a specific value or data on a chart or table
|
|
408
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
409
|
+
*/
|
|
410
|
+
EmbedEvent["DrillExclude"] = "context-menu-item-exclude";
|
|
411
|
+
/**
|
|
412
|
+
* Emitted when copied column value on the app
|
|
413
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
414
|
+
*/
|
|
415
|
+
EmbedEvent["CopyToClipboard"] = "context-menu-item-copy-to-clipboard";
|
|
416
|
+
/**
|
|
417
|
+
* Emitted when a user clicks the Update TML action
|
|
418
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
419
|
+
*/
|
|
420
|
+
EmbedEvent["UpdateTML"] = "updateTSL";
|
|
421
|
+
/**
|
|
422
|
+
* Emitted when a user clicks the Edit TML action
|
|
423
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
424
|
+
*/
|
|
425
|
+
EmbedEvent["EditTML"] = "editTSL";
|
|
426
|
+
/**
|
|
427
|
+
* Emitted when ExportTML trigger in answer on the app
|
|
428
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
429
|
+
*/
|
|
430
|
+
EmbedEvent["ExportTML"] = "exportTSL";
|
|
431
|
+
/**
|
|
432
|
+
* Emitted when an answer is saved as a view
|
|
433
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
434
|
+
*/
|
|
435
|
+
EmbedEvent["SaveAsView"] = "saveAsView";
|
|
436
|
+
/**
|
|
437
|
+
* Emitted when copy of existing answer on the app
|
|
438
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
439
|
+
*/
|
|
440
|
+
EmbedEvent["CopyAEdit"] = "copyAEdit";
|
|
441
|
+
/**
|
|
442
|
+
* Emitted when a user clicks Show underlying data on an answe
|
|
443
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
444
|
+
*/
|
|
445
|
+
EmbedEvent["ShowUnderlyingData"] = "showUnderlyingData";
|
|
446
|
+
/**
|
|
447
|
+
* Emitted when an answer is switched to a chart or table view
|
|
448
|
+
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
449
|
+
*/
|
|
450
|
+
EmbedEvent["AnswerChartSwitcher"] = "answerChartSwitcher";
|
|
340
451
|
})(exports.EmbedEvent || (exports.EmbedEvent = {}));
|
|
341
452
|
(function (HostEvent) {
|
|
342
453
|
/**
|
|
@@ -378,6 +489,13 @@
|
|
|
378
489
|
* @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl
|
|
379
490
|
*/
|
|
380
491
|
HostEvent["UpdateRuntimeFilters"] = "UpdateRuntimeFilters";
|
|
492
|
+
/**
|
|
493
|
+
* Navigate to a specific page in App embed without any reload.
|
|
494
|
+
* This is the same as calling `appEmbed.navigateToPage(path, true)`
|
|
495
|
+
* @param path - the path to navigate to (can be a number[1/-1] to go forward/back)
|
|
496
|
+
* @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl
|
|
497
|
+
*/
|
|
498
|
+
HostEvent["Navigate"] = "Navigate";
|
|
381
499
|
})(exports.HostEvent || (exports.HostEvent = {}));
|
|
382
500
|
(function (DataSourceVisualMode) {
|
|
383
501
|
/**
|
|
@@ -428,6 +546,8 @@
|
|
|
428
546
|
Param["DisableLoginRedirect"] = "disableLoginRedirect";
|
|
429
547
|
Param["visibleVizs"] = "pinboardVisibleVizs";
|
|
430
548
|
Param["LiveboardV2Enabled"] = "isPinboardV2Enabled";
|
|
549
|
+
Param["ShowAlerts"] = "showAlerts";
|
|
550
|
+
Param["Locale"] = "locale";
|
|
431
551
|
})(Param || (Param = {}));
|
|
432
552
|
(function (Action) {
|
|
433
553
|
Action["Save"] = "save";
|
|
@@ -8937,7 +9057,7 @@
|
|
|
8937
9057
|
}
|
|
8938
9058
|
}
|
|
8939
9059
|
|
|
8940
|
-
var name="@thoughtspot/visual-embed-sdk";var version="1.10.0
|
|
9060
|
+
var name="@thoughtspot/visual-embed-sdk";var version="1.10.0";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**"];var exports$1={".":"./lib/src/index.js","./react":"./lib/src/react/index.js"};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs && npx istanbul-merge --out ./coverage/coverage.json ./coverage/docs/coverage-final.json ./coverage/sdk/coverage-final.json && npx istanbul report --include ./coverage/coverage.json --dir ./coverage lcov",posttest:"cat ./coverage/sdk/lcov.info | coveralls",prepublishOnly:"npm run test; npm run tsc; npm run bundle-dts; npm run build","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1","mixpanel-browser":"^2.41.0"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","dts-bundle":"0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.1.0","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"4.1.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-puppeteer":"^4.4.0",jsdom:"^17.0.0","node-sass":"^4.0.0",prettier:"2.1.2",puppeteer:"^7.0.1",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-neo-theme":"^1.1.0","typedoc-plugin-toc-group":"0.0.5",typescript:"^4.1.0","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports$1,scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
|
|
8941
9061
|
|
|
8942
9062
|
/**
|
|
8943
9063
|
* Copyright (c) 2022
|
|
@@ -9044,9 +9164,10 @@
|
|
|
9044
9164
|
* will be removed for ts7.oct.cl
|
|
9045
9165
|
* @hidden
|
|
9046
9166
|
*/
|
|
9047
|
-
formatEventData(event) {
|
|
9167
|
+
formatEventData(event, eventType) {
|
|
9048
9168
|
const eventData = {
|
|
9049
9169
|
...event.data,
|
|
9170
|
+
type: eventType,
|
|
9050
9171
|
};
|
|
9051
9172
|
if (!eventData.data) {
|
|
9052
9173
|
eventData.data = event.data.payload;
|
|
@@ -9063,7 +9184,7 @@
|
|
|
9063
9184
|
window.addEventListener('message', (event) => {
|
|
9064
9185
|
const eventType = this.getEventType(event);
|
|
9065
9186
|
const eventPort = this.getEventPort(event);
|
|
9066
|
-
const eventData = this.formatEventData(event);
|
|
9187
|
+
const eventData = this.formatEventData(event, eventType);
|
|
9067
9188
|
if (event.source === this.iFrame.contentWindow) {
|
|
9068
9189
|
this.executeCallbacks(eventType, getProcessData(eventType, eventData, this.thoughtSpotHost), eventPort);
|
|
9069
9190
|
}
|
|
@@ -9104,13 +9225,14 @@
|
|
|
9104
9225
|
queryParams[Param.ViewPortHeight] = window.innerHeight;
|
|
9105
9226
|
queryParams[Param.ViewPortWidth] = window.innerWidth;
|
|
9106
9227
|
queryParams[Param.Version] = version$1;
|
|
9107
|
-
if (this.embedConfig.disableLoginRedirect === true
|
|
9108
|
-
|
|
9228
|
+
if (this.embedConfig.disableLoginRedirect === true ||
|
|
9229
|
+
this.embedConfig.autoLogin === true) {
|
|
9230
|
+
queryParams[Param.DisableLoginRedirect] = true;
|
|
9109
9231
|
}
|
|
9110
9232
|
if (this.embedConfig.customCssUrl) {
|
|
9111
9233
|
queryParams[Param.CustomCSSUrl] = this.embedConfig.customCssUrl;
|
|
9112
9234
|
}
|
|
9113
|
-
const { disabledActions, disabledActionReason, hiddenActions, visibleActions, additionalFlags, } = this.viewConfig;
|
|
9235
|
+
const { disabledActions, disabledActionReason, hiddenActions, visibleActions, showAlerts, additionalFlags, locale, } = this.viewConfig;
|
|
9114
9236
|
if (Array.isArray(visibleActions) && Array.isArray(hiddenActions)) {
|
|
9115
9237
|
this.handleError('You cannot have both hidden actions and visible actions');
|
|
9116
9238
|
return queryParams;
|
|
@@ -9127,6 +9249,12 @@
|
|
|
9127
9249
|
if (Array.isArray(visibleActions)) {
|
|
9128
9250
|
queryParams[Param.VisibleActions] = visibleActions;
|
|
9129
9251
|
}
|
|
9252
|
+
if (showAlerts !== undefined) {
|
|
9253
|
+
queryParams[Param.ShowAlerts] = showAlerts;
|
|
9254
|
+
}
|
|
9255
|
+
if (locale !== undefined) {
|
|
9256
|
+
queryParams[Param.Locale] = locale;
|
|
9257
|
+
}
|
|
9130
9258
|
if (additionalFlags && additionalFlags.constructor.name === 'Object') {
|
|
9131
9259
|
Object.assign(queryParams, additionalFlags);
|
|
9132
9260
|
}
|
|
@@ -9174,6 +9302,7 @@
|
|
|
9174
9302
|
data: {
|
|
9175
9303
|
timestamp: initTimestamp,
|
|
9176
9304
|
},
|
|
9305
|
+
type: exports.EmbedEvent.Init,
|
|
9177
9306
|
});
|
|
9178
9307
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
9179
9308
|
(_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then(() => {
|
|
@@ -9205,6 +9334,7 @@
|
|
|
9205
9334
|
data: {
|
|
9206
9335
|
timestamp: loadTimestamp,
|
|
9207
9336
|
},
|
|
9337
|
+
type: exports.EmbedEvent.Load,
|
|
9208
9338
|
});
|
|
9209
9339
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_IFRAME_LOAD_PERFORMANCE, {
|
|
9210
9340
|
timeTookToLoad: loadTimestamp - initTimestamp,
|
|
@@ -9244,9 +9374,20 @@
|
|
|
9244
9374
|
*/
|
|
9245
9375
|
executeCallbacks(eventType, data, eventPort) {
|
|
9246
9376
|
const callbacks = this.eventHandlerMap.get(eventType) || [];
|
|
9247
|
-
|
|
9248
|
-
|
|
9249
|
-
|
|
9377
|
+
const allHandlers = this.eventHandlerMap.get(exports.EmbedEvent.ALL) || [];
|
|
9378
|
+
callbacks.push(...allHandlers);
|
|
9379
|
+
const dataStatus = (data === null || data === void 0 ? void 0 : data.status) || embedEventStatus.END;
|
|
9380
|
+
callbacks.forEach((callbackObj) => {
|
|
9381
|
+
if ((callbackObj.options.start &&
|
|
9382
|
+
dataStatus === embedEventStatus.START) || // When start status is true it trigger only start releated payload
|
|
9383
|
+
(!callbackObj.options.start &&
|
|
9384
|
+
dataStatus === embedEventStatus.END) // When start status is false it trigger only end releated payload
|
|
9385
|
+
) {
|
|
9386
|
+
callbackObj.callback(data, (payload) => {
|
|
9387
|
+
this.triggerEventOnPort(eventPort, payload);
|
|
9388
|
+
});
|
|
9389
|
+
}
|
|
9390
|
+
});
|
|
9250
9391
|
}
|
|
9251
9392
|
/**
|
|
9252
9393
|
* Returns the ThoughtSpot hostname or IP address.
|
|
@@ -9303,14 +9444,15 @@
|
|
|
9303
9444
|
* sends an event of a particular message type to the host application.
|
|
9304
9445
|
*
|
|
9305
9446
|
* @param messageType The message type
|
|
9306
|
-
* @param callback A callback function
|
|
9447
|
+
* @param callback A callback as a function
|
|
9448
|
+
* @param options The message options
|
|
9307
9449
|
*/
|
|
9308
|
-
on(messageType, callback) {
|
|
9450
|
+
on(messageType, callback, options = { start: false }) {
|
|
9309
9451
|
if (this.isRendered) {
|
|
9310
9452
|
this.handleError('Please register event handlers before calling render');
|
|
9311
9453
|
}
|
|
9312
9454
|
const callbacks = this.eventHandlerMap.get(messageType) || [];
|
|
9313
|
-
callbacks.push(callback);
|
|
9455
|
+
callbacks.push({ options, callback });
|
|
9314
9456
|
this.eventHandlerMap.set(messageType, callbacks);
|
|
9315
9457
|
return this;
|
|
9316
9458
|
}
|
|
@@ -9400,9 +9542,9 @@
|
|
|
9400
9542
|
this.renderIFrame(iframeSrc, this.viewConfig.frameParams);
|
|
9401
9543
|
}
|
|
9402
9544
|
// @override
|
|
9403
|
-
on(messageType, callback) {
|
|
9545
|
+
on(messageType, callback, options = { start: false }) {
|
|
9404
9546
|
const eventType = this.getCompatibleEventType(messageType);
|
|
9405
|
-
return super.on(eventType, callback);
|
|
9547
|
+
return super.on(eventType, callback, options);
|
|
9406
9548
|
}
|
|
9407
9549
|
}
|
|
9408
9550
|
|
|
@@ -9441,6 +9583,10 @@
|
|
|
9441
9583
|
* Data management page
|
|
9442
9584
|
*/
|
|
9443
9585
|
Page["Data"] = "data";
|
|
9586
|
+
/**
|
|
9587
|
+
* SpotIQ listing page
|
|
9588
|
+
*/
|
|
9589
|
+
Page["SpotIQ"] = "spotiq";
|
|
9444
9590
|
})(exports.Page || (exports.Page = {}));
|
|
9445
9591
|
/**
|
|
9446
9592
|
* Embeds full ThoughtSpot experience in a host application.
|
|
@@ -9499,6 +9645,8 @@
|
|
|
9499
9645
|
return 'pinboards';
|
|
9500
9646
|
case exports.Page.Data:
|
|
9501
9647
|
return 'data/tables';
|
|
9648
|
+
case exports.Page.SpotIQ:
|
|
9649
|
+
return 'insights/results';
|
|
9502
9650
|
case exports.Page.Home:
|
|
9503
9651
|
default:
|
|
9504
9652
|
return 'home';
|
|
@@ -9522,19 +9670,29 @@
|
|
|
9522
9670
|
/**
|
|
9523
9671
|
* Navigate to particular page for app embed. eg:answers/pinboards/home
|
|
9524
9672
|
* This is used for embedding answers, pinboards, visualizations and full application only.
|
|
9525
|
-
* @param path The string, set to iframe src and navigate to new page
|
|
9673
|
+
* @param path string | number The string, set to iframe src and navigate to new page
|
|
9526
9674
|
* eg: appEmbed.navigateToPage('pinboards')
|
|
9675
|
+
* When used with `noReload` this can also be a number like 1/-1 to go forward/back.
|
|
9676
|
+
* @param noReload boolean Trigger the navigation without reloading the page (version: 1.12.0 | 8.4.0.cl)
|
|
9527
9677
|
*/
|
|
9528
|
-
navigateToPage(path) {
|
|
9529
|
-
if (this.iFrame) {
|
|
9678
|
+
navigateToPage(path, noReload = false) {
|
|
9679
|
+
if (!this.iFrame) {
|
|
9680
|
+
console.log('Please call render before invoking this method');
|
|
9681
|
+
return;
|
|
9682
|
+
}
|
|
9683
|
+
if (noReload) {
|
|
9684
|
+
this.trigger(exports.HostEvent.Navigate, path);
|
|
9685
|
+
}
|
|
9686
|
+
else {
|
|
9687
|
+
if (typeof path !== 'string') {
|
|
9688
|
+
console.warn('Path can only by a string when triggered without noReload');
|
|
9689
|
+
return;
|
|
9690
|
+
}
|
|
9530
9691
|
const iframeSrc = this.iFrame.src;
|
|
9531
9692
|
const embedPath = '#/embed';
|
|
9532
9693
|
const currentPath = iframeSrc.includes(embedPath) ? embedPath : '#';
|
|
9533
9694
|
this.iFrame.src = `${iframeSrc.split(currentPath)[0]}${currentPath}/${path.replace(/^\/?#?\//, '')}`;
|
|
9534
9695
|
}
|
|
9535
|
-
else {
|
|
9536
|
-
console.log('Please call render before invoking this method');
|
|
9537
|
-
}
|
|
9538
9696
|
}
|
|
9539
9697
|
/**
|
|
9540
9698
|
* Renders the embedded application pages in the ThoughtSpot app.
|
|
@@ -9715,7 +9873,7 @@
|
|
|
9715
9873
|
*/
|
|
9716
9874
|
getIFrameSrc(answerId, dataSources) {
|
|
9717
9875
|
var _a;
|
|
9718
|
-
const { hideResults, enableSearchAssist, forceTable, searchOptions, } = this.viewConfig;
|
|
9876
|
+
const { hideResults, expandAllDataSource, enableSearchAssist, forceTable, searchOptions, } = this.viewConfig;
|
|
9719
9877
|
const answerPath = answerId ? `saved-answer/${answerId}` : 'answer';
|
|
9720
9878
|
const queryParams = this.getBaseQueryParams();
|
|
9721
9879
|
queryParams[Param.HideActions] = [
|
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thoughtspot/visual-embed-sdk",
|
|
3
|
-
"version": "1.10.0
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "ThoughtSpot Embed SDK",
|
|
5
5
|
"module": "lib/src/index.js",
|
|
6
6
|
"main": "dist/tsembed.js",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"test-sdk": "jest -c jest.config.sdk.js",
|
|
33
33
|
"test-docs": "jest -c jest.config.docs.js",
|
|
34
34
|
"test": "npm run test-sdk && npm run test-docs && npx istanbul-merge --out ./coverage/coverage.json ./coverage/docs/coverage-final.json ./coverage/sdk/coverage-final.json && npx istanbul report --include ./coverage/coverage.json --dir ./coverage lcov",
|
|
35
|
-
"posttest": "cat ./coverage/lcov.info | coveralls",
|
|
35
|
+
"posttest": "cat ./coverage/sdk/lcov.info | coveralls",
|
|
36
36
|
"prepublishOnly": "npm run test; npm run tsc; npm run bundle-dts; npm run build",
|
|
37
37
|
"publish-dev": "npm publish --tag dev",
|
|
38
38
|
"publish-prod": "npm publish --tag latest"
|
package/lib/src/embed/app.d.ts
CHANGED
|
@@ -37,7 +37,11 @@ export declare enum Page {
|
|
|
37
37
|
/**
|
|
38
38
|
* Data management page
|
|
39
39
|
*/
|
|
40
|
-
Data = "data"
|
|
40
|
+
Data = "data",
|
|
41
|
+
/**
|
|
42
|
+
* SpotIQ listing page
|
|
43
|
+
*/
|
|
44
|
+
SpotIQ = "spotiq"
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
47
|
* The view configuration for full app embedding.
|
|
@@ -114,10 +118,12 @@ export declare class AppEmbed extends V1Embed {
|
|
|
114
118
|
/**
|
|
115
119
|
* Navigate to particular page for app embed. eg:answers/pinboards/home
|
|
116
120
|
* This is used for embedding answers, pinboards, visualizations and full application only.
|
|
117
|
-
* @param path The string, set to iframe src and navigate to new page
|
|
121
|
+
* @param path string | number The string, set to iframe src and navigate to new page
|
|
118
122
|
* eg: appEmbed.navigateToPage('pinboards')
|
|
123
|
+
* When used with `noReload` this can also be a number like 1/-1 to go forward/back.
|
|
124
|
+
* @param noReload boolean Trigger the navigation without reloading the page (version: 1.12.0 | 8.4.0.cl)
|
|
119
125
|
*/
|
|
120
|
-
navigateToPage(path: string): void;
|
|
126
|
+
navigateToPage(path: string | number, noReload?: boolean): void;
|
|
121
127
|
/**
|
|
122
128
|
* Renders the embedded application pages in the ThoughtSpot app.
|
|
123
129
|
* @param renderOptions An object containing the page ID
|
package/lib/src/embed/app.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
|
|
10
10
|
*/
|
|
11
11
|
import { getFilterQuery, getQueryParamString } from '../utils';
|
|
12
|
-
import { Param } from '../types';
|
|
12
|
+
import { Param, HostEvent } from '../types';
|
|
13
13
|
import { V1Embed } from './ts-embed';
|
|
14
14
|
/**
|
|
15
15
|
* Pages within the ThoughtSpot app that can be embedded.
|
|
@@ -41,6 +41,10 @@ export var Page;
|
|
|
41
41
|
* Data management page
|
|
42
42
|
*/
|
|
43
43
|
Page["Data"] = "data";
|
|
44
|
+
/**
|
|
45
|
+
* SpotIQ listing page
|
|
46
|
+
*/
|
|
47
|
+
Page["SpotIQ"] = "spotiq";
|
|
44
48
|
})(Page || (Page = {}));
|
|
45
49
|
/**
|
|
46
50
|
* Embeds full ThoughtSpot experience in a host application.
|
|
@@ -99,6 +103,8 @@ export class AppEmbed extends V1Embed {
|
|
|
99
103
|
return 'pinboards';
|
|
100
104
|
case Page.Data:
|
|
101
105
|
return 'data/tables';
|
|
106
|
+
case Page.SpotIQ:
|
|
107
|
+
return 'insights/results';
|
|
102
108
|
case Page.Home:
|
|
103
109
|
default:
|
|
104
110
|
return 'home';
|
|
@@ -122,19 +128,29 @@ export class AppEmbed extends V1Embed {
|
|
|
122
128
|
/**
|
|
123
129
|
* Navigate to particular page for app embed. eg:answers/pinboards/home
|
|
124
130
|
* This is used for embedding answers, pinboards, visualizations and full application only.
|
|
125
|
-
* @param path The string, set to iframe src and navigate to new page
|
|
131
|
+
* @param path string | number The string, set to iframe src and navigate to new page
|
|
126
132
|
* eg: appEmbed.navigateToPage('pinboards')
|
|
133
|
+
* When used with `noReload` this can also be a number like 1/-1 to go forward/back.
|
|
134
|
+
* @param noReload boolean Trigger the navigation without reloading the page (version: 1.12.0 | 8.4.0.cl)
|
|
127
135
|
*/
|
|
128
|
-
navigateToPage(path) {
|
|
129
|
-
if (this.iFrame) {
|
|
136
|
+
navigateToPage(path, noReload = false) {
|
|
137
|
+
if (!this.iFrame) {
|
|
138
|
+
console.log('Please call render before invoking this method');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (noReload) {
|
|
142
|
+
this.trigger(HostEvent.Navigate, path);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
if (typeof path !== 'string') {
|
|
146
|
+
console.warn('Path can only by a string when triggered without noReload');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
130
149
|
const iframeSrc = this.iFrame.src;
|
|
131
150
|
const embedPath = '#/embed';
|
|
132
151
|
const currentPath = iframeSrc.includes(embedPath) ? embedPath : '#';
|
|
133
152
|
this.iFrame.src = `${iframeSrc.split(currentPath)[0]}${currentPath}/${path.replace(/^\/?#?\//, '')}`;
|
|
134
153
|
}
|
|
135
|
-
else {
|
|
136
|
-
console.log('Please call render before invoking this method');
|
|
137
|
-
}
|
|
138
154
|
}
|
|
139
155
|
/**
|
|
140
156
|
* Renders the embedded application pages in the ThoughtSpot app.
|
package/lib/src/embed/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/embed/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,EAA8B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/embed/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,EAA8B,SAAS,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qCAAqC;AACrC,MAAM,CAAN,IAAY,IA6BX;AA7BD,WAAY,IAAI;IACZ;;OAEG;IACH,qBAAa,CAAA;IACb;;OAEG;IACH,yBAAiB,CAAA;IACjB;;OAEG;IACH,2BAAmB,CAAA;IACnB;;OAEG;IACH,iCAAyB,CAAA;IACzB;;OAEG;IACH,+BAAuB,CAAA;IACvB;;OAEG;IACH,qBAAa,CAAA;IACb;;OAEG;IACH,yBAAiB,CAAA;AACrB,CAAC,EA7BW,IAAI,KAAJ,IAAI,QA6Bf;AA+CD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO;IAGjC,kDAAkD;IAClD,YAAY,WAAwB,EAAE,UAAyB;QAC3D,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACK,cAAc;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAElE,IAAI,GAAG,EAAE;YACL,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;SAC3B;QACD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;YACnC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SAC3D;QAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC;QAC/C,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEtD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,MAAc,EAAE,cAA+B;QAChE,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;aACzC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAChC,WAAW,EACX,IAAI,CAAC,UAAU,CAAC,iBAAiB,EACjC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EACrC,IAAI,CACP,IAAI,MAAM,EAAE,CAAC;QAEd,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAC5D,GAAG,GAAG,GAAG,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAElC,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,MAAY;QAC7B,QAAQ,MAAM,EAAE;YACZ,KAAK,IAAI,CAAC,MAAM;gBACZ,OAAO,QAAQ,CAAC;YACpB,KAAK,IAAI,CAAC,OAAO;gBACb,OAAO,SAAS,CAAC;YACrB,KAAK,IAAI,CAAC,UAAU;gBAChB,OAAO,WAAW,CAAC;YACvB,KAAK,IAAI,CAAC,SAAS;gBACf,OAAO,WAAW,CAAC;YACvB,KAAK,IAAI,CAAC,IAAI;gBACV,OAAO,aAAa,CAAC;YACzB,KAAK,IAAI,CAAC,MAAM;gBACZ,OAAO,kBAAkB,CAAC;YAC9B,KAAK,IAAI,CAAC,IAAI,CAAC;YACf;gBACI,OAAO,MAAM,CAAC;SACrB;IACL,CAAC;IAED;;;;OAIG;IACK,UAAU,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACI,cAAc,CAAC,IAAqB,EAAE,QAAQ,GAAG,KAAK;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO;SACV;QACD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC1C;aAAM;YACH,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC1B,OAAO,CAAC,IAAI,CACR,2DAA2D,CAC9D,CAAC;gBACF,OAAO;aACV;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAClC,MAAM,SAAS,GAAG,SAAS,CAAC;YAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GACd,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAClC,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;SACpD;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM;QACT,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAExB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AppEmbed, Page } from './app';
|
|
2
2
|
import { init } from '../index';
|
|
3
|
-
import { Action, AuthType, RuntimeFilterOp } from '../types';
|
|
4
|
-
import { executeAfterWait, getDocumentBody, getIFrameSrc, getRootEl, } from '../test/test-utils';
|
|
3
|
+
import { Action, AuthType, HostEvent, RuntimeFilterOp } from '../types';
|
|
4
|
+
import { executeAfterWait, getDocumentBody, getIFrameSrc, getRootEl, getIFrameEl, } from '../test/test-utils';
|
|
5
5
|
import { version } from '../../package.json';
|
|
6
6
|
import * as config from '../config';
|
|
7
7
|
const defaultViewConfig = {
|
|
@@ -63,6 +63,7 @@ describe('App embed tests', () => {
|
|
|
63
63
|
[Page.Liveboards]: 'pinboards',
|
|
64
64
|
[Page.Data]: 'data/tables',
|
|
65
65
|
[Page.Home]: 'home',
|
|
66
|
+
[Page.SpotIQ]: 'insights/results',
|
|
66
67
|
};
|
|
67
68
|
const pageIds = Object.keys(pageRouteMap);
|
|
68
69
|
for (let i = 0; i < pageIds.length; i++) {
|
|
@@ -148,6 +149,39 @@ describe('App embed tests', () => {
|
|
|
148
149
|
appEmbed.navigateToPage(path);
|
|
149
150
|
expect(getIFrameSrc()).toBe(`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${defaultParamsForPinboardEmbed}${defaultParamsPost}#/${path}`);
|
|
150
151
|
});
|
|
152
|
+
test('navigateToPage with noReload should trigger the appropriate event', async () => {
|
|
153
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
154
|
+
frameParams: {
|
|
155
|
+
width: '100%',
|
|
156
|
+
height: '100%',
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
await appEmbed.render();
|
|
160
|
+
const iframe = getIFrameEl();
|
|
161
|
+
iframe.contentWindow.postMessage = jest.fn();
|
|
162
|
+
appEmbed.navigateToPage(path, true);
|
|
163
|
+
expect(iframe.contentWindow.postMessage).toHaveBeenCalledWith(expect.objectContaining({
|
|
164
|
+
type: HostEvent.Navigate,
|
|
165
|
+
data: path,
|
|
166
|
+
}), `http://${thoughtSpotHost}`);
|
|
167
|
+
appEmbed.navigateToPage(-1, true);
|
|
168
|
+
expect(iframe.contentWindow.postMessage).toHaveBeenCalledWith(expect.objectContaining({
|
|
169
|
+
type: HostEvent.Navigate,
|
|
170
|
+
data: -1,
|
|
171
|
+
}), `http://${thoughtSpotHost}`);
|
|
172
|
+
});
|
|
173
|
+
test('Do not allow number path without noReload in navigateToPage', async () => {
|
|
174
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
175
|
+
frameParams: {
|
|
176
|
+
width: '100%',
|
|
177
|
+
height: '100%',
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
await appEmbed.render();
|
|
181
|
+
spyOn(console, 'warn');
|
|
182
|
+
appEmbed.navigateToPage(-1);
|
|
183
|
+
expect(console.warn).toHaveBeenCalledWith('Path can only by a string when triggered without noReload');
|
|
184
|
+
});
|
|
151
185
|
test('navigateToPage function use before render', async () => {
|
|
152
186
|
spyOn(console, 'log');
|
|
153
187
|
const appEmbed = new AppEmbed(getRootEl(), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.spec.js","sourceRoot":"","sources":["../../../src/embed/app.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,IAAI,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"app.spec.js","sourceRoot":"","sources":["../../../src/embed/app.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as index from '../index';
|
|
2
|
-
import { getAllIframeEl, getDocumentBody, getRootEl, } from '../test/test-utils';
|
|
2
|
+
import { executeAfterWait, getAllIframeEl, getDocumentBody, getRootEl, getIFrameSrc, } from '../test/test-utils';
|
|
3
3
|
const thoughtSpotHost = 'tshost';
|
|
4
4
|
describe('Base TS Embed', () => {
|
|
5
5
|
beforeAll(() => {
|
|
@@ -53,5 +53,17 @@ describe('Base TS Embed', () => {
|
|
|
53
53
|
});
|
|
54
54
|
expect(prefetch).toHaveBeenCalledTimes(0);
|
|
55
55
|
});
|
|
56
|
+
test('Sets the disableLoginRedirect param when autoLogin is true', async () => {
|
|
57
|
+
index.init({
|
|
58
|
+
thoughtSpotHost,
|
|
59
|
+
authType: index.AuthType.None,
|
|
60
|
+
autoLogin: true,
|
|
61
|
+
});
|
|
62
|
+
const tsEmbed = new index.AppEmbed(getRootEl(), {});
|
|
63
|
+
await tsEmbed.render();
|
|
64
|
+
await executeAfterWait(() => {
|
|
65
|
+
expect(getIFrameSrc()).toContain('disableLoginRedirect=true');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
56
68
|
});
|
|
57
69
|
//# sourceMappingURL=base.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.spec.js","sourceRoot":"","sources":["../../../src/embed/base.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"base.spec.js","sourceRoot":"","sources":["../../../src/embed/base.spec.ts"],"names":[],"mappings":"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"}
|