@thoughtspot/ts-chart-sdk 0.0.1-alpha.9 → 0.0.2-alpha.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.
Files changed (126) hide show
  1. package/lib/main/custom-chart-context.d.ts +8 -1
  2. package/lib/main/custom-chart-context.d.ts.map +1 -1
  3. package/lib/main/custom-chart-context.js +29 -32
  4. package/lib/main/custom-chart-context.js.map +1 -1
  5. package/lib/main/custom-chart-context.spec.js +107 -260
  6. package/lib/main/custom-chart-context.spec.js.map +1 -1
  7. package/lib/main/post-message-event-bridge.d.ts +3 -3
  8. package/lib/main/post-message-event-bridge.d.ts.map +1 -1
  9. package/lib/main/post-message-event-bridge.js +24 -36
  10. package/lib/main/post-message-event-bridge.js.map +1 -1
  11. package/lib/main/post-message-event-bridge.spec.js +0 -2
  12. package/lib/main/post-message-event-bridge.spec.js.map +1 -1
  13. package/lib/main/util.d.ts +2 -0
  14. package/lib/main/util.d.ts.map +1 -0
  15. package/lib/main/util.js +9 -0
  16. package/lib/main/util.js.map +1 -0
  17. package/lib/react/use-custom-chart-context.spec.js +74 -119
  18. package/lib/react/use-custom-chart-context.spec.js.map +1 -1
  19. package/lib/types/common.types.d.ts +1 -0
  20. package/lib/types/common.types.d.ts.map +1 -1
  21. package/lib/types/ts-to-chart-event.types.d.ts +3 -0
  22. package/lib/types/ts-to-chart-event.types.d.ts.map +1 -1
  23. package/lib/types/ts-to-chart-event.types.js.map +1 -1
  24. package/package.json +5 -4
  25. package/src/main/custom-chart-context.spec.ts +116 -269
  26. package/src/main/custom-chart-context.ts +49 -38
  27. package/src/main/post-message-event-bridge.spec.ts +0 -3
  28. package/src/main/post-message-event-bridge.ts +36 -62
  29. package/src/main/util.ts +11 -0
  30. package/src/react/use-custom-chart-context.spec.tsx +84 -120
  31. package/src/types/common.types.ts +1 -1
  32. package/src/types/ts-to-chart-event.types.ts +14 -0
  33. package/cjs/index.d.ts +0 -9
  34. package/cjs/index.d.ts.map +0 -1
  35. package/cjs/index.js +0 -25
  36. package/cjs/index.js.map +0 -1
  37. package/cjs/main/custom-chart-context.d.ts +0 -47
  38. package/cjs/main/custom-chart-context.d.ts.map +0 -1
  39. package/cjs/main/custom-chart-context.js +0 -326
  40. package/cjs/main/custom-chart-context.js.map +0 -1
  41. package/cjs/main/custom-chart-context.spec.d.ts +0 -2
  42. package/cjs/main/custom-chart-context.spec.d.ts.map +0 -1
  43. package/cjs/main/custom-chart-context.spec.js +0 -699
  44. package/cjs/main/custom-chart-context.spec.js.map +0 -1
  45. package/cjs/main/post-message-event-bridge.d.ts +0 -6
  46. package/cjs/main/post-message-event-bridge.d.ts.map +0 -1
  47. package/cjs/main/post-message-event-bridge.js +0 -46
  48. package/cjs/main/post-message-event-bridge.js.map +0 -1
  49. package/cjs/main/post-message-event-bridge.spec.d.ts +0 -2
  50. package/cjs/main/post-message-event-bridge.spec.d.ts.map +0 -1
  51. package/cjs/main/post-message-event-bridge.spec.js +0 -124
  52. package/cjs/main/post-message-event-bridge.spec.js.map +0 -1
  53. package/cjs/react/custom-chart-context-service.d.ts +0 -33
  54. package/cjs/react/custom-chart-context-service.d.ts.map +0 -1
  55. package/cjs/react/custom-chart-context-service.js +0 -118
  56. package/cjs/react/custom-chart-context-service.js.map +0 -1
  57. package/cjs/react/custom-chart.context.d.ts +0 -26
  58. package/cjs/react/custom-chart.context.d.ts.map +0 -1
  59. package/cjs/react/custom-chart.context.js +0 -105
  60. package/cjs/react/custom-chart.context.js.map +0 -1
  61. package/cjs/react/custom-chart.spec.d.ts +0 -2
  62. package/cjs/react/custom-chart.spec.d.ts.map +0 -1
  63. package/cjs/react/custom-chart.spec.js +0 -72
  64. package/cjs/react/custom-chart.spec.js.map +0 -1
  65. package/cjs/react/mocks/custom-chart-context-mock.d.ts +0 -3
  66. package/cjs/react/mocks/custom-chart-context-mock.d.ts.map +0 -1
  67. package/cjs/react/mocks/custom-chart-context-mock.js +0 -100
  68. package/cjs/react/mocks/custom-chart-context-mock.js.map +0 -1
  69. package/cjs/react/use-custom-chart-context.d.ts +0 -4
  70. package/cjs/react/use-custom-chart-context.d.ts.map +0 -1
  71. package/cjs/react/use-custom-chart-context.js +0 -95
  72. package/cjs/react/use-custom-chart-context.js.map +0 -1
  73. package/cjs/react/use-custom-chart-context.spec.d.ts +0 -2
  74. package/cjs/react/use-custom-chart-context.spec.d.ts.map +0 -1
  75. package/cjs/react/use-custom-chart-context.spec.js +0 -391
  76. package/cjs/react/use-custom-chart-context.spec.js.map +0 -1
  77. package/cjs/react/use-custom-chart-context.util.d.ts +0 -6
  78. package/cjs/react/use-custom-chart-context.util.d.ts.map +0 -1
  79. package/cjs/react/use-custom-chart-context.util.js +0 -60
  80. package/cjs/react/use-custom-chart-context.util.js.map +0 -1
  81. package/cjs/react/use-custom-chart-types.d.ts +0 -23
  82. package/cjs/react/use-custom-chart-types.d.ts.map +0 -1
  83. package/cjs/react/use-custom-chart-types.js +0 -3
  84. package/cjs/react/use-custom-chart-types.js.map +0 -1
  85. package/cjs/test/test-utils.d.ts +0 -7
  86. package/cjs/test/test-utils.d.ts.map +0 -1
  87. package/cjs/test/test-utils.js +0 -14
  88. package/cjs/test/test-utils.js.map +0 -1
  89. package/cjs/types/answer-column.types.d.ts +0 -69
  90. package/cjs/types/answer-column.types.d.ts.map +0 -1
  91. package/cjs/types/answer-column.types.js +0 -59
  92. package/cjs/types/answer-column.types.js.map +0 -1
  93. package/cjs/types/chart-to-ts-event.types.d.ts +0 -98
  94. package/cjs/types/chart-to-ts-event.types.d.ts.map +0 -1
  95. package/cjs/types/chart-to-ts-event.types.js +0 -32
  96. package/cjs/types/chart-to-ts-event.types.js.map +0 -1
  97. package/cjs/types/common.types.d.ts +0 -51
  98. package/cjs/types/common.types.d.ts.map +0 -1
  99. package/cjs/types/common.types.js +0 -3
  100. package/cjs/types/common.types.js.map +0 -1
  101. package/cjs/types/configurator.types.d.ts +0 -15
  102. package/cjs/types/configurator.types.d.ts.map +0 -1
  103. package/cjs/types/configurator.types.js +0 -3
  104. package/cjs/types/configurator.types.js.map +0 -1
  105. package/cjs/types/ts-to-chart-event.types.d.ts +0 -91
  106. package/cjs/types/ts-to-chart-event.types.d.ts.map +0 -1
  107. package/cjs/types/ts-to-chart-event.types.js +0 -18
  108. package/cjs/types/ts-to-chart-event.types.js.map +0 -1
  109. package/cjs/types/visual-prop.types.d.ts +0 -73
  110. package/cjs/types/visual-prop.types.d.ts.map +0 -1
  111. package/cjs/types/visual-prop.types.js +0 -3
  112. package/cjs/types/visual-prop.types.js.map +0 -1
  113. package/dist/ts-chart-sdk.d.ts +0 -312
  114. package/lib/dist/ts-chart-sdk.d.ts +0 -312
  115. package/lib/react/custom-chart-context-service.d.ts +0 -33
  116. package/lib/react/custom-chart-context-service.d.ts.map +0 -1
  117. package/lib/react/custom-chart-context-service.js +0 -91
  118. package/lib/react/custom-chart-context-service.js.map +0 -1
  119. package/lib/react/custom-chart.context.d.ts +0 -26
  120. package/lib/react/custom-chart.context.d.ts.map +0 -1
  121. package/lib/react/custom-chart.context.js +0 -78
  122. package/lib/react/custom-chart.context.js.map +0 -1
  123. package/lib/react/custom-chart.spec.d.ts +0 -2
  124. package/lib/react/custom-chart.spec.d.ts.map +0 -1
  125. package/lib/react/custom-chart.spec.js +0 -67
  126. package/lib/react/custom-chart.spec.js.map +0 -1
@@ -1,699 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const lodash_1 = __importDefault(require("lodash"));
30
- const test_utils_1 = require("../test/test-utils");
31
- const chart_to_ts_event_types_1 = require("../types/chart-to-ts-event.types");
32
- const ts_to_chart_event_types_1 = require("../types/ts-to-chart-event.types");
33
- const custom_chart_context_1 = require("./custom-chart-context");
34
- const PostMessageEventBridge = __importStar(require("./post-message-event-bridge"));
35
- jest.mock('./post-message-event-bridge');
36
- jest.spyOn(console, 'log').mockImplementation(() => {
37
- });
38
- describe('CustomChartContext', () => {
39
- let eventProcessor;
40
- let getDefaultChartConfig = jest.fn();
41
- let getQueriesFromChartConfig = jest.fn();
42
- let renderChart = jest.fn();
43
- const mockInitMessage = jest.spyOn(PostMessageEventBridge, 'initMessageListener');
44
- const mockPostMessageToHost = jest.spyOn(PostMessageEventBridge, 'postMessageToHostApp');
45
- beforeEach(() => {
46
- getDefaultChartConfig = jest.fn();
47
- getQueriesFromChartConfig = jest.fn();
48
- renderChart = jest.fn();
49
- mockInitMessage.mockImplementation((fn) => {
50
- eventProcessor = fn;
51
- });
52
- mockPostMessageToHost.mockImplementation(() => {
53
- return global.Promise.resolve();
54
- });
55
- });
56
- describe('initialize', () => {
57
- let customChartContext;
58
- beforeEach(() => {
59
- customChartContext = new custom_chart_context_1.CustomChartContext({
60
- getDefaultChartConfig,
61
- getQueriesFromChartConfig,
62
- renderChart,
63
- });
64
- });
65
- afterEach(() => {
66
- jest.resetAllMocks();
67
- customChartContext.destroy();
68
- eventProcessor = null;
69
- });
70
- test('should wait till the parent calls initialize', async () => {
71
- expect(mockInitMessage).toHaveBeenCalled();
72
- const promise = customChartContext.initialize();
73
- const rej = jest.fn();
74
- const res = jest.fn();
75
- promise.then(() => rej()).catch(() => res());
76
- await new global.Promise((resolve) => {
77
- setTimeout(() => resolve(null), 3000);
78
- });
79
- expect(rej).not.toHaveBeenCalled();
80
- expect(res).not.toHaveBeenCalled();
81
- });
82
- test('should return a promise that resolves when the chart context is initialized', async () => {
83
- expect(mockInitMessage).toHaveBeenCalled();
84
- const promise = customChartContext.initialize();
85
- const mockPostMessage = jest.fn();
86
- eventProcessor({
87
- data: {
88
- payload: test_utils_1.mockInitializeContextPayload,
89
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
90
- source: 'ts-host-app',
91
- },
92
- ports: [{ postMessage: mockPostMessage }],
93
- });
94
- eventProcessor({
95
- data: {
96
- payload: {},
97
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
98
- source: 'ts-host-app',
99
- },
100
- ports: [{ postMessage: mockPostMessage }],
101
- });
102
- await expect(promise).resolves.toBeUndefined();
103
- expect(mockPostMessage).toHaveBeenCalledTimes(2);
104
- expect(mockPostMessage.mock.calls[0][0]).toEqual({
105
- isConfigValid: false,
106
- defaultChartConfig: undefined,
107
- chartConfigEditorDefinition: undefined,
108
- visualPropEditorDefinition: undefined,
109
- });
110
- expect(mockPostMessage).toHaveBeenCalled();
111
- expect(mockPostMessageToHost).not.toHaveBeenCalled();
112
- });
113
- test('multiple intializations should throw an error', async () => {
114
- const promise = customChartContext.initialize();
115
- const mockPostMessage = jest.fn();
116
- eventProcessor({
117
- data: {
118
- payload: test_utils_1.mockInitializeContextPayload,
119
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
120
- source: 'ts-host-app',
121
- },
122
- ports: [{ postMessage: mockPostMessage }],
123
- });
124
- eventProcessor({
125
- data: {
126
- payload: {},
127
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
128
- source: 'ts-host-app',
129
- },
130
- ports: [{ postMessage: mockPostMessage }],
131
- });
132
- await expect(promise).resolves.toBeUndefined();
133
- let error;
134
- try {
135
- customChartContext = new custom_chart_context_1.CustomChartContext({
136
- getDefaultChartConfig,
137
- getQueriesFromChartConfig,
138
- renderChart,
139
- });
140
- }
141
- catch (err) {
142
- error = err.message;
143
- }
144
- expect(error).toBe(chart_to_ts_event_types_1.ErrorType.MultipleContextsNotSupported);
145
- try {
146
- await (0, custom_chart_context_1.getChartContext)({
147
- getDefaultChartConfig,
148
- getQueriesFromChartConfig,
149
- renderChart,
150
- });
151
- }
152
- catch (err) {
153
- error = err.message;
154
- }
155
- expect(error).toBe(chart_to_ts_event_types_1.ErrorType.MultipleContextsNotSupported);
156
- });
157
- });
158
- describe('on', () => {
159
- let customChartContext;
160
- beforeEach(() => {
161
- customChartContext = new custom_chart_context_1.CustomChartContext({
162
- getDefaultChartConfig,
163
- getQueriesFromChartConfig,
164
- renderChart,
165
- });
166
- });
167
- afterEach(() => {
168
- jest.resetAllMocks();
169
- customChartContext.destroy();
170
- eventProcessor = null;
171
- });
172
- test('should not trigger post message if host is not accurate', () => {
173
- expect(mockInitMessage).toHaveBeenCalled();
174
- const mockPostMessage = jest.fn();
175
- eventProcessor({
176
- data: {
177
- payload: test_utils_1.mockInitializeContextPayload,
178
- eventType: ts_to_chart_event_types_1.TSToChartEvent.ChartConfigValidate,
179
- source: 'incorrect-source',
180
- },
181
- ports: [{ postMessage: mockPostMessage }],
182
- });
183
- expect(mockPostMessage).not.toHaveBeenCalled();
184
- });
185
- test('default internal function testing', () => {
186
- expect(mockInitMessage).toHaveBeenCalled();
187
- const mockPostMessage = jest.fn();
188
- eventProcessor({
189
- data: {
190
- payload: test_utils_1.mockInitializeContextPayload,
191
- eventType: ts_to_chart_event_types_1.TSToChartEvent.ChartConfigValidate,
192
- source: 'ts-host-app',
193
- },
194
- ports: [{ postMessage: mockPostMessage }],
195
- });
196
- expect(mockPostMessage).toHaveBeenCalledWith({
197
- isValid: true,
198
- });
199
- mockPostMessage.mockReset();
200
- eventProcessor({
201
- data: {
202
- payload: test_utils_1.mockInitializeContextPayload,
203
- eventType: ts_to_chart_event_types_1.TSToChartEvent.VisualPropsValidate,
204
- source: 'ts-host-app',
205
- },
206
- ports: [{ postMessage: mockPostMessage }],
207
- });
208
- expect(mockPostMessage).toHaveBeenCalledWith({
209
- isValid: true,
210
- });
211
- mockPostMessage.mockReset();
212
- eventProcessor({
213
- data: {
214
- payload: test_utils_1.mockInitializeContextPayload,
215
- eventType: ts_to_chart_event_types_1.TSToChartEvent.TriggerRenderChart,
216
- source: 'ts-host-app',
217
- },
218
- ports: [{ postMessage: mockPostMessage }],
219
- });
220
- expect(mockPostMessage).toHaveBeenCalledWith({});
221
- expect(renderChart).toHaveBeenCalled();
222
- mockPostMessage.mockReset();
223
- eventProcessor({
224
- data: {
225
- payload: test_utils_1.mockInitializeContextPayload,
226
- eventType: ts_to_chart_event_types_1.TSToChartEvent.GetDataQuery,
227
- source: 'ts-host-app',
228
- },
229
- ports: [{ postMessage: mockPostMessage }],
230
- });
231
- expect(mockPostMessage).toHaveBeenCalledWith({});
232
- expect(getQueriesFromChartConfig).toHaveBeenCalled();
233
- });
234
- test('default external function testing', () => {
235
- expect(mockInitMessage).toHaveBeenCalled();
236
- const mockPostMessage = jest.fn();
237
- eventProcessor({
238
- data: {
239
- payload: {
240
- data: 'random data',
241
- },
242
- eventType: ts_to_chart_event_types_1.TSToChartEvent.DataUpdate,
243
- source: 'ts-host-app',
244
- },
245
- ports: [{ postMessage: mockPostMessage }],
246
- });
247
- expect(mockPostMessage).toHaveBeenCalledWith({
248
- triggerRenderChart: true,
249
- });
250
- expect(customChartContext.getChartModel().data).toBe('random data');
251
- mockPostMessage.mockReset();
252
- eventProcessor({
253
- data: {
254
- payload: {
255
- chartModel: {
256
- data: 'random data2',
257
- visualProps: null,
258
- },
259
- },
260
- eventType: ts_to_chart_event_types_1.TSToChartEvent.ChartModelUpdate,
261
- source: 'ts-host-app',
262
- },
263
- ports: [{ postMessage: mockPostMessage }],
264
- });
265
- expect(mockPostMessage).toHaveBeenCalledWith({
266
- triggerRenderChart: true,
267
- });
268
- expect(customChartContext.getChartModel().data).toBe('random data2');
269
- expect(customChartContext.getChartModel().visualProps).toBe(null);
270
- mockPostMessage.mockReset();
271
- eventProcessor({
272
- data: {
273
- payload: {
274
- visualProps: 'random data',
275
- },
276
- eventType: ts_to_chart_event_types_1.TSToChartEvent.VisualPropsUpdate,
277
- source: 'ts-host-app',
278
- },
279
- ports: [{ postMessage: mockPostMessage }],
280
- });
281
- expect(mockPostMessage).toHaveBeenCalledWith({
282
- triggerRenderChart: true,
283
- });
284
- expect(customChartContext.getChartModel().visualProps).toBe('random data');
285
- mockPostMessage.mockReset();
286
- customChartContext.axisMenuCustomActionPreProcessor([
287
- {
288
- customActions: [
289
- {
290
- icon: '',
291
- id: 'custom-action-1',
292
- label: 'Custom user action 1',
293
- onClick: () => lodash_1.default.noop(),
294
- },
295
- ],
296
- },
297
- ]);
298
- eventProcessor({
299
- data: {
300
- payload: {
301
- customAction: {
302
- id: 'custom-action-1',
303
- columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
304
- },
305
- },
306
- eventType: ts_to_chart_event_types_1.TSToChartEvent.AxisMenuActionClick,
307
- source: 'ts-host-app',
308
- },
309
- ports: [{ postMessage: mockPostMessage }],
310
- });
311
- expect(mockPostMessage).toHaveBeenCalledWith({
312
- isValid: true,
313
- });
314
- customChartContext.contextMenuCustomActionPreProcessor([
315
- {
316
- customActions: [
317
- {
318
- icon: '',
319
- id: 'custom-action-1',
320
- label: 'Custom user action 1',
321
- onClick: () => lodash_1.default.noop(),
322
- },
323
- ],
324
- },
325
- ]);
326
- eventProcessor({
327
- data: {
328
- payload: {
329
- customAction: {
330
- id: 'custom-action-1',
331
- columnIds: ['9f96b5b0-f7e4-4a5e-aa11-4c77fdf42125'],
332
- },
333
- },
334
- eventType: ts_to_chart_event_types_1.TSToChartEvent.ContextMenuActionClick,
335
- source: 'ts-host-app',
336
- },
337
- ports: [{ postMessage: mockPostMessage }],
338
- });
339
- expect(mockPostMessage).toHaveBeenCalledWith({
340
- isValid: true,
341
- });
342
- });
343
- test('should add an event listener to the specified event type', () => {
344
- expect(mockInitMessage).toHaveBeenCalled();
345
- const TEST_EVENT_TYPE = 'testEventType';
346
- const testCallbackFn = jest.fn();
347
- customChartContext.on(TEST_EVENT_TYPE, testCallbackFn);
348
- const mockPostMessage = jest.fn();
349
- eventProcessor({
350
- data: {
351
- payload: test_utils_1.mockInitializeContextPayload,
352
- eventType: TEST_EVENT_TYPE,
353
- source: 'ts-host-app',
354
- },
355
- ports: [{ postMessage: mockPostMessage }],
356
- });
357
- expect(testCallbackFn).toHaveBeenCalled();
358
- });
359
- test('should respond with an error to an unspecified event type', () => {
360
- expect(mockInitMessage).toHaveBeenCalled();
361
- const TEST_EVENT_TYPE = 'testEventType';
362
- const mockPostMessage = jest.fn();
363
- eventProcessor({
364
- data: {
365
- payload: test_utils_1.mockInitializeContextPayload,
366
- eventType: TEST_EVENT_TYPE,
367
- source: 'ts-host-app',
368
- },
369
- ports: [{ postMessage: mockPostMessage }],
370
- });
371
- expect(mockPostMessage).toHaveBeenCalledWith({
372
- hasError: true,
373
- error: `Event type not recognised or processed: ${TEST_EVENT_TYPE}`,
374
- });
375
- });
376
- });
377
- describe('off', () => {
378
- let customChartContext;
379
- beforeEach(() => {
380
- customChartContext = new custom_chart_context_1.CustomChartContext({
381
- getDefaultChartConfig,
382
- getQueriesFromChartConfig,
383
- renderChart,
384
- });
385
- });
386
- afterEach(() => {
387
- customChartContext.destroy();
388
- eventProcessor = null;
389
- jest.resetAllMocks();
390
- });
391
- test('should remove the event listener for the specified event type', () => {
392
- const TEST_EVENT_TYPE = 'testEventType';
393
- const testCallbackFn = jest.fn();
394
- customChartContext.on(TEST_EVENT_TYPE, testCallbackFn);
395
- const mockPostMessage = jest.fn();
396
- eventProcessor({
397
- data: {
398
- payload: test_utils_1.mockInitializeContextPayload,
399
- eventType: TEST_EVENT_TYPE,
400
- source: 'ts-host-app',
401
- },
402
- ports: [{ postMessage: mockPostMessage }],
403
- });
404
- customChartContext.off(TEST_EVENT_TYPE);
405
- expect(testCallbackFn).toHaveBeenCalled();
406
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE]).toHaveLength(0);
407
- });
408
- test('should remove a specific event listener without affecting others', () => {
409
- const TEST_EVENT_TYPE_1 = 'testEventType1';
410
- const TEST_EVENT_TYPE_2 = 'testEventType2';
411
- const testCallbackFn1 = jest.fn();
412
- const testCallbackFn2 = jest.fn();
413
- customChartContext.on(TEST_EVENT_TYPE_1, testCallbackFn1);
414
- customChartContext.on(TEST_EVENT_TYPE_2, testCallbackFn2);
415
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE_1]).toHaveLength(1);
416
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE_2]).toHaveLength(1);
417
- const mockPostMessage = jest.fn();
418
- eventProcessor({
419
- data: {
420
- payload: {},
421
- eventType: TEST_EVENT_TYPE_1,
422
- source: 'ts-host-app',
423
- },
424
- ports: [{ postMessage: mockPostMessage }],
425
- });
426
- eventProcessor({
427
- data: {
428
- payload: {},
429
- eventType: TEST_EVENT_TYPE_2,
430
- source: 'ts-host-app',
431
- },
432
- ports: [{ postMessage: mockPostMessage }],
433
- });
434
- expect(testCallbackFn1).toHaveBeenCalled();
435
- expect(testCallbackFn2).toHaveBeenCalled();
436
- customChartContext.off(TEST_EVENT_TYPE_1);
437
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE_1]).toHaveLength(0);
438
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE_2]).toHaveLength(1);
439
- });
440
- test('should make sure not to throw error when off is called before', () => {
441
- const TEST_EVENT_TYPE_1 = 'testEventType1';
442
- customChartContext.off(TEST_EVENT_TYPE_1);
443
- expect(customChartContext.eventListeners[TEST_EVENT_TYPE_1]).toHaveLength(0);
444
- });
445
- });
446
- describe('emitEvent', () => {
447
- let customChartContext;
448
- beforeEach(() => {
449
- customChartContext = new custom_chart_context_1.CustomChartContext({
450
- getDefaultChartConfig,
451
- getQueriesFromChartConfig,
452
- renderChart,
453
- });
454
- });
455
- afterEach(() => {
456
- customChartContext.destroy();
457
- eventProcessor = null;
458
- jest.resetAllMocks();
459
- });
460
- test('should reject the promise if the chart context is not initialized', async () => {
461
- const TEST_EVENT_TYPE = 'testEventType';
462
- const testPayload = { value: 'testPayload' };
463
- const result = customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
464
- expect(mockPostMessageToHost).not.toHaveBeenCalled();
465
- await expect(result).rejects.toBeDefined();
466
- });
467
- test('should resolve the promise if the chart context is initialized', async () => {
468
- const mockPostMessage = jest.fn();
469
- eventProcessor({
470
- data: {
471
- payload: test_utils_1.mockInitializeContextPayload,
472
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
473
- source: 'ts-host-app',
474
- },
475
- ports: [{ postMessage: mockPostMessage }],
476
- });
477
- eventProcessor({
478
- data: {
479
- payload: {},
480
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
481
- source: 'ts-host-app',
482
- },
483
- ports: [{ postMessage: mockPostMessage }],
484
- });
485
- const promise = customChartContext.initialize();
486
- await expect(promise).resolves.toBeUndefined();
487
- expect(mockPostMessage).toHaveBeenCalledTimes(2);
488
- let resolve;
489
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
490
- resolve = res;
491
- }));
492
- const TEST_EVENT_TYPE = 'testEventType';
493
- const testPayload = { value: 'testPayload' };
494
- const result = customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
495
- global.setTimeout(() => resolve('helloworld'), 1000);
496
- await expect(result).resolves.toEqual('helloworld');
497
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, testPayload, TEST_EVENT_TYPE);
498
- mockPostMessageToHost.mockReset();
499
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
500
- resolve = res;
501
- }));
502
- const result2 = customChartContext.emitEvent(chart_to_ts_event_types_1.ChartToTSEvent.RenderStart);
503
- global.setTimeout(() => resolve('helloworld'), 1000);
504
- await expect(result2).resolves.toEqual('helloworld');
505
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, null, chart_to_ts_event_types_1.ChartToTSEvent.RenderStart);
506
- });
507
- test('should process the event payload for context menu custom actions', async () => {
508
- const mockPostMessage = jest.fn();
509
- const mockCustomAction = jest.fn();
510
- let resolve;
511
- eventProcessor({
512
- data: {
513
- payload: test_utils_1.mockInitializeContextPayload,
514
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
515
- source: 'ts-host-app',
516
- },
517
- ports: [{ postMessage: mockPostMessage }],
518
- });
519
- eventProcessor({
520
- data: {
521
- payload: {},
522
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
523
- source: 'ts-host-app',
524
- },
525
- ports: [{ postMessage: mockPostMessage }],
526
- });
527
- customChartContext.initialize();
528
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
529
- resolve = res;
530
- }));
531
- const TEST_EVENT_TYPE = chart_to_ts_event_types_1.ChartToTSEvent.OpenContextMenu;
532
- const testPayload = {
533
- customActions: [
534
- {
535
- id: 'custom-action-1',
536
- label: 'Custom user action 1',
537
- icon: '',
538
- onClick: mockCustomAction,
539
- },
540
- ],
541
- };
542
- customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
543
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, {
544
- customActions: [
545
- {
546
- icon: '',
547
- id: 'custom-action-1',
548
- label: 'Custom user action 1',
549
- },
550
- ],
551
- }, TEST_EVENT_TYPE);
552
- eventProcessor({
553
- data: {
554
- payload: {
555
- customAction: {
556
- id: 'custom-action-1',
557
- clickedPoint: {},
558
- event: {},
559
- selectedPoints: [{}],
560
- },
561
- },
562
- eventType: ts_to_chart_event_types_1.TSToChartEvent.ContextMenuActionClick,
563
- source: 'ts-host-app',
564
- },
565
- ports: [{ postMessage: mockPostMessage }],
566
- });
567
- expect(mockCustomAction).toHaveBeenCalled();
568
- expect(mockCustomAction).toHaveBeenCalledWith({
569
- clickedPoint: {},
570
- event: {},
571
- id: 'custom-action-1',
572
- selectedPoints: [{}],
573
- });
574
- });
575
- test('should process the event payload for axis menu custom actions', async () => {
576
- const mockPostMessage = jest.fn();
577
- const mockCustomAction = jest.fn();
578
- let resolve;
579
- eventProcessor({
580
- data: {
581
- payload: test_utils_1.mockInitializeContextPayload,
582
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
583
- source: 'ts-host-app',
584
- },
585
- ports: [{ postMessage: mockPostMessage }],
586
- });
587
- eventProcessor({
588
- data: {
589
- payload: {},
590
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
591
- source: 'ts-host-app',
592
- },
593
- ports: [{ postMessage: mockPostMessage }],
594
- });
595
- customChartContext.initialize();
596
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
597
- resolve = res;
598
- }));
599
- const TEST_EVENT_TYPE = chart_to_ts_event_types_1.ChartToTSEvent.OpenAxisMenu;
600
- const testPayload = {
601
- customActions: [
602
- {
603
- id: 'custom-action-1',
604
- label: 'Custom user action 1',
605
- icon: '',
606
- onClick: mockCustomAction,
607
- },
608
- ],
609
- };
610
- customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
611
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, {
612
- customActions: [
613
- {
614
- icon: '',
615
- id: 'custom-action-1',
616
- label: 'Custom user action 1',
617
- },
618
- ],
619
- }, TEST_EVENT_TYPE);
620
- eventProcessor({
621
- data: {
622
- payload: {
623
- customAction: {
624
- id: 'custom-action-1',
625
- columnIds: ['123'],
626
- event: {},
627
- },
628
- },
629
- eventType: ts_to_chart_event_types_1.TSToChartEvent.AxisMenuActionClick,
630
- source: 'ts-host-app',
631
- },
632
- ports: [{ postMessage: mockPostMessage }],
633
- });
634
- expect(mockCustomAction).toHaveBeenCalled();
635
- expect(mockCustomAction).toHaveBeenCalledWith({
636
- id: 'custom-action-1',
637
- columnIds: ['123'],
638
- event: {},
639
- });
640
- });
641
- test('should process the event payload for axis menu when custom actions are not defined', async () => {
642
- const mockPostMessage = jest.fn();
643
- let resolve;
644
- eventProcessor({
645
- data: {
646
- payload: test_utils_1.mockInitializeContextPayload,
647
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
648
- source: 'ts-host-app',
649
- },
650
- ports: [{ postMessage: mockPostMessage }],
651
- });
652
- eventProcessor({
653
- data: {
654
- payload: {},
655
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
656
- source: 'ts-host-app',
657
- },
658
- ports: [{ postMessage: mockPostMessage }],
659
- });
660
- customChartContext.initialize();
661
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
662
- resolve = res;
663
- }));
664
- const TEST_EVENT_TYPE = chart_to_ts_event_types_1.ChartToTSEvent.OpenAxisMenu;
665
- const testPayload = {};
666
- customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
667
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, {}, TEST_EVENT_TYPE);
668
- });
669
- test('should process the event payload for context menu when custom actions are not defined', async () => {
670
- const mockPostMessage = jest.fn();
671
- let resolve;
672
- eventProcessor({
673
- data: {
674
- payload: test_utils_1.mockInitializeContextPayload,
675
- eventType: ts_to_chart_event_types_1.TSToChartEvent.Initialize,
676
- source: 'ts-host-app',
677
- },
678
- ports: [{ postMessage: mockPostMessage }],
679
- });
680
- eventProcessor({
681
- data: {
682
- payload: {},
683
- eventType: ts_to_chart_event_types_1.TSToChartEvent.InitializeComplete,
684
- source: 'ts-host-app',
685
- },
686
- ports: [{ postMessage: mockPostMessage }],
687
- });
688
- customChartContext.initialize();
689
- mockPostMessageToHost.mockImplementation(() => new global.Promise((res) => {
690
- resolve = res;
691
- }));
692
- const TEST_EVENT_TYPE = chart_to_ts_event_types_1.ChartToTSEvent.OpenContextMenu;
693
- const testPayload = {};
694
- customChartContext.emitEvent(TEST_EVENT_TYPE, testPayload);
695
- expect(mockPostMessageToHost).toHaveBeenCalledWith(test_utils_1.mockInitializeContextPayload.componentId, test_utils_1.mockInitializeContextPayload.hostUrl, {}, TEST_EVENT_TYPE);
696
- });
697
- });
698
- });
699
- //# sourceMappingURL=custom-chart-context.spec.js.map