@thoughtspot/visual-embed-sdk 1.35.1 → 1.35.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +3 -15
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +3 -0
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +12 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/utils/processData.spec.js +0 -33
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +0 -15
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +3 -24
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +0 -132
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-BXczdQc7.js → index-BaGHDCpW.js} +1 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/utils.d.ts +0 -15
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +6 -3
- package/dist/tsembed-react.js +5 -2
- package/dist/tsembed.es.js +6 -3
- package/dist/tsembed.js +5 -2
- package/lib/package.json +3 -15
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +3 -0
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +12 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/utils/processData.spec.js +0 -33
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils.d.ts +0 -15
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +2 -20
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +1 -133
- package/lib/src/utils.spec.js.map +1 -1
- package/package.json +3 -15
- package/src/embed/ts-embed.spec.ts +13 -0
- package/src/embed/ts-embed.ts +3 -0
- package/src/utils/processData.spec.ts +0 -42
- package/src/utils.spec.ts +1 -147
- package/src/utils.ts +2 -25
- package/cjs/src/embed/base.native.d.ts +0 -1
- package/cjs/src/embed/base.native.d.ts.map +0 -1
- package/cjs/src/embed/base.native.js +0 -1
- package/cjs/src/embed/base.native.js.map +0 -1
- package/cjs/src/embed/hello.d.ts +0 -2
- package/cjs/src/embed/hello.d.ts.map +0 -1
- package/cjs/src/embed/hello.js +0 -6
- package/cjs/src/embed/hello.js.map +0 -1
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +0 -2
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +0 -1
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js +0 -104
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +0 -1
- package/cjs/src/native/LiveboardEmbed.d.ts +0 -13
- package/cjs/src/native/LiveboardEmbed.d.ts.map +0 -1
- package/cjs/src/native/LiveboardEmbed.js +0 -146
- package/cjs/src/native/LiveboardEmbed.js.map +0 -1
- package/cjs/src/native/commonUtils.d.ts +0 -20
- package/cjs/src/native/commonUtils.d.ts.map +0 -1
- package/cjs/src/native/commonUtils.js +0 -175
- package/cjs/src/native/commonUtils.js.map +0 -1
- package/cjs/src/native/commonUtils.spec.d.ts +0 -2
- package/cjs/src/native/commonUtils.spec.d.ts.map +0 -1
- package/cjs/src/native/commonUtils.spec.js +0 -127
- package/cjs/src/native/commonUtils.spec.js.map +0 -1
- package/cjs/src/native/embedConfig.d.ts +0 -10
- package/cjs/src/native/embedConfig.d.ts.map +0 -1
- package/cjs/src/native/embedConfig.js +0 -12
- package/cjs/src/native/embedConfig.js.map +0 -1
- package/cjs/src/native/index.d.ts +0 -2
- package/cjs/src/native/index.d.ts.map +0 -1
- package/cjs/src/native/index.js +0 -7
- package/cjs/src/native/index.js.map +0 -1
- package/cjs/src/native/types.d.ts +0 -10
- package/cjs/src/native/types.d.ts.map +0 -1
- package/cjs/src/native/types.js +0 -3
- package/cjs/src/native/types.js.map +0 -1
- package/cjs/src/parsers/filtersToRuntimeFilters.d.ts +0 -6
- package/cjs/src/parsers/filtersToRuntimeFilters.d.ts.map +0 -1
- package/cjs/src/parsers/filtersToRuntimeFilters.js +0 -60
- package/cjs/src/parsers/filtersToRuntimeFilters.js.map +0 -1
- package/cjs/src/parsers/filtersToRuntimeFilters.spec.d.ts +0 -2
- package/cjs/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +0 -1
- package/cjs/src/parsers/filtersToRuntimeFilters.spec.js +0 -205
- package/cjs/src/parsers/filtersToRuntimeFilters.spec.js.map +0 -1
- package/cjs/src/parsers/index.d.ts +0 -2
- package/cjs/src/parsers/index.d.ts.map +0 -1
- package/cjs/src/parsers/index.js +0 -6
- package/cjs/src/parsers/index.js.map +0 -1
- package/cjs/src/parsers/index.spec.d.ts +0 -2
- package/cjs/src/parsers/index.spec.d.ts.map +0 -1
- package/cjs/src/parsers/index.spec.js +0 -9
- package/cjs/src/parsers/index.spec.js.map +0 -1
- package/cjs/src/react-native/Liveboard.d.ts +0 -1
- package/cjs/src/react-native/Liveboard.d.ts.map +0 -1
- package/cjs/src/react-native/Liveboard.js +0 -1
- package/cjs/src/react-native/Liveboard.js.map +0 -1
- package/dist/index-Bh8kjZh8.js +0 -7370
- package/dist/src/embed/hello.d.ts +0 -2
- package/dist/src/embed/hello.d.ts.map +0 -1
- package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts +0 -2
- package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts.map +0 -1
- package/dist/src/native/LiveboardEmbed.d.ts +0 -13
- package/dist/src/native/LiveboardEmbed.d.ts.map +0 -1
- package/dist/src/native/commonUtils.d.ts +0 -20
- package/dist/src/native/commonUtils.d.ts.map +0 -1
- package/dist/src/native/commonUtils.spec.d.ts +0 -2
- package/dist/src/native/commonUtils.spec.d.ts.map +0 -1
- package/dist/src/native/embedConfig.d.ts +0 -10
- package/dist/src/native/embedConfig.d.ts.map +0 -1
- package/dist/src/native/index.d.ts +0 -2
- package/dist/src/native/index.d.ts.map +0 -1
- package/dist/src/native/types.d.ts +0 -10
- package/dist/src/native/types.d.ts.map +0 -1
- package/dist/src/parsers/filtersToRuntimeFilters.d.ts +0 -6
- package/dist/src/parsers/filtersToRuntimeFilters.d.ts.map +0 -1
- package/dist/src/parsers/filtersToRuntimeFilters.spec.d.ts +0 -2
- package/dist/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +0 -1
- package/dist/src/parsers/index.d.ts +0 -2
- package/dist/src/parsers/index.d.ts.map +0 -1
- package/dist/src/parsers/index.spec.d.ts +0 -2
- package/dist/src/parsers/index.spec.d.ts.map +0 -1
- package/dist/tsembed-parsers.es.js +0 -3831
- package/dist/tsembed-parsers.js +0 -3840
- package/lib/src/embed/base.native.d.ts +0 -1
- package/lib/src/embed/base.native.d.ts.map +0 -1
- package/lib/src/embed/base.native.js +0 -1
- package/lib/src/embed/base.native.js.map +0 -1
- package/lib/src/embed/hello.d.ts +0 -2
- package/lib/src/embed/hello.d.ts.map +0 -1
- package/lib/src/embed/hello.js +0 -2
- package/lib/src/embed/hello.js.map +0 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts +0 -2
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts.map +0 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.js +0 -101
- package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +0 -1
- package/lib/src/native/LiveboardEmbed.d.ts +0 -13
- package/lib/src/native/LiveboardEmbed.d.ts.map +0 -1
- package/lib/src/native/LiveboardEmbed.js +0 -141
- package/lib/src/native/LiveboardEmbed.js.map +0 -1
- package/lib/src/native/commonUtils.d.ts +0 -20
- package/lib/src/native/commonUtils.d.ts.map +0 -1
- package/lib/src/native/commonUtils.js +0 -169
- package/lib/src/native/commonUtils.js.map +0 -1
- package/lib/src/native/commonUtils.spec.d.ts +0 -2
- package/lib/src/native/commonUtils.spec.d.ts.map +0 -1
- package/lib/src/native/commonUtils.spec.js +0 -124
- package/lib/src/native/commonUtils.spec.js.map +0 -1
- package/lib/src/native/embedConfig.d.ts +0 -10
- package/lib/src/native/embedConfig.d.ts.map +0 -1
- package/lib/src/native/embedConfig.js +0 -7
- package/lib/src/native/embedConfig.js.map +0 -1
- package/lib/src/native/index.d.ts +0 -2
- package/lib/src/native/index.d.ts.map +0 -1
- package/lib/src/native/index.js +0 -2
- package/lib/src/native/index.js.map +0 -1
- package/lib/src/native/types.d.ts +0 -10
- package/lib/src/native/types.d.ts.map +0 -1
- package/lib/src/native/types.js +0 -2
- package/lib/src/native/types.js.map +0 -1
- package/lib/src/parsers/filtersToRuntimeFilters.d.ts +0 -6
- package/lib/src/parsers/filtersToRuntimeFilters.d.ts.map +0 -1
- package/lib/src/parsers/filtersToRuntimeFilters.js +0 -55
- package/lib/src/parsers/filtersToRuntimeFilters.js.map +0 -1
- package/lib/src/parsers/filtersToRuntimeFilters.spec.d.ts +0 -2
- package/lib/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +0 -1
- package/lib/src/parsers/filtersToRuntimeFilters.spec.js +0 -203
- package/lib/src/parsers/filtersToRuntimeFilters.spec.js.map +0 -1
- package/lib/src/parsers/index.d.ts +0 -2
- package/lib/src/parsers/index.d.ts.map +0 -1
- package/lib/src/parsers/index.js +0 -2
- package/lib/src/parsers/index.js.map +0 -1
- package/lib/src/parsers/index.spec.d.ts +0 -2
- package/lib/src/parsers/index.spec.d.ts.map +0 -1
- package/lib/src/parsers/index.spec.js +0 -7
- package/lib/src/parsers/index.spec.js.map +0 -1
- package/lib/src/react-native/Liveboard.d.ts +0 -1
- package/lib/src/react-native/Liveboard.d.ts.map +0 -1
- package/lib/src/react-native/Liveboard.js +0 -1
- package/lib/src/react-native/Liveboard.js.map +0 -1
- package/src/native/commonUtils.spec.tsx +0 -161
- package/src/native/commonUtils.ts +0 -183
- package/src/native/index.ts +0 -1
- package/src/native/types.ts +0 -10
package/src/utils.ts
CHANGED
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
ViewConfig,
|
|
17
17
|
RuntimeParameter,
|
|
18
18
|
} from './types';
|
|
19
|
-
import { WebViewConfig } from './native/types';
|
|
20
19
|
|
|
21
20
|
/**
|
|
22
21
|
* Construct a runtime filters query string from the given filters.
|
|
@@ -74,7 +73,7 @@ export const getRuntimeParameters = (runtimeParameters: RuntimeParameter[]): str
|
|
|
74
73
|
* parameter to the ThoughtSpot app.
|
|
75
74
|
* @param value Any parameter value
|
|
76
75
|
*/
|
|
77
|
-
|
|
76
|
+
const serializeParam = (value: any) => {
|
|
78
77
|
// do not serialize primitive types
|
|
79
78
|
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
80
79
|
return value;
|
|
@@ -89,7 +88,7 @@ export const serializeParam = (value: any) => {
|
|
|
89
88
|
* in case of any other type, we directly return the value.
|
|
90
89
|
* @param value
|
|
91
90
|
*/
|
|
92
|
-
|
|
91
|
+
const paramToString = (value: any) => (Array.isArray(value) ? value.join(',') : value);
|
|
93
92
|
|
|
94
93
|
/**
|
|
95
94
|
* Return a query param string composed from the given params object
|
|
@@ -243,28 +242,6 @@ export const getCustomisations = (
|
|
|
243
242
|
return customizations;
|
|
244
243
|
};
|
|
245
244
|
|
|
246
|
-
export const getCustomisationsMobileEmbed = (
|
|
247
|
-
embedConfig: WebViewConfig,
|
|
248
|
-
): CustomisationsInterface => {
|
|
249
|
-
const customizationsFromEmbedConfig = embedConfig.customizations
|
|
250
|
-
|| ((embedConfig as any).customisations as CustomisationsInterface);
|
|
251
|
-
|
|
252
|
-
const customizations: CustomisationsInterface = {
|
|
253
|
-
style: {
|
|
254
|
-
...customizationsFromEmbedConfig?.style,
|
|
255
|
-
customCSS: {
|
|
256
|
-
...customizationsFromEmbedConfig?.style?.customCSS,
|
|
257
|
-
},
|
|
258
|
-
customCSSUrl:
|
|
259
|
-
customizationsFromEmbedConfig?.style?.customCSSUrl,
|
|
260
|
-
},
|
|
261
|
-
content: {
|
|
262
|
-
...customizationsFromEmbedConfig?.content,
|
|
263
|
-
},
|
|
264
|
-
};
|
|
265
|
-
return customizations;
|
|
266
|
-
};
|
|
267
|
-
|
|
268
245
|
export const getRuntimeFilters = (runtimefilters: any) => getFilterQuery(runtimefilters || []);
|
|
269
246
|
|
|
270
247
|
/**
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=base.native.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.native.d.ts","sourceRoot":"","sources":["../../../src/embed/base.native.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=base.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.native.js","sourceRoot":"","sources":["../../../src/embed/base.native.ts"],"names":[],"mappings":""}
|
package/cjs/src/embed/hello.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hello.d.ts","sourceRoot":"","sources":["../../../src/embed/hello.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAAO,MAAgB,CAAC"}
|
package/cjs/src/embed/hello.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hello.js","sourceRoot":"","sources":["../../../src/embed/hello.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC;AAArC,QAAA,aAAa,iBAAwB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchEmbed-basic-auth.spec.d.ts","sourceRoot":"","sources":["../../../src/embed/searchEmbed-basic-auth.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const search_1 = require("./search");
|
|
5
|
-
const baseInstance = tslib_1.__importStar(require("./base"));
|
|
6
|
-
const authService = tslib_1.__importStar(require("../utils/authService"));
|
|
7
|
-
const authInstance = tslib_1.__importStar(require("../auth"));
|
|
8
|
-
const config = tslib_1.__importStar(require("../config"));
|
|
9
|
-
const embedConfigInstance = tslib_1.__importStar(require("./embedConfig"));
|
|
10
|
-
const index_1 = require("../index");
|
|
11
|
-
const types_1 = require("../types");
|
|
12
|
-
const test_utils_1 = require("../test/test-utils");
|
|
13
|
-
const auth_spec_1 = require("../auth.spec");
|
|
14
|
-
const thoughtSpotHost = 'tshost';
|
|
15
|
-
(0, index_1.init)({
|
|
16
|
-
thoughtSpotHost,
|
|
17
|
-
authType: types_1.AuthType.Basic,
|
|
18
|
-
username: 'tsadmin',
|
|
19
|
-
password: 'admin',
|
|
20
|
-
});
|
|
21
|
-
describe('Search embed tests when authType is Basic', () => {
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
* @param version
|
|
25
|
-
*/
|
|
26
|
-
function setupVersion(version) {
|
|
27
|
-
jest.spyOn(window, 'addEventListener').mockImplementation((event, handler, options) => {
|
|
28
|
-
handler({
|
|
29
|
-
data: {
|
|
30
|
-
type: 'xyz',
|
|
31
|
-
},
|
|
32
|
-
ports: [3000],
|
|
33
|
-
source: null,
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(async () => ({
|
|
37
|
-
json: () => ({
|
|
38
|
-
...auth_spec_1.mockSessionInfo,
|
|
39
|
-
releaseVersion: version,
|
|
40
|
-
}),
|
|
41
|
-
status: 200,
|
|
42
|
-
}));
|
|
43
|
-
jest.spyOn(authInstance, 'getReleaseVersion').mockReturnValue(version);
|
|
44
|
-
}
|
|
45
|
-
beforeEach(() => {
|
|
46
|
-
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
47
|
-
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
48
|
-
});
|
|
49
|
-
afterEach(() => {
|
|
50
|
-
jest.clearAllMocks();
|
|
51
|
-
});
|
|
52
|
-
test('when releaseVersion is empty', async () => {
|
|
53
|
-
setupVersion('');
|
|
54
|
-
const mockAlert = spyOn(window, 'alert');
|
|
55
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
56
|
-
await searchEmbed.render();
|
|
57
|
-
expect(mockAlert).not.toBeCalled();
|
|
58
|
-
});
|
|
59
|
-
test("when releaseVersion is '7.0.1.cl' ", async () => {
|
|
60
|
-
setupVersion('7.0.1.cl');
|
|
61
|
-
const mockAlert = jest.spyOn(window, 'alert');
|
|
62
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
63
|
-
await searchEmbed.render();
|
|
64
|
-
expect(mockAlert).not.toBeCalled();
|
|
65
|
-
});
|
|
66
|
-
test('when releaseVersion is above 8.4.0.sw', async () => {
|
|
67
|
-
setupVersion('8.4.0.sw');
|
|
68
|
-
const mockAlert = jest.spyOn(window, 'alert');
|
|
69
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
70
|
-
await searchEmbed.render();
|
|
71
|
-
expect(mockAlert).not.toBeCalled();
|
|
72
|
-
});
|
|
73
|
-
test('releaseVersion is above 8.4.0.sw', async () => {
|
|
74
|
-
setupVersion('8.8.0.sw');
|
|
75
|
-
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
|
|
76
|
-
const mockAlert = jest.spyOn(window, 'alert');
|
|
77
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
78
|
-
await searchEmbed.render();
|
|
79
|
-
expect(mockAlert).not.toBeCalled();
|
|
80
|
-
});
|
|
81
|
-
test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is ts7.dec.cl', async () => {
|
|
82
|
-
setupVersion('ts7.dec.cl');
|
|
83
|
-
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
|
|
84
|
-
jest.spyOn(embedConfigInstance, 'getEmbedConfig').mockReturnValue({
|
|
85
|
-
suppressSearchEmbedBetaWarning: true,
|
|
86
|
-
});
|
|
87
|
-
const mockAlert = jest.spyOn(window, 'alert');
|
|
88
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
89
|
-
await searchEmbed.render();
|
|
90
|
-
expect(mockAlert).not.toBeCalled();
|
|
91
|
-
});
|
|
92
|
-
test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is 8.4.0.sw', async () => {
|
|
93
|
-
setupVersion('8.4.0.sw');
|
|
94
|
-
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
|
|
95
|
-
jest.spyOn(embedConfigInstance, 'getEmbedConfig').mockReturnValue({
|
|
96
|
-
suppressSearchEmbedBetaWarning: true,
|
|
97
|
-
});
|
|
98
|
-
const mockAlert = jest.spyOn(window, 'alert');
|
|
99
|
-
const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
100
|
-
await searchEmbed.render();
|
|
101
|
-
expect(mockAlert).not.toBeCalled();
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
//# sourceMappingURL=searchEmbed-basic-auth.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchEmbed-basic-auth.spec.js","sourceRoot":"","sources":["../../../src/embed/searchEmbed-basic-auth.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export type LiveboardEmbedProps = {
|
|
3
|
-
liveboardId: string;
|
|
4
|
-
getToken: () => Promise<string>;
|
|
5
|
-
};
|
|
6
|
-
export declare enum Param {
|
|
7
|
-
Version = "sdkVersion"
|
|
8
|
-
}
|
|
9
|
-
export type QueryParams = {
|
|
10
|
-
[key: string]: string | boolean | number;
|
|
11
|
-
};
|
|
12
|
-
export declare const LiveboardEmbed: React.FC<LiveboardEmbedProps>;
|
|
13
|
-
//# sourceMappingURL=LiveboardEmbed.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LiveboardEmbed.d.ts","sourceRoot":"","sources":["../../../src/native/LiveboardEmbed.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAS3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,KAAK;IACb,OAAO,eAAe;CACzB;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC5C,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkKxD,CAAC"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LiveboardEmbed = exports.Param = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const react_native_1 = require("react-native");
|
|
7
|
-
const react_native_webview_1 = tslib_1.__importDefault(require("react-native-webview"));
|
|
8
|
-
const embedConfig_1 = require("./embedConfig");
|
|
9
|
-
const auth_spec_1 = require("src/auth.spec");
|
|
10
|
-
const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
|
|
11
|
-
const utils_1 = require("src/utils");
|
|
12
|
-
const { version } = package_json_1.default;
|
|
13
|
-
var Param;
|
|
14
|
-
(function (Param) {
|
|
15
|
-
Param["Version"] = "sdkVersion";
|
|
16
|
-
})(Param = exports.Param || (exports.Param = {}));
|
|
17
|
-
const LiveboardEmbed = ({ liveboardId, getToken }) => {
|
|
18
|
-
const webViewRef = (0, react_1.useRef)(null);
|
|
19
|
-
const [embedUrl, setEmbedUrl] = (0, react_1.useState)("");
|
|
20
|
-
const [webViewLoaded, setWebViewLoaded] = (0, react_1.useState)(false);
|
|
21
|
-
const getEmbedParamsString = () => {
|
|
22
|
-
const queryparamsH = getBaseQueryParams();
|
|
23
|
-
return getQueryParamString(queryparamsH);
|
|
24
|
-
};
|
|
25
|
-
const getEmbedBasePath = (query) => {
|
|
26
|
-
let queryString = (query.startsWith('?')) ? query : `?${query}`;
|
|
27
|
-
queryString = `?base64UrlEncodedFlags=${(0, utils_1.getEncodedQueryParamsString)(queryString.substr(1))}`;
|
|
28
|
-
const basePath = [auth_spec_1.embedConfig === null || auth_spec_1.embedConfig === void 0 ? void 0 : auth_spec_1.embedConfig.host, queryString]
|
|
29
|
-
.filter((x) => x.length > 0)
|
|
30
|
-
.join('/');
|
|
31
|
-
return `${basePath}#`;
|
|
32
|
-
};
|
|
33
|
-
const getRootWebViewSrc = () => {
|
|
34
|
-
const query = getEmbedParamsString();
|
|
35
|
-
return getEmbedBasePath(query);
|
|
36
|
-
};
|
|
37
|
-
const getQueryParamString = (queryParams, shouldSerializeParamValues = false) => {
|
|
38
|
-
const qp = [];
|
|
39
|
-
const params = Object.keys(queryParams);
|
|
40
|
-
params.forEach((key) => {
|
|
41
|
-
const val = queryParams[key];
|
|
42
|
-
if (val !== undefined) {
|
|
43
|
-
const serializedValue = shouldSerializeParamValues
|
|
44
|
-
? (0, utils_1.serializeParam)(val)
|
|
45
|
-
: (0, utils_1.paramToString)(val);
|
|
46
|
-
qp.push(`${key}=${serializedValue}`);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
if (qp.length) {
|
|
50
|
-
return qp.join('&');
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
};
|
|
54
|
-
const getBaseQueryParams = (queryParams = {}) => {
|
|
55
|
-
var _a;
|
|
56
|
-
let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
|
|
57
|
-
if (hostAppUrl.includes('localhost') || hostAppUrl.includes('127.0.0.1')) {
|
|
58
|
-
hostAppUrl = 'local-host';
|
|
59
|
-
}
|
|
60
|
-
queryParams[Param.Version] = version;
|
|
61
|
-
return queryParams;
|
|
62
|
-
};
|
|
63
|
-
const handleAppInit = async () => {
|
|
64
|
-
const authToken = await getToken();
|
|
65
|
-
const initPayload = {
|
|
66
|
-
type: "appInit",
|
|
67
|
-
data: {
|
|
68
|
-
host: auth_spec_1.embedConfig === null || auth_spec_1.embedConfig === void 0 ? void 0 : auth_spec_1.embedConfig.host,
|
|
69
|
-
authToken,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
const jsCode = `
|
|
73
|
-
window.postMessage(${JSON.stringify(initPayload)});
|
|
74
|
-
`;
|
|
75
|
-
if (webViewRef.current && webViewLoaded) {
|
|
76
|
-
webViewRef.current.injectJavaScript(jsCode);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
// Generate embed URL
|
|
80
|
-
const constructEmbedUrl = async () => {
|
|
81
|
-
const embedConfig = (0, embedConfig_1.getEmbedConfig)();
|
|
82
|
-
const host = (embedConfig === null || embedConfig === void 0 ? void 0 : embedConfig.host) || "";
|
|
83
|
-
const url = `${host}/?authType=AuthServerCookieless#/embed/liveboard/${liveboardId}`;
|
|
84
|
-
setEmbedUrl(url);
|
|
85
|
-
};
|
|
86
|
-
// Handle messages from the WebView
|
|
87
|
-
const handleOnMessage = (event) => {
|
|
88
|
-
try {
|
|
89
|
-
const message = JSON.parse(event.nativeEvent.data);
|
|
90
|
-
switch (message.type) {
|
|
91
|
-
case "AppInit":
|
|
92
|
-
handleAppInit();
|
|
93
|
-
break;
|
|
94
|
-
case "AuthExpiry" || "ThoughtspotAuthExpired":
|
|
95
|
-
handleAuthExpiry();
|
|
96
|
-
break;
|
|
97
|
-
case "CustomEvent":
|
|
98
|
-
console.log("Custom event received:", message.data);
|
|
99
|
-
break;
|
|
100
|
-
default:
|
|
101
|
-
console.warn("Unhandled message type:", message.type);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
console.error("Failed to handle message from WebView:", error);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
// Handle auth token expiry
|
|
109
|
-
const handleAuthExpiry = async () => {
|
|
110
|
-
var _a;
|
|
111
|
-
const authToken = await getToken();
|
|
112
|
-
const payload = {
|
|
113
|
-
type: "AuthExpiry",
|
|
114
|
-
data: { authToken },
|
|
115
|
-
};
|
|
116
|
-
(_a = webViewRef.current) === null || _a === void 0 ? void 0 : _a.injectJavaScript(`
|
|
117
|
-
window.postMessage(${JSON.stringify(payload)}, "*");
|
|
118
|
-
`);
|
|
119
|
-
};
|
|
120
|
-
(0, react_1.useEffect)(() => {
|
|
121
|
-
constructEmbedUrl();
|
|
122
|
-
}, []);
|
|
123
|
-
if (!embedUrl) {
|
|
124
|
-
return (react_1.default.createElement(react_native_1.View, { style: styles.loadingContainer },
|
|
125
|
-
react_1.default.createElement(react_native_1.Text, null, "Loading Liveboard...")));
|
|
126
|
-
}
|
|
127
|
-
return (react_1.default.createElement(react_native_webview_1.default, { ref: webViewRef, source: { uri: embedUrl }, style: styles.webview, onMessage: handleOnMessage, onLoadStart: () => console.log('WebView load started'), injectedJavaScriptBeforeContentLoaded: `
|
|
128
|
-
window.ReactNativeWebView = {
|
|
129
|
-
postMessage: function(data) {
|
|
130
|
-
window.postMessage(data, '*');
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
`, onLoad: () => setWebViewLoaded(true), javaScriptEnabled: true, domStorageEnabled: true, cacheEnabled: false, originWhitelist: ["*"], onHttpError: (event) => console.log("HTTP Error: ", event.nativeEvent), onError: (event) => console.error("WebView Error: ", event.nativeEvent) }));
|
|
134
|
-
};
|
|
135
|
-
exports.LiveboardEmbed = LiveboardEmbed;
|
|
136
|
-
const styles = react_native_1.StyleSheet.create({
|
|
137
|
-
webview: {
|
|
138
|
-
flex: 1,
|
|
139
|
-
},
|
|
140
|
-
loadingContainer: {
|
|
141
|
-
flex: 1,
|
|
142
|
-
justifyContent: "center",
|
|
143
|
-
alignItems: "center",
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
//# sourceMappingURL=LiveboardEmbed.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LiveboardEmbed.js","sourceRoot":"","sources":["../../../src/native/LiveboardEmbed.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { WebViewConfig } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* This method constructs the webview URL with given config.
|
|
4
|
-
* @param config To get the webviewURL pass the necessary config options.
|
|
5
|
-
* host: string;
|
|
6
|
-
* authType: AuthType;
|
|
7
|
-
* liveboardId: string;
|
|
8
|
-
* getAuthToken: () => Promise<string>;
|
|
9
|
-
* These four are necessary arguments.
|
|
10
|
-
* @returns The Promise for WebView URL.
|
|
11
|
-
*/
|
|
12
|
-
export declare const getWebViewUrl: (config: WebViewConfig) => Promise<string>;
|
|
13
|
-
/**
|
|
14
|
-
* setting up message handling for the message replies to TS instances.
|
|
15
|
-
* @param config The webview config
|
|
16
|
-
* @param event The message event from the WebView.
|
|
17
|
-
* @param WebViewRef Ref to use and inject javascript
|
|
18
|
-
*/
|
|
19
|
-
export declare const setupWebViewMessageHandler: (config: WebViewConfig, event: any, webViewRef: any) => Promise<void>;
|
|
20
|
-
//# sourceMappingURL=commonUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/native/commonUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,WAAkB,aAAa,KAAG,QAAQ,MAAM,CA+BzE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,WAC3B,aAAa,SACd,GAAG,cACE,GAAG,kBA2ElB,CAAC"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupWebViewMessageHandler = exports.getWebViewUrl = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const utils_1 = require("../utils");
|
|
6
|
-
const types_1 = require("../types");
|
|
7
|
-
const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
|
|
8
|
-
const logger_1 = require("../utils/logger");
|
|
9
|
-
/**
|
|
10
|
-
* This method constructs the webview URL with given config.
|
|
11
|
-
* @param config To get the webviewURL pass the necessary config options.
|
|
12
|
-
* host: string;
|
|
13
|
-
* authType: AuthType;
|
|
14
|
-
* liveboardId: string;
|
|
15
|
-
* getAuthToken: () => Promise<string>;
|
|
16
|
-
* These four are necessary arguments.
|
|
17
|
-
* @returns The Promise for WebView URL.
|
|
18
|
-
*/
|
|
19
|
-
const getWebViewUrl = async (config) => {
|
|
20
|
-
if (typeof config.getAuthToken !== 'function') {
|
|
21
|
-
throw new Error('`getAuthToken` must be a function that returns a Promise.');
|
|
22
|
-
}
|
|
23
|
-
const authToken = await config.getAuthToken();
|
|
24
|
-
if (!authToken) {
|
|
25
|
-
throw new Error('Failed to fetch initial authentication token.');
|
|
26
|
-
}
|
|
27
|
-
const hostAppUrl = encodeURIComponent(config.host.includes('localhost')
|
|
28
|
-
|| config.host.includes('127.0.0.1')
|
|
29
|
-
|| config.host.includes('10.0.2.2')
|
|
30
|
-
? 'local-host'
|
|
31
|
-
: config.host);
|
|
32
|
-
const queryParams = {
|
|
33
|
-
[types_1.Param.EmbedApp]: true,
|
|
34
|
-
[types_1.Param.HostAppUrl]: hostAppUrl,
|
|
35
|
-
[types_1.Param.Version]: package_json_1.default.version,
|
|
36
|
-
[types_1.Param.AuthType]: config.authType,
|
|
37
|
-
[types_1.Param.livedBoardEmbed]: true,
|
|
38
|
-
[types_1.Param.EnableFlipTooltipToContextMenu]: true,
|
|
39
|
-
[types_1.Param.ContextMenuTrigger]: true,
|
|
40
|
-
};
|
|
41
|
-
const queryString = (0, utils_1.getQueryParamString)(queryParams);
|
|
42
|
-
const webViewUrl = `${config.host}/embed?${queryString}#/embed/viz/${encodeURIComponent(config.liveboardId)}`;
|
|
43
|
-
return webViewUrl;
|
|
44
|
-
};
|
|
45
|
-
exports.getWebViewUrl = getWebViewUrl;
|
|
46
|
-
/**
|
|
47
|
-
* setting up message handling for the message replies to TS instances.
|
|
48
|
-
* @param config The webview config
|
|
49
|
-
* @param event The message event from the WebView.
|
|
50
|
-
* @param WebViewRef Ref to use and inject javascript
|
|
51
|
-
*/
|
|
52
|
-
const setupWebViewMessageHandler = async (config, event, webViewRef) => {
|
|
53
|
-
const message = JSON.parse(event.nativeEvent.data);
|
|
54
|
-
const injectJavaScript = (codeSnip) => {
|
|
55
|
-
if (webViewRef === null || webViewRef === void 0 ? void 0 : webViewRef.current) {
|
|
56
|
-
webViewRef.current.injectJavaScript(codeSnip);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
logger_1.logger.error('Reference for Webview not found!!');
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const defaultHandleMessage = async () => {
|
|
63
|
-
switch (message.type) {
|
|
64
|
-
case 'appInit': {
|
|
65
|
-
try {
|
|
66
|
-
const authToken = await config.getAuthToken();
|
|
67
|
-
const initPayload = {
|
|
68
|
-
type: 'appInit',
|
|
69
|
-
data: {
|
|
70
|
-
host: config.host,
|
|
71
|
-
authToken,
|
|
72
|
-
customisations: (0, utils_1.getCustomisationsMobileEmbed)(config),
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
injectJavaScript(jsCodeToHandleInteractionsForContextMenu);
|
|
76
|
-
injectJavaScript(`window.postMessage(${JSON.stringify(initPayload)}, '*');`);
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
console.error('Error handling appInit:', error);
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case 'ThoughtspotAuthExpired': {
|
|
84
|
-
try {
|
|
85
|
-
const newAuthToken = await config.getAuthToken();
|
|
86
|
-
if (newAuthToken) {
|
|
87
|
-
const authExpirePayload = {
|
|
88
|
-
type: 'ThoughtspotAuthExpired',
|
|
89
|
-
data: { authToken: newAuthToken },
|
|
90
|
-
};
|
|
91
|
-
injectJavaScript(`window.postMessage(${JSON.stringify(authExpirePayload)}, '*');`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
console.error('Error refreshing token on expiry:', error);
|
|
96
|
-
}
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
case 'ThoughtspotAuthFailure': {
|
|
100
|
-
try {
|
|
101
|
-
const newAuthToken = await config.getAuthToken();
|
|
102
|
-
if (newAuthToken) {
|
|
103
|
-
const authFailurePayload = {
|
|
104
|
-
type: 'ThoughtspotAuthFailure',
|
|
105
|
-
data: { authToken: newAuthToken },
|
|
106
|
-
};
|
|
107
|
-
injectJavaScript(`window.postMessage(${JSON.stringify(authFailurePayload)}, '*');`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
console.error('Error refreshing token on failure:', error);
|
|
112
|
-
}
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
default:
|
|
116
|
-
console.warn('Unhandled message type:', message.type);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
if (config.handleMessage) {
|
|
120
|
-
await config.handleMessage(event);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
await defaultHandleMessage();
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
exports.setupWebViewMessageHandler = setupWebViewMessageHandler;
|
|
127
|
-
const jsCodeToHandleInteractionsForContextMenu = `
|
|
128
|
-
// Disabling auofocus
|
|
129
|
-
document.querySelectorAll('input[autofocus], textarea[autofocus]').forEach(el => el.removeAttribute('autofocus'));
|
|
130
|
-
|
|
131
|
-
// adding meta tag to keep fixed viewport scalign
|
|
132
|
-
const meta = document.createElement('meta');
|
|
133
|
-
meta.name = 'viewport';
|
|
134
|
-
meta.content = 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no';
|
|
135
|
-
document.head.appendChild(meta);
|
|
136
|
-
|
|
137
|
-
// input focus problem. -> we can just force it inside our view.
|
|
138
|
-
document.addEventListener('focusin', (event) => {
|
|
139
|
-
const target = event.target;
|
|
140
|
-
|
|
141
|
-
if (
|
|
142
|
-
target.tagName === 'INPUT' ||
|
|
143
|
-
target.tagName === 'TEXTAREA'
|
|
144
|
-
) {
|
|
145
|
-
const rect = target.getBoundingClientRect();
|
|
146
|
-
if (
|
|
147
|
-
rect.top < 0 ||
|
|
148
|
-
rect.bottom > window.innerHeight ||
|
|
149
|
-
rect.left < 0 ||
|
|
150
|
-
rect.right > window.innerWidth
|
|
151
|
-
) {
|
|
152
|
-
event.preventDefault();
|
|
153
|
-
// target.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'end' });
|
|
154
|
-
const horizontalPadding = 10;
|
|
155
|
-
|
|
156
|
-
let scrollX = 0;
|
|
157
|
-
|
|
158
|
-
if (rect.left < horizontalPadding) {
|
|
159
|
-
scrollX = rect.left - horizontalPadding;
|
|
160
|
-
}
|
|
161
|
-
if (rect.right > window.innerWidth - horizontalPadding) {
|
|
162
|
-
scrollX = rect.right - window.innerWidth + horizontalPadding;
|
|
163
|
-
}
|
|
164
|
-
const scrollY = rect.top - (window.innerHeight / 2 - rect.height / 2);
|
|
165
|
-
|
|
166
|
-
window.scrollBy({
|
|
167
|
-
top: scrollY,
|
|
168
|
-
left: scrollX,
|
|
169
|
-
behavior: 'smooth',
|
|
170
|
-
})
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
`;
|
|
175
|
-
//# sourceMappingURL=commonUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.js","sourceRoot":"","sources":["../../../src/native/commonUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.spec.d.ts","sourceRoot":"","sources":["../../../src/native/commonUtils.spec.tsx"],"names":[],"mappings":""}
|