@thoughtspot/visual-embed-sdk 1.20.1 → 1.20.3
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/README.md +1 -1
- package/cjs/package.json +171 -0
- package/cjs/src/auth.d.ts +183 -0
- package/cjs/src/auth.d.ts.map +1 -0
- package/cjs/src/auth.js +457 -0
- package/cjs/src/auth.js.map +1 -0
- package/cjs/src/auth.spec.d.ts +13 -0
- package/cjs/src/auth.spec.d.ts.map +1 -0
- package/cjs/src/auth.spec.js +397 -0
- package/cjs/src/auth.spec.js.map +1 -0
- package/cjs/src/config.d.ts +22 -0
- package/cjs/src/config.d.ts.map +1 -0
- package/cjs/src/config.js +70 -0
- package/cjs/src/config.js.map +1 -0
- package/cjs/src/config.spec.d.ts +5 -0
- package/cjs/src/config.spec.d.ts.map +1 -0
- package/cjs/src/config.spec.js +65 -0
- package/cjs/src/config.spec.js.map +1 -0
- package/cjs/src/embed/app.d.ts +168 -0
- package/cjs/src/embed/app.d.ts.map +1 -0
- package/cjs/src/embed/app.js +215 -0
- package/cjs/src/embed/app.js.map +1 -0
- package/cjs/src/embed/app.spec.d.ts +2 -0
- package/cjs/src/embed/app.spec.d.ts.map +1 -0
- package/cjs/src/embed/app.spec.js +239 -0
- package/cjs/src/embed/app.spec.js.map +1 -0
- package/cjs/src/embed/base.d.ts +79 -0
- package/cjs/src/embed/base.d.ts.map +1 -0
- package/cjs/src/embed/base.js +229 -0
- package/cjs/src/embed/base.js.map +1 -0
- package/cjs/src/embed/base.spec.d.ts +2 -0
- package/cjs/src/embed/base.spec.d.ts.map +1 -0
- package/cjs/src/embed/base.spec.js +198 -0
- package/cjs/src/embed/base.spec.js.map +1 -0
- package/cjs/src/embed/embed.spec.d.ts +2 -0
- package/cjs/src/embed/embed.spec.d.ts.map +1 -0
- package/cjs/src/embed/embed.spec.js +74 -0
- package/cjs/src/embed/embed.spec.js.map +1 -0
- package/cjs/src/embed/events.spec.d.ts +2 -0
- package/cjs/src/embed/events.spec.d.ts.map +1 -0
- package/cjs/src/embed/events.spec.js +238 -0
- package/cjs/src/embed/events.spec.js.map +1 -0
- package/cjs/src/embed/liveboard.d.ts +150 -0
- package/cjs/src/embed/liveboard.d.ts.map +1 -0
- package/cjs/src/embed/liveboard.js +168 -0
- package/cjs/src/embed/liveboard.js.map +1 -0
- package/cjs/src/embed/liveboard.spec.d.ts +2 -0
- package/cjs/src/embed/liveboard.spec.d.ts.map +1 -0
- package/cjs/src/embed/liveboard.spec.js +229 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -0
- package/cjs/src/embed/pinboard.spec.d.ts +2 -0
- package/cjs/src/embed/pinboard.spec.d.ts.map +1 -0
- package/cjs/src/embed/pinboard.spec.js +148 -0
- package/cjs/src/embed/pinboard.spec.js.map +1 -0
- package/cjs/src/embed/search-bar.d.ts +50 -0
- package/cjs/src/embed/search-bar.d.ts.map +1 -0
- package/cjs/src/embed/search-bar.js +63 -0
- package/cjs/src/embed/search-bar.js.map +1 -0
- package/cjs/src/embed/search.d.ts +129 -0
- package/cjs/src/embed/search.d.ts.map +1 -0
- package/cjs/src/embed/search.js +121 -0
- package/cjs/src/embed/search.js.map +1 -0
- package/cjs/src/embed/search.spec.d.ts +2 -0
- package/cjs/src/embed/search.spec.d.ts.map +1 -0
- package/cjs/src/embed/search.spec.js +238 -0
- package/cjs/src/embed/search.spec.js.map +1 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js +103 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/cjs/src/embed/ts-embed.d.ts +323 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -0
- package/cjs/src/embed/ts-embed.js +719 -0
- package/cjs/src/embed/ts-embed.js.map +1 -0
- package/cjs/src/embed/ts-embed.spec.d.ts +2 -0
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -0
- package/cjs/src/embed/ts-embed.spec.js +771 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -0
- package/cjs/src/errors.d.ts +7 -0
- package/cjs/src/errors.d.ts.map +1 -0
- package/cjs/src/errors.js +10 -0
- package/cjs/src/errors.js.map +1 -0
- package/cjs/src/index.d.ts +18 -0
- package/cjs/src/index.d.ts.map +1 -0
- package/cjs/src/index.js +42 -0
- package/cjs/src/index.js.map +1 -0
- package/cjs/src/mixpanel-service.d.ts +29 -0
- package/cjs/src/mixpanel-service.d.ts.map +1 -0
- package/cjs/src/mixpanel-service.js +76 -0
- package/cjs/src/mixpanel-service.js.map +1 -0
- package/cjs/src/mixpanel-service.spec.d.ts +2 -0
- package/cjs/src/mixpanel-service.spec.d.ts.map +1 -0
- package/cjs/src/mixpanel-service.spec.js +63 -0
- package/cjs/src/mixpanel-service.spec.js.map +1 -0
- package/cjs/src/react/all-types-export.d.ts +3 -0
- package/cjs/src/react/all-types-export.d.ts.map +1 -0
- package/cjs/src/react/all-types-export.js +29 -0
- package/cjs/src/react/all-types-export.js.map +1 -0
- package/cjs/src/react/all-types-export.spec.d.ts +2 -0
- package/cjs/src/react/all-types-export.spec.d.ts.map +1 -0
- package/cjs/src/react/all-types-export.spec.js +13 -0
- package/cjs/src/react/all-types-export.spec.js.map +1 -0
- package/cjs/src/react/index.d.ts +95 -0
- package/cjs/src/react/index.d.ts.map +1 -0
- package/cjs/src/react/index.js +121 -0
- package/cjs/src/react/index.js.map +1 -0
- package/cjs/src/react/index.spec.d.ts +3 -0
- package/cjs/src/react/index.spec.d.ts.map +1 -0
- package/cjs/src/react/index.spec.js +138 -0
- package/cjs/src/react/index.spec.js.map +1 -0
- package/cjs/src/react/util.d.ts +19 -0
- package/cjs/src/react/util.d.ts.map +1 -0
- package/cjs/src/react/util.js +25 -0
- package/cjs/src/react/util.js.map +1 -0
- package/cjs/src/test/test-utils.d.ts +48 -0
- package/cjs/src/test/test-utils.d.ts.map +1 -0
- package/cjs/src/test/test-utils.js +108 -0
- package/cjs/src/test/test-utils.js.map +1 -0
- package/cjs/src/types.d.ts +2020 -0
- package/cjs/src/types.d.ts.map +1 -0
- package/cjs/src/types.js +1543 -0
- package/cjs/src/types.js.map +1 -0
- package/cjs/src/utils/answerService.d.ts +10 -0
- package/cjs/src/utils/answerService.d.ts.map +1 -0
- package/cjs/src/utils/answerService.js +61 -0
- package/cjs/src/utils/answerService.js.map +1 -0
- package/cjs/src/utils/answerService.spec.d.ts +2 -0
- package/cjs/src/utils/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/answerService.spec.js +31 -0
- package/cjs/src/utils/answerService.spec.js.map +1 -0
- package/cjs/src/utils/authService.d.ts +37 -0
- package/cjs/src/utils/authService.d.ts.map +1 -0
- package/cjs/src/utils/authService.js +106 -0
- package/cjs/src/utils/authService.js.map +1 -0
- package/cjs/src/utils/authService.spec.d.ts +2 -0
- package/cjs/src/utils/authService.spec.d.ts.map +1 -0
- package/cjs/src/utils/authService.spec.js +72 -0
- package/cjs/src/utils/authService.spec.js.map +1 -0
- package/cjs/src/utils/processData.d.ts +16 -0
- package/cjs/src/utils/processData.d.ts.map +1 -0
- package/cjs/src/utils/processData.js +110 -0
- package/cjs/src/utils/processData.js.map +1 -0
- package/cjs/src/utils/processData.spec.d.ts +2 -0
- package/cjs/src/utils/processData.spec.d.ts.map +1 -0
- package/cjs/src/utils/processData.spec.js +142 -0
- package/cjs/src/utils/processData.spec.js.map +1 -0
- package/cjs/src/utils/processTrigger.d.ts +10 -0
- package/cjs/src/utils/processTrigger.d.ts.map +1 -0
- package/cjs/src/utils/processTrigger.js +63 -0
- package/cjs/src/utils/processTrigger.js.map +1 -0
- package/cjs/src/utils/processTrigger.spec.d.ts +2 -0
- package/cjs/src/utils/processTrigger.spec.d.ts.map +1 -0
- package/cjs/src/utils/processTrigger.spec.js +58 -0
- package/cjs/src/utils/processTrigger.spec.js.map +1 -0
- package/cjs/src/utils.d.ts +68 -0
- package/cjs/src/utils.d.ts.map +1 -0
- package/cjs/src/utils.js +196 -0
- package/cjs/src/utils.js.map +1 -0
- package/cjs/src/utils.spec.d.ts +5 -0
- package/cjs/src/utils.spec.d.ts.map +1 -0
- package/cjs/src/utils.spec.js +98 -0
- package/cjs/src/utils.spec.js.map +1 -0
- package/dist/src/auth.d.ts +54 -5
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/auth.spec.d.ts +3 -0
- package/dist/src/auth.spec.d.ts.map +1 -1
- package/dist/src/config.d.ts +1 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +35 -6
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +23 -10
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +28 -6
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +3 -0
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +9 -1
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +65 -7
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts +8 -0
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +3 -0
- package/dist/src/react/all-types-export.d.ts.map +1 -0
- package/dist/src/react/all-types-export.spec.d.ts +2 -0
- package/dist/src/react/all-types-export.spec.d.ts.map +1 -0
- package/dist/src/react/index.d.ts +72 -0
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/util.d.ts +4 -0
- package/dist/src/react/util.d.ts.map +1 -1
- package/dist/src/test/test-utils.d.ts +11 -2
- package/dist/src/test/test-utils.d.ts.map +1 -1
- package/dist/src/types.d.ts +540 -98
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/answerService.d.ts +7 -0
- package/dist/src/utils/answerService.d.ts.map +1 -1
- package/dist/src/utils/authService.d.ts +30 -0
- package/dist/src/utils/authService.d.ts.map +1 -1
- package/dist/src/utils/processData.d.ts +12 -0
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/src/utils/processTrigger.d.ts +7 -0
- package/dist/src/utils/processTrigger.d.ts.map +1 -1
- package/dist/src/utils.d.ts +12 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +28024 -0
- package/dist/tsembed-react.js +27966 -0
- package/dist/tsembed.es.js +18163 -303
- package/dist/tsembed.js +18120 -308
- package/dist/visual-embed-sdk-react-full.d.ts +3092 -0
- package/dist/visual-embed-sdk-react.d.ts +2781 -0
- package/dist/visual-embed-sdk.d.ts +2944 -0
- package/lib/package.json +15 -14
- package/lib/src/auth.d.ts +54 -5
- package/lib/src/auth.d.ts.map +1 -1
- package/lib/src/auth.js +91 -31
- package/lib/src/auth.js.map +1 -1
- package/lib/src/auth.spec.d.ts +3 -0
- package/lib/src/auth.spec.d.ts.map +1 -1
- package/lib/src/auth.spec.js +37 -6
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/config.d.ts +1 -0
- package/lib/src/config.d.ts.map +1 -1
- package/lib/src/config.js +5 -3
- package/lib/src/config.js.map +1 -1
- package/lib/src/config.spec.js.map +1 -1
- package/lib/src/embed/app.d.ts +35 -6
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +55 -16
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +41 -12
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +23 -10
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +34 -16
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +1 -1
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +28 -6
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +60 -38
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +37 -30
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/pinboard.spec.js +14 -26
- package/lib/src/embed/pinboard.spec.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +3 -0
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +5 -6
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +9 -1
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +18 -14
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +16 -19
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.js +4 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +65 -7
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +154 -77
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +46 -24
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +4 -4
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts +8 -0
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +13 -1
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/mixpanel-service.spec.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +3 -0
- package/lib/src/react/all-types-export.d.ts.map +1 -0
- package/lib/src/react/all-types-export.js +5 -0
- package/lib/src/react/all-types-export.js.map +1 -0
- package/lib/src/react/all-types-export.spec.d.ts +2 -0
- package/lib/src/react/all-types-export.spec.d.ts.map +1 -0
- package/lib/src/react/all-types-export.spec.js +10 -0
- package/lib/src/react/all-types-export.spec.js.map +1 -0
- package/lib/src/react/index.d.ts +72 -0
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +79 -7
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +27 -6
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/react/util.d.ts +4 -0
- package/lib/src/react/util.d.ts.map +1 -1
- package/lib/src/react/util.js +4 -0
- package/lib/src/react/util.js.map +1 -1
- package/lib/src/test/test-utils.d.ts +11 -2
- package/lib/src/test/test-utils.d.ts.map +1 -1
- package/lib/src/test/test-utils.js +36 -25
- package/lib/src/test/test-utils.js.map +1 -1
- package/lib/src/types.d.ts +540 -98
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +415 -70
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/answerService.d.ts +7 -0
- package/lib/src/utils/answerService.d.ts.map +1 -1
- package/lib/src/utils/answerService.js +7 -0
- package/lib/src/utils/answerService.js.map +1 -1
- package/lib/src/utils/answerService.spec.js.map +1 -1
- package/lib/src/utils/authService.d.ts +30 -0
- package/lib/src/utils/authService.d.ts.map +1 -1
- package/lib/src/utils/authService.js +39 -2
- package/lib/src/utils/authService.js.map +1 -1
- package/lib/src/utils/authService.spec.js.map +1 -1
- package/lib/src/utils/processData.d.ts +12 -0
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +33 -5
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils/processTrigger.d.ts +7 -0
- package/lib/src/utils/processTrigger.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.js +17 -3
- package/lib/src/utils/processTrigger.js.map +1 -1
- package/lib/src/utils/processTrigger.spec.js.map +1 -1
- package/lib/src/utils.d.ts +12 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +24 -19
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/package.json +15 -14
- package/src/auth.spec.ts +83 -133
- package/src/auth.ts +148 -115
- package/src/config.spec.ts +2 -4
- package/src/config.ts +5 -3
- package/src/embed/app.spec.ts +57 -14
- package/src/embed/app.ts +91 -36
- package/src/embed/base.spec.ts +3 -9
- package/src/embed/base.ts +55 -55
- package/src/embed/embed.spec.ts +5 -6
- package/src/embed/liveboard.spec.ts +56 -37
- package/src/embed/liveboard.ts +77 -65
- package/src/embed/pinboard.spec.ts +26 -29
- package/src/embed/search-bar.tsx +10 -8
- package/src/embed/search.spec.ts +31 -21
- package/src/embed/search.ts +26 -20
- package/src/embed/searchEmbed-basic-auth.spec.ts +22 -28
- package/src/embed/ts-embed.spec.ts +99 -144
- package/src/embed/ts-embed.ts +188 -162
- package/src/errors.ts +3 -6
- package/src/index.ts +6 -10
- package/src/mixpanel-service.spec.ts +1 -3
- package/src/mixpanel-service.ts +13 -1
- package/src/react/index.spec.tsx +66 -13
- package/src/react/index.tsx +111 -62
- package/src/react/util.ts +8 -4
- package/src/test/test-utils.ts +43 -39
- package/src/types.ts +537 -98
- package/src/utils/answerService.spec.ts +3 -5
- package/src/utils/answerService.ts +21 -17
- package/src/utils/authService.spec.ts +26 -41
- package/src/utils/authService.ts +47 -21
- package/src/utils/processData.spec.ts +26 -59
- package/src/utils/processData.ts +36 -14
- package/src/utils/processTrigger.spec.ts +1 -6
- package/src/utils/processTrigger.ts +18 -9
- package/src/utils.spec.ts +8 -12
- package/src/utils.ts +25 -26
- package/lib/src/visual-embed-sdk.d.ts +0 -2368
|
@@ -15,6 +15,10 @@ import {
|
|
|
15
15
|
getRootEl,
|
|
16
16
|
defaultParams,
|
|
17
17
|
defaultParamsWithoutHiddenActions,
|
|
18
|
+
expectUrlMatchesWithParams,
|
|
19
|
+
postMessageToParent,
|
|
20
|
+
getIFrameEl,
|
|
21
|
+
mockMessageChannel,
|
|
18
22
|
} from '../test/test-utils';
|
|
19
23
|
import { version } from '../../package.json';
|
|
20
24
|
import * as processTriggerInstance from '../utils/processTrigger';
|
|
@@ -51,7 +55,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
51
55
|
} as LiveboardViewConfig);
|
|
52
56
|
liveboardEmbed.render();
|
|
53
57
|
await executeAfterWait(() => {
|
|
54
|
-
|
|
58
|
+
expectUrlMatchesWithParams(
|
|
59
|
+
getIFrameSrc(),
|
|
55
60
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}#/embed/viz/${liveboardId}`,
|
|
56
61
|
);
|
|
57
62
|
});
|
|
@@ -59,18 +64,15 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
59
64
|
|
|
60
65
|
test('should set disabled actions', async () => {
|
|
61
66
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
62
|
-
disabledActions: [
|
|
63
|
-
Action.DownloadAsCsv,
|
|
64
|
-
Action.DownloadAsPdf,
|
|
65
|
-
Action.DownloadAsXlsx,
|
|
66
|
-
],
|
|
67
|
+
disabledActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
67
68
|
disabledActionReason: 'Action denied',
|
|
68
69
|
...defaultViewConfig,
|
|
69
70
|
liveboardId,
|
|
70
71
|
} as LiveboardViewConfig);
|
|
71
72
|
liveboardEmbed.render();
|
|
72
73
|
await executeAfterWait(() => {
|
|
73
|
-
|
|
74
|
+
expectUrlMatchesWithParams(
|
|
75
|
+
getIFrameSrc(),
|
|
74
76
|
`http://${thoughtSpotHost}/?embedApp=true&${defaultParamsWithoutHiddenActions}&disableAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]&disableHint=Action%20denied&hideAction=[%22${Action.ReportError}%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
75
77
|
);
|
|
76
78
|
});
|
|
@@ -78,17 +80,14 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
78
80
|
|
|
79
81
|
test('should set hidden actions', async () => {
|
|
80
82
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
81
|
-
hiddenActions: [
|
|
82
|
-
Action.DownloadAsCsv,
|
|
83
|
-
Action.DownloadAsPdf,
|
|
84
|
-
Action.DownloadAsXlsx,
|
|
85
|
-
],
|
|
83
|
+
hiddenActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
86
84
|
...defaultViewConfig,
|
|
87
85
|
liveboardId,
|
|
88
86
|
} as LiveboardViewConfig);
|
|
89
87
|
liveboardEmbed.render();
|
|
90
88
|
await executeAfterWait(() => {
|
|
91
|
-
|
|
89
|
+
expectUrlMatchesWithParams(
|
|
90
|
+
getIFrameSrc(),
|
|
92
91
|
`http://${thoughtSpotHost}/?embedApp=true&${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22,%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
93
92
|
);
|
|
94
93
|
});
|
|
@@ -96,17 +95,14 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
96
95
|
|
|
97
96
|
test('should set visible actions', async () => {
|
|
98
97
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
99
|
-
visibleActions: [
|
|
100
|
-
Action.DownloadAsCsv,
|
|
101
|
-
Action.DownloadAsPdf,
|
|
102
|
-
Action.DownloadAsXlsx,
|
|
103
|
-
],
|
|
98
|
+
visibleActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
104
99
|
...defaultViewConfig,
|
|
105
100
|
liveboardId,
|
|
106
101
|
} as LiveboardViewConfig);
|
|
107
102
|
liveboardEmbed.render();
|
|
108
103
|
await executeAfterWait(() => {
|
|
109
|
-
|
|
104
|
+
expectUrlMatchesWithParams(
|
|
105
|
+
getIFrameSrc(),
|
|
110
106
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&visibleAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
111
107
|
);
|
|
112
108
|
});
|
|
@@ -120,7 +116,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
120
116
|
} as LiveboardViewConfig);
|
|
121
117
|
liveboardEmbed.render();
|
|
122
118
|
await executeAfterWait(() => {
|
|
123
|
-
|
|
119
|
+
expectUrlMatchesWithParams(
|
|
120
|
+
getIFrameSrc(),
|
|
124
121
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&visibleAction=[]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
125
122
|
);
|
|
126
123
|
});
|
|
@@ -134,7 +131,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
134
131
|
} as LiveboardViewConfig);
|
|
135
132
|
liveboardEmbed.render();
|
|
136
133
|
await executeAfterWait(() => {
|
|
137
|
-
|
|
134
|
+
expectUrlMatchesWithParams(
|
|
135
|
+
getIFrameSrc(),
|
|
138
136
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&enableVizTransform=true${prefixParams}#/embed/viz/${liveboardId}`,
|
|
139
137
|
);
|
|
140
138
|
});
|
|
@@ -148,7 +146,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
148
146
|
} as LiveboardViewConfig);
|
|
149
147
|
liveboardEmbed.render();
|
|
150
148
|
await executeAfterWait(() => {
|
|
151
|
-
|
|
149
|
+
expectUrlMatchesWithParams(
|
|
150
|
+
getIFrameSrc(),
|
|
152
151
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&enableVizTransform=false${prefixParams}#/embed/viz/${liveboardId}`,
|
|
153
152
|
);
|
|
154
153
|
});
|
|
@@ -162,7 +161,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
162
161
|
} as LiveboardViewConfig);
|
|
163
162
|
liveboardEmbed.render();
|
|
164
163
|
await executeAfterWait(() => {
|
|
165
|
-
|
|
164
|
+
expectUrlMatchesWithParams(
|
|
165
|
+
getIFrameSrc(),
|
|
166
166
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParamsVizEmbed}#/embed/viz/${liveboardId}/${vizId}`,
|
|
167
167
|
);
|
|
168
168
|
});
|
|
@@ -183,13 +183,15 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
183
183
|
} as LiveboardViewConfig);
|
|
184
184
|
liveboardEmbed.render();
|
|
185
185
|
await executeAfterWait(() => {
|
|
186
|
-
|
|
186
|
+
expectUrlMatchesWithParams(
|
|
187
|
+
getIFrameSrc(),
|
|
187
188
|
`http://${thoughtSpotHost}/?embedApp=true&col1=sales&op1=EQ&val1=1000${defaultParams}${prefixParamsVizEmbed}#/embed/viz/${liveboardId}/${vizId}`,
|
|
188
189
|
);
|
|
189
190
|
});
|
|
190
191
|
});
|
|
191
192
|
|
|
192
193
|
test('should register event handler to adjust iframe height', async () => {
|
|
194
|
+
const onSpy = jest.spyOn(LiveboardEmbed.prototype, 'on');
|
|
193
195
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
194
196
|
...defaultViewConfig,
|
|
195
197
|
fullHeight: true,
|
|
@@ -197,14 +199,10 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
197
199
|
vizId,
|
|
198
200
|
} as LiveboardViewConfig);
|
|
199
201
|
|
|
200
|
-
const onSpy = jest.spyOn(liveboardEmbed, 'on');
|
|
201
202
|
liveboardEmbed.render();
|
|
202
203
|
|
|
203
204
|
executeAfterWait(() => {
|
|
204
|
-
expect(onSpy).toHaveBeenCalledWith(
|
|
205
|
-
EmbedEvent.EmbedHeight,
|
|
206
|
-
expect.anything(),
|
|
207
|
-
);
|
|
205
|
+
expect(onSpy).toHaveBeenCalledWith(EmbedEvent.EmbedHeight, expect.anything());
|
|
208
206
|
});
|
|
209
207
|
});
|
|
210
208
|
test('Should set the visible vizs', async () => {
|
|
@@ -215,16 +213,14 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
215
213
|
} as LiveboardViewConfig);
|
|
216
214
|
liveboardEmbed.render();
|
|
217
215
|
await executeAfterWait(() => {
|
|
218
|
-
|
|
216
|
+
expectUrlMatchesWithParams(
|
|
217
|
+
getIFrameSrc(),
|
|
219
218
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&pinboardVisibleVizs=[%22abcd%22,%22pqrs%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
220
219
|
);
|
|
221
220
|
});
|
|
222
221
|
});
|
|
223
222
|
test('should process the trigger, for vizEmbed', async () => {
|
|
224
|
-
const mockProcessTrigger = spyOn(
|
|
225
|
-
processTriggerInstance,
|
|
226
|
-
'processTrigger',
|
|
227
|
-
);
|
|
223
|
+
const mockProcessTrigger = spyOn(processTriggerInstance, 'processTrigger');
|
|
228
224
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
229
225
|
enableVizTransformations: true,
|
|
230
226
|
...defaultViewConfig,
|
|
@@ -244,7 +240,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
244
240
|
} as LiveboardViewConfig);
|
|
245
241
|
liveboardEmbed.render();
|
|
246
242
|
await executeAfterWait(() => {
|
|
247
|
-
|
|
243
|
+
expectUrlMatchesWithParams(
|
|
244
|
+
getIFrameSrc(),
|
|
248
245
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardEmbed=true&isPinboardV2Enabled=true#/embed/viz/${liveboardId}/tab/${activeTabId}`,
|
|
249
246
|
);
|
|
250
247
|
});
|
|
@@ -259,7 +256,8 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
259
256
|
} as LiveboardViewConfig);
|
|
260
257
|
liveboardEmbed.render();
|
|
261
258
|
await executeAfterWait(() => {
|
|
262
|
-
|
|
259
|
+
expectUrlMatchesWithParams(
|
|
260
|
+
getIFrameSrc(),
|
|
263
261
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&preventPinboardFilterRemoval=true&isLiveboardEmbed=true&isPinboardV2Enabled=true#/embed/viz/${liveboardId}/tab/${activeTabId}`,
|
|
264
262
|
);
|
|
265
263
|
});
|
|
@@ -273,9 +271,30 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
273
271
|
} as LiveboardViewConfig);
|
|
274
272
|
liveboardEmbed.render();
|
|
275
273
|
await executeAfterWait(() => {
|
|
276
|
-
|
|
274
|
+
expectUrlMatchesWithParams(
|
|
275
|
+
getIFrameSrc(),
|
|
277
276
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isContextMenuEnabledOnLeftClick=true&isLiveboardEmbed=true&isPinboardV2Enabled=true#/embed/viz/${liveboardId}/tab/${activeTabId}`,
|
|
278
277
|
);
|
|
279
278
|
});
|
|
280
279
|
});
|
|
280
|
+
|
|
281
|
+
test('navigateToLiveboard should trigger the navigate event with the correct path', (done) => {
|
|
282
|
+
mockMessageChannel();
|
|
283
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
284
|
+
...defaultViewConfig,
|
|
285
|
+
} as LiveboardViewConfig);
|
|
286
|
+
const onSpy = jest.spyOn(liveboardEmbed, 'trigger');
|
|
287
|
+
liveboardEmbed.prerenderGeneric();
|
|
288
|
+
executeAfterWait(() => {
|
|
289
|
+
const iframe = getIFrameEl();
|
|
290
|
+
postMessageToParent(iframe.contentWindow, {
|
|
291
|
+
type: EmbedEvent.APP_INIT,
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
executeAfterWait(() => {
|
|
295
|
+
liveboardEmbed.navigateToLiveboard('lb1', 'viz1');
|
|
296
|
+
expect(onSpy).toHaveBeenCalledWith(HostEvent.Navigate, 'embed/viz/lb1/viz1');
|
|
297
|
+
done();
|
|
298
|
+
});
|
|
299
|
+
});
|
|
281
300
|
});
|
package/src/embed/liveboard.ts
CHANGED
|
@@ -19,17 +19,20 @@ import {
|
|
|
19
19
|
HostEvent,
|
|
20
20
|
ViewConfig,
|
|
21
21
|
} from '../types';
|
|
22
|
-
import {
|
|
22
|
+
import { getQueryParamString } from '../utils';
|
|
23
|
+
import { getAuthPromise } from './base';
|
|
23
24
|
import { V1Embed } from './ts-embed';
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* The configuration for the embedded Liveboard or visualization page view.
|
|
28
|
+
*
|
|
27
29
|
* @group Embed components
|
|
28
30
|
*/
|
|
29
31
|
export interface LiveboardViewConfig extends ViewConfig {
|
|
30
32
|
/**
|
|
31
33
|
* If set to true, the embedded object container dynamically resizes
|
|
32
34
|
* according to the height of the Liveboard.
|
|
35
|
+
*
|
|
33
36
|
* @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1
|
|
34
37
|
*/
|
|
35
38
|
fullHeight?: boolean;
|
|
@@ -37,6 +40,7 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
37
40
|
* This is the minimum height(in pixels) for a full height Liveboard.
|
|
38
41
|
* Setting this height helps resolves issues with empty Liveboards and
|
|
39
42
|
* other screens navigable from a Liveboard.
|
|
43
|
+
*
|
|
40
44
|
* @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1
|
|
41
45
|
* @default 500
|
|
42
46
|
*/
|
|
@@ -48,11 +52,13 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
48
52
|
/**
|
|
49
53
|
* The Liveboard to display in the embedded view.
|
|
50
54
|
* Use either of liveboardId or pinboardId to reference the Liveboard to embed.
|
|
55
|
+
*
|
|
51
56
|
* @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1
|
|
52
57
|
*/
|
|
53
58
|
liveboardId?: string;
|
|
54
59
|
/**
|
|
55
60
|
* To support backward compatibility
|
|
61
|
+
*
|
|
56
62
|
* @hidden
|
|
57
63
|
*/
|
|
58
64
|
pinboardId?: string;
|
|
@@ -63,6 +69,7 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
63
69
|
/**
|
|
64
70
|
* If set to true, all filter chips from a
|
|
65
71
|
* Liveboard page will be read-only (no X buttons)
|
|
72
|
+
*
|
|
66
73
|
* @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1
|
|
67
74
|
*/
|
|
68
75
|
preventLiveboardFilterRemoval?: boolean;
|
|
@@ -70,28 +77,43 @@ export interface LiveboardViewConfig extends ViewConfig {
|
|
|
70
77
|
* Array of viz ids which should be visible when the liveboard
|
|
71
78
|
* first renders. This can be changed by triggering the "SetVisibleVizs"
|
|
72
79
|
* event.
|
|
80
|
+
*
|
|
73
81
|
* @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw
|
|
74
82
|
*/
|
|
75
83
|
visibleVizs?: string[];
|
|
76
84
|
/**
|
|
77
85
|
* To support backward compatibilty
|
|
86
|
+
*
|
|
78
87
|
* @hidden
|
|
79
88
|
*/
|
|
80
89
|
preventPinboardFilterRemoval?: boolean;
|
|
81
90
|
/**
|
|
82
91
|
* Render embedded Liveboards and visualizations in the new Liveboard experience mode
|
|
92
|
+
*
|
|
83
93
|
* @version SDK: 1.14.0 | ThoughtSpot: 8.6.0.cl, 8.8.1-sw
|
|
84
94
|
*/
|
|
85
95
|
liveboardV2?: boolean;
|
|
86
96
|
/**
|
|
87
97
|
* Tab Id of the Liveboard that is supposed to be active
|
|
98
|
+
*
|
|
88
99
|
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1-sw
|
|
89
100
|
*/
|
|
90
101
|
activeTabId?: string;
|
|
91
102
|
}
|
|
92
103
|
|
|
93
104
|
/**
|
|
94
|
-
* Embed a ThoughtSpot Liveboard or visualization
|
|
105
|
+
* Embed a ThoughtSpot Liveboard or a Thoughtspot visualization. When rendered it already
|
|
106
|
+
* waits for the authentication to complete, so no need to wait for AuthStatus.SUCCESS.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```js
|
|
110
|
+
* import { .. } from '@thoughtspot/visual-embed-sdk';
|
|
111
|
+
* init({ ... });
|
|
112
|
+
* const embed = new LiveboardEmbed("#container", {
|
|
113
|
+
* liveboardId: <your-id-here>,
|
|
114
|
+
* // .. other params here.
|
|
115
|
+
* })
|
|
116
|
+
* ```
|
|
95
117
|
* @group Embed components
|
|
96
118
|
*/
|
|
97
119
|
export class LiveboardEmbed extends V1Embed {
|
|
@@ -102,14 +124,21 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
102
124
|
// eslint-disable-next-line no-useless-constructor
|
|
103
125
|
constructor(domSelector: DOMSelector, viewConfig: LiveboardViewConfig) {
|
|
104
126
|
super(domSelector, viewConfig);
|
|
127
|
+
if (this.viewConfig.fullHeight === true) {
|
|
128
|
+
this.on(EmbedEvent.RouteChange, this.setIframeHeightForNonEmbedLiveboard);
|
|
129
|
+
this.on(EmbedEvent.EmbedHeight, this.updateIFrameHeight);
|
|
130
|
+
this.on(EmbedEvent.EmbedIframeCenter, this.embedIframeCenter);
|
|
131
|
+
}
|
|
105
132
|
}
|
|
106
133
|
|
|
107
134
|
/**
|
|
108
135
|
* Construct a map of params to be passed on to the
|
|
109
136
|
* embedded Liveboard or visualization.
|
|
110
137
|
*/
|
|
111
|
-
|
|
112
|
-
|
|
138
|
+
protected getEmbedParams() {
|
|
139
|
+
let params = {};
|
|
140
|
+
params[Param.EmbedApp] = true;
|
|
141
|
+
params = this.getBaseQueryParams(params);
|
|
113
142
|
const {
|
|
114
143
|
enableVizTransformations,
|
|
115
144
|
fullHeight,
|
|
@@ -120,9 +149,8 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
120
149
|
activeTabId,
|
|
121
150
|
} = this.viewConfig;
|
|
122
151
|
|
|
123
|
-
const preventLiveboardFilterRemoval =
|
|
124
|
-
this.viewConfig.
|
|
125
|
-
this.viewConfig.preventPinboardFilterRemoval;
|
|
152
|
+
const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
|
|
153
|
+
|| this.viewConfig.preventPinboardFilterRemoval;
|
|
126
154
|
|
|
127
155
|
if (fullHeight === true) {
|
|
128
156
|
params[Param.fullHeight] = true;
|
|
@@ -131,9 +159,7 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
131
159
|
this.defaultHeight = defaultHeight;
|
|
132
160
|
}
|
|
133
161
|
if (enableVizTransformations !== undefined) {
|
|
134
|
-
params[
|
|
135
|
-
Param.EnableVizTransformations
|
|
136
|
-
] = enableVizTransformations.toString();
|
|
162
|
+
params[Param.EnableVizTransformations] = enableVizTransformations.toString();
|
|
137
163
|
}
|
|
138
164
|
if (preventLiveboardFilterRemoval) {
|
|
139
165
|
params[Param.preventLiveboardFilterRemoval] = true;
|
|
@@ -153,47 +179,41 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
153
179
|
return queryParams;
|
|
154
180
|
}
|
|
155
181
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
* to be loaded within the iframe.
|
|
159
|
-
* @param liveboardId The GUID of the Liveboard.
|
|
160
|
-
* @param vizId The optional GUID of a visualization within the Liveboard.
|
|
161
|
-
* @param runtimeFilters A list of runtime filters to be applied to
|
|
162
|
-
* the Liveboard or visualization on load.
|
|
163
|
-
*/
|
|
164
|
-
private getIFrameSrc(
|
|
165
|
-
liveboardId: string,
|
|
166
|
-
vizId?: string,
|
|
167
|
-
runtimeFilters?: RuntimeFilter[],
|
|
168
|
-
activeTabId?: string,
|
|
169
|
-
) {
|
|
170
|
-
const filterQuery = getFilterQuery(runtimeFilters || []);
|
|
171
|
-
const queryParams = this.getEmbedParams();
|
|
172
|
-
const queryString = [filterQuery, queryParams]
|
|
173
|
-
.filter(Boolean)
|
|
174
|
-
.join('&');
|
|
175
|
-
let url = `${this.getV1EmbedBasePath(
|
|
176
|
-
queryString,
|
|
177
|
-
true,
|
|
178
|
-
false,
|
|
179
|
-
false,
|
|
180
|
-
)}/viz/${liveboardId}`;
|
|
182
|
+
private getIframeSuffixSrc(liveboardId: string, vizId: string, activeTabId: string) {
|
|
183
|
+
let suffix = `/embed/viz/${liveboardId}`;
|
|
181
184
|
if (activeTabId) {
|
|
182
|
-
|
|
185
|
+
suffix = `${suffix}/tab/${activeTabId} `;
|
|
183
186
|
}
|
|
184
187
|
if (vizId) {
|
|
185
|
-
|
|
188
|
+
suffix = `${suffix}/${vizId}`;
|
|
186
189
|
}
|
|
187
|
-
|
|
188
190
|
const tsPostHashParams = this.getThoughtSpotPostUrlParams();
|
|
189
|
-
|
|
191
|
+
suffix = `${suffix}${tsPostHashParams}`;
|
|
192
|
+
return suffix;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Construct the URL of the embedded ThoughtSpot Liveboard or visualization
|
|
197
|
+
* to be loaded within the iframe.
|
|
198
|
+
*/
|
|
199
|
+
private getIFrameSrc() {
|
|
200
|
+
const { vizId, activeTabId } = this.viewConfig;
|
|
201
|
+
const liveboardId = this.viewConfig.liveboardId ?? this.viewConfig.pinboardId;
|
|
190
202
|
|
|
191
|
-
|
|
203
|
+
if (!liveboardId) {
|
|
204
|
+
this.handleError(ERROR_MESSAGE.LIVEBOARD_VIZ_ID_VALIDATION);
|
|
205
|
+
}
|
|
206
|
+
return `${this.getRootIframeSrc()}${this.getIframeSuffixSrc(
|
|
207
|
+
liveboardId,
|
|
208
|
+
vizId,
|
|
209
|
+
activeTabId,
|
|
210
|
+
)}`;
|
|
192
211
|
}
|
|
193
212
|
|
|
194
213
|
/**
|
|
195
214
|
* Set the iframe height as per the computed height received
|
|
196
215
|
* from the ThoughtSpot app.
|
|
216
|
+
*
|
|
197
217
|
* @param data The event payload
|
|
198
218
|
*/
|
|
199
219
|
private updateIFrameHeight = (data: MessagePayload) => {
|
|
@@ -213,12 +233,13 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
213
233
|
|
|
214
234
|
/**
|
|
215
235
|
* Triggers an event to the embedded app
|
|
236
|
+
*
|
|
216
237
|
* @param messageType The event type
|
|
217
238
|
* @param data The payload to send with the message
|
|
218
239
|
*/
|
|
219
240
|
public trigger(messageType: HostEvent, data: any = {}): Promise<any> {
|
|
220
241
|
const dataWithVizId = data;
|
|
221
|
-
if (this.viewConfig.vizId) {
|
|
242
|
+
if (typeof dataWithVizId === 'object' && this.viewConfig.vizId) {
|
|
222
243
|
dataWithVizId.vizId = this.viewConfig.vizId;
|
|
223
244
|
}
|
|
224
245
|
return super.trigger(messageType, dataWithVizId);
|
|
@@ -226,42 +247,33 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
226
247
|
|
|
227
248
|
/**
|
|
228
249
|
* Render an embedded ThoughtSpot Liveboard or visualization
|
|
250
|
+
*
|
|
229
251
|
* @param renderOptions An object specifying the Liveboard ID,
|
|
230
252
|
* visualization ID and the runtime filters.
|
|
231
253
|
*/
|
|
232
254
|
public render(): LiveboardEmbed {
|
|
233
|
-
const { vizId, activeTabId, runtimeFilters } = this.viewConfig;
|
|
234
|
-
const liveboardId =
|
|
235
|
-
this.viewConfig.liveboardId ?? this.viewConfig.pinboardId;
|
|
236
|
-
|
|
237
|
-
if (!liveboardId) {
|
|
238
|
-
this.handleError(ERROR_MESSAGE.LIVEBOARD_VIZ_ID_VALIDATION);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
if (this.viewConfig.fullHeight === true) {
|
|
242
|
-
this.on(
|
|
243
|
-
EmbedEvent.RouteChange,
|
|
244
|
-
this.setIframeHeightForNonEmbedLiveboard,
|
|
245
|
-
);
|
|
246
|
-
this.on(EmbedEvent.EmbedHeight, this.updateIFrameHeight);
|
|
247
|
-
this.on(EmbedEvent.EmbedIframeCenter, this.embedIframeCenter);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
255
|
super.render();
|
|
251
256
|
|
|
252
|
-
const src = this.getIFrameSrc(
|
|
253
|
-
liveboardId,
|
|
254
|
-
vizId,
|
|
255
|
-
runtimeFilters,
|
|
256
|
-
activeTabId,
|
|
257
|
-
);
|
|
257
|
+
const src = this.getIFrameSrc();
|
|
258
258
|
this.renderV1Embed(src);
|
|
259
259
|
|
|
260
260
|
return this;
|
|
261
261
|
}
|
|
262
|
+
|
|
263
|
+
public navigateToLiveboard(liveboardId: string, vizId?: string, activeTabId?: string) {
|
|
264
|
+
const path = this.getIframeSuffixSrc(liveboardId, vizId, activeTabId);
|
|
265
|
+
this.viewConfig.liveboardId = liveboardId;
|
|
266
|
+
this.viewConfig.activeTabId = activeTabId;
|
|
267
|
+
this.viewConfig.vizId = vizId;
|
|
268
|
+
if (this.isAppInitialized) {
|
|
269
|
+
this.trigger(HostEvent.Navigate, path.substring(1));
|
|
270
|
+
} else {
|
|
271
|
+
this.render();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
262
274
|
}
|
|
263
275
|
|
|
264
276
|
/**
|
|
265
277
|
* @hidden
|
|
266
278
|
*/
|
|
267
|
-
export class PinboardEmbed extends LiveboardEmbed {}
|
|
279
|
+
export class PinboardEmbed extends LiveboardEmbed { }
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { PinboardEmbed, LiveboardViewConfig } from './liveboard';
|
|
2
2
|
import { init } from '../index';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Action, AuthType, EmbedEvent, RuntimeFilterOp,
|
|
5
|
+
} from '../types';
|
|
4
6
|
import {
|
|
5
7
|
executeAfterWait,
|
|
6
8
|
getDocumentBody,
|
|
@@ -8,6 +10,7 @@ import {
|
|
|
8
10
|
getRootEl,
|
|
9
11
|
defaultParams,
|
|
10
12
|
defaultParamsWithoutHiddenActions,
|
|
13
|
+
expectUrlMatchesWithParams,
|
|
11
14
|
} from '../test/test-utils';
|
|
12
15
|
import { version } from '../../package.json';
|
|
13
16
|
|
|
@@ -41,7 +44,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
41
44
|
} as LiveboardViewConfig);
|
|
42
45
|
pinboardEmbed.render();
|
|
43
46
|
await executeAfterWait(() => {
|
|
44
|
-
|
|
47
|
+
expectUrlMatchesWithParams(
|
|
48
|
+
getIFrameSrc(),
|
|
45
49
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParams}#/embed/viz/${pinboardId}`,
|
|
46
50
|
);
|
|
47
51
|
});
|
|
@@ -49,18 +53,15 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
49
53
|
|
|
50
54
|
test('should set disabled actions', async () => {
|
|
51
55
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
52
|
-
disabledActions: [
|
|
53
|
-
Action.DownloadAsCsv,
|
|
54
|
-
Action.DownloadAsPdf,
|
|
55
|
-
Action.DownloadAsXlsx,
|
|
56
|
-
],
|
|
56
|
+
disabledActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
57
57
|
disabledActionReason: 'Action denied',
|
|
58
58
|
...defaultViewConfig,
|
|
59
59
|
pinboardId,
|
|
60
60
|
} as LiveboardViewConfig);
|
|
61
61
|
pinboardEmbed.render();
|
|
62
62
|
await executeAfterWait(() => {
|
|
63
|
-
|
|
63
|
+
expectUrlMatchesWithParams(
|
|
64
|
+
getIFrameSrc(),
|
|
64
65
|
`http://${thoughtSpotHost}/?embedApp=true&${defaultParamsWithoutHiddenActions}&disableAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]&disableHint=Action%20denied&hideAction=[%22${Action.ReportError}%22]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
65
66
|
);
|
|
66
67
|
});
|
|
@@ -68,17 +69,14 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
68
69
|
|
|
69
70
|
test('should set hidden actions', async () => {
|
|
70
71
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
71
|
-
hiddenActions: [
|
|
72
|
-
Action.DownloadAsCsv,
|
|
73
|
-
Action.DownloadAsPdf,
|
|
74
|
-
Action.DownloadAsXlsx,
|
|
75
|
-
],
|
|
72
|
+
hiddenActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
76
73
|
...defaultViewConfig,
|
|
77
74
|
pinboardId,
|
|
78
75
|
} as LiveboardViewConfig);
|
|
79
76
|
pinboardEmbed.render();
|
|
80
77
|
await executeAfterWait(() => {
|
|
81
|
-
|
|
78
|
+
expectUrlMatchesWithParams(
|
|
79
|
+
getIFrameSrc(),
|
|
82
80
|
`http://${thoughtSpotHost}/?embedApp=true&${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22,%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
83
81
|
);
|
|
84
82
|
});
|
|
@@ -86,17 +84,14 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
86
84
|
|
|
87
85
|
test('should set visible actions', async () => {
|
|
88
86
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
89
|
-
visibleActions: [
|
|
90
|
-
Action.DownloadAsCsv,
|
|
91
|
-
Action.DownloadAsPdf,
|
|
92
|
-
Action.DownloadAsXlsx,
|
|
93
|
-
],
|
|
87
|
+
visibleActions: [Action.DownloadAsCsv, Action.DownloadAsPdf, Action.DownloadAsXlsx],
|
|
94
88
|
...defaultViewConfig,
|
|
95
89
|
pinboardId,
|
|
96
90
|
} as LiveboardViewConfig);
|
|
97
91
|
pinboardEmbed.render();
|
|
98
92
|
await executeAfterWait(() => {
|
|
99
|
-
|
|
93
|
+
expectUrlMatchesWithParams(
|
|
94
|
+
getIFrameSrc(),
|
|
100
95
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&visibleAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
101
96
|
);
|
|
102
97
|
});
|
|
@@ -110,7 +105,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
110
105
|
} as LiveboardViewConfig);
|
|
111
106
|
pinboardEmbed.render();
|
|
112
107
|
await executeAfterWait(() => {
|
|
113
|
-
|
|
108
|
+
expectUrlMatchesWithParams(
|
|
109
|
+
getIFrameSrc(),
|
|
114
110
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&visibleAction=[]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
115
111
|
);
|
|
116
112
|
});
|
|
@@ -124,7 +120,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
124
120
|
} as LiveboardViewConfig);
|
|
125
121
|
pinboardEmbed.render();
|
|
126
122
|
await executeAfterWait(() => {
|
|
127
|
-
|
|
123
|
+
expectUrlMatchesWithParams(
|
|
124
|
+
getIFrameSrc(),
|
|
128
125
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&enableVizTransform=true${prefixParams}#/embed/viz/${pinboardId}`,
|
|
129
126
|
);
|
|
130
127
|
});
|
|
@@ -138,7 +135,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
138
135
|
} as LiveboardViewConfig);
|
|
139
136
|
pinboardEmbed.render();
|
|
140
137
|
await executeAfterWait(() => {
|
|
141
|
-
|
|
138
|
+
expectUrlMatchesWithParams(
|
|
139
|
+
getIFrameSrc(),
|
|
142
140
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&enableVizTransform=false${prefixParams}#/embed/viz/${pinboardId}`,
|
|
143
141
|
);
|
|
144
142
|
});
|
|
@@ -152,7 +150,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
152
150
|
} as LiveboardViewConfig);
|
|
153
151
|
pinboardEmbed.render();
|
|
154
152
|
await executeAfterWait(() => {
|
|
155
|
-
|
|
153
|
+
expectUrlMatchesWithParams(
|
|
154
|
+
getIFrameSrc(),
|
|
156
155
|
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}${prefixParamsVizEmbed}#/embed/viz/${pinboardId}/${vizId}`,
|
|
157
156
|
);
|
|
158
157
|
});
|
|
@@ -173,7 +172,8 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
173
172
|
} as LiveboardViewConfig);
|
|
174
173
|
pinboardEmbed.render();
|
|
175
174
|
await executeAfterWait(() => {
|
|
176
|
-
|
|
175
|
+
expectUrlMatchesWithParams(
|
|
176
|
+
getIFrameSrc(),
|
|
177
177
|
`http://${thoughtSpotHost}/?embedApp=true&col1=sales&op1=EQ&val1=1000${defaultParams}${prefixParamsVizEmbed}#/embed/viz/${pinboardId}/${vizId}`,
|
|
178
178
|
);
|
|
179
179
|
});
|
|
@@ -191,10 +191,7 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
191
191
|
pinboardEmbed.render();
|
|
192
192
|
|
|
193
193
|
executeAfterWait(() => {
|
|
194
|
-
expect(onSpy).toHaveBeenCalledWith(
|
|
195
|
-
EmbedEvent.EmbedHeight,
|
|
196
|
-
expect.anything(),
|
|
197
|
-
);
|
|
194
|
+
expect(onSpy).toHaveBeenCalledWith(EmbedEvent.EmbedHeight, expect.anything());
|
|
198
195
|
});
|
|
199
196
|
});
|
|
200
197
|
});
|