@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
|
@@ -12,7 +12,7 @@ import { isMessageFromIframe } from '../utils/transport/iframe-transport';
|
|
|
12
12
|
import { logger } from '../utils/logger';
|
|
13
13
|
import { getAuthenticationToken } from '../authToken';
|
|
14
14
|
import { AnswerService } from '../utils/graphql/answerService/answerService';
|
|
15
|
-
import { getEncodedQueryParamsString, getCssDimension, embedEventStatus, setAttributes, getCustomisations, getRuntimeFilters, getDOMNode, querySelectorAcrossShadowRoot, getFilterQuery, getQueryParamString, getRuntimeParameters, setStyleProperties, removeStyleProperties, getHostEventsConfig, deserializeParam,
|
|
15
|
+
import { getEncodedQueryParamsString, getCssDimension, embedEventStatus, setAttributes, getCustomisations, getRuntimeFilters, getDOMNode, querySelectorAcrossShadowRoot, getFilterQuery, getQueryParamString, getRuntimeParameters, setStyleProperties, removeStyleProperties, getHostEventsConfig, deserializeParam, setParamIfDefined, } from '../utils';
|
|
16
16
|
import { getCustomActions } from '../utils/custom-actions';
|
|
17
17
|
import { getThoughtSpotHost, URL_MAX_LENGTH, DEFAULT_EMBED_WIDTH, DEFAULT_EMBED_HEIGHT, getV2BasePath, } from '../config';
|
|
18
18
|
import { AuthType, HostEvent, EmbedEvent, Action, Param, ContextMenuTriggerOptions, EmbedErrorSeverity, ErrorDetailsTypes, EmbedErrorCodes, } from '../types';
|
|
@@ -39,9 +39,6 @@ const TS_EMBED_ID = '_thoughtspot-embed';
|
|
|
39
39
|
*/
|
|
40
40
|
const PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY = 'tsEmbedOriginalPosition';
|
|
41
41
|
const PRERENDER_WRAPPER_ID_PREFIX = 'tsEmbed-pre-render-wrapper-';
|
|
42
|
-
const PRERENDER_PARKED_TRANSFORM = 'translateY(-100%)';
|
|
43
|
-
/** The height createPreRenderWrapper() seeds before anything is measured. */
|
|
44
|
-
const UNMEASURED_WRAPPER_HEIGHT = '100vh';
|
|
45
42
|
// The container applies UpdateEmbedParams through React state, so a delivered
|
|
46
43
|
// post is not the same as the params being in effect.
|
|
47
44
|
const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
|
|
@@ -49,6 +46,97 @@ const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
|
|
|
49
46
|
// truthy, so null or '' leaves the previous embed's values in place. '&' is
|
|
50
47
|
// truthy and parses to {}.
|
|
51
48
|
const NO_RUNTIME_PARAMS = '&';
|
|
49
|
+
/**
|
|
50
|
+
* Params kept on the iframe `src` when `excludeConfigFromURL` is set. The rest
|
|
51
|
+
* are sent in the APP_INIT payload.
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export const BOOTSTRAP_URL_PARAMS = new Set([
|
|
55
|
+
// Marks the app as embedded.
|
|
56
|
+
Param.EmbedApp,
|
|
57
|
+
// The host page URL, used to validate the postMessage origin.
|
|
58
|
+
Param.HostAppUrl,
|
|
59
|
+
// The SDK version.
|
|
60
|
+
Param.Version,
|
|
61
|
+
// The authentication type set in init.
|
|
62
|
+
Param.AuthType,
|
|
63
|
+
// Whether the app signs the user in automatically.
|
|
64
|
+
Param.AutoLogin,
|
|
65
|
+
// Stops the app from redirecting to its login page.
|
|
66
|
+
Param.DisableLoginRedirect,
|
|
67
|
+
// Forces the SAML redirect for EmbeddedSSO.
|
|
68
|
+
Param.ForceSAMLAutoRedirect,
|
|
69
|
+
// Set for cookieless trusted authentication.
|
|
70
|
+
Param.cookieless,
|
|
71
|
+
// Lets the app use the pre-fetched auth info.
|
|
72
|
+
Param.preAuthCache,
|
|
73
|
+
// Blocks access to the full app outside the embed.
|
|
74
|
+
Param.blockNonEmbedFullAppAccess,
|
|
75
|
+
// The org to load, which the auth info depends on.
|
|
76
|
+
Param.OverrideOrgId,
|
|
77
|
+
// The host window height when the iframe loads.
|
|
78
|
+
Param.ViewPortHeight,
|
|
79
|
+
// The host window width when the iframe loads.
|
|
80
|
+
Param.ViewPortWidth,
|
|
81
|
+
// The app's client log level.
|
|
82
|
+
Param.ClientLogLevel,
|
|
83
|
+
// Lets the app override the native console.
|
|
84
|
+
Param.OverrideNativeConsole,
|
|
85
|
+
// An extra Pendo tracking key.
|
|
86
|
+
Param.PendoTrackingKey,
|
|
87
|
+
// The locale for number formatting.
|
|
88
|
+
Param.NumberFormatLocale,
|
|
89
|
+
// The locale for date formatting.
|
|
90
|
+
Param.DateFormatLocale,
|
|
91
|
+
// The currency format.
|
|
92
|
+
Param.CurrencyFormat,
|
|
93
|
+
// The UI language.
|
|
94
|
+
Param.Locale,
|
|
95
|
+
// Turns on dark mode.
|
|
96
|
+
Param.IsDarkMode,
|
|
97
|
+
// Turns on the radiant theme that dark mode needs.
|
|
98
|
+
Param.RadiantThemeEnabled,
|
|
99
|
+
// Marks a SearchEmbed or SearchBarEmbed.
|
|
100
|
+
Param.searchEmbed,
|
|
101
|
+
// Marks a LiveboardEmbed.
|
|
102
|
+
Param.livedBoardEmbed,
|
|
103
|
+
// Marks a SpotterAgentEmbed.
|
|
104
|
+
Param.isSpotterAgentEmbed,
|
|
105
|
+
// Marks a SpotterEmbed.
|
|
106
|
+
Param.SpotterEnabled,
|
|
107
|
+
// Marks an AppEmbed.
|
|
108
|
+
Param.IsFullAppEmbed,
|
|
109
|
+
// Legacy flag for the onBeforeGetVizData API intercept.
|
|
110
|
+
Param.IsOnBeforeGetVizDataInterceptEnabled,
|
|
111
|
+
// Lets the host override links in the app.
|
|
112
|
+
Param.LinkOverride,
|
|
113
|
+
// Turns on version 2 of the link overrides.
|
|
114
|
+
Param.EnableLinkOverridesV2,
|
|
115
|
+
// Stops links from opening in a new tab.
|
|
116
|
+
Param.DisableRedirectionLinksInNewTab,
|
|
117
|
+
// Uses replaceState instead of pushState for app navigation.
|
|
118
|
+
Param.OverrideHistoryState,
|
|
119
|
+
// Shows search results as a table.
|
|
120
|
+
Param.ForceTable,
|
|
121
|
+
// The URL of the custom string IDs file.
|
|
122
|
+
Param.StringIDsUrl,
|
|
123
|
+
// The data sources that search opens with.
|
|
124
|
+
Param.DataSources,
|
|
125
|
+
// Exposes translation IDs in the app.
|
|
126
|
+
Param.ExposeTranslationIDs,
|
|
127
|
+
// The URL of the custom icon sprite.
|
|
128
|
+
Param.IconSpriteUrl,
|
|
129
|
+
// The tag that filters the metadata lists in an AppEmbed.
|
|
130
|
+
Param.Tag,
|
|
131
|
+
// Set when a Liveboard embed shows a single visualization (vizId).
|
|
132
|
+
Param.vizEmbed,
|
|
133
|
+
// Whether search opens with the last-selected data sources.
|
|
134
|
+
Param.UseLastSelectedDataSource,
|
|
135
|
+
// The query mode Spotter opens in.
|
|
136
|
+
Param.DefaultQueryMode,
|
|
137
|
+
// The initial search query. Omitted with excludeSearchTokenStringFromURL.
|
|
138
|
+
Param.searchTokenString,
|
|
139
|
+
]);
|
|
52
140
|
/**
|
|
53
141
|
* The event id map from v2 event names to v1 event id
|
|
54
142
|
* v1 events are the classic embed events implemented in Blink v1
|
|
@@ -77,6 +165,7 @@ export class TsEmbed {
|
|
|
77
165
|
this.embedNodeKey = '__tsEmbed';
|
|
78
166
|
this.embedContainerLoadedKey = '__tsEmbedContainerLoaded';
|
|
79
167
|
this.isAppInitialized = false;
|
|
168
|
+
this.initDataParams = {};
|
|
80
169
|
/**
|
|
81
170
|
* Should we encode URL Query Params using base64 encoding which ThoughtSpot
|
|
82
171
|
* will generate for embedding. This provides additional security to
|
|
@@ -86,6 +175,7 @@ export class TsEmbed {
|
|
|
86
175
|
this.shouldEncodeUrlQueryParams = false;
|
|
87
176
|
this.defaultHiddenActions = [Action.ReportError];
|
|
88
177
|
this.preRenderContainerEl = document.body;
|
|
178
|
+
this.containerScrollListener = null;
|
|
89
179
|
/**
|
|
90
180
|
* Handler for fullscreen change events
|
|
91
181
|
*/
|
|
@@ -111,7 +201,7 @@ export class TsEmbed {
|
|
|
111
201
|
*/
|
|
112
202
|
this.appInitCb = async (_, responder) => {
|
|
113
203
|
try {
|
|
114
|
-
const appInitData = await this.getAppInitData();
|
|
204
|
+
const appInitData = this.withInitDataParams(await this.getAppInitData());
|
|
115
205
|
this.isAppInitialized = true;
|
|
116
206
|
responder({
|
|
117
207
|
type: EmbedEvent.APP_INIT,
|
|
@@ -539,6 +629,18 @@ export class TsEmbed {
|
|
|
539
629
|
async getAppInitData() {
|
|
540
630
|
return this.getDefaultAppInitData();
|
|
541
631
|
}
|
|
632
|
+
withInitDataParams(appInitData) {
|
|
633
|
+
if (isEmpty(this.initDataParams)) {
|
|
634
|
+
return appInitData;
|
|
635
|
+
}
|
|
636
|
+
return {
|
|
637
|
+
...appInitData,
|
|
638
|
+
embedParams: {
|
|
639
|
+
...this.initDataParams,
|
|
640
|
+
...(appInitData.embedParams || {}),
|
|
641
|
+
},
|
|
642
|
+
};
|
|
643
|
+
}
|
|
542
644
|
/**
|
|
543
645
|
* Helper method to refresh/update auth token for TrustedAuthTokenCookieless auth type
|
|
544
646
|
* @param responder - Function to send response back
|
|
@@ -598,7 +700,7 @@ export class TsEmbed {
|
|
|
598
700
|
* @returns queryParams
|
|
599
701
|
*/
|
|
600
702
|
getBaseQueryParams(queryParams = {}) {
|
|
601
|
-
var _a, _b, _c, _d;
|
|
703
|
+
var _a, _b, _c, _d, _e;
|
|
602
704
|
let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
|
|
603
705
|
// The below check is needed because TS Cloud firewall, blocks
|
|
604
706
|
// localhost/127.0.0.1 in any url param.
|
|
@@ -635,6 +737,15 @@ export class TsEmbed {
|
|
|
635
737
|
if (this.embedConfig.currencyFormat) {
|
|
636
738
|
queryParams[Param.CurrencyFormat] = this.embedConfig.currencyFormat;
|
|
637
739
|
}
|
|
740
|
+
// The view config wins over init, so an embed can opt out of a dark
|
|
741
|
+
// mode set in `init`. `??` and not `||`, so that an explicit `false`
|
|
742
|
+
// overrides an init-level `true`.
|
|
743
|
+
const isDarkMode = (_c = this.viewConfig.isDarkMode) !== null && _c !== void 0 ? _c : this.embedConfig.isDarkMode;
|
|
744
|
+
setParamIfDefined(queryParams, Param.IsDarkMode, isDarkMode, true);
|
|
745
|
+
// The app's dark mode lives in its radiant theme, so turn that on too.
|
|
746
|
+
if (isDarkMode) {
|
|
747
|
+
queryParams[Param.RadiantThemeEnabled] = true;
|
|
748
|
+
}
|
|
638
749
|
const { disabledActions, disabledActionReason, hiddenActions, visibleActions, hiddenTabs, visibleTabs, showAlerts, additionalFlags: additionalFlagsFromView, locale, customizations, contextMenuTrigger, linkOverride, enableLinkOverridesV2, insertInToSlide, disableRedirectionLinksInNewTab, overrideOrgId, overrideHistoryState, exposeTranslationIDs, primaryAction, } = this.viewConfig;
|
|
639
750
|
const { additionalFlags: additionalFlagsFromInit } = this.embedConfig;
|
|
640
751
|
const additionalFlags = {
|
|
@@ -700,7 +811,7 @@ export class TsEmbed {
|
|
|
700
811
|
if (spriteUrl) {
|
|
701
812
|
queryParams[Param.IconSpriteUrl] = spriteUrl.replace('https://', '');
|
|
702
813
|
}
|
|
703
|
-
const stringIDsUrl = ((
|
|
814
|
+
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);
|
|
704
815
|
if (stringIDsUrl) {
|
|
705
816
|
queryParams[Param.StringIDsUrl] = stringIDsUrl;
|
|
706
817
|
}
|
|
@@ -754,13 +865,32 @@ export class TsEmbed {
|
|
|
754
865
|
return path;
|
|
755
866
|
}
|
|
756
867
|
getEmbedParams() {
|
|
757
|
-
const queryParams = this.
|
|
868
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
758
869
|
return getQueryParamString(queryParams);
|
|
759
870
|
}
|
|
760
871
|
getEmbedParamsObject() {
|
|
761
872
|
const params = this.getBaseQueryParams();
|
|
762
873
|
return params;
|
|
763
874
|
}
|
|
875
|
+
getUrlQueryParamsObject() {
|
|
876
|
+
const queryParams = this.getEmbedParamsObject();
|
|
877
|
+
if (!this.isConfigExcludedFromUrl()) {
|
|
878
|
+
this.initDataParams = {};
|
|
879
|
+
return queryParams;
|
|
880
|
+
}
|
|
881
|
+
const urlParams = {};
|
|
882
|
+
const excludedParams = {};
|
|
883
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
884
|
+
if (BOOTSTRAP_URL_PARAMS.has(key)) {
|
|
885
|
+
urlParams[key] = value;
|
|
886
|
+
}
|
|
887
|
+
else {
|
|
888
|
+
excludedParams[key] = deserializeParam(value);
|
|
889
|
+
}
|
|
890
|
+
});
|
|
891
|
+
this.initDataParams = excludedParams;
|
|
892
|
+
return urlParams;
|
|
893
|
+
}
|
|
764
894
|
getRootIframeSrc() {
|
|
765
895
|
const query = this.getEmbedParams();
|
|
766
896
|
return this.getEmbedBasePath(query);
|
|
@@ -933,7 +1063,7 @@ export class TsEmbed {
|
|
|
933
1063
|
top: '0',
|
|
934
1064
|
left: '0',
|
|
935
1065
|
width: '100vw',
|
|
936
|
-
height:
|
|
1066
|
+
height: '100vh',
|
|
937
1067
|
};
|
|
938
1068
|
setStyleProperties(preRenderWrapper, initialPreRenderWrapperStyle);
|
|
939
1069
|
return preRenderWrapper;
|
|
@@ -1001,26 +1131,10 @@ export class TsEmbed {
|
|
|
1001
1131
|
return placeholder;
|
|
1002
1132
|
}
|
|
1003
1133
|
/**
|
|
1004
|
-
* Resolves the configured preRenderContainer to a live element
|
|
1005
|
-
* selector is re-queried on every call so
|
|
1006
|
-
* replacing the node) resolves to the
|
|
1007
|
-
* directly cannot be re-resolved.
|
|
1008
|
-
*
|
|
1009
|
-
* With nothing configured the frame goes into the host element's nearest
|
|
1010
|
-
* scrolling ancestor, falling back to `document.body`.
|
|
1011
|
-
*
|
|
1012
|
-
* The wrapper is absolutely positioned, so it follows the page for free —
|
|
1013
|
-
* but only while it sits inside whatever scrolls. `document.body` is right
|
|
1014
|
-
* only when the document itself is the scroller; an app that scrolls an
|
|
1015
|
-
* inner element instead left the frame pinned to the viewport while the page
|
|
1016
|
-
* moved under it (SCAL-338563). Being inside the scroller also lets wheel
|
|
1017
|
-
* events chain out of the frame into it, which they cannot do from
|
|
1018
|
-
* `document.body`.
|
|
1019
|
-
*
|
|
1020
|
-
* A scrolling ancestor is layout chrome rather than route content, so it
|
|
1021
|
-
* outlives the embed in practice; and if it does go, the host element goes
|
|
1022
|
-
* with it and this instance is remounting anyway.
|
|
1023
|
-
* `reconcilePreRenderContainer` re-runs this on a detached container.
|
|
1134
|
+
* Resolves the configured preRenderContainer to a live element, falling
|
|
1135
|
+
* back to `document.body`. A string selector is re-queried on every call so
|
|
1136
|
+
* a remounted container (E.g.: React replacing the node) resolves to the
|
|
1137
|
+
* fresh element; an element passed directly cannot be re-resolved.
|
|
1024
1138
|
*/
|
|
1025
1139
|
resolvePreRenderContainerTarget() {
|
|
1026
1140
|
var _a;
|
|
@@ -1040,13 +1154,7 @@ export class TsEmbed {
|
|
|
1040
1154
|
else if (containerConfig) {
|
|
1041
1155
|
container = containerConfig;
|
|
1042
1156
|
}
|
|
1043
|
-
|
|
1044
|
-
return container;
|
|
1045
|
-
}
|
|
1046
|
-
if (!this.hostElement) {
|
|
1047
|
-
return document.body;
|
|
1048
|
-
}
|
|
1049
|
-
return (_a = getScrollableAncestors(this.hostElement)[0]) !== null && _a !== void 0 ? _a : document.body;
|
|
1157
|
+
return (_a = container) !== null && _a !== void 0 ? _a : document.body;
|
|
1050
1158
|
}
|
|
1051
1159
|
inheritPreRenderContainer() {
|
|
1052
1160
|
var _a;
|
|
@@ -1091,9 +1199,8 @@ export class TsEmbed {
|
|
|
1091
1199
|
* Re-attaches the wrapper to a live container when the previously resolved
|
|
1092
1200
|
* one has been detached or no longer holds the wrapper — e.g. the host app
|
|
1093
1201
|
* remounted a custom preRenderContainer, which would otherwise leave a stale
|
|
1094
|
-
* reference and collapse the wrapper.
|
|
1095
|
-
*
|
|
1096
|
-
* is left untouched, as there is nothing to re-query.
|
|
1202
|
+
* reference and collapse the wrapper. Only string selectors can be
|
|
1203
|
+
* re-resolved; a container passed as an element is left untouched.
|
|
1097
1204
|
*/
|
|
1098
1205
|
reconcilePreRenderContainer() {
|
|
1099
1206
|
const wrapper = this.preRenderWrapper;
|
|
@@ -1112,6 +1219,14 @@ export class TsEmbed {
|
|
|
1112
1219
|
if (resolved === stored && stored.contains(wrapper)) {
|
|
1113
1220
|
return;
|
|
1114
1221
|
}
|
|
1222
|
+
if (this.containerScrollListener && stored !== resolved) {
|
|
1223
|
+
if (stored !== document.body) {
|
|
1224
|
+
stored.removeEventListener('scroll', this.containerScrollListener);
|
|
1225
|
+
}
|
|
1226
|
+
if (resolved !== document.body) {
|
|
1227
|
+
resolved.addEventListener('scroll', this.containerScrollListener);
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1115
1230
|
this.preRenderContainerEl = resolved;
|
|
1116
1231
|
this.applyPreRenderContainerPositioning();
|
|
1117
1232
|
if (wrapper.parentNode !== resolved) {
|
|
@@ -1173,12 +1288,11 @@ export class TsEmbed {
|
|
|
1173
1288
|
*/
|
|
1174
1289
|
setIFrameHeight(height) {
|
|
1175
1290
|
if (this.isPreRendered) {
|
|
1176
|
-
const next = getCssDimension(height);
|
|
1177
1291
|
if (this.insertedDomEl) {
|
|
1178
|
-
this.insertedDomEl.style.height =
|
|
1292
|
+
this.insertedDomEl.style.height = getCssDimension(height);
|
|
1179
1293
|
}
|
|
1180
1294
|
else if (this.preRenderWrapper) {
|
|
1181
|
-
this.preRenderWrapper.style.height =
|
|
1295
|
+
this.preRenderWrapper.style.height = getCssDimension(height);
|
|
1182
1296
|
}
|
|
1183
1297
|
}
|
|
1184
1298
|
else {
|
|
@@ -1462,9 +1576,16 @@ export class TsEmbed {
|
|
|
1462
1576
|
* @param args
|
|
1463
1577
|
*/
|
|
1464
1578
|
async render() {
|
|
1579
|
+
var _a, _b, _c;
|
|
1465
1580
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_CALLED, {
|
|
1466
1581
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
1467
1582
|
});
|
|
1583
|
+
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_INIT_ACTIONS, {
|
|
1584
|
+
embedComponentType: this.viewConfig.embedComponentType,
|
|
1585
|
+
hiddenActions: (_a = this.viewConfig.hiddenActions) !== null && _a !== void 0 ? _a : [],
|
|
1586
|
+
visibleActions: (_b = this.viewConfig.visibleActions) !== null && _b !== void 0 ? _b : [],
|
|
1587
|
+
disabledActions: (_c = this.viewConfig.disabledActions) !== null && _c !== void 0 ? _c : [],
|
|
1588
|
+
});
|
|
1468
1589
|
if (!getIsInitCalled()) {
|
|
1469
1590
|
logger.error(ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
|
|
1470
1591
|
}
|
|
@@ -1613,47 +1734,34 @@ export class TsEmbed {
|
|
|
1613
1734
|
delete container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY];
|
|
1614
1735
|
}
|
|
1615
1736
|
/**
|
|
1616
|
-
*
|
|
1617
|
-
*
|
|
1618
|
-
* Position deliberately has no equivalent. An absolutely positioned wrapper
|
|
1619
|
-
* follows its containing block for free, so a correctly placed frame is the
|
|
1620
|
-
* browser's job and costs nothing; repositioning it on scroll would mean a
|
|
1621
|
-
* layout read and a style write per frame to compensate for placing it in
|
|
1622
|
-
* the wrong box. Size is the one thing the browser will not do for us: the
|
|
1623
|
-
* placeholder grows when the embedded app reports a new height, and the
|
|
1624
|
-
* wrapper has to be told.
|
|
1737
|
+
* Detaches and clears the container scroll listener, if one is attached.
|
|
1625
1738
|
*/
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
if (this.getPreRenderConfig().doNotTrackSize || typeof ResizeObserver === 'undefined') {
|
|
1739
|
+
removeContainerScrollListener() {
|
|
1740
|
+
if (!this.containerScrollListener) {
|
|
1629
1741
|
return;
|
|
1630
1742
|
}
|
|
1631
|
-
const
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
}
|
|
1635
|
-
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
1636
|
-
this.resizeObserver = new ResizeObserver(() => this.syncPreRenderStyle());
|
|
1637
|
-
this.resizeObserver.observe(placeholder);
|
|
1743
|
+
const customContainer = this.getCustomPreRenderContainer();
|
|
1744
|
+
customContainer === null || customContainer === void 0 ? void 0 : customContainer.removeEventListener('scroll', this.containerScrollListener);
|
|
1745
|
+
this.containerScrollListener = null;
|
|
1638
1746
|
}
|
|
1639
1747
|
/**
|
|
1640
1748
|
* Destroys the ThoughtSpot embed, and remove any nodes from the DOM.
|
|
1641
1749
|
* @version SDK: 1.19.1 | ThoughtSpot: *
|
|
1642
1750
|
*/
|
|
1643
1751
|
destroy() {
|
|
1644
|
-
var _a, _b, _c
|
|
1752
|
+
var _a, _b, _c;
|
|
1645
1753
|
try {
|
|
1646
1754
|
this.removeFullscreenChangeHandler();
|
|
1647
|
-
|
|
1755
|
+
this.removeContainerScrollListener();
|
|
1648
1756
|
this.unsubscribeToEvents();
|
|
1649
|
-
(
|
|
1757
|
+
(_a = this.preRenderWrapper) === null || _a === void 0 ? void 0 : _a.remove();
|
|
1650
1758
|
this.restorePreRenderContainerPosition();
|
|
1651
1759
|
if (!this.isRendered) {
|
|
1652
1760
|
return;
|
|
1653
1761
|
}
|
|
1654
1762
|
if (!getEmbedConfig().waitForCleanupOnDestroy) {
|
|
1655
1763
|
this.trigger(HostEvent.DestroyEmbed);
|
|
1656
|
-
(
|
|
1764
|
+
(_c = (_b = this.insertedDomEl) === null || _b === void 0 ? void 0 : _b.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(this.insertedDomEl);
|
|
1657
1765
|
}
|
|
1658
1766
|
else {
|
|
1659
1767
|
const cleanupTimeout = getEmbedConfig().cleanupTimeout;
|
|
@@ -1699,6 +1807,26 @@ export class TsEmbed {
|
|
|
1699
1807
|
this.isRendered = true;
|
|
1700
1808
|
return this.renderIFrame(prerenderFrameSrc);
|
|
1701
1809
|
}
|
|
1810
|
+
isConfigExcludedFromUrl() {
|
|
1811
|
+
var _a, _b, _c;
|
|
1812
|
+
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;
|
|
1813
|
+
return flag === true || flag === 'true';
|
|
1814
|
+
}
|
|
1815
|
+
async triggerUpdateEmbedParams() {
|
|
1816
|
+
try {
|
|
1817
|
+
const params = await this.getUpdateEmbedParamsObject();
|
|
1818
|
+
this.trigger(HostEvent.UpdateEmbedParams, params);
|
|
1819
|
+
}
|
|
1820
|
+
catch (error) {
|
|
1821
|
+
logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
1822
|
+
this.handleError({
|
|
1823
|
+
errorType: ErrorDetailsTypes.API,
|
|
1824
|
+
message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
1825
|
+
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
1826
|
+
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
1827
|
+
});
|
|
1828
|
+
}
|
|
1829
|
+
}
|
|
1702
1830
|
beforePrerenderVisible() {
|
|
1703
1831
|
// We can ignore this as its a bit expensive and the newer customers
|
|
1704
1832
|
// have moved on to UpdateEmbedParams supported clusters
|
|
@@ -1709,17 +1837,7 @@ export class TsEmbed {
|
|
|
1709
1837
|
this.preRenderParamsApplied = new Promise((resolve) => {
|
|
1710
1838
|
this.executeAfterEmbedContainerLoaded(async () => {
|
|
1711
1839
|
try {
|
|
1712
|
-
|
|
1713
|
-
this.trigger(HostEvent.UpdateEmbedParams, params);
|
|
1714
|
-
}
|
|
1715
|
-
catch (error) {
|
|
1716
|
-
logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
1717
|
-
this.handleError({
|
|
1718
|
-
errorType: ErrorDetailsTypes.API,
|
|
1719
|
-
message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
1720
|
-
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
1721
|
-
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
1722
|
-
});
|
|
1840
|
+
await this.triggerUpdateEmbedParams();
|
|
1723
1841
|
}
|
|
1724
1842
|
finally {
|
|
1725
1843
|
setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
|
|
@@ -1734,7 +1852,7 @@ export class TsEmbed {
|
|
|
1734
1852
|
* wrapper to overlay it.
|
|
1735
1853
|
*/
|
|
1736
1854
|
async showPreRender() {
|
|
1737
|
-
var _a;
|
|
1855
|
+
var _a, _b;
|
|
1738
1856
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_SHOW_PRE_RENDER, {
|
|
1739
1857
|
preRenderId: this.getPreRenderConfig().id,
|
|
1740
1858
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
@@ -1753,16 +1871,14 @@ export class TsEmbed {
|
|
|
1753
1871
|
this.beforePrerenderVisible();
|
|
1754
1872
|
if (this.hostElement) {
|
|
1755
1873
|
this.insertedDomEl = this.createPreRenderPlaceholder();
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
&& wrapperHeight !== UNMEASURED_WRAPPER_HEIGHT) {
|
|
1765
|
-
this.insertedDomEl.style.height = wrapperHeight;
|
|
1874
|
+
if (this.viewConfig.fullHeight) {
|
|
1875
|
+
// If fullHeight has already sized the wrapper, seed the
|
|
1876
|
+
// placeholder with the same height so syncPreRenderStyle gets
|
|
1877
|
+
// an accurate rect.
|
|
1878
|
+
const existingHeight = this.preRenderWrapper.style.height;
|
|
1879
|
+
if (existingHeight) {
|
|
1880
|
+
this.insertedDomEl.style.height = existingHeight;
|
|
1881
|
+
}
|
|
1766
1882
|
}
|
|
1767
1883
|
const placeHolderId = this.getPreRenderIds().placeHolder;
|
|
1768
1884
|
// Remove any stale placeholder from a previous cycle. It is located
|
|
@@ -1776,19 +1892,29 @@ export class TsEmbed {
|
|
|
1776
1892
|
(_a = this.hostElement.querySelector(`#${placeHolderId}`)) === null || _a === void 0 ? void 0 : _a.remove();
|
|
1777
1893
|
this.hostElement.appendChild(this.insertedDomEl);
|
|
1778
1894
|
this.syncPreRenderStyle();
|
|
1779
|
-
this.
|
|
1895
|
+
const customContainer = this.getCustomPreRenderContainer();
|
|
1896
|
+
if (customContainer && !this.containerScrollListener) {
|
|
1897
|
+
this.containerScrollListener = () => this.syncPreRenderStyle();
|
|
1898
|
+
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
1899
|
+
}
|
|
1900
|
+
if (!this.getPreRenderConfig().doNotTrackSize) {
|
|
1901
|
+
const observeTarget = (_b = this.insertedDomEl) !== null && _b !== void 0 ? _b : this.hostElement;
|
|
1902
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
1903
|
+
entries.forEach((entry) => {
|
|
1904
|
+
if (entry.target === observeTarget) {
|
|
1905
|
+
this.syncPreRenderStyle();
|
|
1906
|
+
}
|
|
1907
|
+
});
|
|
1908
|
+
});
|
|
1909
|
+
this.resizeObserver.observe(observeTarget);
|
|
1910
|
+
}
|
|
1780
1911
|
}
|
|
1781
1912
|
removeStyleProperties(this.preRenderWrapper, [
|
|
1782
1913
|
'z-index',
|
|
1783
1914
|
'opacity',
|
|
1915
|
+
'pointer-events',
|
|
1784
1916
|
'overflow',
|
|
1785
|
-
'transform',
|
|
1786
1917
|
]);
|
|
1787
|
-
// Set rather than removed: a container that carries `pointer-events:
|
|
1788
|
-
// none` — the usual styling for a parking root that must not swallow
|
|
1789
|
-
// clicks — passes it down, and dropping the property here would leave
|
|
1790
|
-
// the inherited `none` in force and the frame dead to input.
|
|
1791
|
-
setStyleProperties(this.preRenderWrapper, { pointerEvents: 'auto' });
|
|
1792
1918
|
this.subscribeToEvents();
|
|
1793
1919
|
// Setup fullscreen change handler for prerendered components
|
|
1794
1920
|
if (this.iFrame) {
|
|
@@ -1841,7 +1967,6 @@ export class TsEmbed {
|
|
|
1841
1967
|
* If the component is not preRendered, it issues a warning.
|
|
1842
1968
|
*/
|
|
1843
1969
|
hidePreRender() {
|
|
1844
|
-
var _a;
|
|
1845
1970
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_HIDE_PRE_RENDER, {
|
|
1846
1971
|
preRenderId: this.getPreRenderConfig().id,
|
|
1847
1972
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
@@ -1861,15 +1986,12 @@ export class TsEmbed {
|
|
|
1861
1986
|
top: '0',
|
|
1862
1987
|
left: '0',
|
|
1863
1988
|
overflow: 'hidden',
|
|
1864
|
-
// Keeps the measured size — so the next show needs no resize, which
|
|
1865
|
-
// is the point of pre-rendering — while lifting the box out of
|
|
1866
|
-
// the container's scrollable area. Overflow only extends
|
|
1867
|
-
// downwards, so a hidden frame parked above the top edge adds
|
|
1868
|
-
// none, where one left at full height shows as blank scroll space.
|
|
1869
|
-
transform: PRERENDER_PARKED_TRANSFORM,
|
|
1870
1989
|
};
|
|
1871
1990
|
setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
|
|
1872
|
-
|
|
1991
|
+
this.removeContainerScrollListener();
|
|
1992
|
+
if (this.resizeObserver) {
|
|
1993
|
+
this.resizeObserver.disconnect();
|
|
1994
|
+
}
|
|
1873
1995
|
const placeHolderEle = this.getPreRenderPlaceHolderElement();
|
|
1874
1996
|
if (placeHolderEle) {
|
|
1875
1997
|
placeHolderEle.parentElement.removeChild(placeHolderEle);
|