@thoughtspot/visual-embed-sdk 1.20.2 → 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 +20 -9
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +17 -5
- 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 +499 -96
- 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 +18114 -305
- package/dist/tsembed.js +18088 -327
- 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 +20 -9
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +31 -15
- 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 +17 -5
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +49 -37
- 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 +499 -96
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +374 -68
- 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 +51 -53
- package/src/embed/embed.spec.ts +5 -6
- package/src/embed/liveboard.spec.ts +56 -37
- package/src/embed/liveboard.ts +66 -64
- 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 +498 -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 -2419
package/src/index.ts
CHANGED
|
@@ -8,20 +8,14 @@
|
|
|
8
8
|
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
|
|
9
9
|
*/
|
|
10
10
|
import { AppEmbed, Page, AppViewConfig } from './embed/app';
|
|
11
|
-
import { init, prefetch, logout, getEmbedConfig } from './embed/base';
|
|
12
11
|
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from './embed/liveboard';
|
|
12
|
+
init, prefetch, logout, getEmbedConfig,
|
|
13
|
+
} from './embed/base';
|
|
14
|
+
import { PinboardEmbed, LiveboardViewConfig, LiveboardEmbed } from './embed/liveboard';
|
|
17
15
|
import { SearchEmbed, SearchViewConfig } from './embed/search';
|
|
18
16
|
import { SearchBarEmbed, SearchBarViewConfig } from './embed/search-bar';
|
|
19
17
|
import {
|
|
20
|
-
AuthFailureType,
|
|
21
|
-
AuthStatus,
|
|
22
|
-
AuthEvent,
|
|
23
|
-
AuthEventEmitter,
|
|
24
|
-
getSessionInfo,
|
|
18
|
+
AuthFailureType, AuthStatus, AuthEvent, AuthEventEmitter, getSessionInfo,
|
|
25
19
|
} from './auth';
|
|
26
20
|
import {
|
|
27
21
|
AuthType,
|
|
@@ -41,6 +35,7 @@ import {
|
|
|
41
35
|
CustomisationsInterface,
|
|
42
36
|
CustomStyles,
|
|
43
37
|
customCssInterface,
|
|
38
|
+
ContextMenuTriggerOptions,
|
|
44
39
|
} from './types';
|
|
45
40
|
|
|
46
41
|
export {
|
|
@@ -67,6 +62,7 @@ export {
|
|
|
67
62
|
HostEvent,
|
|
68
63
|
DataSourceVisualMode,
|
|
69
64
|
Action,
|
|
65
|
+
ContextMenuTriggerOptions,
|
|
70
66
|
EmbedConfig,
|
|
71
67
|
SearchViewConfig,
|
|
72
68
|
SearchBarViewConfig,
|
|
@@ -49,9 +49,7 @@ describe('Unit test for mixpanel', () => {
|
|
|
49
49
|
initMixpanel(sessionInfo);
|
|
50
50
|
|
|
51
51
|
expect(mixpanel.init).toHaveBeenCalledWith(sessionInfo.mixpanelToken);
|
|
52
|
-
expect(mixpanel.identify).not.toHaveBeenCalledWith(
|
|
53
|
-
sessionInfo.userGUID,
|
|
54
|
-
);
|
|
52
|
+
expect(mixpanel.identify).not.toHaveBeenCalledWith(sessionInfo.userGUID);
|
|
55
53
|
});
|
|
56
54
|
|
|
57
55
|
test('when not init, should queue events and flush on init', () => {
|
package/src/mixpanel-service.ts
CHANGED
|
@@ -19,6 +19,7 @@ let eventQueue: { eventId: string; eventProps: any }[] = [];
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Pushes the event with its Property key-value map to mixpanel.
|
|
22
|
+
*
|
|
22
23
|
* @param eventId
|
|
23
24
|
* @param eventProps
|
|
24
25
|
*/
|
|
@@ -30,6 +31,9 @@ export function uploadMixpanelEvent(eventId: string, eventProps = {}): void {
|
|
|
30
31
|
mixpanel.track(eventId, eventProps);
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
33
37
|
function emptyQueue() {
|
|
34
38
|
if (!isMixpanelInitialized) {
|
|
35
39
|
return;
|
|
@@ -40,11 +44,16 @@ function emptyQueue() {
|
|
|
40
44
|
eventQueue = [];
|
|
41
45
|
}
|
|
42
46
|
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @param sessionInfo
|
|
50
|
+
*/
|
|
43
51
|
export function initMixpanel(sessionInfo: any): void {
|
|
44
52
|
if (!sessionInfo || !sessionInfo.mixpanelToken) {
|
|
45
53
|
return;
|
|
46
54
|
}
|
|
47
|
-
// On a public cluster the user is anonymous, so don't set the identify to
|
|
55
|
+
// On a public cluster the user is anonymous, so don't set the identify to
|
|
56
|
+
// userGUID
|
|
48
57
|
const isPublicCluster = !!sessionInfo.isPublicUser;
|
|
49
58
|
const token = sessionInfo.mixpanelToken;
|
|
50
59
|
if (token) {
|
|
@@ -57,6 +66,9 @@ export function initMixpanel(sessionInfo: any): void {
|
|
|
57
66
|
}
|
|
58
67
|
}
|
|
59
68
|
|
|
69
|
+
/**
|
|
70
|
+
*
|
|
71
|
+
*/
|
|
60
72
|
export function testResetMixpanel() {
|
|
61
73
|
isMixpanelInitialized = false;
|
|
62
74
|
eventQueue = [];
|
package/src/react/index.spec.tsx
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import '@testing-library/jest-dom';
|
|
3
3
|
import '@testing-library/jest-dom/extend-expect';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
cleanup, fireEvent, render, waitFor,
|
|
6
|
+
} from '@testing-library/react';
|
|
7
|
+
import {
|
|
8
|
+
Action, EmbedEvent, HostEvent, RuntimeFilterOp,
|
|
9
|
+
} from '../types';
|
|
6
10
|
import {
|
|
7
11
|
executeAfterWait,
|
|
8
12
|
getIFrameEl,
|
|
@@ -11,11 +15,7 @@ import {
|
|
|
11
15
|
mockMessageChannel,
|
|
12
16
|
} from '../test/test-utils';
|
|
13
17
|
import {
|
|
14
|
-
SearchEmbed,
|
|
15
|
-
AppEmbed,
|
|
16
|
-
LiveboardEmbed,
|
|
17
|
-
useEmbedRef,
|
|
18
|
-
SearchBarEmbed,
|
|
18
|
+
SearchEmbed, AppEmbed, LiveboardEmbed, useEmbedRef, SearchBarEmbed,
|
|
19
19
|
} from './index';
|
|
20
20
|
import { AuthType, init } from '../index';
|
|
21
21
|
|
|
@@ -86,10 +86,7 @@ describe('React Components', () => {
|
|
|
86
86
|
const TestComponent = () => {
|
|
87
87
|
const embedRef = useEmbedRef();
|
|
88
88
|
const onLiveboardRendered = () => {
|
|
89
|
-
embedRef.current.trigger(HostEvent.SetVisibleVizs, [
|
|
90
|
-
'viz1',
|
|
91
|
-
'viz2',
|
|
92
|
-
]);
|
|
89
|
+
embedRef.current.trigger(HostEvent.SetVisibleVizs, ['viz1', 'viz2']);
|
|
93
90
|
};
|
|
94
91
|
|
|
95
92
|
return (
|
|
@@ -139,9 +136,65 @@ describe('React Components', () => {
|
|
|
139
136
|
);
|
|
140
137
|
|
|
141
138
|
await waitFor(() => getIFrameEl(container));
|
|
142
|
-
expect(getIFrameSrc(container)).toContain(
|
|
143
|
-
|
|
139
|
+
expect(getIFrameSrc(container)).toContain('col1=revenue&op1=EQ&val1=100');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('Should have the correct container element', async () => {
|
|
143
|
+
const { container } = render(
|
|
144
|
+
<LiveboardEmbed liveboardId="abcd" className="def" />,
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
await waitFor(() => getIFrameEl(container));
|
|
148
|
+
expect(container.querySelector('div')).not.toBe(null);
|
|
149
|
+
expect(
|
|
150
|
+
container.querySelector('div').classList.contains('def'),
|
|
151
|
+
).toBe(true);
|
|
152
|
+
|
|
153
|
+
const { container: containerSibling } = render(
|
|
154
|
+
<LiveboardEmbed
|
|
155
|
+
liveboardId="abcd"
|
|
156
|
+
className="def"
|
|
157
|
+
insertAsSibling={true}
|
|
158
|
+
/>,
|
|
144
159
|
);
|
|
160
|
+
await waitFor(() => getIFrameEl(containerSibling));
|
|
161
|
+
expect(containerSibling.querySelector('span')).not.toBe(null);
|
|
162
|
+
expect(containerSibling.querySelector('span').style.position).toBe(
|
|
163
|
+
'absolute',
|
|
164
|
+
);
|
|
165
|
+
expect(
|
|
166
|
+
getIFrameEl(containerSibling).classList.contains('def'),
|
|
167
|
+
).toBe(true);
|
|
168
|
+
expect(containerSibling.querySelector('div')).toBe(null);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('Should have the correct container element', async () => {
|
|
172
|
+
const { container } = render(
|
|
173
|
+
<LiveboardEmbed liveboardId="abcd" className="def" />,
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
await waitFor(() => getIFrameEl(container));
|
|
177
|
+
expect(container.querySelector('div')).not.toBe(null);
|
|
178
|
+
expect(
|
|
179
|
+
container.querySelector('div').classList.contains('def'),
|
|
180
|
+
).toBe(true);
|
|
181
|
+
|
|
182
|
+
const { container: containerSibling } = render(
|
|
183
|
+
<LiveboardEmbed
|
|
184
|
+
liveboardId="abcd"
|
|
185
|
+
className="def"
|
|
186
|
+
insertAsSibling={true}
|
|
187
|
+
/>,
|
|
188
|
+
);
|
|
189
|
+
await waitFor(() => getIFrameEl(containerSibling));
|
|
190
|
+
expect(containerSibling.querySelector('span')).not.toBe(null);
|
|
191
|
+
expect(containerSibling.querySelector('span').style.position).toBe(
|
|
192
|
+
'absolute',
|
|
193
|
+
);
|
|
194
|
+
expect(
|
|
195
|
+
getIFrameEl(containerSibling).classList.contains('def'),
|
|
196
|
+
).toBe(true);
|
|
197
|
+
expect(containerSibling.querySelector('div')).toBe(null);
|
|
145
198
|
});
|
|
146
199
|
|
|
147
200
|
it('Should have the correct container element', async () => {
|
package/src/react/index.tsx
CHANGED
|
@@ -1,38 +1,27 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import useDeepCompareEffect from 'use-deep-compare-effect';
|
|
3
3
|
import { deepMerge } from '../utils';
|
|
4
|
-
import {
|
|
5
|
-
SearchBarEmbed as _SearchBarEmbed,
|
|
6
|
-
SearchBarViewConfig,
|
|
7
|
-
} from '../embed/search-bar';
|
|
4
|
+
import { SearchBarEmbed as _SearchBarEmbed, SearchBarViewConfig } from '../embed/search-bar';
|
|
8
5
|
import { SearchEmbed as _SearchEmbed, SearchViewConfig } from '../embed/search';
|
|
9
6
|
import { AppEmbed as _AppEmbed, AppViewConfig } from '../embed/app';
|
|
10
|
-
import {
|
|
11
|
-
LiveboardEmbed as _LiveboardEmbed,
|
|
12
|
-
LiveboardViewConfig,
|
|
13
|
-
} from '../embed/liveboard';
|
|
7
|
+
import { LiveboardEmbed as _LiveboardEmbed, LiveboardViewConfig } from '../embed/liveboard';
|
|
14
8
|
import { TsEmbed } from '../embed/ts-embed';
|
|
15
9
|
|
|
16
10
|
import { EmbedEvent, ViewConfig } from '../types';
|
|
17
11
|
import { EmbedProps, getViewPropsAndListeners } from './util';
|
|
18
12
|
|
|
19
|
-
const componentFactory = <
|
|
20
|
-
T extends typeof TsEmbed,
|
|
21
|
-
U extends EmbedProps,
|
|
22
|
-
V extends ViewConfig
|
|
23
|
-
>(
|
|
13
|
+
const componentFactory = <T extends typeof TsEmbed, U extends EmbedProps, V extends ViewConfig>(
|
|
24
14
|
EmbedConstructor: T,
|
|
25
|
-
) =>
|
|
26
|
-
React.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const { viewConfig, listeners } = getViewPropsAndListeners<
|
|
15
|
+
) => React.forwardRef<TsEmbed, U>(
|
|
16
|
+
(props: U, forwardedRef: React.MutableRefObject<TsEmbed>) => {
|
|
17
|
+
const ref = React.useRef<HTMLDivElement>(null);
|
|
18
|
+
const { className, ...embedProps } = props;
|
|
19
|
+
const { viewConfig, listeners } = getViewPropsAndListeners<
|
|
31
20
|
Omit<U, 'className'>,
|
|
32
21
|
V
|
|
33
22
|
>(embedProps);
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
useDeepCompareEffect(() => {
|
|
24
|
+
const tsEmbed = new EmbedConstructor(
|
|
36
25
|
ref!.current,
|
|
37
26
|
deepMerge(
|
|
38
27
|
{
|
|
@@ -45,77 +34,137 @@ const componentFactory = <
|
|
|
45
34
|
},
|
|
46
35
|
viewConfig,
|
|
47
36
|
),
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
);
|
|
38
|
+
Object.keys(listeners).forEach((eventName) => {
|
|
39
|
+
tsEmbed.on(
|
|
51
40
|
eventName as EmbedEvent,
|
|
52
41
|
listeners[eventName as EmbedEvent],
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
tsEmbed.render();
|
|
45
|
+
if (forwardedRef) {
|
|
46
|
+
// eslint-disable-next-line no-param-reassign
|
|
47
|
+
forwardedRef.current = tsEmbed;
|
|
48
|
+
}
|
|
49
|
+
return () => {
|
|
50
|
+
tsEmbed.destroy();
|
|
51
|
+
};
|
|
52
|
+
}, [viewConfig, listeners]);
|
|
64
53
|
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
return (
|
|
55
|
+
(viewConfig.insertAsSibling)
|
|
56
|
+
? <span
|
|
67
57
|
data-testid="tsEmbed"
|
|
68
58
|
ref={ref}
|
|
69
59
|
style={{ position: 'absolute' }}
|
|
70
60
|
></span>
|
|
71
|
-
|
|
72
|
-
<div
|
|
61
|
+
: <div
|
|
73
62
|
data-testid="tsEmbed"
|
|
74
63
|
ref={ref}
|
|
75
|
-
className={className}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
64
|
+
className={className}>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
},
|
|
68
|
+
);
|
|
80
69
|
|
|
81
70
|
interface SearchProps extends EmbedProps, SearchViewConfig {}
|
|
82
71
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
72
|
+
/**
|
|
73
|
+
* React component for Search Embed.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```tsx
|
|
77
|
+
* function Search() {
|
|
78
|
+
* return <SearchEmbed
|
|
79
|
+
* dataSource="dataSourceId"
|
|
80
|
+
* searchOptions={{ searchTokenString: "[revenue]" }}
|
|
81
|
+
* />
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export const SearchEmbed = componentFactory<typeof _SearchEmbed, SearchProps, SearchViewConfig>(
|
|
86
|
+
_SearchEmbed,
|
|
87
|
+
);
|
|
88
88
|
|
|
89
89
|
interface AppProps extends EmbedProps, AppViewConfig {}
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
/**
|
|
92
|
+
* React component for Full app Embed.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```tsx
|
|
96
|
+
* function Search() {
|
|
97
|
+
* return <AppEmbed
|
|
98
|
+
* showPrimaryNavbar={false}
|
|
99
|
+
* pageId={Page.Liveboards}
|
|
100
|
+
* onError={(error) => console.error(error)}
|
|
101
|
+
* />
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export const AppEmbed = componentFactory<typeof _AppEmbed, AppProps, AppViewConfig>(_AppEmbed);
|
|
96
106
|
|
|
97
107
|
interface LiveboardProps extends EmbedProps, LiveboardViewConfig {}
|
|
98
108
|
|
|
109
|
+
/**
|
|
110
|
+
* React component for Liveboard embed.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```tsx
|
|
114
|
+
* function Liveboard() {
|
|
115
|
+
* return <LiveboardEmbed
|
|
116
|
+
* liveboardId="liveboardId"
|
|
117
|
+
* fullHeight={true} {/* default false *\/}
|
|
118
|
+
* onLiveboardRendered={() => console.log('Liveboard rendered')}
|
|
119
|
+
* vizId="vizId" {/* if doing viz embed *\/}
|
|
120
|
+
* />
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
99
124
|
export const LiveboardEmbed = componentFactory<
|
|
100
125
|
typeof _LiveboardEmbed,
|
|
101
126
|
LiveboardProps,
|
|
102
127
|
LiveboardViewConfig
|
|
103
128
|
>(_LiveboardEmbed);
|
|
104
129
|
|
|
105
|
-
export const PinboardEmbed =
|
|
106
|
-
typeof _LiveboardEmbed,
|
|
107
|
-
LiveboardProps,
|
|
108
|
-
LiveboardViewConfig
|
|
109
|
-
>(_LiveboardEmbed);
|
|
130
|
+
export const PinboardEmbed = LiveboardEmbed;
|
|
110
131
|
|
|
111
132
|
interface SearchBarEmbedProps extends EmbedProps, SearchBarViewConfig {}
|
|
112
133
|
|
|
134
|
+
/**
|
|
135
|
+
* React component for Search bar embed.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```tsx
|
|
139
|
+
* function SearchBar() {
|
|
140
|
+
* return <SearchBarEmbed
|
|
141
|
+
* dataSource="dataSourceId"
|
|
142
|
+
* searchOptions={{ searchTokenString: "[revenue]" }}
|
|
143
|
+
* />
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
113
147
|
export const SearchBarEmbed = componentFactory<
|
|
114
148
|
typeof _SearchBarEmbed,
|
|
115
149
|
SearchBarEmbedProps,
|
|
116
150
|
SearchBarViewConfig
|
|
117
151
|
>(_SearchBarEmbed);
|
|
118
152
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Get a reference to the embed component to trigger events on the component.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```
|
|
158
|
+
* function Component() {
|
|
159
|
+
* const ref = useEmbedRef();
|
|
160
|
+
* useEffect(() => {
|
|
161
|
+
* ref.current.trigger(
|
|
162
|
+
* EmbedEvent.UpdateRuntimeFilter,
|
|
163
|
+
* [{ columnName: 'name', operator: 'EQ', values: ['value']}]);
|
|
164
|
+
* }, [])
|
|
165
|
+
* return <LiveboardEmbed ref={ref} liveboardId={<id>} />
|
|
166
|
+
* }
|
|
167
|
+
* ```
|
|
168
|
+
* @returns {React.MutableRefObject<TsEmbed>} ref
|
|
169
|
+
*/
|
|
170
|
+
export const useEmbedRef = (): React.MutableRefObject<TsEmbed> => React.useRef<TsEmbed>(null);
|
package/src/react/util.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { EmbedEvent, MessageCallback, ViewConfig } from '../types';
|
|
2
2
|
|
|
3
|
-
// eslint-disable-next-line prettier/prettier
|
|
4
3
|
export type EmbedEventHandlers = { [key in keyof typeof EmbedEvent as `on${Capitalize<key>}`]?: MessageCallback };
|
|
5
4
|
|
|
6
|
-
|
|
7
5
|
export interface EmbedProps extends ViewConfig, EmbedEventHandlers {
|
|
8
6
|
className?: string;
|
|
9
7
|
}
|
|
@@ -13,7 +11,13 @@ export interface ViewConfigAndListeners<T extends ViewConfig> {
|
|
|
13
11
|
listeners: { [key in EmbedEvent]?: MessageCallback };
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param props
|
|
17
|
+
*/
|
|
18
|
+
export function getViewPropsAndListeners<
|
|
19
|
+
T extends EmbedProps,
|
|
20
|
+
U extends ViewConfig>(props: T): ViewConfigAndListeners<U> {
|
|
17
21
|
return Object.keys(props).reduce(
|
|
18
22
|
(accu, key) => {
|
|
19
23
|
if (key.startsWith('on')) {
|
|
@@ -29,4 +33,4 @@ export function getViewPropsAndListeners<T extends EmbedProps, U extends ViewCon
|
|
|
29
33
|
listeners: {},
|
|
30
34
|
},
|
|
31
35
|
);
|
|
32
|
-
}
|
|
36
|
+
}
|
package/src/test/test-utils.ts
CHANGED
|
@@ -3,18 +3,15 @@ import { Action, AuthType } from '../types';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
Initialises fetch to the global object
|
|
6
|
-
*/
|
|
7
|
-
global.fetch = jest.fn(() =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}),
|
|
11
|
-
);
|
|
6
|
+
*/
|
|
7
|
+
global.fetch = jest.fn(() => Promise.resolve({
|
|
8
|
+
json: () => ({ mixpanelAccessToken: '' }),
|
|
9
|
+
}));
|
|
12
10
|
|
|
13
11
|
export const defaultParamsWithoutHiddenActions = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=${AuthType.None}`;
|
|
14
12
|
export const defaultParams = `&${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22]`;
|
|
15
13
|
export const defaultParamsForPinboardEmbed = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&authType=None&hideAction=[%22${Action.ReportError}%22]`;
|
|
16
|
-
export const getDocumentBody = () =>
|
|
17
|
-
'<div id="embed"></div><div id="embed-2"></div>';
|
|
14
|
+
export const getDocumentBody = () => '<div id="embed"></div><div id="embed-2"></div>';
|
|
18
15
|
|
|
19
16
|
type DOMElement = HTMLElement | Document;
|
|
20
17
|
|
|
@@ -22,40 +19,33 @@ export const getRootEl = () => document.getElementById('embed');
|
|
|
22
19
|
|
|
23
20
|
export const getRootEl2 = () => document.getElementById('embed-2');
|
|
24
21
|
|
|
25
|
-
export const getIFrameEl = (container: DOMElement = document) =>
|
|
26
|
-
return container.querySelector('iframe');
|
|
27
|
-
};
|
|
22
|
+
export const getIFrameEl = (container: DOMElement = document) => container.querySelector('iframe');
|
|
28
23
|
|
|
29
24
|
export const getAllIframeEl = () => document.querySelectorAll('iframe');
|
|
30
25
|
|
|
31
|
-
export const getIFrameSrc = (container: DOMElement = document) =>
|
|
32
|
-
getIFrameEl(container).src;
|
|
26
|
+
export const getIFrameSrc = (container: DOMElement = document) => getIFrameEl(container).src;
|
|
33
27
|
|
|
34
|
-
export const waitFor = (fn: () => boolean): Promise<void> => {
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
});
|
|
44
|
-
};
|
|
28
|
+
export const waitFor = (fn: () => boolean): Promise<void> => new Promise((resolve) => {
|
|
29
|
+
const interval = setInterval(() => {
|
|
30
|
+
const value = fn();
|
|
31
|
+
if (value) {
|
|
32
|
+
clearInterval(interval);
|
|
33
|
+
resolve();
|
|
34
|
+
}
|
|
35
|
+
}, 100);
|
|
36
|
+
});
|
|
45
37
|
|
|
46
38
|
/**
|
|
47
39
|
* jsdom does not set event source, therefore we do it
|
|
48
40
|
* programmatically and use dispatchEvent instead of the
|
|
49
41
|
* postMessage API
|
|
50
42
|
* Reference: https://github.com/jsdom/jsdom/issues/2745
|
|
43
|
+
*
|
|
51
44
|
* @param window
|
|
52
45
|
* @param data
|
|
46
|
+
* @param port
|
|
53
47
|
*/
|
|
54
|
-
export const postMessageToParent = (
|
|
55
|
-
window: WindowProxy,
|
|
56
|
-
data: any,
|
|
57
|
-
port?: any,
|
|
58
|
-
) => {
|
|
48
|
+
export const postMessageToParent = (window: WindowProxy, data: any, port?: any) => {
|
|
59
49
|
const message = new MessageEvent('message', {
|
|
60
50
|
data,
|
|
61
51
|
source: window,
|
|
@@ -66,33 +56,37 @@ export const postMessageToParent = (
|
|
|
66
56
|
|
|
67
57
|
/**
|
|
68
58
|
* Execute a given function after a certain time has elapsed
|
|
59
|
+
*
|
|
69
60
|
* @param fn The function to be executed after the wait period
|
|
70
61
|
* @param waitTime The wait period in milliseconds
|
|
71
62
|
*/
|
|
72
63
|
export const executeAfterWait = (
|
|
73
64
|
fn: (...args: any[]) => void,
|
|
74
65
|
waitTime = 0,
|
|
75
|
-
) => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
});
|
|
82
|
-
};
|
|
66
|
+
) => new Promise((resolve, reject) => {
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
const value = fn();
|
|
69
|
+
resolve(value);
|
|
70
|
+
}, waitTime);
|
|
71
|
+
});
|
|
83
72
|
|
|
84
73
|
/**
|
|
85
74
|
* Time (in milliseconds) to wait for async events to be triggered
|
|
86
75
|
*/
|
|
87
76
|
export const EVENT_WAIT_TIME = 1000;
|
|
88
77
|
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @param str
|
|
81
|
+
*/
|
|
89
82
|
export function fixedEncodeURI(str: string) {
|
|
90
83
|
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
|
|
91
84
|
}
|
|
92
85
|
|
|
93
86
|
/**
|
|
94
|
-
* MessageChannel is available in Node > 15.0.0. Since the current node
|
|
95
|
-
* used for github actions is not above 14, we are mocking this
|
|
87
|
+
* MessageChannel is available in Node > 15.0.0. Since the current node
|
|
88
|
+
* environment's used for github actions is not above 14, we are mocking this
|
|
89
|
+
* for the current unit tests.
|
|
96
90
|
*/
|
|
97
91
|
export const messageChannelMock: any = {
|
|
98
92
|
port1: {},
|
|
@@ -105,3 +99,13 @@ export const mockMessageChannel = () => {
|
|
|
105
99
|
return messageChannelMock;
|
|
106
100
|
} as any;
|
|
107
101
|
};
|
|
102
|
+
|
|
103
|
+
export const expectUrlMatchesWithParams = (source: string, target: string) => {
|
|
104
|
+
const sourceUrl = new URL(source);
|
|
105
|
+
const targetUrl = new URL(target);
|
|
106
|
+
expect(sourceUrl.origin).toBe(targetUrl.origin);
|
|
107
|
+
expect(sourceUrl.pathname).toBe(targetUrl.pathname);
|
|
108
|
+
const sourceParamsObj = Object.fromEntries(sourceUrl.searchParams);
|
|
109
|
+
const targetParamsObj = Object.fromEntries(targetUrl.searchParams);
|
|
110
|
+
expect(sourceParamsObj).toMatchObject(targetParamsObj);
|
|
111
|
+
};
|