@thoughtspot/ts-chart-sdk 0.0.1-alpha.9 → 0.0.2-alpha.10
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/dist/ts-chart-sdk.d.ts +449 -31
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/main/custom-chart-context.d.ts +17 -5
- package/lib/main/custom-chart-context.d.ts.map +1 -1
- package/lib/main/custom-chart-context.js +74 -34
- package/lib/main/custom-chart-context.js.map +1 -1
- package/lib/main/custom-chart-context.spec.js +256 -257
- package/lib/main/custom-chart-context.spec.js.map +1 -1
- package/lib/main/post-message-event-bridge.d.ts +3 -3
- package/lib/main/post-message-event-bridge.d.ts.map +1 -1
- package/lib/main/post-message-event-bridge.js +24 -36
- package/lib/main/post-message-event-bridge.js.map +1 -1
- package/lib/main/post-message-event-bridge.spec.js +0 -2
- package/lib/main/post-message-event-bridge.spec.js.map +1 -1
- package/lib/main/util.d.ts +2 -0
- package/lib/main/util.d.ts.map +1 -0
- package/lib/main/util.js +9 -0
- package/lib/main/util.js.map +1 -0
- package/lib/react/use-custom-chart-context.spec.js +128 -121
- package/lib/react/use-custom-chart-context.spec.js.map +1 -1
- package/lib/test/test-conditional-formatting-utils.d.ts +5 -0
- package/lib/test/test-conditional-formatting-utils.d.ts.map +1 -0
- package/lib/test/test-conditional-formatting-utils.js +43 -0
- package/lib/test/test-conditional-formatting-utils.js.map +1 -0
- package/lib/types/answer-column.types.d.ts +54 -1
- package/lib/types/answer-column.types.d.ts.map +1 -1
- package/lib/types/answer-column.types.js +47 -0
- package/lib/types/answer-column.types.js.map +1 -1
- package/lib/types/common.types.d.ts +51 -4
- package/lib/types/common.types.d.ts.map +1 -1
- package/lib/types/common.types.js +15 -1
- package/lib/types/common.types.js.map +1 -1
- package/lib/types/conditional-formatting.types.d.ts +155 -0
- package/lib/types/conditional-formatting.types.d.ts.map +1 -0
- package/lib/types/conditional-formatting.types.js +60 -0
- package/lib/types/conditional-formatting.types.js.map +1 -0
- package/lib/types/configurator.types.d.ts +5 -0
- package/lib/types/configurator.types.d.ts.map +1 -1
- package/lib/types/ts-to-chart-event.types.d.ts +3 -0
- package/lib/types/ts-to-chart-event.types.d.ts.map +1 -1
- package/lib/types/ts-to-chart-event.types.js.map +1 -1
- package/lib/types/visual-prop.types.d.ts +3 -0
- package/lib/types/visual-prop.types.d.ts.map +1 -1
- package/lib/utils/conditional-formatting/conditional-formatting.d.ts +10 -0
- package/lib/utils/conditional-formatting/conditional-formatting.d.ts.map +1 -0
- package/lib/utils/conditional-formatting/conditional-formatting.js +103 -0
- package/lib/utils/conditional-formatting/conditional-formatting.js.map +1 -0
- package/lib/utils/conditional-formatting/conditional-formatting.spec.d.ts +2 -0
- package/lib/utils/conditional-formatting/conditional-formatting.spec.d.ts.map +1 -0
- package/lib/utils/conditional-formatting/conditional-formatting.spec.js +142 -0
- package/lib/utils/conditional-formatting/conditional-formatting.spec.js.map +1 -0
- package/lib/utils/date-formatting.d.ts +19 -0
- package/lib/utils/date-formatting.d.ts.map +1 -0
- package/lib/utils/date-formatting.js +56 -0
- package/lib/utils/date-formatting.js.map +1 -0
- package/lib/utils/date-formatting.spec.d.ts +2 -0
- package/lib/utils/date-formatting.spec.d.ts.map +1 -0
- package/lib/utils/date-formatting.spec.js +124 -0
- package/lib/utils/date-formatting.spec.js.map +1 -0
- package/package.json +10 -7
- package/src/index.ts +3 -0
- package/src/main/custom-chart-context.spec.ts +291 -266
- package/src/main/custom-chart-context.ts +164 -46
- package/src/main/post-message-event-bridge.spec.ts +0 -3
- package/src/main/post-message-event-bridge.ts +36 -62
- package/src/main/util.ts +11 -0
- package/src/react/use-custom-chart-context.spec.tsx +149 -122
- package/src/test/test-conditional-formatting-utils.ts +95 -0
- package/src/types/answer-column.types.ts +98 -0
- package/src/types/common.types.ts +82 -10
- package/src/types/conditional-formatting.types.ts +172 -0
- package/src/types/configurator.types.ts +21 -0
- package/src/types/ts-to-chart-event.types.ts +15 -0
- package/src/types/visual-prop.types.ts +7 -0
- package/src/utils/conditional-formatting/conditional-formatting.spec.ts +469 -0
- package/src/utils/conditional-formatting/conditional-formatting.ts +229 -0
- package/src/utils/date-formatting.spec.ts +168 -0
- package/src/utils/date-formatting.ts +109 -0
- package/cjs/index.d.ts +0 -9
- package/cjs/index.d.ts.map +0 -1
- package/cjs/index.js +0 -25
- package/cjs/index.js.map +0 -1
- package/cjs/main/custom-chart-context.d.ts +0 -47
- package/cjs/main/custom-chart-context.d.ts.map +0 -1
- package/cjs/main/custom-chart-context.js +0 -326
- package/cjs/main/custom-chart-context.js.map +0 -1
- package/cjs/main/custom-chart-context.spec.d.ts +0 -2
- package/cjs/main/custom-chart-context.spec.d.ts.map +0 -1
- package/cjs/main/custom-chart-context.spec.js +0 -699
- package/cjs/main/custom-chart-context.spec.js.map +0 -1
- package/cjs/main/post-message-event-bridge.d.ts +0 -6
- package/cjs/main/post-message-event-bridge.d.ts.map +0 -1
- package/cjs/main/post-message-event-bridge.js +0 -46
- package/cjs/main/post-message-event-bridge.js.map +0 -1
- package/cjs/main/post-message-event-bridge.spec.d.ts +0 -2
- package/cjs/main/post-message-event-bridge.spec.d.ts.map +0 -1
- package/cjs/main/post-message-event-bridge.spec.js +0 -124
- package/cjs/main/post-message-event-bridge.spec.js.map +0 -1
- package/cjs/react/custom-chart-context-service.d.ts +0 -33
- package/cjs/react/custom-chart-context-service.d.ts.map +0 -1
- package/cjs/react/custom-chart-context-service.js +0 -118
- package/cjs/react/custom-chart-context-service.js.map +0 -1
- package/cjs/react/custom-chart.context.d.ts +0 -26
- package/cjs/react/custom-chart.context.d.ts.map +0 -1
- package/cjs/react/custom-chart.context.js +0 -105
- package/cjs/react/custom-chart.context.js.map +0 -1
- package/cjs/react/custom-chart.spec.d.ts +0 -2
- package/cjs/react/custom-chart.spec.d.ts.map +0 -1
- package/cjs/react/custom-chart.spec.js +0 -72
- package/cjs/react/custom-chart.spec.js.map +0 -1
- package/cjs/react/mocks/custom-chart-context-mock.d.ts +0 -3
- package/cjs/react/mocks/custom-chart-context-mock.d.ts.map +0 -1
- package/cjs/react/mocks/custom-chart-context-mock.js +0 -100
- package/cjs/react/mocks/custom-chart-context-mock.js.map +0 -1
- package/cjs/react/use-custom-chart-context.d.ts +0 -4
- package/cjs/react/use-custom-chart-context.d.ts.map +0 -1
- package/cjs/react/use-custom-chart-context.js +0 -95
- package/cjs/react/use-custom-chart-context.js.map +0 -1
- package/cjs/react/use-custom-chart-context.spec.d.ts +0 -2
- package/cjs/react/use-custom-chart-context.spec.d.ts.map +0 -1
- package/cjs/react/use-custom-chart-context.spec.js +0 -391
- package/cjs/react/use-custom-chart-context.spec.js.map +0 -1
- package/cjs/react/use-custom-chart-context.util.d.ts +0 -6
- package/cjs/react/use-custom-chart-context.util.d.ts.map +0 -1
- package/cjs/react/use-custom-chart-context.util.js +0 -60
- package/cjs/react/use-custom-chart-context.util.js.map +0 -1
- package/cjs/react/use-custom-chart-types.d.ts +0 -23
- package/cjs/react/use-custom-chart-types.d.ts.map +0 -1
- package/cjs/react/use-custom-chart-types.js +0 -3
- package/cjs/react/use-custom-chart-types.js.map +0 -1
- package/cjs/test/test-utils.d.ts +0 -7
- package/cjs/test/test-utils.d.ts.map +0 -1
- package/cjs/test/test-utils.js +0 -14
- package/cjs/test/test-utils.js.map +0 -1
- package/cjs/types/answer-column.types.d.ts +0 -69
- package/cjs/types/answer-column.types.d.ts.map +0 -1
- package/cjs/types/answer-column.types.js +0 -59
- package/cjs/types/answer-column.types.js.map +0 -1
- package/cjs/types/chart-to-ts-event.types.d.ts +0 -98
- package/cjs/types/chart-to-ts-event.types.d.ts.map +0 -1
- package/cjs/types/chart-to-ts-event.types.js +0 -32
- package/cjs/types/chart-to-ts-event.types.js.map +0 -1
- package/cjs/types/common.types.d.ts +0 -51
- package/cjs/types/common.types.d.ts.map +0 -1
- package/cjs/types/common.types.js +0 -3
- package/cjs/types/common.types.js.map +0 -1
- package/cjs/types/configurator.types.d.ts +0 -15
- package/cjs/types/configurator.types.d.ts.map +0 -1
- package/cjs/types/configurator.types.js +0 -3
- package/cjs/types/configurator.types.js.map +0 -1
- package/cjs/types/ts-to-chart-event.types.d.ts +0 -91
- package/cjs/types/ts-to-chart-event.types.d.ts.map +0 -1
- package/cjs/types/ts-to-chart-event.types.js +0 -18
- package/cjs/types/ts-to-chart-event.types.js.map +0 -1
- package/cjs/types/visual-prop.types.d.ts +0 -73
- package/cjs/types/visual-prop.types.d.ts.map +0 -1
- package/cjs/types/visual-prop.types.js +0 -3
- package/cjs/types/visual-prop.types.js.map +0 -1
- package/lib/dist/ts-chart-sdk.d.ts +0 -312
- package/lib/react/custom-chart-context-service.d.ts +0 -33
- package/lib/react/custom-chart-context-service.d.ts.map +0 -1
- package/lib/react/custom-chart-context-service.js +0 -91
- package/lib/react/custom-chart-context-service.js.map +0 -1
- package/lib/react/custom-chart.context.d.ts +0 -26
- package/lib/react/custom-chart.context.d.ts.map +0 -1
- package/lib/react/custom-chart.context.js +0 -78
- package/lib/react/custom-chart.context.js.map +0 -1
- package/lib/react/custom-chart.spec.d.ts +0 -2
- package/lib/react/custom-chart.spec.d.ts.map +0 -1
- package/lib/react/custom-chart.spec.js +0 -67
- package/lib/react/custom-chart.spec.js.map +0 -1
|
@@ -4,7 +4,6 @@ import { ChartToTSEvent, ErrorType } from '../types/chart-to-ts-event.types';
|
|
|
4
4
|
import { TSToChartEvent } from '../types/ts-to-chart-event.types';
|
|
5
5
|
import { CustomChartContext, getChartContext } from './custom-chart-context';
|
|
6
6
|
import * as PostMessageEventBridge from './post-message-event-bridge';
|
|
7
|
-
jest.mock('./post-message-event-bridge');
|
|
8
7
|
jest.spyOn(console, 'log').mockImplementation(() => {
|
|
9
8
|
});
|
|
10
9
|
describe('CustomChartContext', () => {
|
|
@@ -20,6 +19,7 @@ describe('CustomChartContext', () => {
|
|
|
20
19
|
renderChart = jest.fn();
|
|
21
20
|
mockInitMessage.mockImplementation((fn) => {
|
|
22
21
|
eventProcessor = fn;
|
|
22
|
+
return () => null;
|
|
23
23
|
});
|
|
24
24
|
mockPostMessageToHost.mockImplementation(() => {
|
|
25
25
|
return global.Promise.resolve();
|
|
@@ -54,54 +54,90 @@ describe('CustomChartContext', () => {
|
|
|
54
54
|
test('should return a promise that resolves when the chart context is initialized', async () => {
|
|
55
55
|
expect(mockInitMessage).toHaveBeenCalled();
|
|
56
56
|
const promise = customChartContext.initialize();
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
payload: mockInitializeContextPayload,
|
|
61
|
-
eventType: TSToChartEvent.Initialize,
|
|
62
|
-
source: 'ts-host-app',
|
|
63
|
-
},
|
|
64
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
57
|
+
const initResp = await eventProcessor({
|
|
58
|
+
payload: mockInitializeContextPayload,
|
|
59
|
+
eventType: TSToChartEvent.Initialize,
|
|
65
60
|
});
|
|
66
61
|
eventProcessor({
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
70
|
-
source: 'ts-host-app',
|
|
71
|
-
},
|
|
72
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
62
|
+
payload: {},
|
|
63
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
73
64
|
});
|
|
74
65
|
await expect(promise).resolves.toBeUndefined();
|
|
75
|
-
expect(
|
|
76
|
-
expect(mockPostMessage.mock.calls[0][0]).toEqual({
|
|
66
|
+
expect(initResp).toEqual({
|
|
77
67
|
isConfigValid: false,
|
|
78
68
|
defaultChartConfig: undefined,
|
|
79
69
|
chartConfigEditorDefinition: undefined,
|
|
80
70
|
visualPropEditorDefinition: undefined,
|
|
71
|
+
allowedConfigurations: {
|
|
72
|
+
allowColumnNumberFormatting: false,
|
|
73
|
+
allowColumnConditionalFormatting: false,
|
|
74
|
+
allowMeasureNamesAndValues: false,
|
|
75
|
+
},
|
|
81
76
|
});
|
|
82
|
-
expect(mockPostMessage).toHaveBeenCalled();
|
|
83
77
|
expect(mockPostMessageToHost).not.toHaveBeenCalled();
|
|
84
78
|
});
|
|
85
|
-
test('
|
|
79
|
+
test('type check string for visualProps on initialize payload should not throw an error.', async () => {
|
|
80
|
+
expect(mockInitMessage).toHaveBeenCalled();
|
|
86
81
|
const promise = customChartContext.initialize();
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
source: 'ts-host-app',
|
|
82
|
+
const mockInitializeContextPayloadWithVisualProps = {
|
|
83
|
+
...mockInitializeContextPayload,
|
|
84
|
+
chartModel: {
|
|
85
|
+
...mockInitializeContextPayload.chartModel,
|
|
86
|
+
visualProps: 'visualPropStringPayload',
|
|
93
87
|
},
|
|
94
|
-
|
|
88
|
+
};
|
|
89
|
+
await eventProcessor({
|
|
90
|
+
payload: mockInitializeContextPayloadWithVisualProps,
|
|
91
|
+
eventType: TSToChartEvent.Initialize,
|
|
95
92
|
});
|
|
96
93
|
eventProcessor({
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
94
|
+
payload: {},
|
|
95
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
96
|
+
});
|
|
97
|
+
await expect(promise).resolves.toBeUndefined();
|
|
98
|
+
const chartModel = customChartContext.getChartModel();
|
|
99
|
+
expect(typeof chartModel.visualProps).toEqual('string');
|
|
100
|
+
expect(chartModel.visualProps).toEqual('visualPropStringPayload');
|
|
101
|
+
expect(mockPostMessageToHost).not.toHaveBeenCalled();
|
|
102
|
+
});
|
|
103
|
+
test('type check object for visualProps on initialize payload should not throw an error.', async () => {
|
|
104
|
+
expect(mockInitMessage).toHaveBeenCalled();
|
|
105
|
+
const promise = customChartContext.initialize();
|
|
106
|
+
const mockInitializeContextPayloadWithVisualProps = {
|
|
107
|
+
...mockInitializeContextPayload,
|
|
108
|
+
chartModel: {
|
|
109
|
+
...mockInitializeContextPayload.chartModel,
|
|
110
|
+
visualProps: {
|
|
111
|
+
data: 'sample data',
|
|
112
|
+
},
|
|
101
113
|
},
|
|
102
|
-
|
|
114
|
+
};
|
|
115
|
+
await eventProcessor({
|
|
116
|
+
payload: mockInitializeContextPayloadWithVisualProps,
|
|
117
|
+
eventType: TSToChartEvent.Initialize,
|
|
118
|
+
});
|
|
119
|
+
eventProcessor({
|
|
120
|
+
payload: {},
|
|
121
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
103
122
|
});
|
|
104
123
|
await expect(promise).resolves.toBeUndefined();
|
|
124
|
+
const chartModel = customChartContext.getChartModel();
|
|
125
|
+
expect(typeof chartModel.visualProps).toEqual('object');
|
|
126
|
+
expect(chartModel.visualProps).toEqual({
|
|
127
|
+
data: 'sample data',
|
|
128
|
+
});
|
|
129
|
+
expect(mockPostMessageToHost).not.toHaveBeenCalled();
|
|
130
|
+
});
|
|
131
|
+
test('multiple intializations should throw an error', async () => {
|
|
132
|
+
getChartContext({
|
|
133
|
+
getDefaultChartConfig,
|
|
134
|
+
getQueriesFromChartConfig,
|
|
135
|
+
renderChart,
|
|
136
|
+
});
|
|
137
|
+
eventProcessor({
|
|
138
|
+
payload: {},
|
|
139
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
140
|
+
});
|
|
105
141
|
let error;
|
|
106
142
|
try {
|
|
107
143
|
customChartContext = new CustomChartContext({
|
|
@@ -141,120 +177,169 @@ describe('CustomChartContext', () => {
|
|
|
141
177
|
customChartContext.destroy();
|
|
142
178
|
eventProcessor = null;
|
|
143
179
|
});
|
|
144
|
-
test('
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
180
|
+
test('TSToChartEvent.ChartConfigValidate validation response testing', async () => {
|
|
181
|
+
customChartContext = new CustomChartContext({
|
|
182
|
+
getDefaultChartConfig,
|
|
183
|
+
getQueriesFromChartConfig,
|
|
184
|
+
renderChart,
|
|
185
|
+
visualPropEditorDefinition: { elements: [] },
|
|
186
|
+
chartConfigEditorDefinition: [],
|
|
187
|
+
});
|
|
188
|
+
const responseWithInitialContext = await eventProcessor({
|
|
189
|
+
payload: mockInitializeContextPayload,
|
|
190
|
+
eventType: TSToChartEvent.ChartConfigValidate,
|
|
191
|
+
source: 'ts-host-app',
|
|
192
|
+
});
|
|
193
|
+
expect(responseWithInitialContext).toStrictEqual({
|
|
194
|
+
isValid: true,
|
|
195
|
+
visualPropEditorDefinition: { elements: [] },
|
|
196
|
+
chartConfigEditorDefinition: [],
|
|
197
|
+
});
|
|
198
|
+
customChartContext = new CustomChartContext({
|
|
199
|
+
getDefaultChartConfig,
|
|
200
|
+
getQueriesFromChartConfig,
|
|
201
|
+
renderChart,
|
|
202
|
+
visualPropEditorDefinition: () => {
|
|
203
|
+
return { elements: [] };
|
|
204
|
+
},
|
|
205
|
+
chartConfigEditorDefinition: () => {
|
|
206
|
+
return [
|
|
207
|
+
{
|
|
208
|
+
key: 'x',
|
|
209
|
+
columnSections: [{ label: 'x-axis', key: 'x' }],
|
|
210
|
+
},
|
|
211
|
+
];
|
|
152
212
|
},
|
|
153
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
154
213
|
});
|
|
155
|
-
|
|
214
|
+
const responseWithUpdatedContext = await eventProcessor({
|
|
215
|
+
payload: mockInitializeContextPayload,
|
|
216
|
+
eventType: TSToChartEvent.ChartConfigValidate,
|
|
217
|
+
source: 'ts-host-app',
|
|
218
|
+
});
|
|
219
|
+
expect(responseWithUpdatedContext).toStrictEqual({
|
|
220
|
+
isValid: true,
|
|
221
|
+
visualPropEditorDefinition: { elements: [] },
|
|
222
|
+
chartConfigEditorDefinition: [
|
|
223
|
+
{
|
|
224
|
+
key: 'x',
|
|
225
|
+
columnSections: [{ label: 'x-axis', key: 'x' }],
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
});
|
|
156
229
|
});
|
|
157
|
-
test('
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
230
|
+
test('TSToChartEvent.validateVisualProps validation response testing', () => {
|
|
231
|
+
customChartContext = new CustomChartContext({
|
|
232
|
+
getDefaultChartConfig,
|
|
233
|
+
getQueriesFromChartConfig,
|
|
234
|
+
renderChart,
|
|
235
|
+
visualPropEditorDefinition: { elements: [] },
|
|
236
|
+
chartConfigEditorDefinition: [],
|
|
237
|
+
});
|
|
238
|
+
const responseWithInitialContext = eventProcessor({
|
|
239
|
+
payload: mockInitializeContextPayload,
|
|
240
|
+
eventType: TSToChartEvent.VisualPropsValidate,
|
|
241
|
+
source: 'ts-host-app',
|
|
167
242
|
});
|
|
168
|
-
expect(
|
|
243
|
+
expect(responseWithInitialContext).toStrictEqual({
|
|
169
244
|
isValid: true,
|
|
245
|
+
visualPropEditorDefinition: { elements: [] },
|
|
246
|
+
chartConfigEditorDefinition: [],
|
|
170
247
|
});
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
248
|
+
customChartContext = new CustomChartContext({
|
|
249
|
+
getDefaultChartConfig,
|
|
250
|
+
getQueriesFromChartConfig,
|
|
251
|
+
renderChart,
|
|
252
|
+
visualPropEditorDefinition: () => {
|
|
253
|
+
return { elements: [] };
|
|
254
|
+
},
|
|
255
|
+
chartConfigEditorDefinition: () => {
|
|
256
|
+
return [
|
|
257
|
+
{
|
|
258
|
+
key: 'x',
|
|
259
|
+
columnSections: [{ label: 'x-axis', key: 'x' }],
|
|
260
|
+
},
|
|
261
|
+
];
|
|
177
262
|
},
|
|
178
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
179
263
|
});
|
|
180
|
-
|
|
264
|
+
const responseWithFunctionReturnedValues = eventProcessor({
|
|
265
|
+
payload: mockInitializeContextPayload,
|
|
266
|
+
eventType: TSToChartEvent.VisualPropsValidate,
|
|
267
|
+
source: 'ts-host-app',
|
|
268
|
+
});
|
|
269
|
+
expect(responseWithFunctionReturnedValues).toStrictEqual({
|
|
181
270
|
isValid: true,
|
|
271
|
+
visualPropEditorDefinition: { elements: [] },
|
|
272
|
+
chartConfigEditorDefinition: [
|
|
273
|
+
{
|
|
274
|
+
key: 'x',
|
|
275
|
+
columnSections: [{ label: 'x-axis', key: 'x' }],
|
|
276
|
+
},
|
|
277
|
+
],
|
|
182
278
|
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
279
|
+
});
|
|
280
|
+
test('should not trigger post message if host is not accurate', async () => {
|
|
281
|
+
expect(mockInitMessage).toHaveBeenCalled();
|
|
282
|
+
const validateChartConfigResp = await eventProcessor({
|
|
283
|
+
payload: mockInitializeContextPayload,
|
|
284
|
+
eventType: TSToChartEvent.ChartConfigValidate,
|
|
285
|
+
});
|
|
286
|
+
expect(validateChartConfigResp).toEqual({
|
|
287
|
+
isValid: true,
|
|
288
|
+
});
|
|
289
|
+
const validateVisualPropsResp = await eventProcessor({
|
|
290
|
+
payload: mockInitializeContextPayload,
|
|
291
|
+
eventType: TSToChartEvent.VisualPropsValidate,
|
|
292
|
+
});
|
|
293
|
+
expect(validateVisualPropsResp).toEqual({
|
|
294
|
+
isValid: true,
|
|
295
|
+
});
|
|
296
|
+
const renderResp = await eventProcessor({
|
|
297
|
+
payload: mockInitializeContextPayload,
|
|
298
|
+
eventType: TSToChartEvent.TriggerRenderChart,
|
|
191
299
|
});
|
|
192
|
-
expect(mockPostMessage).toHaveBeenCalledWith({});
|
|
193
300
|
expect(renderChart).toHaveBeenCalled();
|
|
194
|
-
mockPostMessage.mockReset();
|
|
195
301
|
eventProcessor({
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
eventType: TSToChartEvent.GetDataQuery,
|
|
199
|
-
source: 'ts-host-app',
|
|
200
|
-
},
|
|
201
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
302
|
+
payload: mockInitializeContextPayload,
|
|
303
|
+
eventType: TSToChartEvent.GetDataQuery,
|
|
202
304
|
});
|
|
203
|
-
expect(mockPostMessage).toHaveBeenCalledWith({});
|
|
204
305
|
expect(getQueriesFromChartConfig).toHaveBeenCalled();
|
|
205
306
|
});
|
|
206
|
-
test('default external function testing', () => {
|
|
307
|
+
test('default external function testing', async () => {
|
|
207
308
|
expect(mockInitMessage).toHaveBeenCalled();
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
payload: {
|
|
212
|
-
data: 'random data',
|
|
213
|
-
},
|
|
214
|
-
eventType: TSToChartEvent.DataUpdate,
|
|
215
|
-
source: 'ts-host-app',
|
|
309
|
+
const dataUpdateResp = await eventProcessor({
|
|
310
|
+
payload: {
|
|
311
|
+
data: 'random data',
|
|
216
312
|
},
|
|
217
|
-
|
|
313
|
+
eventType: TSToChartEvent.DataUpdate,
|
|
218
314
|
});
|
|
219
|
-
expect(
|
|
315
|
+
expect(dataUpdateResp).toEqual({
|
|
220
316
|
triggerRenderChart: true,
|
|
221
317
|
});
|
|
222
318
|
expect(customChartContext.getChartModel().data).toBe('random data');
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
data: 'random data2',
|
|
229
|
-
visualProps: null,
|
|
230
|
-
},
|
|
319
|
+
const modelUpdateResp = await eventProcessor({
|
|
320
|
+
payload: {
|
|
321
|
+
chartModel: {
|
|
322
|
+
data: 'random data2',
|
|
323
|
+
visualProps: null,
|
|
231
324
|
},
|
|
232
|
-
eventType: TSToChartEvent.ChartModelUpdate,
|
|
233
|
-
source: 'ts-host-app',
|
|
234
325
|
},
|
|
235
|
-
|
|
326
|
+
eventType: TSToChartEvent.ChartModelUpdate,
|
|
236
327
|
});
|
|
237
|
-
expect(
|
|
328
|
+
expect(modelUpdateResp).toEqual({
|
|
238
329
|
triggerRenderChart: true,
|
|
239
330
|
});
|
|
240
331
|
expect(customChartContext.getChartModel().data).toBe('random data2');
|
|
241
332
|
expect(customChartContext.getChartModel().visualProps).toBe(null);
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
payload: {
|
|
246
|
-
visualProps: 'random data',
|
|
247
|
-
},
|
|
248
|
-
eventType: TSToChartEvent.VisualPropsUpdate,
|
|
249
|
-
source: 'ts-host-app',
|
|
333
|
+
const visualPropsUpdateResp = await eventProcessor({
|
|
334
|
+
payload: {
|
|
335
|
+
visualProps: 'random data',
|
|
250
336
|
},
|
|
251
|
-
|
|
337
|
+
eventType: TSToChartEvent.VisualPropsUpdate,
|
|
252
338
|
});
|
|
253
|
-
expect(
|
|
339
|
+
expect(visualPropsUpdateResp).toEqual({
|
|
254
340
|
triggerRenderChart: true,
|
|
255
341
|
});
|
|
256
342
|
expect(customChartContext.getChartModel().visualProps).toBe('random data');
|
|
257
|
-
mockPostMessage.mockReset();
|
|
258
343
|
customChartContext.axisMenuCustomActionPreProcessor([
|
|
259
344
|
{
|
|
260
345
|
customActions: [
|
|
@@ -267,20 +352,16 @@ describe('CustomChartContext', () => {
|
|
|
267
352
|
],
|
|
268
353
|
},
|
|
269
354
|
]);
|
|
270
|
-
eventProcessor({
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
|
|
276
|
-
},
|
|
355
|
+
const axisMenuClickResp = await eventProcessor({
|
|
356
|
+
payload: {
|
|
357
|
+
customAction: {
|
|
358
|
+
id: 'custom-action-1',
|
|
359
|
+
columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
|
|
277
360
|
},
|
|
278
|
-
eventType: TSToChartEvent.AxisMenuActionClick,
|
|
279
|
-
source: 'ts-host-app',
|
|
280
361
|
},
|
|
281
|
-
|
|
362
|
+
eventType: TSToChartEvent.AxisMenuActionClick,
|
|
282
363
|
});
|
|
283
|
-
expect(
|
|
364
|
+
expect(axisMenuClickResp).toEqual({
|
|
284
365
|
isValid: true,
|
|
285
366
|
});
|
|
286
367
|
customChartContext.contextMenuCustomActionPreProcessor([
|
|
@@ -295,20 +376,16 @@ describe('CustomChartContext', () => {
|
|
|
295
376
|
],
|
|
296
377
|
},
|
|
297
378
|
]);
|
|
298
|
-
eventProcessor({
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
|
|
304
|
-
},
|
|
379
|
+
const ctxMenuResp = await eventProcessor({
|
|
380
|
+
payload: {
|
|
381
|
+
customAction: {
|
|
382
|
+
id: 'custom-action-1',
|
|
383
|
+
columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
|
|
305
384
|
},
|
|
306
|
-
eventType: TSToChartEvent.ContextMenuActionClick,
|
|
307
|
-
source: 'ts-host-app',
|
|
308
385
|
},
|
|
309
|
-
|
|
386
|
+
eventType: TSToChartEvent.ContextMenuActionClick,
|
|
310
387
|
});
|
|
311
|
-
expect(
|
|
388
|
+
expect(ctxMenuResp).toEqual({
|
|
312
389
|
isValid: true,
|
|
313
390
|
});
|
|
314
391
|
});
|
|
@@ -317,30 +394,20 @@ describe('CustomChartContext', () => {
|
|
|
317
394
|
const TEST_EVENT_TYPE = 'testEventType';
|
|
318
395
|
const testCallbackFn = jest.fn();
|
|
319
396
|
customChartContext.on(TEST_EVENT_TYPE, testCallbackFn);
|
|
320
|
-
const mockPostMessage = jest.fn();
|
|
321
397
|
eventProcessor({
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
eventType: TEST_EVENT_TYPE,
|
|
325
|
-
source: 'ts-host-app',
|
|
326
|
-
},
|
|
327
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
398
|
+
payload: mockInitializeContextPayload,
|
|
399
|
+
eventType: TEST_EVENT_TYPE,
|
|
328
400
|
});
|
|
329
401
|
expect(testCallbackFn).toHaveBeenCalled();
|
|
330
402
|
});
|
|
331
|
-
test('should respond with an error to an unspecified event type', () => {
|
|
403
|
+
test('should respond with an error to an unspecified event type', async () => {
|
|
332
404
|
expect(mockInitMessage).toHaveBeenCalled();
|
|
333
405
|
const TEST_EVENT_TYPE = 'testEventType';
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
payload: mockInitializeContextPayload,
|
|
338
|
-
eventType: TEST_EVENT_TYPE,
|
|
339
|
-
source: 'ts-host-app',
|
|
340
|
-
},
|
|
341
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
406
|
+
const resp = await eventProcessor({
|
|
407
|
+
payload: mockInitializeContextPayload,
|
|
408
|
+
eventType: TEST_EVENT_TYPE,
|
|
342
409
|
});
|
|
343
|
-
expect(
|
|
410
|
+
expect(resp).toEqual({
|
|
344
411
|
hasError: true,
|
|
345
412
|
error: `Event type not recognised or processed: ${TEST_EVENT_TYPE}`,
|
|
346
413
|
});
|
|
@@ -364,14 +431,9 @@ describe('CustomChartContext', () => {
|
|
|
364
431
|
const TEST_EVENT_TYPE = 'testEventType';
|
|
365
432
|
const testCallbackFn = jest.fn();
|
|
366
433
|
customChartContext.on(TEST_EVENT_TYPE, testCallbackFn);
|
|
367
|
-
const mockPostMessage = jest.fn();
|
|
368
434
|
eventProcessor({
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
eventType: TEST_EVENT_TYPE,
|
|
372
|
-
source: 'ts-host-app',
|
|
373
|
-
},
|
|
374
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
435
|
+
payload: mockInitializeContextPayload,
|
|
436
|
+
eventType: TEST_EVENT_TYPE,
|
|
375
437
|
});
|
|
376
438
|
customChartContext.off(TEST_EVENT_TYPE);
|
|
377
439
|
expect(testCallbackFn).toHaveBeenCalled();
|
|
@@ -386,22 +448,13 @@ describe('CustomChartContext', () => {
|
|
|
386
448
|
customChartContext.on(TEST_EVENT_TYPE_2, testCallbackFn2);
|
|
387
449
|
expect(customChartContext.eventListeners[TEST_EVENT_TYPE_1]).toHaveLength(1);
|
|
388
450
|
expect(customChartContext.eventListeners[TEST_EVENT_TYPE_2]).toHaveLength(1);
|
|
389
|
-
const mockPostMessage = jest.fn();
|
|
390
451
|
eventProcessor({
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
eventType: TEST_EVENT_TYPE_1,
|
|
394
|
-
source: 'ts-host-app',
|
|
395
|
-
},
|
|
396
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
452
|
+
payload: {},
|
|
453
|
+
eventType: TEST_EVENT_TYPE_1,
|
|
397
454
|
});
|
|
398
455
|
eventProcessor({
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
eventType: TEST_EVENT_TYPE_2,
|
|
402
|
-
source: 'ts-host-app',
|
|
403
|
-
},
|
|
404
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
456
|
+
payload: {},
|
|
457
|
+
eventType: TEST_EVENT_TYPE_2,
|
|
405
458
|
});
|
|
406
459
|
expect(testCallbackFn1).toHaveBeenCalled();
|
|
407
460
|
expect(testCallbackFn2).toHaveBeenCalled();
|
|
@@ -437,26 +490,16 @@ describe('CustomChartContext', () => {
|
|
|
437
490
|
await expect(result).rejects.toBeDefined();
|
|
438
491
|
});
|
|
439
492
|
test('should resolve the promise if the chart context is initialized', async () => {
|
|
440
|
-
const mockPostMessage = jest.fn();
|
|
441
493
|
eventProcessor({
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
eventType: TSToChartEvent.Initialize,
|
|
445
|
-
source: 'ts-host-app',
|
|
446
|
-
},
|
|
447
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
494
|
+
payload: mockInitializeContextPayload,
|
|
495
|
+
eventType: TSToChartEvent.Initialize,
|
|
448
496
|
});
|
|
449
497
|
eventProcessor({
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
453
|
-
source: 'ts-host-app',
|
|
454
|
-
},
|
|
455
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
498
|
+
payload: {},
|
|
499
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
456
500
|
});
|
|
457
501
|
const promise = customChartContext.initialize();
|
|
458
502
|
await expect(promise).resolves.toBeUndefined();
|
|
459
|
-
expect(mockPostMessage).toHaveBeenCalledTimes(2);
|
|
460
503
|
let resolve;
|
|
461
504
|
mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
|
|
462
505
|
resolve = res;
|
|
@@ -477,24 +520,15 @@ describe('CustomChartContext', () => {
|
|
|
477
520
|
expect(mockPostMessageToHost).toHaveBeenCalledWith(mockInitializeContextPayload.componentId, mockInitializeContextPayload.hostUrl, null, ChartToTSEvent.RenderStart);
|
|
478
521
|
});
|
|
479
522
|
test('should process the event payload for context menu custom actions', async () => {
|
|
480
|
-
const mockPostMessage = jest.fn();
|
|
481
523
|
const mockCustomAction = jest.fn();
|
|
482
524
|
let resolve;
|
|
483
525
|
eventProcessor({
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
eventType: TSToChartEvent.Initialize,
|
|
487
|
-
source: 'ts-host-app',
|
|
488
|
-
},
|
|
489
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
526
|
+
payload: mockInitializeContextPayload,
|
|
527
|
+
eventType: TSToChartEvent.Initialize,
|
|
490
528
|
});
|
|
491
529
|
eventProcessor({
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
495
|
-
source: 'ts-host-app',
|
|
496
|
-
},
|
|
497
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
530
|
+
payload: {},
|
|
531
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
498
532
|
});
|
|
499
533
|
customChartContext.initialize();
|
|
500
534
|
mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
|
|
@@ -522,19 +556,15 @@ describe('CustomChartContext', () => {
|
|
|
522
556
|
],
|
|
523
557
|
}, TEST_EVENT_TYPE);
|
|
524
558
|
eventProcessor({
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
selectedPoints: [{}],
|
|
532
|
-
},
|
|
559
|
+
payload: {
|
|
560
|
+
customAction: {
|
|
561
|
+
id: 'custom-action-1',
|
|
562
|
+
clickedPoint: {},
|
|
563
|
+
event: {},
|
|
564
|
+
selectedPoints: [{}],
|
|
533
565
|
},
|
|
534
|
-
eventType: TSToChartEvent.ContextMenuActionClick,
|
|
535
|
-
source: 'ts-host-app',
|
|
536
566
|
},
|
|
537
|
-
|
|
567
|
+
eventType: TSToChartEvent.ContextMenuActionClick,
|
|
538
568
|
});
|
|
539
569
|
expect(mockCustomAction).toHaveBeenCalled();
|
|
540
570
|
expect(mockCustomAction).toHaveBeenCalledWith({
|
|
@@ -545,24 +575,15 @@ describe('CustomChartContext', () => {
|
|
|
545
575
|
});
|
|
546
576
|
});
|
|
547
577
|
test('should process the event payload for axis menu custom actions', async () => {
|
|
548
|
-
const mockPostMessage = jest.fn();
|
|
549
578
|
const mockCustomAction = jest.fn();
|
|
550
579
|
let resolve;
|
|
551
580
|
eventProcessor({
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
eventType: TSToChartEvent.Initialize,
|
|
555
|
-
source: 'ts-host-app',
|
|
556
|
-
},
|
|
557
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
581
|
+
payload: mockInitializeContextPayload,
|
|
582
|
+
eventType: TSToChartEvent.Initialize,
|
|
558
583
|
});
|
|
559
584
|
eventProcessor({
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
563
|
-
source: 'ts-host-app',
|
|
564
|
-
},
|
|
565
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
585
|
+
payload: {},
|
|
586
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
566
587
|
});
|
|
567
588
|
customChartContext.initialize();
|
|
568
589
|
mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
|
|
@@ -590,18 +611,14 @@ describe('CustomChartContext', () => {
|
|
|
590
611
|
],
|
|
591
612
|
}, TEST_EVENT_TYPE);
|
|
592
613
|
eventProcessor({
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
event: {},
|
|
599
|
-
},
|
|
614
|
+
payload: {
|
|
615
|
+
customAction: {
|
|
616
|
+
id: 'custom-action-1',
|
|
617
|
+
columnIds: ['123'],
|
|
618
|
+
event: {},
|
|
600
619
|
},
|
|
601
|
-
eventType: TSToChartEvent.AxisMenuActionClick,
|
|
602
|
-
source: 'ts-host-app',
|
|
603
620
|
},
|
|
604
|
-
|
|
621
|
+
eventType: TSToChartEvent.AxisMenuActionClick,
|
|
605
622
|
});
|
|
606
623
|
expect(mockCustomAction).toHaveBeenCalled();
|
|
607
624
|
expect(mockCustomAction).toHaveBeenCalledWith({
|
|
@@ -611,23 +628,14 @@ describe('CustomChartContext', () => {
|
|
|
611
628
|
});
|
|
612
629
|
});
|
|
613
630
|
test('should process the event payload for axis menu when custom actions are not defined', async () => {
|
|
614
|
-
const mockPostMessage = jest.fn();
|
|
615
631
|
let resolve;
|
|
616
632
|
eventProcessor({
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
eventType: TSToChartEvent.Initialize,
|
|
620
|
-
source: 'ts-host-app',
|
|
621
|
-
},
|
|
622
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
633
|
+
payload: mockInitializeContextPayload,
|
|
634
|
+
eventType: TSToChartEvent.Initialize,
|
|
623
635
|
});
|
|
624
636
|
eventProcessor({
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
628
|
-
source: 'ts-host-app',
|
|
629
|
-
},
|
|
630
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
637
|
+
payload: {},
|
|
638
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
631
639
|
});
|
|
632
640
|
customChartContext.initialize();
|
|
633
641
|
mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
|
|
@@ -639,23 +647,14 @@ describe('CustomChartContext', () => {
|
|
|
639
647
|
expect(mockPostMessageToHost).toHaveBeenCalledWith(mockInitializeContextPayload.componentId, mockInitializeContextPayload.hostUrl, {}, TEST_EVENT_TYPE);
|
|
640
648
|
});
|
|
641
649
|
test('should process the event payload for context menu when custom actions are not defined', async () => {
|
|
642
|
-
const mockPostMessage = jest.fn();
|
|
643
650
|
let resolve;
|
|
644
651
|
eventProcessor({
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
eventType: TSToChartEvent.Initialize,
|
|
648
|
-
source: 'ts-host-app',
|
|
649
|
-
},
|
|
650
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
652
|
+
payload: mockInitializeContextPayload,
|
|
653
|
+
eventType: TSToChartEvent.Initialize,
|
|
651
654
|
});
|
|
652
655
|
eventProcessor({
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
eventType: TSToChartEvent.InitializeComplete,
|
|
656
|
-
source: 'ts-host-app',
|
|
657
|
-
},
|
|
658
|
-
ports: [{ postMessage: mockPostMessage }],
|
|
656
|
+
payload: {},
|
|
657
|
+
eventType: TSToChartEvent.InitializeComplete,
|
|
659
658
|
});
|
|
660
659
|
customChartContext.initialize();
|
|
661
660
|
mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
|