@thoughtspot/visual-embed-sdk 1.24.0-sage.3 → 1.24.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/README.md +1 -1
- package/cjs/package.json +10 -3
- package/cjs/src/auth.d.ts.map +1 -1
- package/cjs/src/auth.js +3 -0
- package/cjs/src/auth.js.map +1 -1
- package/cjs/src/css-variables.d.ts +38 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +33 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +12 -8
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +46 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/base.d.ts +6 -1
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +8 -3
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +6 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +6 -2
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +23 -7
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.d.ts +1 -0
- package/cjs/src/embed/sage.d.ts.map +1 -1
- package/cjs/src/embed/sage.js +1 -0
- package/cjs/src/embed/sage.js.map +1 -1
- package/cjs/src/embed/search-bar.d.ts +7 -0
- package/cjs/src/embed/search-bar.d.ts.map +1 -1
- package/cjs/src/embed/search-bar.js +6 -2
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.d.ts +16 -2
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +9 -2
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +49 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +4 -1
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +31 -8
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +186 -3
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +4 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +5 -1
- 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 +12 -3
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/mixpanel-service.spec.js +13 -3
- package/cjs/src/mixpanel-service.spec.js.map +1 -1
- package/cjs/src/react/index.d.ts +15 -15
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +7 -3
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/react/index.spec.js +12 -0
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/types.d.ts +216 -21
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +133 -13
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/answerService/answerService.d.ts +34 -0
- package/cjs/src/utils/answerService/answerService.d.ts.map +1 -0
- package/cjs/src/utils/answerService/answerService.js +142 -0
- package/cjs/src/utils/answerService/answerService.js.map +1 -0
- package/cjs/src/utils/answerService/answerService.spec.d.ts +1 -0
- package/cjs/src/utils/answerService/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/answerService/answerService.spec.js +1 -0
- package/cjs/src/utils/answerService/answerService.spec.js.map +1 -0
- package/cjs/src/utils/answerService/graphql-queries.d.ts +6 -0
- package/cjs/src/utils/answerService/graphql-queries.d.ts.map +1 -0
- package/cjs/src/utils/answerService/graphql-queries.js +123 -0
- package/cjs/src/utils/answerService/graphql-queries.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.js +80 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
- package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/cjs/src/utils/graphql/graphql-request.js +40 -0
- package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
- package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.js +69 -0
- package/cjs/src/utils/graphql/sourceService.js.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
- package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/cjs/src/utils/processData.d.ts.map +1 -1
- package/cjs/src/utils/processData.js +7 -11
- package/cjs/src/utils/processData.js.map +1 -1
- package/cjs/src/utils/processData.spec.js +13 -17
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +13 -1
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +45 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +24 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +38 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +33 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +6 -1
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +6 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/sage.d.ts +1 -0
- package/dist/src/embed/sage.d.ts.map +1 -1
- package/dist/src/embed/search-bar.d.ts +7 -0
- package/dist/src/embed/search-bar.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +16 -2
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +4 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +4 -3
- 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/index.d.ts +15 -15
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +216 -21
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
- package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.d.ts +8 -0
- package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/src/utils.d.ts +13 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +603 -96
- package/dist/tsembed-react.js +596 -95
- package/dist/tsembed.es.js +655 -100
- package/dist/tsembed.js +649 -99
- package/dist/visual-embed-sdk-react-full.d.ts +615 -260
- package/dist/visual-embed-sdk-react.d.ts +617 -262
- package/dist/visual-embed-sdk.d.ts +380 -26
- package/lib/package.json +10 -3
- package/lib/src/.index.d.ts.swp +0 -0
- package/lib/src/auth.d.ts.map +1 -1
- package/lib/src/auth.js +3 -0
- package/lib/src/auth.js.map +1 -1
- package/lib/src/css-variables.d.ts +38 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +33 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +12 -8
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +46 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +6 -1
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +8 -3
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +6 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +7 -3
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +23 -7
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/sage.d.ts +1 -0
- package/lib/src/embed/sage.d.ts.map +1 -1
- package/lib/src/embed/sage.js +1 -0
- package/lib/src/embed/sage.js.map +1 -1
- package/lib/src/embed/search-bar.d.ts +7 -0
- package/lib/src/embed/search-bar.d.ts.map +1 -1
- package/lib/src/embed/search-bar.js +7 -3
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.d.ts +16 -2
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +10 -3
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +49 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +4 -1
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +32 -9
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +187 -4
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +4 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +4 -3
- 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 +12 -3
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/mixpanel-service.spec.js +13 -3
- package/lib/src/mixpanel-service.spec.js.map +1 -1
- package/lib/src/react/index.d.ts +15 -15
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +5 -3
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +13 -1
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +216 -21
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +132 -12
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/answerService/answerService.d.ts +34 -0
- package/lib/src/utils/answerService/answerService.d.ts.map +1 -0
- package/lib/src/utils/answerService/answerService.js +137 -0
- package/lib/src/utils/answerService/answerService.js.map +1 -0
- package/lib/src/utils/answerService/answerService.spec.d.ts +1 -0
- package/lib/src/utils/answerService/answerService.spec.d.ts.map +1 -0
- package/lib/src/utils/answerService/answerService.spec.js +1 -0
- package/lib/src/utils/answerService/answerService.spec.js.map +1 -0
- package/lib/src/utils/answerService/graphql-queries.d.ts +6 -0
- package/lib/src/utils/answerService/graphql-queries.d.ts.map +1 -0
- package/lib/src/utils/answerService/graphql-queries.js +120 -0
- package/lib/src/utils/answerService/graphql-queries.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.js +177 -0
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
- package/lib/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
- package/lib/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/answerService/graphql-queries.js +77 -0
- package/lib/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
- package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
- package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
- package/lib/src/utils/graphql/graphql-request.js +36 -0
- package/lib/src/utils/graphql/graphql-request.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.d.ts +8 -0
- package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.js +65 -0
- package/lib/src/utils/graphql/sourceService.js.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
- package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
- package/lib/src/utils/graphql/sourceService.spec.js +10 -0
- package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +8 -12
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js +14 -18
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils.d.ts +13 -1
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +41 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +25 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +389 -30
- package/package.json +10 -3
- package/src/auth.ts +6 -3
- package/src/css-variables.ts +47 -0
- package/src/embed/app.spec.ts +63 -0
- package/src/embed/app.ts +52 -15
- package/src/embed/base.ts +11 -6
- package/src/embed/liveboard.spec.ts +29 -10
- package/src/embed/liveboard.ts +13 -2
- package/src/embed/sage.ts +2 -0
- package/src/embed/search-bar.tsx +21 -6
- package/src/embed/search.spec.ts +61 -0
- package/src/embed/search.ts +36 -3
- package/src/embed/ts-embed.spec.ts +211 -8
- package/src/embed/ts-embed.ts +34 -9
- package/src/index.ts +9 -0
- package/src/mixpanel-service.spec.ts +13 -3
- package/src/mixpanel-service.ts +11 -3
- package/src/react/index.spec.tsx +33 -2
- package/src/react/index.tsx +37 -26
- package/src/types.ts +305 -103
- package/src/utils/graphql/answerService/answer-queries.ts +80 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
- package/src/utils/graphql/answerService/answerService.ts +234 -0
- package/src/utils/graphql/graphql-request.ts +45 -0
- package/src/utils/graphql/sourceService.spec.ts +10 -0
- package/src/utils/graphql/sourceService.ts +71 -0
- package/src/utils/processData.spec.ts +15 -25
- package/src/utils/processData.ts +13 -15
- package/src/utils.spec.ts +31 -0
- package/src/utils.ts +47 -0
- package/src/utils/answerService.spec.ts +0 -41
- package/src/utils/answerService.ts +0 -63
package/src/embed/search.ts
CHANGED
|
@@ -14,8 +14,14 @@ import {
|
|
|
14
14
|
Action,
|
|
15
15
|
ViewConfig,
|
|
16
16
|
RuntimeFilter,
|
|
17
|
+
RuntimeParameter,
|
|
17
18
|
} from '../types';
|
|
18
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
getQueryParamString,
|
|
21
|
+
checkReleaseVersionInBeta,
|
|
22
|
+
getFilterQuery,
|
|
23
|
+
getRuntimeParameters,
|
|
24
|
+
} from '../utils';
|
|
19
25
|
import { TsEmbed } from './ts-embed';
|
|
20
26
|
import { version } from '../../package.json';
|
|
21
27
|
import { ERROR_MESSAGE } from '../errors';
|
|
@@ -60,6 +66,10 @@ export interface SearchViewConfig extends ViewConfig {
|
|
|
60
66
|
* using raw answer data.
|
|
61
67
|
*/
|
|
62
68
|
hideResults?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* If set to true, expands all the data sources panel.
|
|
71
|
+
*/
|
|
72
|
+
expandAllDataSource?: boolean;
|
|
63
73
|
/**
|
|
64
74
|
* If set to true, the Search Assist feature is enabled.
|
|
65
75
|
*
|
|
@@ -110,9 +120,18 @@ export interface SearchViewConfig extends ViewConfig {
|
|
|
110
120
|
*
|
|
111
121
|
* @default false
|
|
112
122
|
* @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl
|
|
113
|
-
* @hidden
|
|
114
123
|
*/
|
|
115
124
|
dataPanelV2?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Flag to set if last selected dataSource should be used
|
|
127
|
+
*
|
|
128
|
+
* @version: SDK: 1.24.0
|
|
129
|
+
*/
|
|
130
|
+
useLastSelectedSources?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* The list of parameter override to apply to a search answer.
|
|
133
|
+
*/
|
|
134
|
+
runtimeParameters?: RuntimeParameter[];
|
|
116
135
|
}
|
|
117
136
|
|
|
118
137
|
export const HiddenActionItemByDefaultForSearchEmbed = [
|
|
@@ -134,6 +153,8 @@ export class SearchEmbed extends TsEmbed {
|
|
|
134
153
|
*/
|
|
135
154
|
protected viewConfig: SearchViewConfig;
|
|
136
155
|
|
|
156
|
+
protected embedComponentType = 'SearchEmbed';
|
|
157
|
+
|
|
137
158
|
constructor(domSelector: DOMSelector, viewConfig: SearchViewConfig) {
|
|
138
159
|
super(domSelector);
|
|
139
160
|
this.viewConfig = viewConfig;
|
|
@@ -158,6 +179,7 @@ export class SearchEmbed extends TsEmbed {
|
|
|
158
179
|
protected getEmbedParams(): string {
|
|
159
180
|
const {
|
|
160
181
|
hideResults,
|
|
182
|
+
expandAllDataSource,
|
|
161
183
|
enableSearchAssist,
|
|
162
184
|
forceTable,
|
|
163
185
|
searchOptions,
|
|
@@ -166,6 +188,8 @@ export class SearchEmbed extends TsEmbed {
|
|
|
166
188
|
dataSources,
|
|
167
189
|
excludeRuntimeFiltersfromURL,
|
|
168
190
|
dataPanelV2 = false,
|
|
191
|
+
useLastSelectedSources = false,
|
|
192
|
+
runtimeParameters,
|
|
169
193
|
} = this.viewConfig;
|
|
170
194
|
const queryParams = this.getBaseQueryParams();
|
|
171
195
|
|
|
@@ -201,13 +225,22 @@ export class SearchEmbed extends TsEmbed {
|
|
|
201
225
|
|
|
202
226
|
queryParams[Param.DataPanelV2Enabled] = dataPanelV2;
|
|
203
227
|
queryParams[Param.DataSourceMode] = this.getDataSourceMode();
|
|
204
|
-
|
|
228
|
+
|
|
229
|
+
queryParams[Param.UseLastSelectedDataSource] = useLastSelectedSources;
|
|
230
|
+
if (dataSource || dataSources) {
|
|
231
|
+
queryParams[Param.UseLastSelectedDataSource] = false;
|
|
232
|
+
}
|
|
233
|
+
|
|
205
234
|
queryParams[Param.searchEmbed] = true;
|
|
206
235
|
let query = '';
|
|
207
236
|
const queryParamsString = getQueryParamString(queryParams, true);
|
|
208
237
|
if (queryParamsString) {
|
|
209
238
|
query = `?${queryParamsString}`;
|
|
210
239
|
}
|
|
240
|
+
|
|
241
|
+
const parameterQuery = getRuntimeParameters(runtimeParameters || []);
|
|
242
|
+
if (parameterQuery) query += `&${parameterQuery}`;
|
|
243
|
+
|
|
211
244
|
const filterQuery = getFilterQuery(runtimeFilters || []);
|
|
212
245
|
if (filterQuery && !excludeRuntimeFiltersfromURL) {
|
|
213
246
|
query += `&${filterQuery}`;
|
|
@@ -9,7 +9,13 @@ import {
|
|
|
9
9
|
AppEmbed,
|
|
10
10
|
LiveboardEmbed,
|
|
11
11
|
} from '../index';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
Action,
|
|
14
|
+
HomeLeftNavItem,
|
|
15
|
+
RuntimeFilter,
|
|
16
|
+
RuntimeFilterOp,
|
|
17
|
+
HomepageModule,
|
|
18
|
+
} from '../types';
|
|
13
19
|
import {
|
|
14
20
|
executeAfterWait,
|
|
15
21
|
getDocumentBody,
|
|
@@ -101,7 +107,15 @@ describe('Unit test case for ts embed', () => {
|
|
|
101
107
|
});
|
|
102
108
|
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
103
109
|
type: EmbedEvent.APP_INIT,
|
|
104
|
-
data: {
|
|
110
|
+
data: {
|
|
111
|
+
customisations,
|
|
112
|
+
authToken: '',
|
|
113
|
+
runtimeFilterParams: null,
|
|
114
|
+
hiddenHomeLeftNavItems: [],
|
|
115
|
+
hiddenHomepageModules: [],
|
|
116
|
+
hostConfig: undefined,
|
|
117
|
+
reorderedHomepageModules: [],
|
|
118
|
+
},
|
|
105
119
|
});
|
|
106
120
|
});
|
|
107
121
|
|
|
@@ -128,6 +142,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
128
142
|
customisations: customisationsView,
|
|
129
143
|
authToken: '',
|
|
130
144
|
runtimeFilterParams: null,
|
|
145
|
+
hiddenHomeLeftNavItems: [],
|
|
146
|
+
hiddenHomepageModules: [],
|
|
147
|
+
hostConfig: undefined,
|
|
148
|
+
reorderedHomepageModules: [],
|
|
131
149
|
},
|
|
132
150
|
});
|
|
133
151
|
expect(getIFrameSrc()).toContain(
|
|
@@ -135,7 +153,81 @@ describe('Unit test case for ts embed', () => {
|
|
|
135
153
|
);
|
|
136
154
|
});
|
|
137
155
|
|
|
138
|
-
test('
|
|
156
|
+
test('hide home page modules from view Config should be part of app_init payload', async () => {
|
|
157
|
+
const mockEmbedEventPayload = {
|
|
158
|
+
type: EmbedEvent.APP_INIT,
|
|
159
|
+
data: {},
|
|
160
|
+
};
|
|
161
|
+
const mockedHiddenHomepageModules: HomepageModule[] = [
|
|
162
|
+
HomepageModule.MyLibrary,
|
|
163
|
+
HomepageModule.Learning,
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
167
|
+
...defaultViewConfig,
|
|
168
|
+
hiddenHomepageModules: mockedHiddenHomepageModules,
|
|
169
|
+
});
|
|
170
|
+
searchEmbed.render();
|
|
171
|
+
const mockPort: any = {
|
|
172
|
+
postMessage: jest.fn(),
|
|
173
|
+
};
|
|
174
|
+
await executeAfterWait(() => {
|
|
175
|
+
const iframe = getIFrameEl();
|
|
176
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
177
|
+
});
|
|
178
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
179
|
+
type: EmbedEvent.APP_INIT,
|
|
180
|
+
data: {
|
|
181
|
+
customisations,
|
|
182
|
+
authToken: '',
|
|
183
|
+
hostConfig: undefined,
|
|
184
|
+
runtimeFilterParams: null,
|
|
185
|
+
hiddenHomeLeftNavItems: [],
|
|
186
|
+
hiddenHomepageModules: [HomepageModule.MyLibrary,
|
|
187
|
+
HomepageModule.Learning],
|
|
188
|
+
reorderedHomepageModules: [],
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('Reordering the home page modules from view Config should be part of app_init payload', async () => {
|
|
194
|
+
const mockEmbedEventPayload = {
|
|
195
|
+
type: EmbedEvent.APP_INIT,
|
|
196
|
+
data: {},
|
|
197
|
+
};
|
|
198
|
+
const mockedReorderedHomepageModules: HomepageModule[] = [
|
|
199
|
+
HomepageModule.MyLibrary,
|
|
200
|
+
HomepageModule.Watchlist,
|
|
201
|
+
];
|
|
202
|
+
|
|
203
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
204
|
+
...defaultViewConfig,
|
|
205
|
+
reorderedHomepageModules: mockedReorderedHomepageModules,
|
|
206
|
+
});
|
|
207
|
+
searchEmbed.render();
|
|
208
|
+
const mockPort: any = {
|
|
209
|
+
postMessage: jest.fn(),
|
|
210
|
+
};
|
|
211
|
+
await executeAfterWait(() => {
|
|
212
|
+
const iframe = getIFrameEl();
|
|
213
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
214
|
+
});
|
|
215
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
216
|
+
type: EmbedEvent.APP_INIT,
|
|
217
|
+
data: {
|
|
218
|
+
customisations,
|
|
219
|
+
authToken: '',
|
|
220
|
+
hostConfig: undefined,
|
|
221
|
+
runtimeFilterParams: null,
|
|
222
|
+
hiddenHomeLeftNavItems: [],
|
|
223
|
+
hiddenHomepageModules: [],
|
|
224
|
+
reorderedHomepageModules: [HomepageModule.MyLibrary,
|
|
225
|
+
HomepageModule.Watchlist],
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test('Runtime filters from view Config should be part of app_init payload when excludeRuntimeFiltersfromURL is true', async () => {
|
|
139
231
|
const mockEmbedEventPayload = {
|
|
140
232
|
type: EmbedEvent.APP_INIT,
|
|
141
233
|
data: {},
|
|
@@ -150,6 +242,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
150
242
|
|
|
151
243
|
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
152
244
|
...defaultViewConfig,
|
|
245
|
+
excludeRuntimeFiltersfromURL: true,
|
|
153
246
|
runtimeFilters: mockRuntimeFilters,
|
|
154
247
|
});
|
|
155
248
|
searchEmbed.render();
|
|
@@ -166,6 +259,87 @@ describe('Unit test case for ts embed', () => {
|
|
|
166
259
|
customisations,
|
|
167
260
|
authToken: '',
|
|
168
261
|
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
262
|
+
hiddenHomeLeftNavItems: [],
|
|
263
|
+
hiddenHomepageModules: [],
|
|
264
|
+
hostConfig: undefined,
|
|
265
|
+
reorderedHomepageModules: [],
|
|
266
|
+
},
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('Runtime filters from view Config should not be part of app_init payload when excludeRuntimeFiltersfromURL is false', async () => {
|
|
271
|
+
const mockEmbedEventPayload = {
|
|
272
|
+
type: EmbedEvent.APP_INIT,
|
|
273
|
+
data: {},
|
|
274
|
+
};
|
|
275
|
+
const mockRuntimeFilters: RuntimeFilter[] = [
|
|
276
|
+
{
|
|
277
|
+
columnName: 'color',
|
|
278
|
+
operator: RuntimeFilterOp.EQ,
|
|
279
|
+
values: ['blue'],
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
|
|
283
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
284
|
+
...defaultViewConfig,
|
|
285
|
+
excludeRuntimeFiltersfromURL: false,
|
|
286
|
+
runtimeFilters: mockRuntimeFilters,
|
|
287
|
+
});
|
|
288
|
+
searchEmbed.render();
|
|
289
|
+
const mockPort: any = {
|
|
290
|
+
postMessage: jest.fn(),
|
|
291
|
+
};
|
|
292
|
+
await executeAfterWait(() => {
|
|
293
|
+
const iframe = getIFrameEl();
|
|
294
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
295
|
+
});
|
|
296
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
297
|
+
type: EmbedEvent.APP_INIT,
|
|
298
|
+
data: {
|
|
299
|
+
customisations,
|
|
300
|
+
authToken: '',
|
|
301
|
+
runtimeFilterParams: null,
|
|
302
|
+
hiddenHomeLeftNavItems: [],
|
|
303
|
+
hiddenHomepageModules: [],
|
|
304
|
+
hostConfig: undefined,
|
|
305
|
+
reorderedHomepageModules: [],
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
test('homeLeftNav from view Config should be part of app_init payload', async () => {
|
|
311
|
+
const mockEmbedEventPayload = {
|
|
312
|
+
type: EmbedEvent.APP_INIT,
|
|
313
|
+
data: {},
|
|
314
|
+
};
|
|
315
|
+
const mockedHiddenHomeLeftNavItems: HomeLeftNavItem[] = [
|
|
316
|
+
HomeLeftNavItem.Home,
|
|
317
|
+
HomeLeftNavItem.Documentation,
|
|
318
|
+
];
|
|
319
|
+
|
|
320
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
321
|
+
...defaultViewConfig,
|
|
322
|
+
hiddenHomeLeftNavItems: mockedHiddenHomeLeftNavItems,
|
|
323
|
+
});
|
|
324
|
+
searchEmbed.render();
|
|
325
|
+
const mockPort: any = {
|
|
326
|
+
postMessage: jest.fn(),
|
|
327
|
+
};
|
|
328
|
+
await executeAfterWait(() => {
|
|
329
|
+
const iframe = getIFrameEl();
|
|
330
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
331
|
+
});
|
|
332
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
333
|
+
type: EmbedEvent.APP_INIT,
|
|
334
|
+
data: {
|
|
335
|
+
customisations,
|
|
336
|
+
authToken: '',
|
|
337
|
+
hostConfig: undefined,
|
|
338
|
+
runtimeFilterParams: null,
|
|
339
|
+
hiddenHomeLeftNavItems: [HomeLeftNavItem.Home,
|
|
340
|
+
HomeLeftNavItem.Documentation],
|
|
341
|
+
hiddenHomepageModules: [],
|
|
342
|
+
reorderedHomepageModules: [],
|
|
169
343
|
},
|
|
170
344
|
});
|
|
171
345
|
});
|
|
@@ -319,6 +493,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
319
493
|
customisations,
|
|
320
494
|
authToken: 'test_auth_token1',
|
|
321
495
|
runtimeFilterParams: null,
|
|
496
|
+
hiddenHomeLeftNavItems: [],
|
|
497
|
+
hiddenHomepageModules: [],
|
|
498
|
+
hostConfig: undefined,
|
|
499
|
+
reorderedHomepageModules: [],
|
|
322
500
|
},
|
|
323
501
|
});
|
|
324
502
|
});
|
|
@@ -463,7 +641,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
463
641
|
test('mixpanel should call with VISUAL_SDK_RENDER_COMPLETE', async () => {
|
|
464
642
|
await setup(true);
|
|
465
643
|
expect(mockMixPanelEvent).toBeCalledWith(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
466
|
-
expect(mockMixPanelEvent).toBeCalledWith(
|
|
644
|
+
expect(mockMixPanelEvent).toBeCalledWith(
|
|
645
|
+
MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE,
|
|
646
|
+
expect.objectContaining({
|
|
647
|
+
elWidth: 0,
|
|
648
|
+
elHeight: 0,
|
|
649
|
+
}),
|
|
650
|
+
);
|
|
467
651
|
});
|
|
468
652
|
|
|
469
653
|
test('Should remove prefetch iframe', async () => {
|
|
@@ -840,7 +1024,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
840
1024
|
expectUrlMatchesWithParams(
|
|
841
1025
|
getIFrameSrc(),
|
|
842
1026
|
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${defaultParamsForPinboardEmbed}`
|
|
843
|
-
|
|
1027
|
+
+ `&foo=bar&baz=1&bool=true${defaultParamsPost}#/home`,
|
|
844
1028
|
);
|
|
845
1029
|
});
|
|
846
1030
|
|
|
@@ -856,7 +1040,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
856
1040
|
expectUrlMatchesWithParams(
|
|
857
1041
|
getIFrameSrc(),
|
|
858
1042
|
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${defaultParamsForPinboardEmbed}`
|
|
859
|
-
|
|
1043
|
+
+ `&showAlerts=true${defaultParamsPost}#/home`,
|
|
860
1044
|
);
|
|
861
1045
|
});
|
|
862
1046
|
it('Sets the locale param', async () => {
|
|
@@ -871,7 +1055,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
871
1055
|
expectUrlMatchesWithParams(
|
|
872
1056
|
getIFrameSrc(),
|
|
873
1057
|
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${defaultParamsForPinboardEmbed}`
|
|
874
|
-
|
|
1058
|
+
+ `&locale=ja-JP${defaultParamsPost}#/home`,
|
|
875
1059
|
);
|
|
876
1060
|
});
|
|
877
1061
|
it('Sets the iconSprite url', async () => {
|
|
@@ -888,7 +1072,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
888
1072
|
expectUrlMatchesWithParams(
|
|
889
1073
|
getIFrameSrc(),
|
|
890
1074
|
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${defaultParamsForPinboardEmbed}`
|
|
891
|
-
|
|
1075
|
+
+ `&iconSprite=iconSprite.com${defaultParamsPost}#/home`,
|
|
892
1076
|
);
|
|
893
1077
|
});
|
|
894
1078
|
|
|
@@ -916,6 +1100,25 @@ describe('Unit test case for ts embed', () => {
|
|
|
916
1100
|
await appEmbed.render();
|
|
917
1101
|
expect(getRootEl().nextSibling.nextSibling).not.toBe(getIFrameEl());
|
|
918
1102
|
});
|
|
1103
|
+
it('Should set the pendo tracking key when specified', async () => {
|
|
1104
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
1105
|
+
init({
|
|
1106
|
+
thoughtSpotHost: 'tshost',
|
|
1107
|
+
authType: AuthType.None,
|
|
1108
|
+
pendoTrackingKey: '1234',
|
|
1109
|
+
});
|
|
1110
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
1111
|
+
frameParams: {
|
|
1112
|
+
width: '100%',
|
|
1113
|
+
height: '100%',
|
|
1114
|
+
},
|
|
1115
|
+
});
|
|
1116
|
+
await appEmbed.render();
|
|
1117
|
+
expectUrlMatchesWithParams(
|
|
1118
|
+
getIFrameSrc(),
|
|
1119
|
+
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&additionalPendoKey=1234${defaultParamsPost}#/home`,
|
|
1120
|
+
);
|
|
1121
|
+
});
|
|
919
1122
|
xit('Sets the forceSAMLAutoRedirect param', async (done) => {
|
|
920
1123
|
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
921
1124
|
init({
|
package/src/embed/ts-embed.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
getDOMNode,
|
|
19
19
|
getFilterQuery,
|
|
20
20
|
getQueryParamString,
|
|
21
|
+
getRuntimeParameters,
|
|
21
22
|
} from '../utils';
|
|
22
23
|
import {
|
|
23
24
|
getThoughtSpotHost,
|
|
@@ -114,6 +115,8 @@ export class TsEmbed {
|
|
|
114
115
|
*/
|
|
115
116
|
protected thoughtSpotV2Base: string;
|
|
116
117
|
|
|
118
|
+
protected embedComponentType = 'TsEmbed';
|
|
119
|
+
|
|
117
120
|
/**
|
|
118
121
|
* A map of event handlers for particular message types triggered
|
|
119
122
|
* by the embedded app; multiple event handlers can be registered
|
|
@@ -156,6 +159,10 @@ export class TsEmbed {
|
|
|
156
159
|
this.viewConfig = viewConfig;
|
|
157
160
|
this.shouldEncodeUrlQueryParams = this.embedConfig.shouldEncodeUrlQueryParams;
|
|
158
161
|
this.registerAppInit();
|
|
162
|
+
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
|
|
163
|
+
...viewConfig,
|
|
164
|
+
embedComponentType: this.embedComponentType,
|
|
165
|
+
});
|
|
159
166
|
}
|
|
160
167
|
|
|
161
168
|
/**
|
|
@@ -269,8 +276,15 @@ export class TsEmbed {
|
|
|
269
276
|
data: {
|
|
270
277
|
customisations: getCustomisations(this.embedConfig, this.viewConfig),
|
|
271
278
|
authToken,
|
|
272
|
-
runtimeFilterParams:
|
|
279
|
+
runtimeFilterParams: this.viewConfig.excludeRuntimeFiltersfromURL
|
|
280
|
+
? getRuntimeFilters(this.viewConfig.runtimeFilters)
|
|
281
|
+
: null,
|
|
282
|
+
hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
|
|
283
|
+
reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
|
|
273
284
|
hostConfig: this.embedConfig.hostConfig,
|
|
285
|
+
hiddenHomeLeftNavItems: this.viewConfig?.hiddenHomeLeftNavItems
|
|
286
|
+
? this.viewConfig?.hiddenHomeLeftNavItems
|
|
287
|
+
: [],
|
|
274
288
|
},
|
|
275
289
|
});
|
|
276
290
|
};
|
|
@@ -299,8 +313,8 @@ export class TsEmbed {
|
|
|
299
313
|
* Register APP_INIT event and sendback init payload
|
|
300
314
|
*/
|
|
301
315
|
private registerAppInit = () => {
|
|
302
|
-
this.on(EmbedEvent.APP_INIT, this.appInitCb);
|
|
303
|
-
this.on(EmbedEvent.AuthExpire, this.updateAuthToken);
|
|
316
|
+
this.on(EmbedEvent.APP_INIT, this.appInitCb, { start: false }, true);
|
|
317
|
+
this.on(EmbedEvent.AuthExpire, this.updateAuthToken, { start: false }, true);
|
|
304
318
|
};
|
|
305
319
|
|
|
306
320
|
/**
|
|
@@ -352,6 +366,9 @@ export class TsEmbed {
|
|
|
352
366
|
if (this.embedConfig.authType === AuthType.TrustedAuthTokenCookieless) {
|
|
353
367
|
queryParams[Param.cookieless] = true;
|
|
354
368
|
}
|
|
369
|
+
if (this.embedConfig.pendoTrackingKey) {
|
|
370
|
+
queryParams[Param.PendoTrackingKey] = this.embedConfig.pendoTrackingKey;
|
|
371
|
+
}
|
|
355
372
|
|
|
356
373
|
const {
|
|
357
374
|
disabledActions,
|
|
@@ -497,8 +514,7 @@ export class TsEmbed {
|
|
|
497
514
|
iFrame.allow = 'clipboard-read; clipboard-write';
|
|
498
515
|
|
|
499
516
|
const {
|
|
500
|
-
height: frameHeight,
|
|
501
|
-
width: frameWidth, ...restParams
|
|
517
|
+
height: frameHeight, width: frameWidth, ...restParams
|
|
502
518
|
} = this.viewConfig.frameParams || {};
|
|
503
519
|
const width = getCssDimension(frameWidth || DEFAULT_EMBED_WIDTH);
|
|
504
520
|
const height = getCssDimension(frameHeight || DEFAULT_EMBED_HEIGHT);
|
|
@@ -547,7 +563,6 @@ export class TsEmbed {
|
|
|
547
563
|
return;
|
|
548
564
|
}
|
|
549
565
|
|
|
550
|
-
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE);
|
|
551
566
|
this.iFrame = this.iFrame || this.createIframeEl(url);
|
|
552
567
|
this.iFrame.addEventListener('load', () => {
|
|
553
568
|
nextInQueue();
|
|
@@ -558,7 +573,9 @@ export class TsEmbed {
|
|
|
558
573
|
},
|
|
559
574
|
type: EmbedEvent.Load,
|
|
560
575
|
});
|
|
561
|
-
uploadMixpanelEvent(MIXPANEL_EVENT.
|
|
576
|
+
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE, {
|
|
577
|
+
elWidth: this.iFrame.clientWidth,
|
|
578
|
+
elHeight: this.iFrame.clientHeight,
|
|
562
579
|
timeTookToLoad: loadTimestamp - initTimestamp,
|
|
563
580
|
});
|
|
564
581
|
});
|
|
@@ -711,6 +728,8 @@ export class TsEmbed {
|
|
|
711
728
|
* @param messageType The message type
|
|
712
729
|
* @param callback A callback as a function
|
|
713
730
|
* @param options The message options
|
|
731
|
+
* @param isSelf
|
|
732
|
+
* @param isRegisteredBySDK
|
|
714
733
|
* @example
|
|
715
734
|
* ```js
|
|
716
735
|
* tsEmbed.on(EmbedEvent.Error, (data) => {
|
|
@@ -730,7 +749,11 @@ export class TsEmbed {
|
|
|
730
749
|
messageType: EmbedEvent,
|
|
731
750
|
callback: MessageCallback,
|
|
732
751
|
options: MessageOptions = { start: false },
|
|
752
|
+
isRegisteredBySDK = false,
|
|
733
753
|
): typeof TsEmbed.prototype {
|
|
754
|
+
uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_ON}-${messageType}`, {
|
|
755
|
+
isRegisteredBySDK,
|
|
756
|
+
});
|
|
734
757
|
if (this.isRendered) {
|
|
735
758
|
this.handleError('Please register event handlers before calling render');
|
|
736
759
|
}
|
|
@@ -900,8 +923,11 @@ export class V1Embed extends TsEmbed {
|
|
|
900
923
|
let queryString = queryParams;
|
|
901
924
|
if (!this.viewConfig.excludeRuntimeFiltersfromURL) {
|
|
902
925
|
const runtimeFilters = this.viewConfig.runtimeFilters;
|
|
926
|
+
const runtimeParameters = this.viewConfig.runtimeParameters;
|
|
927
|
+
|
|
928
|
+
const parameterQuery = getRuntimeParameters(runtimeParameters || []);
|
|
903
929
|
const filterQuery = getFilterQuery(runtimeFilters || []);
|
|
904
|
-
queryString = [filterQuery, queryParams].filter(Boolean).join('&');
|
|
930
|
+
queryString = [parameterQuery, filterQuery, queryParams].filter(Boolean).join('&');
|
|
905
931
|
}
|
|
906
932
|
return this.getV1EmbedBasePath(queryString);
|
|
907
933
|
}
|
|
@@ -929,7 +955,6 @@ export class V1Embed extends TsEmbed {
|
|
|
929
955
|
options: MessageOptions = { start: false },
|
|
930
956
|
): typeof TsEmbed.prototype {
|
|
931
957
|
const eventType = this.getCompatibleEventType(messageType);
|
|
932
|
-
uploadMixpanelEvent(`${MIXPANEL_EVENT.VISUAL_SDK_ON}-${messageType}`);
|
|
933
958
|
return super.on(eventType, callback, options);
|
|
934
959
|
}
|
|
935
960
|
}
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { AppEmbed, Page, AppViewConfig } from './embed/app';
|
|
11
11
|
import {
|
|
12
12
|
init, prefetch, logout, getEmbedConfig, executeTML, exportTML,
|
|
13
|
+
executeTMLInput, exportTMLInput,
|
|
13
14
|
} from './embed/base';
|
|
14
15
|
import { PinboardEmbed, LiveboardViewConfig, LiveboardEmbed } from './embed/liveboard';
|
|
15
16
|
import { SearchEmbed, SearchViewConfig } from './embed/search';
|
|
@@ -29,6 +30,8 @@ import {
|
|
|
29
30
|
PrefetchFeatures,
|
|
30
31
|
FrameParams,
|
|
31
32
|
DOMSelector,
|
|
33
|
+
HomeLeftNavItem,
|
|
34
|
+
HomepageModule,
|
|
32
35
|
MessageOptions,
|
|
33
36
|
MessageCallback,
|
|
34
37
|
MessagePayload,
|
|
@@ -39,6 +42,7 @@ import {
|
|
|
39
42
|
} from './types';
|
|
40
43
|
import { CustomCssVariables } from './css-variables';
|
|
41
44
|
import { SageEmbed, SageViewConfig } from './embed/sage';
|
|
45
|
+
import { AnswerService } from './utils/graphql/answerService/answerService';
|
|
42
46
|
|
|
43
47
|
export {
|
|
44
48
|
init,
|
|
@@ -46,6 +50,8 @@ export {
|
|
|
46
50
|
prefetch,
|
|
47
51
|
executeTML,
|
|
48
52
|
exportTML,
|
|
53
|
+
executeTMLInput,
|
|
54
|
+
exportTMLInput,
|
|
49
55
|
getEmbedConfig as getInitConfig,
|
|
50
56
|
getSessionInfo,
|
|
51
57
|
SearchEmbed,
|
|
@@ -58,6 +64,7 @@ export {
|
|
|
58
64
|
AuthStatus,
|
|
59
65
|
AuthEvent,
|
|
60
66
|
AuthEventEmitter,
|
|
67
|
+
AnswerService,
|
|
61
68
|
// types
|
|
62
69
|
Page,
|
|
63
70
|
AuthType,
|
|
@@ -76,6 +83,8 @@ export {
|
|
|
76
83
|
AppViewConfig,
|
|
77
84
|
PrefetchFeatures,
|
|
78
85
|
FrameParams,
|
|
86
|
+
HomeLeftNavItem,
|
|
87
|
+
HomepageModule,
|
|
79
88
|
DOMSelector,
|
|
80
89
|
MessageOptions,
|
|
81
90
|
MessageCallback,
|
|
@@ -14,9 +14,10 @@ const config = {
|
|
|
14
14
|
|
|
15
15
|
jest.mock('mixpanel-browser', () => ({
|
|
16
16
|
__esModule: true,
|
|
17
|
-
init: jest.fn(),
|
|
17
|
+
init: jest.fn().mockReturnThis(),
|
|
18
18
|
identify: jest.fn(),
|
|
19
19
|
track: jest.fn(),
|
|
20
|
+
register_once: jest.fn(),
|
|
20
21
|
}));
|
|
21
22
|
|
|
22
23
|
describe('Unit test for mixpanel', () => {
|
|
@@ -30,7 +31,7 @@ describe('Unit test for mixpanel', () => {
|
|
|
30
31
|
isPublicUser: false,
|
|
31
32
|
};
|
|
32
33
|
initMixpanel(sessionInfo);
|
|
33
|
-
expect(mixpanel.init).toHaveBeenCalledWith(sessionInfo.mixpanelToken);
|
|
34
|
+
expect(mixpanel.init).toHaveBeenCalledWith(sessionInfo.mixpanelToken, undefined, 'tsEmbed');
|
|
34
35
|
expect(mixpanel.identify).toHaveBeenCalledWith(sessionInfo.userGUID);
|
|
35
36
|
|
|
36
37
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_CALLED_INIT, {
|
|
@@ -45,10 +46,19 @@ describe('Unit test for mixpanel', () => {
|
|
|
45
46
|
mixpanelToken: 'newToken',
|
|
46
47
|
isPublicUser: true,
|
|
47
48
|
userGUID: 'newUser',
|
|
49
|
+
clusterId: 'newClusterId',
|
|
50
|
+
clusterName: 'newClusterName',
|
|
51
|
+
releaseVersion: 'newReleaseVersion',
|
|
48
52
|
};
|
|
49
53
|
initMixpanel(sessionInfo);
|
|
50
54
|
|
|
51
|
-
expect(mixpanel.init).toHaveBeenCalledWith(sessionInfo.mixpanelToken);
|
|
55
|
+
expect(mixpanel.init).toHaveBeenCalledWith(sessionInfo.mixpanelToken, undefined, 'tsEmbed');
|
|
56
|
+
expect(mixpanel.register_once).toHaveBeenCalledWith({
|
|
57
|
+
clusterId: sessionInfo.clusterId,
|
|
58
|
+
clusterName: sessionInfo.clusterName,
|
|
59
|
+
releaseVersion: sessionInfo.releaseVersion,
|
|
60
|
+
hostAppUrl: 'localhost',
|
|
61
|
+
});
|
|
52
62
|
expect(mixpanel.identify).not.toHaveBeenCalledWith(sessionInfo.userGUID);
|
|
53
63
|
});
|
|
54
64
|
|
package/src/mixpanel-service.ts
CHANGED
|
@@ -6,6 +6,7 @@ export const EndPoints = {
|
|
|
6
6
|
|
|
7
7
|
// Needed to avoid error in CJS builds on some bundlers.
|
|
8
8
|
const mixpanelLib = mixpanel.default || mixpanel;
|
|
9
|
+
let mixpanelInstance: mixpanel.Mixpanel;
|
|
9
10
|
|
|
10
11
|
export const MIXPANEL_EVENT = {
|
|
11
12
|
VISUAL_SDK_RENDER_START: 'visual-sdk-render-start',
|
|
@@ -15,6 +16,7 @@ export const MIXPANEL_EVENT = {
|
|
|
15
16
|
VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
|
|
16
17
|
VISUAL_SDK_ON: 'visual-sdk-on',
|
|
17
18
|
VISUAL_SDK_IFRAME_LOAD_PERFORMANCE: 'visual-sdk-iframe-load-performance',
|
|
19
|
+
VISUAL_SDK_EMBED_CREATE: 'visual-sdk-embed-create',
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
let isMixpanelInitialized = false;
|
|
@@ -31,7 +33,7 @@ export function uploadMixpanelEvent(eventId: string, eventProps = {}): void {
|
|
|
31
33
|
eventQueue.push({ eventId, eventProps });
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
34
|
-
|
|
36
|
+
mixpanelInstance.track(eventId, eventProps);
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
/**
|
|
@@ -61,10 +63,16 @@ export function initMixpanel(sessionInfo: any): void {
|
|
|
61
63
|
const token = sessionInfo.mixpanelToken;
|
|
62
64
|
try {
|
|
63
65
|
if (token) {
|
|
64
|
-
mixpanelLib.init(token);
|
|
66
|
+
mixpanelInstance = mixpanelLib.init(token, undefined, 'tsEmbed');
|
|
65
67
|
if (!isPublicCluster) {
|
|
66
|
-
|
|
68
|
+
mixpanelInstance.identify(sessionInfo.userGUID);
|
|
67
69
|
}
|
|
70
|
+
mixpanelInstance.register_once({
|
|
71
|
+
clusterId: sessionInfo.clusterId,
|
|
72
|
+
clusterName: sessionInfo.clusterName,
|
|
73
|
+
releaseVersion: sessionInfo.releaseVersion,
|
|
74
|
+
hostAppUrl: window?.location?.host || '',
|
|
75
|
+
});
|
|
68
76
|
isMixpanelInitialized = true;
|
|
69
77
|
emptyQueue();
|
|
70
78
|
}
|