@thoughtspot/visual-embed-sdk 1.52.2-beta.1 → 1.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/css-variables.d.ts +373 -5
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +14 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +6 -3
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +28 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.js +244 -4
- package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.spec.js +389 -0
- package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/cjs/src/embed/bodyless-conversation.js +1 -1
- package/cjs/src/embed/bodyless-conversation.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +15 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +7 -3
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +66 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/liveboard-override-utils.d.ts +59 -0
- package/cjs/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.js +19 -0
- package/cjs/src/embed/liveboard-override-utils.js.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/cjs/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.spec.js +34 -0
- package/cjs/src/embed/liveboard-override-utils.spec.js.map +1 -0
- package/cjs/src/embed/liveboard.d.ts +43 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +11 -18
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +104 -54
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search-bar.js +1 -1
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.js +1 -1
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +20 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +11 -0
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +13 -1
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +15 -0
- package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.spec.js +11 -0
- package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +27 -34
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +224 -102
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +543 -171
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +4 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +4 -2
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts +1 -0
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +1 -0
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/types.d.ts +182 -2
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +109 -0
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js +8 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.js +39 -4
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +124 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/dist/{index-Bt56pC82.js → index-CyDR8j_0.js} +1 -1
- package/dist/src/css-variables.d.ts +373 -5
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +14 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +15 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard-override-utils.d.ts +59 -0
- package/dist/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/dist/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/dist/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/dist/src/embed/liveboard.d.ts +43 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +11 -0
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +15 -0
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +27 -34
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts +1 -0
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/types.d.ts +182 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +437 -175
- package/dist/tsembed-react.js +436 -174
- package/dist/tsembed.es.js +680 -180
- package/dist/tsembed.js +678 -178
- package/dist/visual-embed-sdk-react-full.d.ts +702 -44
- package/dist/visual-embed-sdk-react.d.ts +697 -44
- package/dist/visual-embed-sdk.d.ts +729 -45
- package/lib/package.json +1 -1
- package/lib/src/css-variables.d.ts +373 -5
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +14 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +7 -4
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +28 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/lib/src/embed/auto-frame-renderer.js +244 -4
- package/lib/src/embed/auto-frame-renderer.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.spec.js +389 -0
- package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/lib/src/embed/bodyless-conversation.js +1 -1
- package/lib/src/embed/bodyless-conversation.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +15 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +8 -4
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +67 -1
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/liveboard-override-utils.d.ts +59 -0
- package/lib/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/lib/src/embed/liveboard-override-utils.js +15 -0
- package/lib/src/embed/liveboard-override-utils.js.map +1 -0
- package/lib/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/lib/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/lib/src/embed/liveboard-override-utils.spec.js +32 -0
- package/lib/src/embed/liveboard-override-utils.spec.js.map +1 -0
- package/lib/src/embed/liveboard.d.ts +43 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +11 -17
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +104 -54
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search-bar.js +1 -1
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.js +1 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +20 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +11 -0
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +12 -0
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +15 -0
- package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-viz-utils.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.spec.js +11 -0
- package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +27 -34
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +224 -102
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +544 -172
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +4 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +3 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts +1 -0
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +1 -0
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/types.d.ts +182 -2
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +109 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.js +7 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.js +39 -4
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +125 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +729 -45
- package/package.json +1 -1
- package/src/css-variables.ts +475 -26
- package/src/embed/app.spec.ts +32 -0
- package/src/embed/app.ts +28 -4
- package/src/embed/auto-frame-renderer.spec.ts +464 -0
- package/src/embed/auto-frame-renderer.ts +305 -6
- package/src/embed/bodyless-conversation.ts +1 -1
- package/src/embed/conversation.spec.ts +94 -1
- package/src/embed/conversation.ts +28 -3
- package/src/embed/liveboard-override-utils.spec.ts +38 -0
- package/src/embed/liveboard-override-utils.ts +71 -0
- package/src/embed/liveboard.spec.ts +119 -62
- package/src/embed/liveboard.ts +56 -21
- package/src/embed/search-bar.tsx +1 -1
- package/src/embed/search.spec.ts +23 -0
- package/src/embed/search.ts +1 -1
- package/src/embed/spotter-utils.ts +12 -0
- package/src/embed/spotter-viz-utils.spec.ts +11 -0
- package/src/embed/spotter-viz-utils.ts +15 -0
- package/src/embed/ts-embed.spec.ts +684 -213
- package/src/embed/ts-embed.ts +227 -97
- package/src/index.ts +16 -1
- package/src/mixpanel-service.ts +1 -0
- package/src/react/all-types-export.ts +6 -0
- package/src/types.ts +186 -5
- package/src/utils/graphql/answerService/answer-queries.ts +8 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +145 -1
- package/src/utils/graphql/answerService/answerService.ts +65 -3
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.V1Embed = exports.TsEmbed = exports.THOUGHTSPOT_PARAM_PREFIX = void 0;
|
|
10
|
+
exports.V1Embed = exports.TsEmbed = exports.BOOTSTRAP_URL_PARAMS = exports.THOUGHTSPOT_PARAM_PREFIX = void 0;
|
|
11
11
|
const tslib_1 = require("tslib");
|
|
12
12
|
const isEmpty_1 = tslib_1.__importDefault(require("lodash/isEmpty"));
|
|
13
13
|
const isObject_1 = tslib_1.__importDefault(require("lodash/isObject"));
|
|
@@ -43,9 +43,6 @@ const TS_EMBED_ID = '_thoughtspot-embed';
|
|
|
43
43
|
*/
|
|
44
44
|
const PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY = 'tsEmbedOriginalPosition';
|
|
45
45
|
const PRERENDER_WRAPPER_ID_PREFIX = 'tsEmbed-pre-render-wrapper-';
|
|
46
|
-
const PRERENDER_PARKED_TRANSFORM = 'translateY(-100%)';
|
|
47
|
-
/** The height createPreRenderWrapper() seeds before anything is measured. */
|
|
48
|
-
const UNMEASURED_WRAPPER_HEIGHT = '100vh';
|
|
49
46
|
// The container applies UpdateEmbedParams through React state, so a delivered
|
|
50
47
|
// post is not the same as the params being in effect.
|
|
51
48
|
const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
|
|
@@ -53,6 +50,97 @@ const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
|
|
|
53
50
|
// truthy, so null or '' leaves the previous embed's values in place. '&' is
|
|
54
51
|
// truthy and parses to {}.
|
|
55
52
|
const NO_RUNTIME_PARAMS = '&';
|
|
53
|
+
/**
|
|
54
|
+
* Params kept on the iframe `src` when `excludeConfigFromURL` is set. The rest
|
|
55
|
+
* are sent in the APP_INIT payload.
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
exports.BOOTSTRAP_URL_PARAMS = new Set([
|
|
59
|
+
// Marks the app as embedded.
|
|
60
|
+
types_1.Param.EmbedApp,
|
|
61
|
+
// The host page URL, used to validate the postMessage origin.
|
|
62
|
+
types_1.Param.HostAppUrl,
|
|
63
|
+
// The SDK version.
|
|
64
|
+
types_1.Param.Version,
|
|
65
|
+
// The authentication type set in init.
|
|
66
|
+
types_1.Param.AuthType,
|
|
67
|
+
// Whether the app signs the user in automatically.
|
|
68
|
+
types_1.Param.AutoLogin,
|
|
69
|
+
// Stops the app from redirecting to its login page.
|
|
70
|
+
types_1.Param.DisableLoginRedirect,
|
|
71
|
+
// Forces the SAML redirect for EmbeddedSSO.
|
|
72
|
+
types_1.Param.ForceSAMLAutoRedirect,
|
|
73
|
+
// Set for cookieless trusted authentication.
|
|
74
|
+
types_1.Param.cookieless,
|
|
75
|
+
// Lets the app use the pre-fetched auth info.
|
|
76
|
+
types_1.Param.preAuthCache,
|
|
77
|
+
// Blocks access to the full app outside the embed.
|
|
78
|
+
types_1.Param.blockNonEmbedFullAppAccess,
|
|
79
|
+
// The org to load, which the auth info depends on.
|
|
80
|
+
types_1.Param.OverrideOrgId,
|
|
81
|
+
// The host window height when the iframe loads.
|
|
82
|
+
types_1.Param.ViewPortHeight,
|
|
83
|
+
// The host window width when the iframe loads.
|
|
84
|
+
types_1.Param.ViewPortWidth,
|
|
85
|
+
// The app's client log level.
|
|
86
|
+
types_1.Param.ClientLogLevel,
|
|
87
|
+
// Lets the app override the native console.
|
|
88
|
+
types_1.Param.OverrideNativeConsole,
|
|
89
|
+
// An extra Pendo tracking key.
|
|
90
|
+
types_1.Param.PendoTrackingKey,
|
|
91
|
+
// The locale for number formatting.
|
|
92
|
+
types_1.Param.NumberFormatLocale,
|
|
93
|
+
// The locale for date formatting.
|
|
94
|
+
types_1.Param.DateFormatLocale,
|
|
95
|
+
// The currency format.
|
|
96
|
+
types_1.Param.CurrencyFormat,
|
|
97
|
+
// The UI language.
|
|
98
|
+
types_1.Param.Locale,
|
|
99
|
+
// Turns on dark mode.
|
|
100
|
+
types_1.Param.IsDarkMode,
|
|
101
|
+
// Turns on the radiant theme that dark mode needs.
|
|
102
|
+
types_1.Param.RadiantThemeEnabled,
|
|
103
|
+
// Marks a SearchEmbed or SearchBarEmbed.
|
|
104
|
+
types_1.Param.searchEmbed,
|
|
105
|
+
// Marks a LiveboardEmbed.
|
|
106
|
+
types_1.Param.livedBoardEmbed,
|
|
107
|
+
// Marks a SpotterAgentEmbed.
|
|
108
|
+
types_1.Param.isSpotterAgentEmbed,
|
|
109
|
+
// Marks a SpotterEmbed.
|
|
110
|
+
types_1.Param.SpotterEnabled,
|
|
111
|
+
// Marks an AppEmbed.
|
|
112
|
+
types_1.Param.IsFullAppEmbed,
|
|
113
|
+
// Legacy flag for the onBeforeGetVizData API intercept.
|
|
114
|
+
types_1.Param.IsOnBeforeGetVizDataInterceptEnabled,
|
|
115
|
+
// Lets the host override links in the app.
|
|
116
|
+
types_1.Param.LinkOverride,
|
|
117
|
+
// Turns on version 2 of the link overrides.
|
|
118
|
+
types_1.Param.EnableLinkOverridesV2,
|
|
119
|
+
// Stops links from opening in a new tab.
|
|
120
|
+
types_1.Param.DisableRedirectionLinksInNewTab,
|
|
121
|
+
// Uses replaceState instead of pushState for app navigation.
|
|
122
|
+
types_1.Param.OverrideHistoryState,
|
|
123
|
+
// Shows search results as a table.
|
|
124
|
+
types_1.Param.ForceTable,
|
|
125
|
+
// The URL of the custom string IDs file.
|
|
126
|
+
types_1.Param.StringIDsUrl,
|
|
127
|
+
// The data sources that search opens with.
|
|
128
|
+
types_1.Param.DataSources,
|
|
129
|
+
// Exposes translation IDs in the app.
|
|
130
|
+
types_1.Param.ExposeTranslationIDs,
|
|
131
|
+
// The URL of the custom icon sprite.
|
|
132
|
+
types_1.Param.IconSpriteUrl,
|
|
133
|
+
// The tag that filters the metadata lists in an AppEmbed.
|
|
134
|
+
types_1.Param.Tag,
|
|
135
|
+
// Set when a Liveboard embed shows a single visualization (vizId).
|
|
136
|
+
types_1.Param.vizEmbed,
|
|
137
|
+
// Whether search opens with the last-selected data sources.
|
|
138
|
+
types_1.Param.UseLastSelectedDataSource,
|
|
139
|
+
// The query mode Spotter opens in.
|
|
140
|
+
types_1.Param.DefaultQueryMode,
|
|
141
|
+
// The initial search query. Omitted with excludeSearchTokenStringFromURL.
|
|
142
|
+
types_1.Param.searchTokenString,
|
|
143
|
+
]);
|
|
56
144
|
/**
|
|
57
145
|
* The event id map from v2 event names to v1 event id
|
|
58
146
|
* v1 events are the classic embed events implemented in Blink v1
|
|
@@ -81,6 +169,7 @@ class TsEmbed {
|
|
|
81
169
|
this.embedNodeKey = '__tsEmbed';
|
|
82
170
|
this.embedContainerLoadedKey = '__tsEmbedContainerLoaded';
|
|
83
171
|
this.isAppInitialized = false;
|
|
172
|
+
this.initDataParams = {};
|
|
84
173
|
/**
|
|
85
174
|
* Should we encode URL Query Params using base64 encoding which ThoughtSpot
|
|
86
175
|
* will generate for embedding. This provides additional security to
|
|
@@ -90,6 +179,7 @@ class TsEmbed {
|
|
|
90
179
|
this.shouldEncodeUrlQueryParams = false;
|
|
91
180
|
this.defaultHiddenActions = [types_1.Action.ReportError];
|
|
92
181
|
this.preRenderContainerEl = document.body;
|
|
182
|
+
this.containerScrollListener = null;
|
|
93
183
|
/**
|
|
94
184
|
* Handler for fullscreen change events
|
|
95
185
|
*/
|
|
@@ -115,7 +205,7 @@ class TsEmbed {
|
|
|
115
205
|
*/
|
|
116
206
|
this.appInitCb = async (_, responder) => {
|
|
117
207
|
try {
|
|
118
|
-
const appInitData = await this.getAppInitData();
|
|
208
|
+
const appInitData = this.withInitDataParams(await this.getAppInitData());
|
|
119
209
|
this.isAppInitialized = true;
|
|
120
210
|
responder({
|
|
121
211
|
type: types_1.EmbedEvent.APP_INIT,
|
|
@@ -543,6 +633,18 @@ class TsEmbed {
|
|
|
543
633
|
async getAppInitData() {
|
|
544
634
|
return this.getDefaultAppInitData();
|
|
545
635
|
}
|
|
636
|
+
withInitDataParams(appInitData) {
|
|
637
|
+
if ((0, isEmpty_1.default)(this.initDataParams)) {
|
|
638
|
+
return appInitData;
|
|
639
|
+
}
|
|
640
|
+
return {
|
|
641
|
+
...appInitData,
|
|
642
|
+
embedParams: {
|
|
643
|
+
...this.initDataParams,
|
|
644
|
+
...(appInitData.embedParams || {}),
|
|
645
|
+
},
|
|
646
|
+
};
|
|
647
|
+
}
|
|
546
648
|
/**
|
|
547
649
|
* Helper method to refresh/update auth token for TrustedAuthTokenCookieless auth type
|
|
548
650
|
* @param responder - Function to send response back
|
|
@@ -602,7 +704,7 @@ class TsEmbed {
|
|
|
602
704
|
* @returns queryParams
|
|
603
705
|
*/
|
|
604
706
|
getBaseQueryParams(queryParams = {}) {
|
|
605
|
-
var _a, _b, _c, _d;
|
|
707
|
+
var _a, _b, _c, _d, _e;
|
|
606
708
|
let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
|
|
607
709
|
// The below check is needed because TS Cloud firewall, blocks
|
|
608
710
|
// localhost/127.0.0.1 in any url param.
|
|
@@ -639,6 +741,15 @@ class TsEmbed {
|
|
|
639
741
|
if (this.embedConfig.currencyFormat) {
|
|
640
742
|
queryParams[types_1.Param.CurrencyFormat] = this.embedConfig.currencyFormat;
|
|
641
743
|
}
|
|
744
|
+
// The view config wins over init, so an embed can opt out of a dark
|
|
745
|
+
// mode set in `init`. `??` and not `||`, so that an explicit `false`
|
|
746
|
+
// overrides an init-level `true`.
|
|
747
|
+
const isDarkMode = (_c = this.viewConfig.isDarkMode) !== null && _c !== void 0 ? _c : this.embedConfig.isDarkMode;
|
|
748
|
+
(0, utils_1.setParamIfDefined)(queryParams, types_1.Param.IsDarkMode, isDarkMode, true);
|
|
749
|
+
// The app's dark mode lives in its radiant theme, so turn that on too.
|
|
750
|
+
if (isDarkMode) {
|
|
751
|
+
queryParams[types_1.Param.RadiantThemeEnabled] = true;
|
|
752
|
+
}
|
|
642
753
|
const { disabledActions, disabledActionReason, hiddenActions, visibleActions, hiddenTabs, visibleTabs, showAlerts, additionalFlags: additionalFlagsFromView, locale, customizations, contextMenuTrigger, linkOverride, enableLinkOverridesV2, insertInToSlide, disableRedirectionLinksInNewTab, overrideOrgId, overrideHistoryState, exposeTranslationIDs, primaryAction, } = this.viewConfig;
|
|
643
754
|
const { additionalFlags: additionalFlagsFromInit } = this.embedConfig;
|
|
644
755
|
const additionalFlags = {
|
|
@@ -704,7 +815,7 @@ class TsEmbed {
|
|
|
704
815
|
if (spriteUrl) {
|
|
705
816
|
queryParams[types_1.Param.IconSpriteUrl] = spriteUrl.replace('https://', '');
|
|
706
817
|
}
|
|
707
|
-
const stringIDsUrl = ((
|
|
818
|
+
const stringIDsUrl = ((_d = customizations === null || customizations === void 0 ? void 0 : customizations.content) === null || _d === void 0 ? void 0 : _d.stringIDsUrl) || ((_e = embedCustomizations === null || embedCustomizations === void 0 ? void 0 : embedCustomizations.content) === null || _e === void 0 ? void 0 : _e.stringIDsUrl);
|
|
708
819
|
if (stringIDsUrl) {
|
|
709
820
|
queryParams[types_1.Param.StringIDsUrl] = stringIDsUrl;
|
|
710
821
|
}
|
|
@@ -758,13 +869,32 @@ class TsEmbed {
|
|
|
758
869
|
return path;
|
|
759
870
|
}
|
|
760
871
|
getEmbedParams() {
|
|
761
|
-
const queryParams = this.
|
|
872
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
762
873
|
return (0, utils_1.getQueryParamString)(queryParams);
|
|
763
874
|
}
|
|
764
875
|
getEmbedParamsObject() {
|
|
765
876
|
const params = this.getBaseQueryParams();
|
|
766
877
|
return params;
|
|
767
878
|
}
|
|
879
|
+
getUrlQueryParamsObject() {
|
|
880
|
+
const queryParams = this.getEmbedParamsObject();
|
|
881
|
+
if (!this.isConfigExcludedFromUrl()) {
|
|
882
|
+
this.initDataParams = {};
|
|
883
|
+
return queryParams;
|
|
884
|
+
}
|
|
885
|
+
const urlParams = {};
|
|
886
|
+
const excludedParams = {};
|
|
887
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
888
|
+
if (exports.BOOTSTRAP_URL_PARAMS.has(key)) {
|
|
889
|
+
urlParams[key] = value;
|
|
890
|
+
}
|
|
891
|
+
else {
|
|
892
|
+
excludedParams[key] = (0, utils_1.deserializeParam)(value);
|
|
893
|
+
}
|
|
894
|
+
});
|
|
895
|
+
this.initDataParams = excludedParams;
|
|
896
|
+
return urlParams;
|
|
897
|
+
}
|
|
768
898
|
getRootIframeSrc() {
|
|
769
899
|
const query = this.getEmbedParams();
|
|
770
900
|
return this.getEmbedBasePath(query);
|
|
@@ -937,7 +1067,7 @@ class TsEmbed {
|
|
|
937
1067
|
top: '0',
|
|
938
1068
|
left: '0',
|
|
939
1069
|
width: '100vw',
|
|
940
|
-
height:
|
|
1070
|
+
height: '100vh',
|
|
941
1071
|
};
|
|
942
1072
|
(0, utils_1.setStyleProperties)(preRenderWrapper, initialPreRenderWrapperStyle);
|
|
943
1073
|
return preRenderWrapper;
|
|
@@ -1005,26 +1135,10 @@ class TsEmbed {
|
|
|
1005
1135
|
return placeholder;
|
|
1006
1136
|
}
|
|
1007
1137
|
/**
|
|
1008
|
-
* Resolves the configured preRenderContainer to a live element
|
|
1009
|
-
* selector is re-queried on every call so
|
|
1010
|
-
* replacing the node) resolves to the
|
|
1011
|
-
* directly cannot be re-resolved.
|
|
1012
|
-
*
|
|
1013
|
-
* With nothing configured the frame goes into the host element's nearest
|
|
1014
|
-
* scrolling ancestor, falling back to `document.body`.
|
|
1015
|
-
*
|
|
1016
|
-
* The wrapper is absolutely positioned, so it follows the page for free —
|
|
1017
|
-
* but only while it sits inside whatever scrolls. `document.body` is right
|
|
1018
|
-
* only when the document itself is the scroller; an app that scrolls an
|
|
1019
|
-
* inner element instead left the frame pinned to the viewport while the page
|
|
1020
|
-
* moved under it (SCAL-338563). Being inside the scroller also lets wheel
|
|
1021
|
-
* events chain out of the frame into it, which they cannot do from
|
|
1022
|
-
* `document.body`.
|
|
1023
|
-
*
|
|
1024
|
-
* A scrolling ancestor is layout chrome rather than route content, so it
|
|
1025
|
-
* outlives the embed in practice; and if it does go, the host element goes
|
|
1026
|
-
* with it and this instance is remounting anyway.
|
|
1027
|
-
* `reconcilePreRenderContainer` re-runs this on a detached container.
|
|
1138
|
+
* Resolves the configured preRenderContainer to a live element, falling
|
|
1139
|
+
* back to `document.body`. A string selector is re-queried on every call so
|
|
1140
|
+
* a remounted container (E.g.: React replacing the node) resolves to the
|
|
1141
|
+
* fresh element; an element passed directly cannot be re-resolved.
|
|
1028
1142
|
*/
|
|
1029
1143
|
resolvePreRenderContainerTarget() {
|
|
1030
1144
|
var _a;
|
|
@@ -1044,13 +1158,7 @@ class TsEmbed {
|
|
|
1044
1158
|
else if (containerConfig) {
|
|
1045
1159
|
container = containerConfig;
|
|
1046
1160
|
}
|
|
1047
|
-
|
|
1048
|
-
return container;
|
|
1049
|
-
}
|
|
1050
|
-
if (!this.hostElement) {
|
|
1051
|
-
return document.body;
|
|
1052
|
-
}
|
|
1053
|
-
return (_a = (0, utils_1.getScrollableAncestors)(this.hostElement)[0]) !== null && _a !== void 0 ? _a : document.body;
|
|
1161
|
+
return (_a = container) !== null && _a !== void 0 ? _a : document.body;
|
|
1054
1162
|
}
|
|
1055
1163
|
inheritPreRenderContainer() {
|
|
1056
1164
|
var _a;
|
|
@@ -1095,9 +1203,8 @@ class TsEmbed {
|
|
|
1095
1203
|
* Re-attaches the wrapper to a live container when the previously resolved
|
|
1096
1204
|
* one has been detached or no longer holds the wrapper — e.g. the host app
|
|
1097
1205
|
* remounted a custom preRenderContainer, which would otherwise leave a stale
|
|
1098
|
-
* reference and collapse the wrapper.
|
|
1099
|
-
*
|
|
1100
|
-
* is left untouched, as there is nothing to re-query.
|
|
1206
|
+
* reference and collapse the wrapper. Only string selectors can be
|
|
1207
|
+
* re-resolved; a container passed as an element is left untouched.
|
|
1101
1208
|
*/
|
|
1102
1209
|
reconcilePreRenderContainer() {
|
|
1103
1210
|
const wrapper = this.preRenderWrapper;
|
|
@@ -1116,6 +1223,14 @@ class TsEmbed {
|
|
|
1116
1223
|
if (resolved === stored && stored.contains(wrapper)) {
|
|
1117
1224
|
return;
|
|
1118
1225
|
}
|
|
1226
|
+
if (this.containerScrollListener && stored !== resolved) {
|
|
1227
|
+
if (stored !== document.body) {
|
|
1228
|
+
stored.removeEventListener('scroll', this.containerScrollListener);
|
|
1229
|
+
}
|
|
1230
|
+
if (resolved !== document.body) {
|
|
1231
|
+
resolved.addEventListener('scroll', this.containerScrollListener);
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1119
1234
|
this.preRenderContainerEl = resolved;
|
|
1120
1235
|
this.applyPreRenderContainerPositioning();
|
|
1121
1236
|
if (wrapper.parentNode !== resolved) {
|
|
@@ -1177,12 +1292,11 @@ class TsEmbed {
|
|
|
1177
1292
|
*/
|
|
1178
1293
|
setIFrameHeight(height) {
|
|
1179
1294
|
if (this.isPreRendered) {
|
|
1180
|
-
const next = (0, utils_1.getCssDimension)(height);
|
|
1181
1295
|
if (this.insertedDomEl) {
|
|
1182
|
-
this.insertedDomEl.style.height =
|
|
1296
|
+
this.insertedDomEl.style.height = (0, utils_1.getCssDimension)(height);
|
|
1183
1297
|
}
|
|
1184
1298
|
else if (this.preRenderWrapper) {
|
|
1185
|
-
this.preRenderWrapper.style.height =
|
|
1299
|
+
this.preRenderWrapper.style.height = (0, utils_1.getCssDimension)(height);
|
|
1186
1300
|
}
|
|
1187
1301
|
}
|
|
1188
1302
|
else {
|
|
@@ -1466,9 +1580,16 @@ class TsEmbed {
|
|
|
1466
1580
|
* @param args
|
|
1467
1581
|
*/
|
|
1468
1582
|
async render() {
|
|
1583
|
+
var _a, _b, _c;
|
|
1469
1584
|
(0, mixpanel_service_1.uploadMixpanelEvent)(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_RENDER_CALLED, {
|
|
1470
1585
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
1471
1586
|
});
|
|
1587
|
+
(0, mixpanel_service_1.uploadMixpanelEvent)(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_INIT_ACTIONS, {
|
|
1588
|
+
embedComponentType: this.viewConfig.embedComponentType,
|
|
1589
|
+
hiddenActions: (_a = this.viewConfig.hiddenActions) !== null && _a !== void 0 ? _a : [],
|
|
1590
|
+
visibleActions: (_b = this.viewConfig.visibleActions) !== null && _b !== void 0 ? _b : [],
|
|
1591
|
+
disabledActions: (_c = this.viewConfig.disabledActions) !== null && _c !== void 0 ? _c : [],
|
|
1592
|
+
});
|
|
1472
1593
|
if (!(0, base_1.getIsInitCalled)()) {
|
|
1473
1594
|
logger_1.logger.error(errors_1.ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
|
|
1474
1595
|
}
|
|
@@ -1617,47 +1738,34 @@ class TsEmbed {
|
|
|
1617
1738
|
delete container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY];
|
|
1618
1739
|
}
|
|
1619
1740
|
/**
|
|
1620
|
-
*
|
|
1621
|
-
*
|
|
1622
|
-
* Position deliberately has no equivalent. An absolutely positioned wrapper
|
|
1623
|
-
* follows its containing block for free, so a correctly placed frame is the
|
|
1624
|
-
* browser's job and costs nothing; repositioning it on scroll would mean a
|
|
1625
|
-
* layout read and a style write per frame to compensate for placing it in
|
|
1626
|
-
* the wrong box. Size is the one thing the browser will not do for us: the
|
|
1627
|
-
* placeholder grows when the embedded app reports a new height, and the
|
|
1628
|
-
* wrapper has to be told.
|
|
1741
|
+
* Detaches and clears the container scroll listener, if one is attached.
|
|
1629
1742
|
*/
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
if (this.getPreRenderConfig().doNotTrackSize || typeof ResizeObserver === 'undefined') {
|
|
1743
|
+
removeContainerScrollListener() {
|
|
1744
|
+
if (!this.containerScrollListener) {
|
|
1633
1745
|
return;
|
|
1634
1746
|
}
|
|
1635
|
-
const
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
}
|
|
1639
|
-
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
1640
|
-
this.resizeObserver = new ResizeObserver(() => this.syncPreRenderStyle());
|
|
1641
|
-
this.resizeObserver.observe(placeholder);
|
|
1747
|
+
const customContainer = this.getCustomPreRenderContainer();
|
|
1748
|
+
customContainer === null || customContainer === void 0 ? void 0 : customContainer.removeEventListener('scroll', this.containerScrollListener);
|
|
1749
|
+
this.containerScrollListener = null;
|
|
1642
1750
|
}
|
|
1643
1751
|
/**
|
|
1644
1752
|
* Destroys the ThoughtSpot embed, and remove any nodes from the DOM.
|
|
1645
1753
|
* @version SDK: 1.19.1 | ThoughtSpot: *
|
|
1646
1754
|
*/
|
|
1647
1755
|
destroy() {
|
|
1648
|
-
var _a, _b, _c
|
|
1756
|
+
var _a, _b, _c;
|
|
1649
1757
|
try {
|
|
1650
1758
|
this.removeFullscreenChangeHandler();
|
|
1651
|
-
|
|
1759
|
+
this.removeContainerScrollListener();
|
|
1652
1760
|
this.unsubscribeToEvents();
|
|
1653
|
-
(
|
|
1761
|
+
(_a = this.preRenderWrapper) === null || _a === void 0 ? void 0 : _a.remove();
|
|
1654
1762
|
this.restorePreRenderContainerPosition();
|
|
1655
1763
|
if (!this.isRendered) {
|
|
1656
1764
|
return;
|
|
1657
1765
|
}
|
|
1658
1766
|
if (!(0, embedConfig_1.getEmbedConfig)().waitForCleanupOnDestroy) {
|
|
1659
1767
|
this.trigger(types_1.HostEvent.DestroyEmbed);
|
|
1660
|
-
(
|
|
1768
|
+
(_c = (_b = this.insertedDomEl) === null || _b === void 0 ? void 0 : _b.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(this.insertedDomEl);
|
|
1661
1769
|
}
|
|
1662
1770
|
else {
|
|
1663
1771
|
const cleanupTimeout = (0, embedConfig_1.getEmbedConfig)().cleanupTimeout;
|
|
@@ -1703,6 +1811,26 @@ class TsEmbed {
|
|
|
1703
1811
|
this.isRendered = true;
|
|
1704
1812
|
return this.renderIFrame(prerenderFrameSrc);
|
|
1705
1813
|
}
|
|
1814
|
+
isConfigExcludedFromUrl() {
|
|
1815
|
+
var _a, _b, _c;
|
|
1816
|
+
const flag = (_b = (_a = this.viewConfig.additionalFlags) === null || _a === void 0 ? void 0 : _a.excludeConfigFromURL) !== null && _b !== void 0 ? _b : (_c = this.embedConfig.additionalFlags) === null || _c === void 0 ? void 0 : _c.excludeConfigFromURL;
|
|
1817
|
+
return flag === true || flag === 'true';
|
|
1818
|
+
}
|
|
1819
|
+
async triggerUpdateEmbedParams() {
|
|
1820
|
+
try {
|
|
1821
|
+
const params = await this.getUpdateEmbedParamsObject();
|
|
1822
|
+
this.trigger(types_1.HostEvent.UpdateEmbedParams, params);
|
|
1823
|
+
}
|
|
1824
|
+
catch (error) {
|
|
1825
|
+
logger_1.logger.error(errors_1.ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
1826
|
+
this.handleError({
|
|
1827
|
+
errorType: types_1.ErrorDetailsTypes.API,
|
|
1828
|
+
message: (error === null || error === void 0 ? void 0 : error.message) || errors_1.ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
1829
|
+
code: types_1.EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
1830
|
+
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
1831
|
+
});
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1706
1834
|
beforePrerenderVisible() {
|
|
1707
1835
|
// We can ignore this as its a bit expensive and the newer customers
|
|
1708
1836
|
// have moved on to UpdateEmbedParams supported clusters
|
|
@@ -1713,17 +1841,7 @@ class TsEmbed {
|
|
|
1713
1841
|
this.preRenderParamsApplied = new Promise((resolve) => {
|
|
1714
1842
|
this.executeAfterEmbedContainerLoaded(async () => {
|
|
1715
1843
|
try {
|
|
1716
|
-
|
|
1717
|
-
this.trigger(types_1.HostEvent.UpdateEmbedParams, params);
|
|
1718
|
-
}
|
|
1719
|
-
catch (error) {
|
|
1720
|
-
logger_1.logger.error(errors_1.ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
1721
|
-
this.handleError({
|
|
1722
|
-
errorType: types_1.ErrorDetailsTypes.API,
|
|
1723
|
-
message: (error === null || error === void 0 ? void 0 : error.message) || errors_1.ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
1724
|
-
code: types_1.EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
1725
|
-
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
1726
|
-
});
|
|
1844
|
+
await this.triggerUpdateEmbedParams();
|
|
1727
1845
|
}
|
|
1728
1846
|
finally {
|
|
1729
1847
|
setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
|
|
@@ -1738,7 +1856,7 @@ class TsEmbed {
|
|
|
1738
1856
|
* wrapper to overlay it.
|
|
1739
1857
|
*/
|
|
1740
1858
|
async showPreRender() {
|
|
1741
|
-
var _a;
|
|
1859
|
+
var _a, _b;
|
|
1742
1860
|
(0, mixpanel_service_1.uploadMixpanelEvent)(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_SHOW_PRE_RENDER, {
|
|
1743
1861
|
preRenderId: this.getPreRenderConfig().id,
|
|
1744
1862
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
@@ -1757,16 +1875,14 @@ class TsEmbed {
|
|
|
1757
1875
|
this.beforePrerenderVisible();
|
|
1758
1876
|
if (this.hostElement) {
|
|
1759
1877
|
this.insertedDomEl = this.createPreRenderPlaceholder();
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
&& wrapperHeight !== UNMEASURED_WRAPPER_HEIGHT) {
|
|
1769
|
-
this.insertedDomEl.style.height = wrapperHeight;
|
|
1878
|
+
if (this.viewConfig.fullHeight) {
|
|
1879
|
+
// If fullHeight has already sized the wrapper, seed the
|
|
1880
|
+
// placeholder with the same height so syncPreRenderStyle gets
|
|
1881
|
+
// an accurate rect.
|
|
1882
|
+
const existingHeight = this.preRenderWrapper.style.height;
|
|
1883
|
+
if (existingHeight) {
|
|
1884
|
+
this.insertedDomEl.style.height = existingHeight;
|
|
1885
|
+
}
|
|
1770
1886
|
}
|
|
1771
1887
|
const placeHolderId = this.getPreRenderIds().placeHolder;
|
|
1772
1888
|
// Remove any stale placeholder from a previous cycle. It is located
|
|
@@ -1780,19 +1896,29 @@ class TsEmbed {
|
|
|
1780
1896
|
(_a = this.hostElement.querySelector(`#${placeHolderId}`)) === null || _a === void 0 ? void 0 : _a.remove();
|
|
1781
1897
|
this.hostElement.appendChild(this.insertedDomEl);
|
|
1782
1898
|
this.syncPreRenderStyle();
|
|
1783
|
-
this.
|
|
1899
|
+
const customContainer = this.getCustomPreRenderContainer();
|
|
1900
|
+
if (customContainer && !this.containerScrollListener) {
|
|
1901
|
+
this.containerScrollListener = () => this.syncPreRenderStyle();
|
|
1902
|
+
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
1903
|
+
}
|
|
1904
|
+
if (!this.getPreRenderConfig().doNotTrackSize) {
|
|
1905
|
+
const observeTarget = (_b = this.insertedDomEl) !== null && _b !== void 0 ? _b : this.hostElement;
|
|
1906
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
1907
|
+
entries.forEach((entry) => {
|
|
1908
|
+
if (entry.target === observeTarget) {
|
|
1909
|
+
this.syncPreRenderStyle();
|
|
1910
|
+
}
|
|
1911
|
+
});
|
|
1912
|
+
});
|
|
1913
|
+
this.resizeObserver.observe(observeTarget);
|
|
1914
|
+
}
|
|
1784
1915
|
}
|
|
1785
1916
|
(0, utils_1.removeStyleProperties)(this.preRenderWrapper, [
|
|
1786
1917
|
'z-index',
|
|
1787
1918
|
'opacity',
|
|
1919
|
+
'pointer-events',
|
|
1788
1920
|
'overflow',
|
|
1789
|
-
'transform',
|
|
1790
1921
|
]);
|
|
1791
|
-
// Set rather than removed: a container that carries `pointer-events:
|
|
1792
|
-
// none` — the usual styling for a parking root that must not swallow
|
|
1793
|
-
// clicks — passes it down, and dropping the property here would leave
|
|
1794
|
-
// the inherited `none` in force and the frame dead to input.
|
|
1795
|
-
(0, utils_1.setStyleProperties)(this.preRenderWrapper, { pointerEvents: 'auto' });
|
|
1796
1922
|
this.subscribeToEvents();
|
|
1797
1923
|
// Setup fullscreen change handler for prerendered components
|
|
1798
1924
|
if (this.iFrame) {
|
|
@@ -1845,7 +1971,6 @@ class TsEmbed {
|
|
|
1845
1971
|
* If the component is not preRendered, it issues a warning.
|
|
1846
1972
|
*/
|
|
1847
1973
|
hidePreRender() {
|
|
1848
|
-
var _a;
|
|
1849
1974
|
(0, mixpanel_service_1.uploadMixpanelEvent)(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_HIDE_PRE_RENDER, {
|
|
1850
1975
|
preRenderId: this.getPreRenderConfig().id,
|
|
1851
1976
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
@@ -1865,15 +1990,12 @@ class TsEmbed {
|
|
|
1865
1990
|
top: '0',
|
|
1866
1991
|
left: '0',
|
|
1867
1992
|
overflow: 'hidden',
|
|
1868
|
-
// Keeps the measured size — so the next show needs no resize, which
|
|
1869
|
-
// is the point of pre-rendering — while lifting the box out of
|
|
1870
|
-
// the container's scrollable area. Overflow only extends
|
|
1871
|
-
// downwards, so a hidden frame parked above the top edge adds
|
|
1872
|
-
// none, where one left at full height shows as blank scroll space.
|
|
1873
|
-
transform: PRERENDER_PARKED_TRANSFORM,
|
|
1874
1993
|
};
|
|
1875
1994
|
(0, utils_1.setStyleProperties)(this.preRenderWrapper, preRenderHideStyles);
|
|
1876
|
-
|
|
1995
|
+
this.removeContainerScrollListener();
|
|
1996
|
+
if (this.resizeObserver) {
|
|
1997
|
+
this.resizeObserver.disconnect();
|
|
1998
|
+
}
|
|
1877
1999
|
const placeHolderEle = this.getPreRenderPlaceHolderElement();
|
|
1878
2000
|
if (placeHolderEle) {
|
|
1879
2001
|
placeHolderEle.parentElement.removeChild(placeHolderEle);
|