@thoughtspot/ts-chart-sdk 2.5.7 → 2.6.0
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 +71 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/main/custom-chart-context.d.ts +3 -1
- package/lib/main/custom-chart-context.d.ts.map +1 -1
- package/lib/main/custom-chart-context.js +46 -1
- package/lib/main/custom-chart-context.js.map +1 -1
- package/lib/main/custom-chart-context.spec.js +64 -1
- package/lib/main/custom-chart-context.spec.js.map +1 -1
- package/lib/react/mocks/custom-chart-context-mock.d.ts.map +1 -1
- package/lib/react/mocks/custom-chart-context-mock.js +3 -7
- package/lib/react/mocks/custom-chart-context-mock.js.map +1 -1
- package/lib/react/use-custom-chart-context.spec.js +67 -1
- package/lib/react/use-custom-chart-context.spec.js.map +1 -1
- package/lib/types/chart-to-ts-event.types.d.ts +27 -0
- package/lib/types/chart-to-ts-event.types.d.ts.map +1 -1
- package/lib/types/chart-to-ts-event.types.js +7 -0
- package/lib/types/chart-to-ts-event.types.js.map +1 -1
- package/lib/types/common.types.d.ts +31 -1
- package/lib/types/common.types.d.ts.map +1 -1
- package/lib/types/common.types.js +11 -0
- package/lib/types/common.types.js.map +1 -1
- package/lib/types/conditional-formatting.types.d.ts +1 -0
- package/lib/types/conditional-formatting.types.d.ts.map +1 -1
- package/lib/types/conditional-formatting.types.js.map +1 -1
- package/lib/types/ts-to-chart-event.types.d.ts +6 -1
- package/lib/types/ts-to-chart-event.types.d.ts.map +1 -1
- package/lib/types/ts-to-chart-event.types.js +1 -0
- package/lib/types/ts-to-chart-event.types.js.map +1 -1
- package/lib/utils/chart-config.d.ts +8 -0
- package/lib/utils/chart-config.d.ts.map +1 -0
- package/lib/utils/chart-config.js +56 -0
- package/lib/utils/chart-config.js.map +1 -0
- package/lib/utils/chart-config.spec.d.ts +2 -0
- package/lib/utils/chart-config.spec.d.ts.map +1 -0
- package/lib/utils/chart-config.spec.js +574 -0
- package/lib/utils/chart-config.spec.js.map +1 -0
- package/package.json +2 -1
- package/src/index.ts +1 -0
- package/src/main/custom-chart-context.spec.ts +106 -1
- package/src/main/custom-chart-context.ts +69 -1
- package/src/react/mocks/custom-chart-context-mock.ts +4 -13
- package/src/react/use-custom-chart-context.spec.tsx +81 -1
- package/src/types/chart-to-ts-event.types.ts +86 -2
- package/src/types/common.types.ts +116 -7
- package/src/types/conditional-formatting.types.ts +1 -0
- package/src/types/ts-to-chart-event.types.ts +16 -1
- package/src/utils/chart-config.spec.ts +680 -0
- package/src/utils/chart-config.ts +100 -0
|
@@ -0,0 +1,680 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AxisConfig,
|
|
3
|
+
AxisType,
|
|
4
|
+
ChartConfig,
|
|
5
|
+
ChartConfigDimension,
|
|
6
|
+
ChartConfigMode,
|
|
7
|
+
} from '../types/common.types';
|
|
8
|
+
import { QueryColumn } from '../types/ts-to-chart-event.types';
|
|
9
|
+
import {
|
|
10
|
+
fetchQueryColumns,
|
|
11
|
+
fetchQueryColumnsFromDimension,
|
|
12
|
+
fetchQueryColumnsFromDimensionConfig,
|
|
13
|
+
} from './chart-config';
|
|
14
|
+
|
|
15
|
+
describe('fetchQueryColumnsFromDimensionConfig', () => {
|
|
16
|
+
const mockColumn1 = {
|
|
17
|
+
id: 'col1',
|
|
18
|
+
name: 'Column 1',
|
|
19
|
+
} as QueryColumn;
|
|
20
|
+
|
|
21
|
+
const mockColumn2 = {
|
|
22
|
+
id: 'col2',
|
|
23
|
+
name: 'Column 2',
|
|
24
|
+
} as QueryColumn;
|
|
25
|
+
|
|
26
|
+
const mockColumn3 = {
|
|
27
|
+
id: 'col3',
|
|
28
|
+
name: 'Column 3',
|
|
29
|
+
} as QueryColumn;
|
|
30
|
+
|
|
31
|
+
const mockColumn4 = {
|
|
32
|
+
id: 'col4',
|
|
33
|
+
name: 'Column 4',
|
|
34
|
+
} as QueryColumn;
|
|
35
|
+
|
|
36
|
+
describe('FLAT dimension type', () => {
|
|
37
|
+
it('should return single column in an array for FLAT dimension', () => {
|
|
38
|
+
const flatConfig: AxisConfig = {
|
|
39
|
+
type: AxisType.FLAT,
|
|
40
|
+
column: mockColumn1,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const result = fetchQueryColumnsFromDimensionConfig(flatConfig);
|
|
44
|
+
|
|
45
|
+
expect(result).toEqual([mockColumn1]);
|
|
46
|
+
expect(result).toHaveLength(1);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe('MERGED dimension type', () => {
|
|
51
|
+
it('should return all columns for MERGED dimension', () => {
|
|
52
|
+
const mergedConfig: AxisConfig = {
|
|
53
|
+
type: AxisType.MERGED,
|
|
54
|
+
columns: [mockColumn1, mockColumn2],
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const result = fetchQueryColumnsFromDimensionConfig(mergedConfig);
|
|
58
|
+
|
|
59
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
60
|
+
expect(result).toHaveLength(2);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('should return empty array for MERGED dimension with no columns', () => {
|
|
64
|
+
const mergedConfig: AxisConfig = {
|
|
65
|
+
type: AxisType.MERGED,
|
|
66
|
+
columns: [],
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const result = fetchQueryColumnsFromDimensionConfig(mergedConfig);
|
|
70
|
+
|
|
71
|
+
expect(result).toEqual([]);
|
|
72
|
+
expect(result).toHaveLength(0);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('should return multiple columns for MERGED dimension', () => {
|
|
76
|
+
const mergedConfig: AxisConfig = {
|
|
77
|
+
type: AxisType.MERGED,
|
|
78
|
+
columns: [mockColumn1, mockColumn2, mockColumn3, mockColumn4],
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const result = fetchQueryColumnsFromDimensionConfig(mergedConfig);
|
|
82
|
+
|
|
83
|
+
expect(result).toEqual([
|
|
84
|
+
mockColumn1,
|
|
85
|
+
mockColumn2,
|
|
86
|
+
mockColumn3,
|
|
87
|
+
mockColumn4,
|
|
88
|
+
]);
|
|
89
|
+
expect(result).toHaveLength(4);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('DUAL dimension type', () => {
|
|
94
|
+
it('should return columns from both primary and secondary FLAT dimensions', () => {
|
|
95
|
+
const dualConfig: AxisConfig = {
|
|
96
|
+
type: AxisType.DUAL,
|
|
97
|
+
primary: {
|
|
98
|
+
type: AxisType.FLAT,
|
|
99
|
+
column: mockColumn1,
|
|
100
|
+
},
|
|
101
|
+
secondary: {
|
|
102
|
+
type: AxisType.FLAT,
|
|
103
|
+
column: mockColumn2,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const result = fetchQueryColumnsFromDimensionConfig(dualConfig);
|
|
108
|
+
|
|
109
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
110
|
+
expect(result).toHaveLength(2);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('should return columns from FLAT primary and MERGED secondary', () => {
|
|
114
|
+
const dualConfig: AxisConfig = {
|
|
115
|
+
type: AxisType.DUAL,
|
|
116
|
+
primary: {
|
|
117
|
+
type: AxisType.FLAT,
|
|
118
|
+
column: mockColumn1,
|
|
119
|
+
},
|
|
120
|
+
secondary: {
|
|
121
|
+
type: AxisType.MERGED,
|
|
122
|
+
columns: [mockColumn2, mockColumn3],
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const result = fetchQueryColumnsFromDimensionConfig(dualConfig);
|
|
127
|
+
|
|
128
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
129
|
+
expect(result).toHaveLength(3);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('should return columns from MERGED primary and FLAT secondary', () => {
|
|
133
|
+
const dualConfig: AxisConfig = {
|
|
134
|
+
type: AxisType.DUAL,
|
|
135
|
+
primary: {
|
|
136
|
+
type: AxisType.MERGED,
|
|
137
|
+
columns: [mockColumn1, mockColumn2],
|
|
138
|
+
},
|
|
139
|
+
secondary: {
|
|
140
|
+
type: AxisType.FLAT,
|
|
141
|
+
column: mockColumn3,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const result = fetchQueryColumnsFromDimensionConfig(dualConfig);
|
|
146
|
+
|
|
147
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
148
|
+
expect(result).toHaveLength(3);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('should return columns from both MERGED primary and MERGED secondary', () => {
|
|
152
|
+
const dualConfig: AxisConfig = {
|
|
153
|
+
type: AxisType.DUAL,
|
|
154
|
+
primary: {
|
|
155
|
+
type: AxisType.MERGED,
|
|
156
|
+
columns: [mockColumn1, mockColumn2],
|
|
157
|
+
},
|
|
158
|
+
secondary: {
|
|
159
|
+
type: AxisType.MERGED,
|
|
160
|
+
columns: [mockColumn3, mockColumn4],
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const result = fetchQueryColumnsFromDimensionConfig(dualConfig);
|
|
165
|
+
|
|
166
|
+
expect(result).toEqual([
|
|
167
|
+
mockColumn1,
|
|
168
|
+
mockColumn2,
|
|
169
|
+
mockColumn3,
|
|
170
|
+
mockColumn4,
|
|
171
|
+
]);
|
|
172
|
+
expect(result).toHaveLength(4);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('should handle empty MERGED dimensions in DUAL config', () => {
|
|
176
|
+
const dualConfig: AxisConfig = {
|
|
177
|
+
type: AxisType.DUAL,
|
|
178
|
+
primary: {
|
|
179
|
+
type: AxisType.MERGED,
|
|
180
|
+
columns: [],
|
|
181
|
+
},
|
|
182
|
+
secondary: {
|
|
183
|
+
type: AxisType.MERGED,
|
|
184
|
+
columns: [],
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const result = fetchQueryColumnsFromDimensionConfig(dualConfig);
|
|
189
|
+
|
|
190
|
+
expect(result).toEqual([]);
|
|
191
|
+
expect(result).toHaveLength(0);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('fetchQueryColumnsFromDimension', () => {
|
|
197
|
+
const mockColumn1 = {
|
|
198
|
+
id: 'col1',
|
|
199
|
+
name: 'Column 1',
|
|
200
|
+
} as QueryColumn;
|
|
201
|
+
|
|
202
|
+
const mockColumn2 = {
|
|
203
|
+
id: 'col2',
|
|
204
|
+
name: 'Column 2',
|
|
205
|
+
} as QueryColumn;
|
|
206
|
+
|
|
207
|
+
const mockColumn3 = {
|
|
208
|
+
id: 'col3',
|
|
209
|
+
name: 'Column 3',
|
|
210
|
+
} as QueryColumn;
|
|
211
|
+
|
|
212
|
+
const mockColumn4 = {
|
|
213
|
+
id: 'col4',
|
|
214
|
+
name: 'Column 4',
|
|
215
|
+
} as QueryColumn;
|
|
216
|
+
|
|
217
|
+
describe('COLUMN_DRIVEN mode', () => {
|
|
218
|
+
it('should return columns directly for COLUMN_DRIVEN dimension', () => {
|
|
219
|
+
const dimension: ChartConfigDimension = {
|
|
220
|
+
key: 'xAxis',
|
|
221
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
222
|
+
columns: [mockColumn1, mockColumn2],
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
226
|
+
|
|
227
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
228
|
+
expect(result).toHaveLength(2);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('should return empty array for COLUMN_DRIVEN dimension with no columns', () => {
|
|
232
|
+
const dimension: ChartConfigDimension = {
|
|
233
|
+
key: 'xAxis',
|
|
234
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
235
|
+
columns: [],
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
239
|
+
|
|
240
|
+
expect(result).toEqual([]);
|
|
241
|
+
expect(result).toHaveLength(0);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
it('should return single column for COLUMN_DRIVEN dimension', () => {
|
|
245
|
+
const dimension: ChartConfigDimension = {
|
|
246
|
+
key: 'xAxis',
|
|
247
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
248
|
+
columns: [mockColumn1],
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
252
|
+
|
|
253
|
+
expect(result).toEqual([mockColumn1]);
|
|
254
|
+
expect(result).toHaveLength(1);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
describe('AXIS_DRIVEN mode', () => {
|
|
259
|
+
it('should extract columns from single FLAT config', () => {
|
|
260
|
+
const dimension: ChartConfigDimension = {
|
|
261
|
+
key: 'xAxis',
|
|
262
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
263
|
+
axes: [
|
|
264
|
+
{
|
|
265
|
+
type: AxisType.FLAT,
|
|
266
|
+
column: mockColumn1,
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
272
|
+
|
|
273
|
+
expect(result).toEqual([mockColumn1]);
|
|
274
|
+
expect(result).toHaveLength(1);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('should extract columns from single MERGED config', () => {
|
|
278
|
+
const dimension: ChartConfigDimension = {
|
|
279
|
+
key: 'yAxis',
|
|
280
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
281
|
+
axes: [
|
|
282
|
+
{
|
|
283
|
+
type: AxisType.MERGED,
|
|
284
|
+
columns: [mockColumn1, mockColumn2],
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
290
|
+
|
|
291
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
292
|
+
expect(result).toHaveLength(2);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it('should extract columns from multiple FLAT configs', () => {
|
|
296
|
+
const dimension: ChartConfigDimension = {
|
|
297
|
+
key: 'yAxis',
|
|
298
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
299
|
+
axes: [
|
|
300
|
+
{
|
|
301
|
+
type: AxisType.FLAT,
|
|
302
|
+
column: mockColumn1,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
type: AxisType.FLAT,
|
|
306
|
+
column: mockColumn2,
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
312
|
+
|
|
313
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
314
|
+
expect(result).toHaveLength(2);
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
it('should extract columns from mixed FLAT and MERGED configs', () => {
|
|
318
|
+
const dimension: ChartConfigDimension = {
|
|
319
|
+
key: 'yAxis',
|
|
320
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
321
|
+
axes: [
|
|
322
|
+
{
|
|
323
|
+
type: AxisType.FLAT,
|
|
324
|
+
column: mockColumn1,
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
type: AxisType.MERGED,
|
|
328
|
+
columns: [mockColumn2, mockColumn3],
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
334
|
+
|
|
335
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
336
|
+
expect(result).toHaveLength(3);
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
it('should extract columns from DUAL config', () => {
|
|
340
|
+
const dimension: ChartConfigDimension = {
|
|
341
|
+
key: 'yAxis',
|
|
342
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
343
|
+
axes: [
|
|
344
|
+
{
|
|
345
|
+
type: AxisType.DUAL,
|
|
346
|
+
primary: {
|
|
347
|
+
type: AxisType.FLAT,
|
|
348
|
+
column: mockColumn1,
|
|
349
|
+
},
|
|
350
|
+
secondary: {
|
|
351
|
+
type: AxisType.FLAT,
|
|
352
|
+
column: mockColumn2,
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
],
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
359
|
+
|
|
360
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
361
|
+
expect(result).toHaveLength(2);
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
it('should extract columns from complex nested config', () => {
|
|
365
|
+
const dimension: ChartConfigDimension = {
|
|
366
|
+
key: 'yAxis',
|
|
367
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
368
|
+
axes: [
|
|
369
|
+
{
|
|
370
|
+
type: AxisType.FLAT,
|
|
371
|
+
column: mockColumn1,
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
type: AxisType.DUAL,
|
|
375
|
+
primary: {
|
|
376
|
+
type: AxisType.MERGED,
|
|
377
|
+
columns: [mockColumn2, mockColumn3],
|
|
378
|
+
},
|
|
379
|
+
secondary: {
|
|
380
|
+
type: AxisType.FLAT,
|
|
381
|
+
column: mockColumn4,
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
388
|
+
|
|
389
|
+
expect(result).toEqual([
|
|
390
|
+
mockColumn1,
|
|
391
|
+
mockColumn2,
|
|
392
|
+
mockColumn3,
|
|
393
|
+
mockColumn4,
|
|
394
|
+
]);
|
|
395
|
+
expect(result).toHaveLength(4);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('should return empty array for AXIS_DRIVEN dimension with no configs', () => {
|
|
399
|
+
const dimension: ChartConfigDimension = {
|
|
400
|
+
key: 'yAxis',
|
|
401
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
402
|
+
axes: [],
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
406
|
+
|
|
407
|
+
expect(result).toEqual([]);
|
|
408
|
+
expect(result).toHaveLength(0);
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
it('should handle multiple MERGED configs correctly', () => {
|
|
412
|
+
const dimension: ChartConfigDimension = {
|
|
413
|
+
key: 'yAxis',
|
|
414
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
415
|
+
axes: [
|
|
416
|
+
{
|
|
417
|
+
type: AxisType.MERGED,
|
|
418
|
+
columns: [mockColumn1, mockColumn2],
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
type: AxisType.MERGED,
|
|
422
|
+
columns: [mockColumn3, mockColumn4],
|
|
423
|
+
},
|
|
424
|
+
],
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
const result = fetchQueryColumnsFromDimension(dimension);
|
|
428
|
+
|
|
429
|
+
expect(result).toEqual([
|
|
430
|
+
mockColumn1,
|
|
431
|
+
mockColumn2,
|
|
432
|
+
mockColumn3,
|
|
433
|
+
mockColumn4,
|
|
434
|
+
]);
|
|
435
|
+
expect(result).toHaveLength(4);
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
describe('fetchQueryColumns', () => {
|
|
441
|
+
const mockColumn1 = {
|
|
442
|
+
id: 'col1',
|
|
443
|
+
name: 'Column 1',
|
|
444
|
+
} as QueryColumn;
|
|
445
|
+
|
|
446
|
+
const mockColumn2 = {
|
|
447
|
+
id: 'col2',
|
|
448
|
+
name: 'Column 2',
|
|
449
|
+
} as QueryColumn;
|
|
450
|
+
|
|
451
|
+
const mockColumn3 = {
|
|
452
|
+
id: 'col3',
|
|
453
|
+
name: 'Column 3',
|
|
454
|
+
} as QueryColumn;
|
|
455
|
+
|
|
456
|
+
const mockColumn4 = {
|
|
457
|
+
id: 'col4',
|
|
458
|
+
name: 'Column 4',
|
|
459
|
+
} as QueryColumn;
|
|
460
|
+
|
|
461
|
+
describe('ColumnDrivenChartConfig', () => {
|
|
462
|
+
it('should return columns from single dimension', () => {
|
|
463
|
+
const chartConfig: ChartConfig = {
|
|
464
|
+
key: 'chart1',
|
|
465
|
+
dimensions: [
|
|
466
|
+
{
|
|
467
|
+
key: 'xAxis',
|
|
468
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
469
|
+
columns: [mockColumn1, mockColumn2],
|
|
470
|
+
},
|
|
471
|
+
],
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
const result = fetchQueryColumns(chartConfig);
|
|
475
|
+
|
|
476
|
+
expect(result).toEqual([mockColumn1, mockColumn2]);
|
|
477
|
+
expect(result).toHaveLength(2);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
it('should return columns from multiple dimensions', () => {
|
|
481
|
+
const chartConfig: ChartConfig = {
|
|
482
|
+
key: 'chart1',
|
|
483
|
+
dimensions: [
|
|
484
|
+
{
|
|
485
|
+
key: 'xAxis',
|
|
486
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
487
|
+
columns: [mockColumn1],
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
key: 'yAxis',
|
|
491
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
492
|
+
columns: [mockColumn2, mockColumn3],
|
|
493
|
+
},
|
|
494
|
+
],
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
const result = fetchQueryColumns(chartConfig);
|
|
498
|
+
|
|
499
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
500
|
+
expect(result).toHaveLength(3);
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it('should return empty array for chart config with no dimensions', () => {
|
|
504
|
+
const chartConfig: ChartConfig = {
|
|
505
|
+
key: 'chart1',
|
|
506
|
+
dimensions: [],
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
const result = fetchQueryColumns(chartConfig);
|
|
510
|
+
|
|
511
|
+
expect(result).toEqual([]);
|
|
512
|
+
expect(result).toHaveLength(0);
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
describe('ConfigDrivenChartConfig', () => {
|
|
517
|
+
it('should return columns from single dimension with FLAT config', () => {
|
|
518
|
+
const chartConfig: ChartConfig = {
|
|
519
|
+
key: 'chart1',
|
|
520
|
+
dimensions: [
|
|
521
|
+
{
|
|
522
|
+
key: 'xAxis',
|
|
523
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
524
|
+
axes: [
|
|
525
|
+
{
|
|
526
|
+
type: AxisType.FLAT,
|
|
527
|
+
column: mockColumn1,
|
|
528
|
+
},
|
|
529
|
+
],
|
|
530
|
+
},
|
|
531
|
+
],
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
const result = fetchQueryColumns(chartConfig);
|
|
535
|
+
|
|
536
|
+
expect(result).toEqual([mockColumn1]);
|
|
537
|
+
expect(result).toHaveLength(1);
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
it('should return columns from multiple dimensions with mixed configs', () => {
|
|
541
|
+
const chartConfig: ChartConfig = {
|
|
542
|
+
key: 'chart1',
|
|
543
|
+
dimensions: [
|
|
544
|
+
{
|
|
545
|
+
key: 'xAxis',
|
|
546
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
547
|
+
axes: [
|
|
548
|
+
{
|
|
549
|
+
type: AxisType.FLAT,
|
|
550
|
+
column: mockColumn1,
|
|
551
|
+
},
|
|
552
|
+
],
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
key: 'yAxis',
|
|
556
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
557
|
+
axes: [
|
|
558
|
+
{
|
|
559
|
+
type: AxisType.MERGED,
|
|
560
|
+
columns: [mockColumn2, mockColumn3],
|
|
561
|
+
},
|
|
562
|
+
],
|
|
563
|
+
},
|
|
564
|
+
],
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
const result = fetchQueryColumns(chartConfig);
|
|
568
|
+
|
|
569
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
570
|
+
expect(result).toHaveLength(3);
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
it('should return columns from DUAL dimension config', () => {
|
|
574
|
+
const chartConfig: ChartConfig = {
|
|
575
|
+
key: 'chart1',
|
|
576
|
+
dimensions: [
|
|
577
|
+
{
|
|
578
|
+
key: 'yAxis',
|
|
579
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
580
|
+
axes: [
|
|
581
|
+
{
|
|
582
|
+
type: AxisType.DUAL,
|
|
583
|
+
primary: {
|
|
584
|
+
type: AxisType.FLAT,
|
|
585
|
+
column: mockColumn1,
|
|
586
|
+
},
|
|
587
|
+
secondary: {
|
|
588
|
+
type: AxisType.MERGED,
|
|
589
|
+
columns: [mockColumn2, mockColumn3],
|
|
590
|
+
},
|
|
591
|
+
},
|
|
592
|
+
],
|
|
593
|
+
},
|
|
594
|
+
],
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
const result = fetchQueryColumns(chartConfig);
|
|
598
|
+
|
|
599
|
+
expect(result).toEqual([mockColumn1, mockColumn2, mockColumn3]);
|
|
600
|
+
expect(result).toHaveLength(3);
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
describe('Complex ChartConfig', () => {
|
|
605
|
+
it('should handle multiple ConfigDriven dimensions with complex nested structures', () => {
|
|
606
|
+
const chartConfig: ChartConfig = {
|
|
607
|
+
key: 'chart1',
|
|
608
|
+
dimensions: [
|
|
609
|
+
{
|
|
610
|
+
key: 'xAxis',
|
|
611
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
612
|
+
axes: [
|
|
613
|
+
{
|
|
614
|
+
type: AxisType.FLAT,
|
|
615
|
+
column: mockColumn1,
|
|
616
|
+
},
|
|
617
|
+
],
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
key: 'yAxis',
|
|
621
|
+
mode: ChartConfigMode.AXIS_DRIVEN,
|
|
622
|
+
axes: [
|
|
623
|
+
{
|
|
624
|
+
type: AxisType.MERGED,
|
|
625
|
+
columns: [
|
|
626
|
+
mockColumn2,
|
|
627
|
+
mockColumn3,
|
|
628
|
+
mockColumn4,
|
|
629
|
+
],
|
|
630
|
+
},
|
|
631
|
+
],
|
|
632
|
+
},
|
|
633
|
+
],
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
const result = fetchQueryColumns(chartConfig);
|
|
637
|
+
|
|
638
|
+
expect(result).toEqual([
|
|
639
|
+
mockColumn1,
|
|
640
|
+
mockColumn2,
|
|
641
|
+
mockColumn3,
|
|
642
|
+
mockColumn4,
|
|
643
|
+
]);
|
|
644
|
+
expect(result).toHaveLength(4);
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
it('should handle multiple ColumnDriven dimensions', () => {
|
|
648
|
+
const chartConfig: ChartConfig = {
|
|
649
|
+
key: 'chart1',
|
|
650
|
+
dimensions: [
|
|
651
|
+
{
|
|
652
|
+
key: 'xAxis',
|
|
653
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
654
|
+
columns: [mockColumn1],
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
key: 'yAxis',
|
|
658
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
659
|
+
columns: [mockColumn2, mockColumn3],
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
key: 'color',
|
|
663
|
+
mode: ChartConfigMode.COLUMN_DRIVEN,
|
|
664
|
+
columns: [mockColumn4],
|
|
665
|
+
},
|
|
666
|
+
],
|
|
667
|
+
};
|
|
668
|
+
|
|
669
|
+
const result = fetchQueryColumns(chartConfig);
|
|
670
|
+
|
|
671
|
+
expect(result).toEqual([
|
|
672
|
+
mockColumn1,
|
|
673
|
+
mockColumn2,
|
|
674
|
+
mockColumn3,
|
|
675
|
+
mockColumn4,
|
|
676
|
+
]);
|
|
677
|
+
expect(result).toHaveLength(4);
|
|
678
|
+
});
|
|
679
|
+
});
|
|
680
|
+
});
|