@thoughtspot/visual-embed-sdk 1.52.0 → 1.52.1
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 +9 -1
- package/cjs/src/contracts/contracts.spec.d.ts +2 -0
- package/cjs/src/contracts/contracts.spec.d.ts.map +1 -0
- package/cjs/src/contracts/contracts.spec.js +345 -0
- package/cjs/src/contracts/contracts.spec.js.map +1 -0
- package/cjs/src/contracts/embed-event-payloads.d.ts +73 -0
- package/cjs/src/contracts/embed-event-payloads.d.ts.map +1 -0
- package/cjs/src/contracts/embed-event-payloads.js +3 -0
- package/cjs/src/contracts/embed-event-payloads.js.map +1 -0
- package/cjs/src/contracts/host-event-contracts.d.ts +378 -0
- package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -0
- package/cjs/src/contracts/host-event-contracts.js +3 -0
- package/cjs/src/contracts/host-event-contracts.js.map +1 -0
- package/cjs/src/contracts/index.d.ts +22 -0
- package/cjs/src/contracts/index.d.ts.map +1 -0
- package/cjs/src/contracts/index.js +33 -0
- package/cjs/src/contracts/index.js.map +1 -0
- package/cjs/src/contracts/ui-passthrough-contracts.d.ts +277 -0
- package/cjs/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
- package/cjs/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
- package/cjs/src/contracts/ui-passthrough-contracts.js.map +1 -0
- package/cjs/src/embed/app.d.ts +17 -140
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +20 -120
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +70 -26
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/events.spec.js +12 -2
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +3 -2
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +23 -18
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +36 -36
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.d.ts +1 -1
- package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.js +3 -3
- package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +9 -161
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +66 -134
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +211 -28
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search.d.ts +14 -0
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +4 -1
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +65 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +17 -22
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +82 -56
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +325 -17
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/full-height.d.ts +137 -0
- package/cjs/src/full-height.d.ts.map +1 -0
- package/cjs/src/full-height.js +272 -0
- package/cjs/src/full-height.js.map +1 -0
- package/cjs/src/full-height.spec.d.ts +2 -0
- package/cjs/src/full-height.spec.d.ts.map +1 -0
- package/cjs/src/full-height.spec.js +835 -0
- package/cjs/src/full-height.spec.js.map +1 -0
- package/cjs/src/index.d.ts +4 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -3
- package/cjs/src/index.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.map +1 -1
- package/cjs/src/react/all-types-export.parity.spec.js +55 -3
- package/cjs/src/react/all-types-export.parity.spec.js.map +1 -1
- package/cjs/src/types.d.ts +540 -3
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +326 -1
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/processTrigger.d.ts +3 -1
- package/cjs/src/utils/processTrigger.d.ts.map +1 -1
- package/cjs/src/utils/processTrigger.js +19 -51
- package/cjs/src/utils/processTrigger.js.map +1 -1
- package/cjs/src/utils/transport/iframe-transport.d.ts +55 -0
- package/cjs/src/utils/transport/iframe-transport.d.ts.map +1 -0
- package/cjs/src/utils/transport/iframe-transport.js +108 -0
- package/cjs/src/utils/transport/iframe-transport.js.map +1 -0
- package/cjs/src/utils/transport/iframe-transport.spec.d.ts +2 -0
- package/cjs/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
- package/cjs/src/utils/transport/iframe-transport.spec.js +140 -0
- package/cjs/src/utils/transport/iframe-transport.spec.js.map +1 -0
- package/cjs/src/utils.d.ts +18 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +39 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +62 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-BMppCU63.js → index-C1pmYb5H.js} +1 -1
- package/dist/src/contracts/contracts.spec.d.ts +2 -0
- package/dist/src/contracts/contracts.spec.d.ts.map +1 -0
- package/dist/src/contracts/embed-event-payloads.d.ts +73 -0
- package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -0
- package/dist/src/contracts/host-event-contracts.d.ts +378 -0
- package/dist/src/contracts/host-event-contracts.d.ts.map +1 -0
- package/dist/src/contracts/index.d.ts +22 -0
- package/dist/src/contracts/index.d.ts.map +1 -0
- package/dist/src/contracts/ui-passthrough-contracts.d.ts +277 -0
- package/dist/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
- package/dist/src/embed/app.d.ts +17 -140
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +3 -2
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/utils.d.ts +1 -1
- package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +9 -161
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +14 -0
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +17 -22
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/full-height.d.ts +137 -0
- package/dist/src/full-height.d.ts.map +1 -0
- package/dist/src/full-height.spec.d.ts +2 -0
- package/dist/src/full-height.spec.d.ts.map +1 -0
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.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 +540 -3
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/processTrigger.d.ts +3 -1
- package/dist/src/utils/processTrigger.d.ts.map +1 -1
- package/dist/src/utils/transport/iframe-transport.d.ts +55 -0
- package/dist/src/utils/transport/iframe-transport.d.ts.map +1 -0
- package/dist/src/utils/transport/iframe-transport.spec.d.ts +2 -0
- package/dist/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
- package/dist/src/utils.d.ts +18 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +925 -363
- package/dist/tsembed-react.js +924 -362
- package/dist/tsembed.es.js +925 -363
- package/dist/tsembed.js +924 -362
- package/dist/visual-embed-sdk-react-full.d.ts +1357 -656
- package/dist/visual-embed-sdk-react.d.ts +1257 -606
- package/dist/visual-embed-sdk.d.ts +1320 -642
- package/lib/package.json +9 -1
- package/lib/src/contracts/contracts.spec.d.ts +2 -0
- package/lib/src/contracts/contracts.spec.d.ts.map +1 -0
- package/lib/src/contracts/contracts.spec.js +342 -0
- package/lib/src/contracts/contracts.spec.js.map +1 -0
- package/lib/src/contracts/embed-event-payloads.d.ts +73 -0
- package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -0
- package/lib/src/contracts/embed-event-payloads.js +2 -0
- package/lib/src/contracts/embed-event-payloads.js.map +1 -0
- package/lib/src/contracts/host-event-contracts.d.ts +378 -0
- package/lib/src/contracts/host-event-contracts.d.ts.map +1 -0
- package/lib/src/contracts/host-event-contracts.js +2 -0
- package/lib/src/contracts/host-event-contracts.js.map +1 -0
- package/lib/src/contracts/index.d.ts +22 -0
- package/lib/src/contracts/index.d.ts.map +1 -0
- package/lib/src/contracts/index.js +22 -0
- package/lib/src/contracts/index.js.map +1 -0
- package/lib/src/contracts/ui-passthrough-contracts.d.ts +277 -0
- package/lib/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
- package/lib/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
- package/lib/src/contracts/ui-passthrough-contracts.js.map +1 -0
- package/lib/src/embed/app.d.ts +17 -140
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +22 -122
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +70 -26
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +12 -2
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +3 -2
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +6 -1
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.d.ts +1 -1
- package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/utils.js +1 -1
- package/lib/src/embed/hostEventClient/utils.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +9 -161
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +67 -135
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +211 -28
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search.d.ts +14 -0
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +4 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +65 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +17 -22
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +82 -56
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +322 -14
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/full-height.d.ts +137 -0
- package/lib/src/full-height.d.ts.map +1 -0
- package/lib/src/full-height.js +268 -0
- package/lib/src/full-height.js.map +1 -0
- package/lib/src/full-height.spec.d.ts +2 -0
- package/lib/src/full-height.spec.d.ts.map +1 -0
- package/lib/src/full-height.spec.js +833 -0
- package/lib/src/full-height.spec.js.map +1 -0
- package/lib/src/index.d.ts +4 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +1 -1
- package/lib/src/index.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.map +1 -1
- package/lib/src/react/all-types-export.parity.spec.js +55 -3
- package/lib/src/react/all-types-export.parity.spec.js.map +1 -1
- package/lib/src/types.d.ts +540 -3
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +326 -1
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/processTrigger.d.ts +3 -1
- package/lib/src/utils/processTrigger.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.js +19 -51
- package/lib/src/utils/processTrigger.js.map +1 -1
- package/lib/src/utils/transport/iframe-transport.d.ts +55 -0
- package/lib/src/utils/transport/iframe-transport.d.ts.map +1 -0
- package/lib/src/utils/transport/iframe-transport.js +101 -0
- package/lib/src/utils/transport/iframe-transport.js.map +1 -0
- package/lib/src/utils/transport/iframe-transport.spec.d.ts +2 -0
- package/lib/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
- package/lib/src/utils/transport/iframe-transport.spec.js +138 -0
- package/lib/src/utils/transport/iframe-transport.spec.js.map +1 -0
- package/lib/src/utils.d.ts +18 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +37 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +63 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +1320 -642
- package/package.json +9 -1
- package/src/contracts/contracts.spec.ts +392 -0
- package/src/contracts/embed-event-payloads.ts +83 -0
- package/src/contracts/host-event-contracts.ts +456 -0
- package/src/contracts/index.ts +53 -0
- package/src/contracts/ui-passthrough-contracts.ts +301 -0
- package/src/embed/app.spec.ts +86 -34
- package/src/embed/app.ts +37 -264
- package/src/embed/events.spec.ts +14 -2
- package/src/embed/hostEventClient/host-event-client.spec.ts +2 -2
- package/src/embed/hostEventClient/host-event-client.ts +18 -5
- package/src/embed/hostEventClient/utils.ts +2 -1
- package/src/embed/liveboard.spec.ts +257 -38
- package/src/embed/liveboard.ts +75 -296
- package/src/embed/search.spec.ts +80 -0
- package/src/embed/search.ts +20 -0
- package/src/embed/ts-embed.spec.ts +448 -15
- package/src/embed/ts-embed.ts +109 -66
- package/src/full-height.spec.ts +1008 -0
- package/src/full-height.ts +361 -0
- package/src/index.ts +93 -5
- package/src/react/all-types-export.parity.spec.ts +63 -3
- package/src/react/all-types-export.ts +45 -0
- package/src/types.ts +540 -1
- package/src/utils/processTrigger.ts +28 -58
- package/src/utils/transport/iframe-transport.spec.ts +177 -0
- package/src/utils/transport/iframe-transport.ts +122 -0
- package/src/utils.spec.ts +71 -0
- package/src/utils.ts +38 -0
- package/cjs/src/embed/hostEventClient/contracts.d.ts +0 -231
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +0 -1
- package/cjs/src/embed/hostEventClient/contracts.js.map +0 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts +0 -231
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +0 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +0 -231
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +0 -1
- package/lib/src/embed/hostEventClient/contracts.js.map +0 -1
- package/src/embed/hostEventClient/contracts.ts +0 -262
package/src/embed/ts-embed.ts
CHANGED
|
@@ -10,20 +10,26 @@ import isEqual from 'lodash/isEqual';
|
|
|
10
10
|
import isEmpty from 'lodash/isEmpty';
|
|
11
11
|
import isObject from 'lodash/isObject';
|
|
12
12
|
import {
|
|
13
|
-
HostEventRequest,
|
|
14
|
-
TriggerPayload,
|
|
15
|
-
TriggerResponse,
|
|
16
13
|
UIPassthroughArrayResponse,
|
|
17
14
|
UIPassthroughEvent,
|
|
18
15
|
UIPassthroughRequest,
|
|
19
|
-
} from '
|
|
16
|
+
} from '../contracts/ui-passthrough-contracts';
|
|
17
|
+
// Contract resolution comes from the shared contracts module (the single
|
|
18
|
+
// source of truth for event payload shapes) rather than the legacy
|
|
19
|
+
// UI-passthrough-only mapping.
|
|
20
|
+
import {
|
|
21
|
+
HostEventRequest,
|
|
22
|
+
TriggerData,
|
|
23
|
+
TriggerResponse,
|
|
24
|
+
} from '../contracts/host-event-contracts';
|
|
25
|
+
import { EmbedEventPayload } from '../contracts/embed-event-payloads';
|
|
26
|
+
import { isMessageFromIframe } from '../utils/transport/iframe-transport';
|
|
20
27
|
import { logger } from '../utils/logger';
|
|
21
28
|
import { getAuthenticationToken } from '../authToken';
|
|
22
29
|
import { AnswerService } from '../utils/graphql/answerService/answerService';
|
|
23
30
|
import {
|
|
24
31
|
getEncodedQueryParamsString,
|
|
25
32
|
getCssDimension,
|
|
26
|
-
getOffsetTop,
|
|
27
33
|
embedEventStatus,
|
|
28
34
|
setAttributes,
|
|
29
35
|
getCustomisations,
|
|
@@ -110,6 +116,14 @@ const TS_EMBED_ID = '_thoughtspot-embed';
|
|
|
110
116
|
const PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY = 'tsEmbedOriginalPosition';
|
|
111
117
|
const PRERENDER_WRAPPER_ID_PREFIX = 'tsEmbed-pre-render-wrapper-';
|
|
112
118
|
|
|
119
|
+
// The container applies UpdateEmbedParams through React state, so a delivered
|
|
120
|
+
// post is not the same as the params being in effect.
|
|
121
|
+
const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
|
|
122
|
+
|
|
123
|
+
// The container ignores runtimeFilterParams/runtimeParameterParams unless truthy, so
|
|
124
|
+
// null or '' leaves the previous embed's values in place. '&' is truthy and parses to {}.
|
|
125
|
+
const NO_RUNTIME_PARAMS = '&';
|
|
126
|
+
|
|
113
127
|
/**
|
|
114
128
|
* The event id map from v2 event names to v1 event id
|
|
115
129
|
* v1 events are the classic embed events implemented in Blink v1
|
|
@@ -142,6 +156,8 @@ export class TsEmbed {
|
|
|
142
156
|
*/
|
|
143
157
|
protected embedNodeKey = '__tsEmbed';
|
|
144
158
|
|
|
159
|
+
protected embedContainerLoadedKey = '__tsEmbedContainerLoaded';
|
|
160
|
+
|
|
145
161
|
protected isAppInitialized = false;
|
|
146
162
|
|
|
147
163
|
/**
|
|
@@ -439,7 +455,7 @@ export class TsEmbed {
|
|
|
439
455
|
const eventType = this.getEventType(event);
|
|
440
456
|
const eventPort = this.getEventPort(event);
|
|
441
457
|
const eventData = this.formatEventData(event, eventType);
|
|
442
|
-
if (event
|
|
458
|
+
if (isMessageFromIframe(event, this.iFrame, this.thoughtSpotHost)) {
|
|
443
459
|
const processedEventData = processEventData(
|
|
444
460
|
eventType,
|
|
445
461
|
eventData,
|
|
@@ -720,7 +736,18 @@ export class TsEmbed {
|
|
|
720
736
|
queryParams[key] = deserializeParam(queryParams[key]);
|
|
721
737
|
});
|
|
722
738
|
const appInitData = await this.getAppInitData();
|
|
723
|
-
return {
|
|
739
|
+
return {
|
|
740
|
+
...this.viewConfig,
|
|
741
|
+
...queryParams,
|
|
742
|
+
...appInitData,
|
|
743
|
+
// A show cycle has no URL to carry these, so the payload always states them
|
|
744
|
+
// — including "none", which is the case that leaks the previous filters.
|
|
745
|
+
runtimeFilterParams:
|
|
746
|
+
getFilterQuery(this.viewConfig.runtimeFilters ?? []) || NO_RUNTIME_PARAMS,
|
|
747
|
+
runtimeParameterParams:
|
|
748
|
+
getRuntimeParameters(this.viewConfig.runtimeParameters ?? [])
|
|
749
|
+
|| NO_RUNTIME_PARAMS,
|
|
750
|
+
};
|
|
724
751
|
}
|
|
725
752
|
|
|
726
753
|
/**
|
|
@@ -1125,6 +1152,8 @@ export class TsEmbed {
|
|
|
1125
1152
|
return preRenderWrapper;
|
|
1126
1153
|
}
|
|
1127
1154
|
|
|
1155
|
+
// TODO(SCAL-338011): move the pre-render code out to its own file, the way
|
|
1156
|
+
// full height did. It is spread across this class and getting messy.
|
|
1128
1157
|
protected preRenderWrapper: HTMLElement;
|
|
1129
1158
|
|
|
1130
1159
|
protected preRenderChild: HTMLElement;
|
|
@@ -1470,41 +1499,6 @@ export class TsEmbed {
|
|
|
1470
1499
|
return V1EventMap[eventType] || eventType;
|
|
1471
1500
|
}
|
|
1472
1501
|
|
|
1473
|
-
/**
|
|
1474
|
-
* Calculates the iframe center for the current visible viewPort
|
|
1475
|
-
* of iframe using Scroll position of Host App, offsetTop for iframe
|
|
1476
|
-
* in Host app. ViewPort height of the tab.
|
|
1477
|
-
* @returns iframe Center in visible viewport,
|
|
1478
|
-
* Iframe height,
|
|
1479
|
-
* View port height.
|
|
1480
|
-
*/
|
|
1481
|
-
protected getIframeCenter() {
|
|
1482
|
-
const offsetTopClient = getOffsetTop(this.iFrame);
|
|
1483
|
-
const scrollTopClient = window.scrollY;
|
|
1484
|
-
const viewPortHeight = window.innerHeight;
|
|
1485
|
-
const iframeHeight = this.iFrame.offsetHeight;
|
|
1486
|
-
const iframeScrolled = scrollTopClient - offsetTopClient;
|
|
1487
|
-
let iframeVisibleViewPort;
|
|
1488
|
-
let iframeOffset;
|
|
1489
|
-
|
|
1490
|
-
if (iframeScrolled < 0) {
|
|
1491
|
-
iframeVisibleViewPort = viewPortHeight - (offsetTopClient - scrollTopClient);
|
|
1492
|
-
iframeVisibleViewPort = Math.min(iframeHeight, iframeVisibleViewPort);
|
|
1493
|
-
iframeOffset = 0;
|
|
1494
|
-
} else {
|
|
1495
|
-
iframeVisibleViewPort = Math.min(iframeHeight - iframeScrolled, viewPortHeight);
|
|
1496
|
-
iframeOffset = iframeScrolled;
|
|
1497
|
-
}
|
|
1498
|
-
const iframeCenter = iframeOffset + iframeVisibleViewPort / 2;
|
|
1499
|
-
return {
|
|
1500
|
-
iframeCenter,
|
|
1501
|
-
iframeScrolled,
|
|
1502
|
-
iframeHeight,
|
|
1503
|
-
viewPortHeight,
|
|
1504
|
-
iframeVisibleViewPort,
|
|
1505
|
-
};
|
|
1506
|
-
}
|
|
1507
|
-
|
|
1508
1502
|
/**
|
|
1509
1503
|
* Registers an event listener to trigger an alert when the ThoughtSpot app
|
|
1510
1504
|
* sends an event of a particular message type to the host application.
|
|
@@ -1528,9 +1522,12 @@ export class TsEmbed {
|
|
|
1528
1522
|
* });
|
|
1529
1523
|
* ```
|
|
1530
1524
|
*/
|
|
1531
|
-
public on(
|
|
1532
|
-
messageType:
|
|
1533
|
-
callback:
|
|
1525
|
+
public on<EmbedEventT extends EmbedEvent>(
|
|
1526
|
+
messageType: EmbedEventT,
|
|
1527
|
+
callback: (
|
|
1528
|
+
payload: EmbedEventPayload<EmbedEventT>,
|
|
1529
|
+
responder?: (data: any) => void,
|
|
1530
|
+
) => void,
|
|
1534
1531
|
options: MessageOptions = { start: false },
|
|
1535
1532
|
isRegisteredBySDK = false,
|
|
1536
1533
|
): typeof TsEmbed.prototype {
|
|
@@ -1608,14 +1605,34 @@ export class TsEmbed {
|
|
|
1608
1605
|
protected getPreRenderObj<T extends TsEmbed>(): T {
|
|
1609
1606
|
const embedObj = (this.preRenderWrapper as any)?.[this.embedNodeKey] as T;
|
|
1610
1607
|
if (embedObj === (this as any)) {
|
|
1611
|
-
logger.
|
|
1608
|
+
logger.debug('embedObj is same as this');
|
|
1612
1609
|
}
|
|
1613
1610
|
return embedObj;
|
|
1614
1611
|
}
|
|
1615
1612
|
|
|
1613
|
+
protected takeOverPreRender(): void {
|
|
1614
|
+
if (!this.preRenderWrapper) return;
|
|
1615
|
+
(this.preRenderWrapper as any)[this.embedNodeKey] = this;
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
// The flag lives on the wrapper because it describes the iframe: an instance
|
|
1619
|
+
// hidden when the container announced itself would otherwise report false forever.
|
|
1620
|
+
private markEmbedContainerLoaded() {
|
|
1621
|
+
this.isEmbedContainerLoaded = true;
|
|
1622
|
+
if (this.preRenderWrapper) {
|
|
1623
|
+
(this.preRenderWrapper as any)[this.embedContainerLoadedKey] = true;
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1616
1627
|
private checkEmbedContainerLoaded() {
|
|
1617
1628
|
if (this.isEmbedContainerLoaded) return true;
|
|
1618
1629
|
|
|
1630
|
+
if ((this.preRenderWrapper as any)?.[this.embedContainerLoadedKey]) {
|
|
1631
|
+
this.isEmbedContainerLoaded = true;
|
|
1632
|
+
return true;
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
// Older builds stamped the flag on the instance, not the wrapper.
|
|
1619
1636
|
const preRenderObj = this.getPreRenderObj<TsEmbed>();
|
|
1620
1637
|
if (preRenderObj && preRenderObj.isEmbedContainerLoaded) {
|
|
1621
1638
|
this.isEmbedContainerLoaded = true;
|
|
@@ -1648,7 +1665,7 @@ export class TsEmbed {
|
|
|
1648
1665
|
(source: EmbedEvent.AuthInit | EmbedEvent.EmbedListenerReady) => () => {
|
|
1649
1666
|
const processEmbedContainerReady = () => {
|
|
1650
1667
|
logger.debug('processEmbedContainerReady');
|
|
1651
|
-
this.
|
|
1668
|
+
this.markEmbedContainerLoaded();
|
|
1652
1669
|
this.executeEmbedContainerReadyCallbacks();
|
|
1653
1670
|
};
|
|
1654
1671
|
if (source === EmbedEvent.AuthInit) {
|
|
@@ -1664,8 +1681,12 @@ export class TsEmbed {
|
|
|
1664
1681
|
|
|
1665
1682
|
/**
|
|
1666
1683
|
* Triggers an event to the embedded app
|
|
1684
|
+
*
|
|
1685
|
+
* Payload typing: from SDK 1.52.0 (ThoughtSpot Cloud 26.9.0.cl), unknown fields
|
|
1686
|
+
* on a known event's payload fail to compile. From SDK 1.54.0 (26.11.0.cl) the
|
|
1687
|
+
* payload is checked strictly against the event contract — update call sites now.
|
|
1667
1688
|
* @param {HostEvent} messageType The event type
|
|
1668
|
-
* @param {
|
|
1689
|
+
* @param {TriggerData} data The payload, typed against the event's contract
|
|
1669
1690
|
* @param {ContextType} context Optional context type to specify the context from which the event is triggered.
|
|
1670
1691
|
* Use ContextType.Search for search answer context, ContextType.Answer for answer/explore context,
|
|
1671
1692
|
* ContextType.Liveboard for liveboard context, or ContextType.Spotter for spotter context.
|
|
@@ -1688,7 +1709,10 @@ export class TsEmbed {
|
|
|
1688
1709
|
ContextT extends ContextType = ContextType,
|
|
1689
1710
|
>(
|
|
1690
1711
|
messageType: HostEventT,
|
|
1691
|
-
|
|
1712
|
+
// Contract shape is the contextual type: payload fields autocomplete
|
|
1713
|
+
// and unknown fields on object literals are flagged. Strict checks
|
|
1714
|
+
// land in SDK 1.54.0 — see TriggerData.
|
|
1715
|
+
data: TriggerData<HostEventT> = {} as any,
|
|
1692
1716
|
context?: ContextT,
|
|
1693
1717
|
): Promise<TriggerResponse<PayloadT, HostEventT, ContextT>> {
|
|
1694
1718
|
uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_TRIGGER}-${messageType}`);
|
|
@@ -2015,24 +2039,34 @@ export class TsEmbed {
|
|
|
2015
2039
|
return this.renderIFrame(prerenderFrameSrc);
|
|
2016
2040
|
}
|
|
2017
2041
|
|
|
2042
|
+
// Subclasses that navigate the pre-render on show must await this before
|
|
2043
|
+
// triggering Navigate. Resolves even on failure, so navigation is never blocked.
|
|
2044
|
+
protected preRenderParamsApplied: Promise<void> = Promise.resolve();
|
|
2045
|
+
|
|
2018
2046
|
protected beforePrerenderVisible(): void {
|
|
2019
2047
|
// We can ignore this as its a bit expensive and the newer customers
|
|
2020
2048
|
// have moved on to UpdateEmbedParams supported clusters
|
|
2021
2049
|
// this.validatePreRenderViewConfig(this.viewConfig); removed in #517
|
|
2022
2050
|
logger.debug('triggering UpdateEmbedParams', this.viewConfig);
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2051
|
+
// Created synchronously: a queued navigation needs something to await
|
|
2052
|
+
// whether the container is already loaded or not.
|
|
2053
|
+
this.preRenderParamsApplied = new Promise<void>((resolve) => {
|
|
2054
|
+
this.executeAfterEmbedContainerLoaded(async () => {
|
|
2055
|
+
try {
|
|
2056
|
+
const params = await this.getUpdateEmbedParamsObject();
|
|
2057
|
+
this.trigger(HostEvent.UpdateEmbedParams, params);
|
|
2058
|
+
} catch (error) {
|
|
2059
|
+
logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
2060
|
+
this.handleError({
|
|
2061
|
+
errorType: ErrorDetailsTypes.API,
|
|
2062
|
+
message: error?.message || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
2063
|
+
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
2064
|
+
error: error?.message || error,
|
|
2065
|
+
});
|
|
2066
|
+
} finally {
|
|
2067
|
+
setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
|
|
2068
|
+
}
|
|
2069
|
+
});
|
|
2036
2070
|
});
|
|
2037
2071
|
}
|
|
2038
2072
|
|
|
@@ -2119,6 +2153,9 @@ export class TsEmbed {
|
|
|
2119
2153
|
this.setupFullscreenChangeHandler();
|
|
2120
2154
|
}
|
|
2121
2155
|
|
|
2156
|
+
// Last, so everything above still sees the instance being taken over from.
|
|
2157
|
+
this.takeOverPreRender();
|
|
2158
|
+
|
|
2122
2159
|
return this;
|
|
2123
2160
|
}
|
|
2124
2161
|
|
|
@@ -2339,12 +2376,18 @@ export class V1Embed extends TsEmbed {
|
|
|
2339
2376
|
* });
|
|
2340
2377
|
* ```
|
|
2341
2378
|
*/
|
|
2342
|
-
public on(
|
|
2343
|
-
messageType:
|
|
2344
|
-
callback:
|
|
2379
|
+
public on<EmbedEventT extends EmbedEvent>(
|
|
2380
|
+
messageType: EmbedEventT,
|
|
2381
|
+
callback: (
|
|
2382
|
+
payload: EmbedEventPayload<EmbedEventT>,
|
|
2383
|
+
responder?: (data: any) => void,
|
|
2384
|
+
) => void,
|
|
2345
2385
|
options: MessageOptions = { start: false },
|
|
2346
2386
|
): typeof TsEmbed.prototype {
|
|
2347
|
-
|
|
2387
|
+
// Mirror the base TsEmbed.on generic signature so the enriched
|
|
2388
|
+
// EmbedEventPayload (e.g. CustomAction's answerService) flows through
|
|
2389
|
+
// the override too, and the class hierarchy stays assignable.
|
|
2390
|
+
const eventType = this.getCompatibleEventType(messageType) as EmbedEventT;
|
|
2348
2391
|
return super.on(eventType, callback, options);
|
|
2349
2392
|
}
|
|
2350
2393
|
|