@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.
Files changed (174) hide show
  1. package/dist/ts-chart-sdk.d.ts +449 -31
  2. package/lib/index.d.ts +3 -0
  3. package/lib/index.d.ts.map +1 -1
  4. package/lib/index.js +3 -0
  5. package/lib/index.js.map +1 -1
  6. package/lib/main/custom-chart-context.d.ts +17 -5
  7. package/lib/main/custom-chart-context.d.ts.map +1 -1
  8. package/lib/main/custom-chart-context.js +74 -34
  9. package/lib/main/custom-chart-context.js.map +1 -1
  10. package/lib/main/custom-chart-context.spec.js +256 -257
  11. package/lib/main/custom-chart-context.spec.js.map +1 -1
  12. package/lib/main/post-message-event-bridge.d.ts +3 -3
  13. package/lib/main/post-message-event-bridge.d.ts.map +1 -1
  14. package/lib/main/post-message-event-bridge.js +24 -36
  15. package/lib/main/post-message-event-bridge.js.map +1 -1
  16. package/lib/main/post-message-event-bridge.spec.js +0 -2
  17. package/lib/main/post-message-event-bridge.spec.js.map +1 -1
  18. package/lib/main/util.d.ts +2 -0
  19. package/lib/main/util.d.ts.map +1 -0
  20. package/lib/main/util.js +9 -0
  21. package/lib/main/util.js.map +1 -0
  22. package/lib/react/use-custom-chart-context.spec.js +128 -121
  23. package/lib/react/use-custom-chart-context.spec.js.map +1 -1
  24. package/lib/test/test-conditional-formatting-utils.d.ts +5 -0
  25. package/lib/test/test-conditional-formatting-utils.d.ts.map +1 -0
  26. package/lib/test/test-conditional-formatting-utils.js +43 -0
  27. package/lib/test/test-conditional-formatting-utils.js.map +1 -0
  28. package/lib/types/answer-column.types.d.ts +54 -1
  29. package/lib/types/answer-column.types.d.ts.map +1 -1
  30. package/lib/types/answer-column.types.js +47 -0
  31. package/lib/types/answer-column.types.js.map +1 -1
  32. package/lib/types/common.types.d.ts +51 -4
  33. package/lib/types/common.types.d.ts.map +1 -1
  34. package/lib/types/common.types.js +15 -1
  35. package/lib/types/common.types.js.map +1 -1
  36. package/lib/types/conditional-formatting.types.d.ts +155 -0
  37. package/lib/types/conditional-formatting.types.d.ts.map +1 -0
  38. package/lib/types/conditional-formatting.types.js +60 -0
  39. package/lib/types/conditional-formatting.types.js.map +1 -0
  40. package/lib/types/configurator.types.d.ts +5 -0
  41. package/lib/types/configurator.types.d.ts.map +1 -1
  42. package/lib/types/ts-to-chart-event.types.d.ts +3 -0
  43. package/lib/types/ts-to-chart-event.types.d.ts.map +1 -1
  44. package/lib/types/ts-to-chart-event.types.js.map +1 -1
  45. package/lib/types/visual-prop.types.d.ts +3 -0
  46. package/lib/types/visual-prop.types.d.ts.map +1 -1
  47. package/lib/utils/conditional-formatting/conditional-formatting.d.ts +10 -0
  48. package/lib/utils/conditional-formatting/conditional-formatting.d.ts.map +1 -0
  49. package/lib/utils/conditional-formatting/conditional-formatting.js +103 -0
  50. package/lib/utils/conditional-formatting/conditional-formatting.js.map +1 -0
  51. package/lib/utils/conditional-formatting/conditional-formatting.spec.d.ts +2 -0
  52. package/lib/utils/conditional-formatting/conditional-formatting.spec.d.ts.map +1 -0
  53. package/lib/utils/conditional-formatting/conditional-formatting.spec.js +142 -0
  54. package/lib/utils/conditional-formatting/conditional-formatting.spec.js.map +1 -0
  55. package/lib/utils/date-formatting.d.ts +19 -0
  56. package/lib/utils/date-formatting.d.ts.map +1 -0
  57. package/lib/utils/date-formatting.js +56 -0
  58. package/lib/utils/date-formatting.js.map +1 -0
  59. package/lib/utils/date-formatting.spec.d.ts +2 -0
  60. package/lib/utils/date-formatting.spec.d.ts.map +1 -0
  61. package/lib/utils/date-formatting.spec.js +124 -0
  62. package/lib/utils/date-formatting.spec.js.map +1 -0
  63. package/package.json +10 -7
  64. package/src/index.ts +3 -0
  65. package/src/main/custom-chart-context.spec.ts +291 -266
  66. package/src/main/custom-chart-context.ts +164 -46
  67. package/src/main/post-message-event-bridge.spec.ts +0 -3
  68. package/src/main/post-message-event-bridge.ts +36 -62
  69. package/src/main/util.ts +11 -0
  70. package/src/react/use-custom-chart-context.spec.tsx +149 -122
  71. package/src/test/test-conditional-formatting-utils.ts +95 -0
  72. package/src/types/answer-column.types.ts +98 -0
  73. package/src/types/common.types.ts +82 -10
  74. package/src/types/conditional-formatting.types.ts +172 -0
  75. package/src/types/configurator.types.ts +21 -0
  76. package/src/types/ts-to-chart-event.types.ts +15 -0
  77. package/src/types/visual-prop.types.ts +7 -0
  78. package/src/utils/conditional-formatting/conditional-formatting.spec.ts +469 -0
  79. package/src/utils/conditional-formatting/conditional-formatting.ts +229 -0
  80. package/src/utils/date-formatting.spec.ts +168 -0
  81. package/src/utils/date-formatting.ts +109 -0
  82. package/cjs/index.d.ts +0 -9
  83. package/cjs/index.d.ts.map +0 -1
  84. package/cjs/index.js +0 -25
  85. package/cjs/index.js.map +0 -1
  86. package/cjs/main/custom-chart-context.d.ts +0 -47
  87. package/cjs/main/custom-chart-context.d.ts.map +0 -1
  88. package/cjs/main/custom-chart-context.js +0 -326
  89. package/cjs/main/custom-chart-context.js.map +0 -1
  90. package/cjs/main/custom-chart-context.spec.d.ts +0 -2
  91. package/cjs/main/custom-chart-context.spec.d.ts.map +0 -1
  92. package/cjs/main/custom-chart-context.spec.js +0 -699
  93. package/cjs/main/custom-chart-context.spec.js.map +0 -1
  94. package/cjs/main/post-message-event-bridge.d.ts +0 -6
  95. package/cjs/main/post-message-event-bridge.d.ts.map +0 -1
  96. package/cjs/main/post-message-event-bridge.js +0 -46
  97. package/cjs/main/post-message-event-bridge.js.map +0 -1
  98. package/cjs/main/post-message-event-bridge.spec.d.ts +0 -2
  99. package/cjs/main/post-message-event-bridge.spec.d.ts.map +0 -1
  100. package/cjs/main/post-message-event-bridge.spec.js +0 -124
  101. package/cjs/main/post-message-event-bridge.spec.js.map +0 -1
  102. package/cjs/react/custom-chart-context-service.d.ts +0 -33
  103. package/cjs/react/custom-chart-context-service.d.ts.map +0 -1
  104. package/cjs/react/custom-chart-context-service.js +0 -118
  105. package/cjs/react/custom-chart-context-service.js.map +0 -1
  106. package/cjs/react/custom-chart.context.d.ts +0 -26
  107. package/cjs/react/custom-chart.context.d.ts.map +0 -1
  108. package/cjs/react/custom-chart.context.js +0 -105
  109. package/cjs/react/custom-chart.context.js.map +0 -1
  110. package/cjs/react/custom-chart.spec.d.ts +0 -2
  111. package/cjs/react/custom-chart.spec.d.ts.map +0 -1
  112. package/cjs/react/custom-chart.spec.js +0 -72
  113. package/cjs/react/custom-chart.spec.js.map +0 -1
  114. package/cjs/react/mocks/custom-chart-context-mock.d.ts +0 -3
  115. package/cjs/react/mocks/custom-chart-context-mock.d.ts.map +0 -1
  116. package/cjs/react/mocks/custom-chart-context-mock.js +0 -100
  117. package/cjs/react/mocks/custom-chart-context-mock.js.map +0 -1
  118. package/cjs/react/use-custom-chart-context.d.ts +0 -4
  119. package/cjs/react/use-custom-chart-context.d.ts.map +0 -1
  120. package/cjs/react/use-custom-chart-context.js +0 -95
  121. package/cjs/react/use-custom-chart-context.js.map +0 -1
  122. package/cjs/react/use-custom-chart-context.spec.d.ts +0 -2
  123. package/cjs/react/use-custom-chart-context.spec.d.ts.map +0 -1
  124. package/cjs/react/use-custom-chart-context.spec.js +0 -391
  125. package/cjs/react/use-custom-chart-context.spec.js.map +0 -1
  126. package/cjs/react/use-custom-chart-context.util.d.ts +0 -6
  127. package/cjs/react/use-custom-chart-context.util.d.ts.map +0 -1
  128. package/cjs/react/use-custom-chart-context.util.js +0 -60
  129. package/cjs/react/use-custom-chart-context.util.js.map +0 -1
  130. package/cjs/react/use-custom-chart-types.d.ts +0 -23
  131. package/cjs/react/use-custom-chart-types.d.ts.map +0 -1
  132. package/cjs/react/use-custom-chart-types.js +0 -3
  133. package/cjs/react/use-custom-chart-types.js.map +0 -1
  134. package/cjs/test/test-utils.d.ts +0 -7
  135. package/cjs/test/test-utils.d.ts.map +0 -1
  136. package/cjs/test/test-utils.js +0 -14
  137. package/cjs/test/test-utils.js.map +0 -1
  138. package/cjs/types/answer-column.types.d.ts +0 -69
  139. package/cjs/types/answer-column.types.d.ts.map +0 -1
  140. package/cjs/types/answer-column.types.js +0 -59
  141. package/cjs/types/answer-column.types.js.map +0 -1
  142. package/cjs/types/chart-to-ts-event.types.d.ts +0 -98
  143. package/cjs/types/chart-to-ts-event.types.d.ts.map +0 -1
  144. package/cjs/types/chart-to-ts-event.types.js +0 -32
  145. package/cjs/types/chart-to-ts-event.types.js.map +0 -1
  146. package/cjs/types/common.types.d.ts +0 -51
  147. package/cjs/types/common.types.d.ts.map +0 -1
  148. package/cjs/types/common.types.js +0 -3
  149. package/cjs/types/common.types.js.map +0 -1
  150. package/cjs/types/configurator.types.d.ts +0 -15
  151. package/cjs/types/configurator.types.d.ts.map +0 -1
  152. package/cjs/types/configurator.types.js +0 -3
  153. package/cjs/types/configurator.types.js.map +0 -1
  154. package/cjs/types/ts-to-chart-event.types.d.ts +0 -91
  155. package/cjs/types/ts-to-chart-event.types.d.ts.map +0 -1
  156. package/cjs/types/ts-to-chart-event.types.js +0 -18
  157. package/cjs/types/ts-to-chart-event.types.js.map +0 -1
  158. package/cjs/types/visual-prop.types.d.ts +0 -73
  159. package/cjs/types/visual-prop.types.d.ts.map +0 -1
  160. package/cjs/types/visual-prop.types.js +0 -3
  161. package/cjs/types/visual-prop.types.js.map +0 -1
  162. package/lib/dist/ts-chart-sdk.d.ts +0 -312
  163. package/lib/react/custom-chart-context-service.d.ts +0 -33
  164. package/lib/react/custom-chart-context-service.d.ts.map +0 -1
  165. package/lib/react/custom-chart-context-service.js +0 -91
  166. package/lib/react/custom-chart-context-service.js.map +0 -1
  167. package/lib/react/custom-chart.context.d.ts +0 -26
  168. package/lib/react/custom-chart.context.d.ts.map +0 -1
  169. package/lib/react/custom-chart.context.js +0 -78
  170. package/lib/react/custom-chart.context.js.map +0 -1
  171. package/lib/react/custom-chart.spec.d.ts +0 -2
  172. package/lib/react/custom-chart.spec.d.ts.map +0 -1
  173. package/lib/react/custom-chart.spec.js +0 -67
  174. 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