@quillsql/react 2.8.5 → 2.8.6
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/AddToDashboardModal.js +146 -180
- package/dist/BarList.js +36 -43
- package/dist/Chart.js +99 -131
- package/dist/ChartBuilder.js +80 -88
- package/dist/ChartEditor.js +14 -20
- package/dist/Context.js +52 -56
- package/dist/Dashboard.d.ts.map +1 -1
- package/dist/Dashboard.js +246 -305
- package/dist/DateRangePicker/Calendar.js +41 -45
- package/dist/DateRangePicker/DateRangePicker.js +32 -60
- package/dist/DateRangePicker/DateRangePickerButton.js +14 -16
- package/dist/DateRangePicker/dateRangePickerUtils.d.ts +6 -0
- package/dist/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/DateRangePicker/dateRangePickerUtils.js +89 -89
- package/dist/DateRangePicker/index.js +1 -8
- package/dist/PieChart.js +35 -69
- package/dist/QuillProvider.js +4 -6
- package/dist/ReportBuilder.js +120 -128
- package/dist/SQLEditor.js +56 -64
- package/dist/Table.d.ts +2 -1
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +64 -68
- package/dist/TableChart.js +17 -44
- package/dist/assets/ArrowDownHeadIcon.js +3 -5
- package/dist/assets/ArrowDownIcon.js +3 -5
- package/dist/assets/ArrowDownRightIcon.js +3 -5
- package/dist/assets/ArrowLeftHeadIcon.js +3 -5
- package/dist/assets/ArrowRightHeadIcon.js +3 -5
- package/dist/assets/ArrowRightIcon.js +3 -5
- package/dist/assets/ArrowUpHeadIcon.js +3 -5
- package/dist/assets/ArrowUpIcon.js +3 -5
- package/dist/assets/ArrowUpRightIcon.js +3 -5
- package/dist/assets/CalendarIcon.js +3 -5
- package/dist/assets/CalendarNormalIcon.js +3 -5
- package/dist/assets/DoubleArrowLeftHeadIcon.js +3 -5
- package/dist/assets/DoubleArrowRightHeadIcon.js +3 -5
- package/dist/assets/ExclamationFilledIcon.js +3 -5
- package/dist/assets/FilterIcon.js +3 -5
- package/dist/assets/LoadingSpinner.js +3 -5
- package/dist/assets/RefreshIcon.js +3 -5
- package/dist/assets/SearchIcon.js +3 -5
- package/dist/assets/UpLeftArrowsIcon.js +3 -5
- package/dist/assets/XCircleIcon.js +3 -5
- package/dist/assets/XIcon.js +3 -5
- package/dist/assets/index.js +21 -48
- package/dist/components/BigModal/BigModal.js +13 -38
- package/dist/components/Dropdown/Dropdown.js +24 -52
- package/dist/components/Dropdown/DropdownItem.js +9 -34
- package/dist/components/Dropdown/index.js +2 -10
- package/dist/components/Modal/Modal.js +13 -38
- package/dist/components/Modal/index.js +1 -8
- package/dist/components/QuillCard.js +8 -12
- package/dist/components/SqlTextEditor.d.ts +7 -0
- package/dist/components/SqlTextEditor.d.ts.map +1 -0
- package/dist/components/SqlTextEditor.js +14 -0
- package/dist/components/UiComponents.js +37 -50
- package/dist/components/selectUtils.js +6 -16
- package/dist/contexts/BaseColorContext.js +3 -5
- package/dist/contexts/HoveredValueContext.js +3 -5
- package/dist/contexts/RootStylesContext.js +3 -5
- package/dist/contexts/SelectedValueContext.js +3 -5
- package/dist/contexts/index.js +4 -14
- package/dist/hooks/index.js +4 -14
- package/dist/hooks/useDashboard.d.ts +7 -0
- package/dist/hooks/useDashboard.d.ts.map +1 -0
- package/dist/hooks/useDashboard.js +48 -0
- package/dist/hooks/useInternalState.js +3 -5
- package/dist/hooks/useOnClickOutside.js +3 -5
- package/dist/hooks/useOnWindowResize.js +4 -6
- package/dist/hooks/useQuill.js +11 -15
- package/dist/hooks/useSelectOnKeyDown.js +4 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -28
- package/dist/internals/ReportBuilder/PivotList.js +14 -19
- package/dist/internals/ReportBuilder/PivotModal.js +84 -91
- package/dist/internals/ReportBuilder/PivotModal.spec.js +70 -72
- package/dist/lib/font.js +2 -5
- package/dist/lib/index.js +3 -19
- package/dist/lib/inputTypes.js +1 -2
- package/dist/lib/utils.js +8 -18
- package/dist/utils/aggregate.js +28 -34
- package/dist/utils/colorToHex.js +1 -4
- package/dist/utils/dataFetcher.js +2 -7
- package/dist/utils/downloadCSV.js +1 -5
- package/package.json +2 -1
package/dist/Chart.js
CHANGED
|
@@ -1,48 +1,19 @@
|
|
|
1
|
-
|
|
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
|
-
exports.ChartTooltipRow = exports.ChartTooltipFrame = exports.valueFormatter = void 0;
|
|
30
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
31
2
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
32
3
|
// @ts-nocheck
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
4
|
+
import { useState, useEffect, useContext, useMemo } from 'react';
|
|
5
|
+
import { aggregate } from './utils/aggregate';
|
|
6
|
+
import { getPostgresBasicType } from './ReportBuilder';
|
|
7
|
+
import { Area, CartesianGrid, ComposedChart as ReChartsAreaChart, ResponsiveContainer, Tooltip, XAxis, YAxis, Bar, BarChart as ReChartsBarChart, } from 'recharts';
|
|
8
|
+
import { differenceInHours, endOfWeek, format, isValid, startOfWeek, } from 'date-fns';
|
|
9
|
+
import { utcToZonedTime } from 'date-fns-tz';
|
|
10
|
+
import BarList from './BarList';
|
|
11
|
+
import PieChart, { findComplementaryAndAnalogousColors } from './PieChart';
|
|
12
|
+
import { ClientContext, DashboardContext, ThemeContext, DashboardFiltersContext, DateFilterContext, } from './Context';
|
|
13
|
+
import { SpecialTable } from './Table';
|
|
14
|
+
import { getData } from './utils/dataFetcher';
|
|
15
|
+
import { generatePivotTable, generatePivotTableYAxis, } from './internals/ReportBuilder/PivotModal';
|
|
16
|
+
import { COLOR_TO_HEX } from './utils/colorToHex';
|
|
46
17
|
const colorValues = [
|
|
47
18
|
'slate',
|
|
48
19
|
'silver',
|
|
@@ -82,8 +53,8 @@ function selectColor(element, colors, index) {
|
|
|
82
53
|
return color;
|
|
83
54
|
}
|
|
84
55
|
// If the element is a comparison, make the color grayscale.
|
|
85
|
-
if (Object.keys(
|
|
86
|
-
const colorHex =
|
|
56
|
+
if (Object.keys(COLOR_TO_HEX).includes(color)) {
|
|
57
|
+
const colorHex = COLOR_TO_HEX[color];
|
|
87
58
|
const rgbArray = hexToRGB(colorHex);
|
|
88
59
|
return toGrayscale(rgbArray);
|
|
89
60
|
}
|
|
@@ -159,7 +130,7 @@ function toGrayscale(rgba) {
|
|
|
159
130
|
// 'The Pragmatic Engineer': 1726,
|
|
160
131
|
// },
|
|
161
132
|
// ];
|
|
162
|
-
const valueFormatter = ({ value, field, fields }) => {
|
|
133
|
+
export const valueFormatter = ({ value, field, fields }) => {
|
|
163
134
|
if (value === undefined ||
|
|
164
135
|
value === null ||
|
|
165
136
|
field === undefined ||
|
|
@@ -241,32 +212,32 @@ const valueFormatter = ({ value, field, fields }) => {
|
|
|
241
212
|
formatType === 'yyyy' ||
|
|
242
213
|
formatType === 'wo, yyyy') {
|
|
243
214
|
const dateValue = new Date(value);
|
|
244
|
-
const utcDate =
|
|
245
|
-
if (!
|
|
215
|
+
const utcDate = utcToZonedTime(dateValue, 'UTC');
|
|
216
|
+
if (!isValid(utcDate)) {
|
|
246
217
|
return 'Invalid date';
|
|
247
218
|
}
|
|
248
219
|
if (formatType === 'yyyy') {
|
|
249
|
-
return
|
|
220
|
+
return format(utcDate, 'yyyy');
|
|
250
221
|
}
|
|
251
222
|
if (formatType === 'MMM_yyyy') {
|
|
252
|
-
return
|
|
223
|
+
return format(utcDate, 'MMM yyyy');
|
|
253
224
|
}
|
|
254
225
|
if (formatType === 'MMM_dd_yyyy') {
|
|
255
|
-
return
|
|
226
|
+
return format(utcDate, 'dd MMM yyyy');
|
|
256
227
|
}
|
|
257
228
|
if (formatType === 'hh_ap_pm') {
|
|
258
|
-
return
|
|
229
|
+
return format(utcDate, 'hh:mm aa');
|
|
259
230
|
}
|
|
260
231
|
if (formatType === 'MMM_dd-MMM_dd') {
|
|
261
|
-
const start =
|
|
262
|
-
const end =
|
|
232
|
+
const start = startOfWeek(utcDate, { weekStartsOn: 1 }); // Monday
|
|
233
|
+
const end = endOfWeek(utcDate, { weekStartsOn: 1 }); // Sunday
|
|
263
234
|
let formattedDate = '';
|
|
264
235
|
// Check if start and end are in the same month
|
|
265
|
-
if (
|
|
266
|
-
formattedDate = `${
|
|
236
|
+
if (format(start, 'MMM') === format(end, 'MMM')) {
|
|
237
|
+
formattedDate = `${format(start, 'MMM dd')} - ${format(end, 'dd')}`;
|
|
267
238
|
}
|
|
268
239
|
else {
|
|
269
|
-
formattedDate = `${
|
|
240
|
+
formattedDate = `${format(start, 'MMM dd')} - ${format(end, 'MMM dd')}`;
|
|
270
241
|
}
|
|
271
242
|
return formattedDate;
|
|
272
243
|
}
|
|
@@ -292,7 +263,7 @@ const valueFormatter = ({ value, field, fields }) => {
|
|
|
292
263
|
}
|
|
293
264
|
if (formatType === 'MMM_dd_hh:mm_ap_pm') {
|
|
294
265
|
const formatStr = utcDate.getMinutes() === 0 ? 'MMM do h a' : 'MMM do h:mm a';
|
|
295
|
-
let formattedTime =
|
|
266
|
+
let formattedTime = format(utcDate, formatStr);
|
|
296
267
|
formattedTime =
|
|
297
268
|
formattedTime.slice(0, -2) + formattedTime.slice(-2).toLowerCase();
|
|
298
269
|
return formattedTime;
|
|
@@ -309,7 +280,6 @@ const valueFormatter = ({ value, field, fields }) => {
|
|
|
309
280
|
}
|
|
310
281
|
return value.toString();
|
|
311
282
|
};
|
|
312
|
-
exports.valueFormatter = valueFormatter;
|
|
313
283
|
const yAxisFields = [
|
|
314
284
|
{ field: 'avg_days', label: 'average days' },
|
|
315
285
|
{ field: 'median_days', label: 'median days' },
|
|
@@ -318,7 +288,7 @@ const labelFormatter = (name) => {
|
|
|
318
288
|
// return yAxisFields.filter(elem => elem.field === name)[0].label;
|
|
319
289
|
return name;
|
|
320
290
|
};
|
|
321
|
-
const ChartTooltipFrame = ({ children, theme, }) => ((
|
|
291
|
+
export const ChartTooltipFrame = ({ children, theme, }) => (_jsx("div", { style: {
|
|
322
292
|
borderStyle: 'solid',
|
|
323
293
|
borderColor: theme?.borderColor || '#E5E7EB',
|
|
324
294
|
overflow: 'hidden',
|
|
@@ -327,8 +297,7 @@ const ChartTooltipFrame = ({ children, theme, }) => ((0, jsx_runtime_1.jsx)("div
|
|
|
327
297
|
borderRadius: '6px',
|
|
328
298
|
boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
|
|
329
299
|
}, children: children }));
|
|
330
|
-
|
|
331
|
-
const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
300
|
+
export const ChartTooltipRow = ({ value, name, color, theme, }) => (_jsxs("div", { style: {
|
|
332
301
|
marginRight: '24px',
|
|
333
302
|
display: 'flex',
|
|
334
303
|
alignItems: 'center',
|
|
@@ -336,13 +305,13 @@ const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.j
|
|
|
336
305
|
width: '100%',
|
|
337
306
|
paddingTop: 2,
|
|
338
307
|
paddingBottom: 2,
|
|
339
|
-
}, children: [(
|
|
308
|
+
}, children: [_jsxs("div", {
|
|
340
309
|
// className="qq-flex qq-items-center qq-space-x-2"
|
|
341
310
|
style: {
|
|
342
311
|
// marginLeft: '0.5rem',
|
|
343
312
|
display: 'flex',
|
|
344
313
|
alignItems: 'center',
|
|
345
|
-
}, children: [(
|
|
314
|
+
}, children: [_jsx("span", { style: {
|
|
346
315
|
background: color,
|
|
347
316
|
borderWidth: 2,
|
|
348
317
|
borderStyle: 'solid',
|
|
@@ -353,7 +322,7 @@ const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.j
|
|
|
353
322
|
borderRadius: 100,
|
|
354
323
|
marginRight: 6,
|
|
355
324
|
boxSizing: 'border-box',
|
|
356
|
-
} }), (
|
|
325
|
+
} }), _jsx("p", {
|
|
357
326
|
// className={twMerge(
|
|
358
327
|
// 'font-medium tabular-nums text-right whitespace-nowrap',
|
|
359
328
|
// 'text-[#212121] !important'
|
|
@@ -365,7 +334,7 @@ const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.j
|
|
|
365
334
|
color: theme?.primaryTextColor,
|
|
366
335
|
fontSize: theme?.fontSizeSmall || '14px',
|
|
367
336
|
fontWeight: theme?.fontWeightMedium || '500',
|
|
368
|
-
}, children: value })] }), (
|
|
337
|
+
}, children: value })] }), _jsx("p", { style: {
|
|
369
338
|
marginTop: 0,
|
|
370
339
|
marginBottom: 0,
|
|
371
340
|
fontFamily: theme?.fontFamily,
|
|
@@ -377,11 +346,10 @@ const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.j
|
|
|
377
346
|
fontSize: theme?.fontSizeSmall || '14px',
|
|
378
347
|
fontWeight: theme?.fontWeightNormal || '400',
|
|
379
348
|
}, children: name })] }));
|
|
380
|
-
exports.ChartTooltipRow = ChartTooltipRow;
|
|
381
349
|
const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter, dateFormatter, theme, }) => {
|
|
382
350
|
if (active && payload) {
|
|
383
351
|
if (label2) {
|
|
384
|
-
return ((
|
|
352
|
+
return (_jsx(ChartTooltipFrame, { theme: theme, children: payload.map(({ value, name }, idx) => (_jsxs(_Fragment, { children: [idx === 0 && (_jsx("div", { style: {
|
|
385
353
|
borderStyle: 'solid',
|
|
386
354
|
borderBottomColor: theme?.borderColor || '#E5E7EB',
|
|
387
355
|
background: theme?.backgroundColor || 'white',
|
|
@@ -395,7 +363,7 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
395
363
|
paddingRight: '16px',
|
|
396
364
|
paddingTop: '8px',
|
|
397
365
|
paddingBottom: '8px',
|
|
398
|
-
}, children: (
|
|
366
|
+
}, children: _jsx("p", { style: {
|
|
399
367
|
textAlign: 'left',
|
|
400
368
|
marginTop: 0,
|
|
401
369
|
marginBottom: 0,
|
|
@@ -405,7 +373,7 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
405
373
|
fontWeight: theme?.boldFontWeight || '500',
|
|
406
374
|
paddingTop: 2,
|
|
407
375
|
paddingBottom: 2,
|
|
408
|
-
}, children: labelFormatter(name) }) })), (
|
|
376
|
+
}, children: labelFormatter(name) }) })), _jsx("div", {
|
|
409
377
|
// className="qq-px-4 qq-space-y-1 qq-py-2 qq-px-4"
|
|
410
378
|
style: {
|
|
411
379
|
paddingRight: '16px',
|
|
@@ -413,18 +381,18 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
413
381
|
paddingTop: idx === 0 && '8px',
|
|
414
382
|
paddingBottom: '8px',
|
|
415
383
|
// marginTop: '0.25rem',
|
|
416
|
-
}, children: (
|
|
384
|
+
}, children: _jsx(ChartTooltipRow, { name: valueFormatter(value), value: !isNaN(new Date(idx === 0 ? label : label2)) &&
|
|
417
385
|
dateFormatter
|
|
418
386
|
? dateFormatter(idx === 0 ? label : label2)
|
|
419
387
|
: !isNaN(new Date(idx === 0 ? label : label2))
|
|
420
|
-
?
|
|
388
|
+
? format(new Date(idx === 0 ? label : label2), 'MMM yyyy')
|
|
421
389
|
: idx === 0
|
|
422
390
|
? label
|
|
423
391
|
: label2,
|
|
424
392
|
// color={categoryColors.get(name) ?? BaseColors.Blue}
|
|
425
393
|
color: colors[idx], theme: theme }, `id-${idx}`) })] }))) }));
|
|
426
394
|
}
|
|
427
|
-
return ((
|
|
395
|
+
return (_jsxs(ChartTooltipFrame, { theme: theme, children: [_jsx("div", { style: {
|
|
428
396
|
borderStyle: 'solid',
|
|
429
397
|
borderBottomColor: theme?.borderColor || '#E5E7EB',
|
|
430
398
|
background: theme?.backgroundColor || 'white',
|
|
@@ -438,7 +406,7 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
438
406
|
paddingRight: '16px',
|
|
439
407
|
paddingTop: '8px',
|
|
440
408
|
paddingBottom: '8px',
|
|
441
|
-
}, children: (
|
|
409
|
+
}, children: _jsx("p", { style: {
|
|
442
410
|
textAlign: 'left',
|
|
443
411
|
marginTop: 0,
|
|
444
412
|
marginBottom: 0,
|
|
@@ -451,8 +419,8 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
451
419
|
}, children: !isNaN(new Date(label)) && dateFormatter
|
|
452
420
|
? dateFormatter(label)
|
|
453
421
|
: !isNaN(new Date(label))
|
|
454
|
-
?
|
|
455
|
-
: label }) }), (
|
|
422
|
+
? format(new Date(label), 'MMM yyyy')
|
|
423
|
+
: label }) }), _jsx("div", {
|
|
456
424
|
// className="qq-px-4 qq-space-y-1 qq-py-2 qq-px-4"
|
|
457
425
|
style: {
|
|
458
426
|
paddingRight: '16px',
|
|
@@ -460,7 +428,7 @@ const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter,
|
|
|
460
428
|
paddingTop: '8px',
|
|
461
429
|
paddingBottom: '8px',
|
|
462
430
|
// marginTop: '0.25rem',
|
|
463
|
-
}, children: payload.map(({ value, name }, idx) => ((
|
|
431
|
+
}, children: payload.map(({ value, name }, idx) => (_jsx(ChartTooltipRow, { value: valueFormatter(value), name: labelFormatter(name),
|
|
464
432
|
// color={categoryColors.get(name) ?? BaseColors.Blue}
|
|
465
433
|
color: colors[idx], theme: theme }, `id-${idx}`))) })] }));
|
|
466
434
|
}
|
|
@@ -478,7 +446,7 @@ function isDate(str) {
|
|
|
478
446
|
return !isNaN(Date.parse(str));
|
|
479
447
|
}
|
|
480
448
|
function areDatesNearby(dateStr1, dateStr2) {
|
|
481
|
-
return Math.abs(
|
|
449
|
+
return Math.abs(differenceInHours(dateStr1, dateStr2)) < 24;
|
|
482
450
|
}
|
|
483
451
|
function isEquivalent(filters1, filters2) {
|
|
484
452
|
if (Object.keys(filters2).length !== Object.keys(filters1).length) {
|
|
@@ -522,9 +490,9 @@ function didFiltersChange(dashboardItem, filters) {
|
|
|
522
490
|
const Chart = ({ chartId, config, colors, containerStyle, query,
|
|
523
491
|
//chartFilters
|
|
524
492
|
SelectComponent, DatePickerComponent, }) => {
|
|
525
|
-
const { dateFilter, setDateFilter } =
|
|
526
|
-
const { dispatch, dashboard } =
|
|
527
|
-
const { dashboardFilters } =
|
|
493
|
+
const { dateFilter, setDateFilter } = useContext(DateFilterContext);
|
|
494
|
+
const { dispatch, dashboard } = useContext(DashboardContext);
|
|
495
|
+
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
528
496
|
// const [chartFilters, setChartFilters] = useState({
|
|
529
497
|
// chart_filter: {
|
|
530
498
|
// table: 'transactions',
|
|
@@ -542,16 +510,16 @@ SelectComponent, DatePickerComponent, }) => {
|
|
|
542
510
|
// ],
|
|
543
511
|
// },
|
|
544
512
|
// });
|
|
545
|
-
const [client, _] =
|
|
546
|
-
const [theme] =
|
|
547
|
-
const chartColors =
|
|
513
|
+
const [client, _] = useContext(ClientContext);
|
|
514
|
+
const [theme] = useContext(ThemeContext);
|
|
515
|
+
const chartColors = useMemo(() => {
|
|
548
516
|
return colors?.length
|
|
549
517
|
? colors
|
|
550
518
|
: theme && theme.chartColors.length
|
|
551
519
|
? theme.chartColors
|
|
552
520
|
: ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
|
|
553
521
|
}, [colors]);
|
|
554
|
-
return ((
|
|
522
|
+
return (_jsx(ChartUpdater, { config: config, dispatch: dispatch, dashboard: dashboard, chartId: chartId, containerStyle: containerStyle, colors: chartColors, client: client, theme: theme,
|
|
555
523
|
// isDateFilter={dateFilter}
|
|
556
524
|
dateFilter: dateFilter, dashboardFilters: dashboardFilters,
|
|
557
525
|
// chartFilters={chartFilters}
|
|
@@ -565,10 +533,10 @@ dashboardFilters,
|
|
|
565
533
|
// chartFilters,
|
|
566
534
|
// setChartFilters,
|
|
567
535
|
query, SelectComponent, DatePickerComponent, }) => {
|
|
568
|
-
const [loading, setLoading] =
|
|
569
|
-
const [isComparison, setIsComparison] =
|
|
570
|
-
const [bucketData, setBucketData] =
|
|
571
|
-
|
|
536
|
+
const [loading, setLoading] = useState(false);
|
|
537
|
+
const [isComparison, setIsComparison] = useState(false);
|
|
538
|
+
const [bucketData, setBucketData] = useState(null);
|
|
539
|
+
useEffect(() => {
|
|
572
540
|
let isSubscribed = true;
|
|
573
541
|
async function getChartOptions() {
|
|
574
542
|
if (dashboard[chartId] &&
|
|
@@ -598,7 +566,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
598
566
|
id: chartId,
|
|
599
567
|
filters: [...Object.values(dashboardFilters)],
|
|
600
568
|
};
|
|
601
|
-
const resp = await
|
|
569
|
+
const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody);
|
|
602
570
|
if (resp) {
|
|
603
571
|
setLoading(false);
|
|
604
572
|
setIsComparison(!!resp.comparisonRows);
|
|
@@ -640,7 +608,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
640
608
|
isSubscribed = false;
|
|
641
609
|
};
|
|
642
610
|
}, [dashboardFilters, client, chartId]);
|
|
643
|
-
|
|
611
|
+
useEffect(() => {
|
|
644
612
|
if (!dashboardFilters ||
|
|
645
613
|
!chartId ||
|
|
646
614
|
!dashboard[chartId] ||
|
|
@@ -650,7 +618,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
650
618
|
}
|
|
651
619
|
const dateFilter = Object.values(dashboardFilters).find(filter => filter.filterType == 'date_range');
|
|
652
620
|
if (dateFilter && dashboard[chartId].rows.length) {
|
|
653
|
-
const aggregatedObj =
|
|
621
|
+
const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, dateFilter);
|
|
654
622
|
setBucketData({
|
|
655
623
|
name: dashboard[chartId].name,
|
|
656
624
|
xAxisFormat: aggregatedObj.xAxisFormat,
|
|
@@ -660,10 +628,10 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
660
628
|
});
|
|
661
629
|
}
|
|
662
630
|
const stringFilters = dashboard[chartId].buckets.filter(bucket => {
|
|
663
|
-
return (
|
|
631
|
+
return (getPostgresBasicType(dashboard[chartId].fields.find(field => field.name === bucket.field)) === 'string');
|
|
664
632
|
});
|
|
665
633
|
if (stringFilters.length && dashboard[chartId].rows.length) {
|
|
666
|
-
const aggregatedObj =
|
|
634
|
+
const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, null);
|
|
667
635
|
setBucketData({
|
|
668
636
|
name: dashboard[chartId].name,
|
|
669
637
|
xAxisFormat: aggregatedObj.xAxisFormat,
|
|
@@ -698,16 +666,16 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
698
666
|
// }
|
|
699
667
|
// };
|
|
700
668
|
const dateFilter = Object.values(dashboardFilters).find(filter => filter.filterType == 'date_range');
|
|
701
|
-
const pivotTable =
|
|
669
|
+
const pivotTable = useMemo(() => {
|
|
702
670
|
const pivot = dashboard[chartId]?.pivot || config?.pivot;
|
|
703
671
|
const data = dashboard[chartId] ? dashboard[chartId] : config;
|
|
704
672
|
return pivot && data?.rows
|
|
705
|
-
?
|
|
673
|
+
? generatePivotTable(pivot, data.rows, dateFilter?.startDate
|
|
706
674
|
? [dateFilter?.startDate, dateFilter?.endDate, null]
|
|
707
675
|
: [null, null, null])
|
|
708
676
|
: null;
|
|
709
677
|
}, [dashboard, chartId, config, dateFilter]);
|
|
710
|
-
const pivotTableYAxis =
|
|
678
|
+
const pivotTableYAxis = useMemo(() => {
|
|
711
679
|
if (!pivotTable) {
|
|
712
680
|
return null;
|
|
713
681
|
}
|
|
@@ -716,11 +684,11 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
716
684
|
? config.yAxisFields
|
|
717
685
|
: dashboard[chartId]?.yAxisFields;
|
|
718
686
|
return yAxisFields
|
|
719
|
-
?
|
|
687
|
+
? generatePivotTableYAxis(pivot, pivotTable.columns, yAxisFields?.[0]?.format)
|
|
720
688
|
: null;
|
|
721
689
|
}, [pivotTable]);
|
|
722
690
|
if (!config && (!dashboard[chartId] || loading)) {
|
|
723
|
-
return ((
|
|
691
|
+
return (_jsx("div", {
|
|
724
692
|
// className="flex flex-col flex-1 h-[100%]"
|
|
725
693
|
style: {
|
|
726
694
|
...containerStyle,
|
|
@@ -731,13 +699,13 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
731
699
|
// display: 'flex',
|
|
732
700
|
// flexDirection: 'column',
|
|
733
701
|
// flex: 1,
|
|
734
|
-
}, children: (
|
|
702
|
+
}, children: _jsx("div", { style: {
|
|
735
703
|
height: containerStyle?.height,
|
|
736
704
|
width: '100%',
|
|
737
705
|
boxSizing: 'content-box',
|
|
738
706
|
borderRadius: 8,
|
|
739
707
|
overflow: 'hidden',
|
|
740
|
-
}, children: (
|
|
708
|
+
}, children: _jsxs("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", children: [_jsx("rect", { width: "100%", height: "100%", fill: theme?.loadingStateBackgroundColor || '#F9F9FA' }), _jsx("defs", { fill: theme?.loadingStateBackgroundColor || '#F9F9FA', children: _jsxs("linearGradient", { id: "skeletonGradient", x1: "0%", y1: "0%", x2: "10%", y2: "0%", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(255,255,255,0)" }), _jsx("stop", { offset: "50%", stopColor: "#FEFEFE" }), _jsx("stop", { offset: "100%", stopColor: "rgba(255,255,255,0)" }), _jsx("animate", { attributeName: "x1", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }), _jsx("animate", { attributeName: "x2", from: "-50%", to: "150%", dur: "2s", repeatCount: "indefinite" })] }) }), _jsx("rect", { width: "50%", height: "100%", fill: "url(#skeletonGradient)", children: _jsx("animate", { attributeName: "x", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }) })] }) }) }));
|
|
741
709
|
}
|
|
742
710
|
if (config?.chartType === 'pie' || dashboard[chartId]?.chartType === 'pie') {
|
|
743
711
|
const rows = pivotTable
|
|
@@ -753,7 +721,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
753
721
|
const xAxisField = config
|
|
754
722
|
? config.xAxisField
|
|
755
723
|
: dashboard[chartId].xAxisField;
|
|
756
|
-
return ((
|
|
724
|
+
return (_jsx(_Fragment, { children: _jsx(PieChart
|
|
757
725
|
// @ts-ignore
|
|
758
726
|
, {
|
|
759
727
|
// @ts-ignore
|
|
@@ -768,12 +736,12 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
768
736
|
if (config?.chartType === 'table' ||
|
|
769
737
|
dashboard[chartId]?.chartType === 'table') {
|
|
770
738
|
const data = dashboard[chartId] ? dashboard[chartId] : config;
|
|
771
|
-
return ((
|
|
739
|
+
return (_jsx(_Fragment, { children: _jsx(SpecialTable, { rows: pivotTable?.rows || data.rows, columns: pivotTable?.columns || data.columns || data.yAxisFields, height: '400px', containerStyle: {
|
|
772
740
|
...containerStyle,
|
|
773
741
|
}, theme: theme, isTableChart: true, name: data.name }) }));
|
|
774
742
|
}
|
|
775
743
|
if (config?.chartType === 'bar' || dashboard[chartId]?.chartType === 'bar') {
|
|
776
|
-
return ((
|
|
744
|
+
return (_jsx(_Fragment, { children: _jsx(BarList, { data: pivotTable
|
|
777
745
|
? pivotTable.rows
|
|
778
746
|
: config
|
|
779
747
|
? (config.bucketedRows &&
|
|
@@ -811,7 +779,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
811
779
|
}
|
|
812
780
|
if (config?.chartType === 'column' ||
|
|
813
781
|
dashboard[chartId]?.chartType === 'column') {
|
|
814
|
-
return ((
|
|
782
|
+
return (_jsx(_Fragment, { children: _jsx(BarChart, { colors: colors, theme: theme, yAxisFields: yAxisFields,
|
|
815
783
|
// @ts-ignore
|
|
816
784
|
data: pivotTable
|
|
817
785
|
? pivotTable.rows
|
|
@@ -839,7 +807,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
839
807
|
if (config?.chartType === 'metric' ||
|
|
840
808
|
dashboard[chartId]?.chartType === 'metric') {
|
|
841
809
|
const data = dashboard[chartId] ? dashboard[chartId] : config;
|
|
842
|
-
return ((
|
|
810
|
+
return (_jsx(_Fragment, { children: _jsx("div", { style: {
|
|
843
811
|
fontFamily: theme?.fontFamily,
|
|
844
812
|
fontSize: 32,
|
|
845
813
|
color: theme?.primaryTextColor,
|
|
@@ -859,7 +827,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
859
827
|
display: 'flex',
|
|
860
828
|
flexDirection: 'column',
|
|
861
829
|
}, children: data.rows.length > 0 &&
|
|
862
|
-
|
|
830
|
+
valueFormatter({
|
|
863
831
|
value: data.rows[0][data.xAxisField],
|
|
864
832
|
field: data.xAxisField,
|
|
865
833
|
fields: [
|
|
@@ -870,7 +838,7 @@ query, SelectComponent, DatePickerComponent, }) => {
|
|
|
870
838
|
],
|
|
871
839
|
}) }) }));
|
|
872
840
|
}
|
|
873
|
-
return ((
|
|
841
|
+
return (_jsx(_Fragment, { children: _jsx(LineChart, { colors: colors, yAxisFields: yAxisFields,
|
|
874
842
|
// @ts-ignore
|
|
875
843
|
data: pivotTable
|
|
876
844
|
? pivotTable.rows
|
|
@@ -953,12 +921,12 @@ const CustomizedTick = ({ x, y, payload, theme, }) => {
|
|
|
953
921
|
const maxLength = 10;
|
|
954
922
|
const value = payload.value;
|
|
955
923
|
const truncatedValue = value.length > maxLength ? value.substring(0, maxLength) + '...' : value;
|
|
956
|
-
return ((
|
|
924
|
+
return (_jsx("text", { xlinkTitle: value, fill: theme?.chartLabelColor, fontSize: 12, x: x, y: y + 15, width: 30, textAnchor: "middle", children: truncatedValue }));
|
|
957
925
|
};
|
|
958
926
|
function BarChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxisLabel, xAxisFormat, theme, comparison, }) {
|
|
959
|
-
const newColors =
|
|
927
|
+
const newColors = findComplementaryAndAnalogousColors(colors[0], colors[1]);
|
|
960
928
|
if (!data || data.length === 0) {
|
|
961
|
-
return ((
|
|
929
|
+
return (_jsx("div", { style: {
|
|
962
930
|
display: 'flex',
|
|
963
931
|
flex: '1 0 auto',
|
|
964
932
|
height: '100%',
|
|
@@ -969,12 +937,12 @@ function BarChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxis
|
|
|
969
937
|
color: theme.secondaryTextColor,
|
|
970
938
|
}, children: "No results found for specified time period." }));
|
|
971
939
|
}
|
|
972
|
-
return ((
|
|
940
|
+
return (_jsx("div", { style: {
|
|
973
941
|
...containerStyle,
|
|
974
942
|
boxSizing: 'content-box',
|
|
975
|
-
}, children: (
|
|
943
|
+
}, children: _jsx(ResponsiveContainer, { width: "100%", height: '100%', children: _jsxs(ReChartsBarChart, { data: data,
|
|
976
944
|
// stackOffset={'none'}
|
|
977
|
-
layout: 'horizontal', children: [(
|
|
945
|
+
layout: 'horizontal', children: [_jsx(CartesianGrid, { strokeDasharray: "3 3", horizontal: true, vertical: false }), _jsx(YAxis
|
|
978
946
|
// width={56}
|
|
979
947
|
, {
|
|
980
948
|
// width={56}
|
|
@@ -986,11 +954,11 @@ function BarChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxis
|
|
|
986
954
|
tick: { transform: 'translate(-3, 0)' }, style: {
|
|
987
955
|
fontSize: '12px',
|
|
988
956
|
fontFamily: theme.chartLabelFontFamily,
|
|
989
|
-
}, tickFormatter: tick =>
|
|
957
|
+
}, tickFormatter: tick => valueFormatter({
|
|
990
958
|
value: tick,
|
|
991
959
|
field: yAxisFields[0].field || 'what',
|
|
992
960
|
fields: yAxisFields,
|
|
993
|
-
}) }), (
|
|
961
|
+
}) }), _jsx(XAxis, { hide: false, dataKey: xAxisField,
|
|
994
962
|
// interval="preserveStartEnd"
|
|
995
963
|
tick: { transform: 'translate(0, 6)' },
|
|
996
964
|
//padding between labels and axis
|
|
@@ -999,27 +967,27 @@ function BarChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxis
|
|
|
999
967
|
// TODO: generalize
|
|
1000
968
|
fontFamily: theme.chartLabelFontFamily,
|
|
1001
969
|
marginTop: '20px',
|
|
1002
|
-
}, tickLine: false, axisLine: false, tickFormatter: tick =>
|
|
970
|
+
}, tickLine: false, axisLine: false, tickFormatter: tick => valueFormatter({
|
|
1003
971
|
value: tick,
|
|
1004
972
|
field: xAxisField,
|
|
1005
973
|
fields: [{ field: xAxisField, format: xAxisFormat }],
|
|
1006
|
-
}) }), (
|
|
974
|
+
}) }), _jsx(Tooltip, { wrapperStyle: { outline: 'none', zIndex: 2 }, isAnimationActive: false, cursor: { fill: '#d1d5db', opacity: '0.15' }, content: ({ active, payload, label }) => {
|
|
1007
975
|
let label2;
|
|
1008
976
|
if (comparison &&
|
|
1009
977
|
payload?.length > 1 &&
|
|
1010
978
|
payload[0].payload[xAxisField + '2']) {
|
|
1011
979
|
label2 = payload[0].payload[xAxisField + '2'];
|
|
1012
980
|
}
|
|
1013
|
-
return ((
|
|
981
|
+
return (_jsx(ChartTooltip, { theme: theme, active: active, payload: payload, label: label, label2: label2, dateFormatter: value => valueFormatter({
|
|
1014
982
|
value,
|
|
1015
983
|
field: xAxisField,
|
|
1016
984
|
fields: [{ field: xAxisField, format: xAxisFormat }],
|
|
1017
|
-
}), valueFormatter: value =>
|
|
985
|
+
}), valueFormatter: value => valueFormatter({
|
|
1018
986
|
value,
|
|
1019
987
|
field: payload[0].dataKey,
|
|
1020
988
|
fields: yAxisFields,
|
|
1021
989
|
}), colors: colors }));
|
|
1022
|
-
}, position: { y: 0 } }), yAxisFields.map((elem, index) => ((
|
|
990
|
+
}, position: { y: 0 } }), yAxisFields.map((elem, index) => (_jsx(Bar, { name: elem.label, dataKey: elem.field, type: "linear",
|
|
1023
991
|
// stackId={stack || relative ? "a" : undefined}
|
|
1024
992
|
fill: selectColor(elem, colors, index),
|
|
1025
993
|
// barSize={20}
|
|
@@ -1038,7 +1006,7 @@ function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxi
|
|
|
1038
1006
|
return null;
|
|
1039
1007
|
}
|
|
1040
1008
|
if (!data || data.length === 0) {
|
|
1041
|
-
return ((
|
|
1009
|
+
return (_jsx("div", { style: {
|
|
1042
1010
|
display: 'flex',
|
|
1043
1011
|
flex: '1 0 auto',
|
|
1044
1012
|
height: '100%',
|
|
@@ -1049,7 +1017,7 @@ function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxi
|
|
|
1049
1017
|
color: theme.secondaryTextColor,
|
|
1050
1018
|
}, children: "No results found for specified time period." }));
|
|
1051
1019
|
}
|
|
1052
|
-
return ((
|
|
1020
|
+
return (_jsx("div", { style: { ...containerStyle, boxSizing: 'content-box' }, children: _jsx(ResponsiveContainer, { width: "100%", height: '100%', children: _jsxs(ReChartsAreaChart, { data: data, children: [_jsx(CartesianGrid, { strokeDasharray: "3 3", horizontal: true, vertical: false }), _jsx(XAxis
|
|
1053
1021
|
// hide={!showXAxis}
|
|
1054
1022
|
, {
|
|
1055
1023
|
// hide={!showXAxis}
|
|
@@ -1069,11 +1037,11 @@ function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxi
|
|
|
1069
1037
|
// interval="preserveStartEnd"
|
|
1070
1038
|
interval: "preserveStartEnd",
|
|
1071
1039
|
// interval={0}
|
|
1072
|
-
tickLine: false, axisLine: false, padding: { left: 10, right: 10 }, minTickGap: 5, tickFormatter: tick =>
|
|
1040
|
+
tickLine: false, axisLine: false, padding: { left: 10, right: 10 }, minTickGap: 5, tickFormatter: tick => valueFormatter({
|
|
1073
1041
|
value: tick,
|
|
1074
1042
|
field: xAxisField,
|
|
1075
1043
|
fields: [{ field: xAxisField, format: xAxisFormat }],
|
|
1076
|
-
}) }), (
|
|
1044
|
+
}) }), _jsx(YAxis
|
|
1077
1045
|
// textAnchor="left"
|
|
1078
1046
|
// tickMargin={11}
|
|
1079
1047
|
, {
|
|
@@ -1090,25 +1058,25 @@ function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxi
|
|
|
1090
1058
|
theme?.fontFamily ||
|
|
1091
1059
|
'Inter; Helvetica',
|
|
1092
1060
|
color: theme?.chartLabelColor || '#666666',
|
|
1093
|
-
}, tickFormatter: value =>
|
|
1061
|
+
}, tickFormatter: value => valueFormatter({
|
|
1094
1062
|
value,
|
|
1095
1063
|
field: yAxisFields[0].field,
|
|
1096
1064
|
fields: [
|
|
1097
1065
|
...yAxisFields,
|
|
1098
1066
|
{ field: xAxisField, format: xAxisFormat },
|
|
1099
1067
|
],
|
|
1100
|
-
}) }), (
|
|
1068
|
+
}) }), _jsx(Tooltip, { wrapperStyle: { outline: 'none' }, isAnimationActive: false, cursor: { stroke: '#d1d5db', strokeWidth: 1 }, content: ({ active, payload, label }) => {
|
|
1101
1069
|
let label2;
|
|
1102
1070
|
if (comparison &&
|
|
1103
1071
|
payload?.length > 1 &&
|
|
1104
1072
|
payload[0].payload[xAxisField + '2']) {
|
|
1105
1073
|
label2 = payload[0].payload[xAxisField + '2'];
|
|
1106
1074
|
}
|
|
1107
|
-
return ((
|
|
1075
|
+
return (_jsx(ChartTooltip, { active: active, payload: payload, label: label, label2: label2, dateFormatter: value => valueFormatter({
|
|
1108
1076
|
value,
|
|
1109
1077
|
field: xAxisField,
|
|
1110
1078
|
fields: [{ field: xAxisField, format: xAxisFormat }],
|
|
1111
|
-
}), valueFormatter: value =>
|
|
1079
|
+
}), valueFormatter: value => valueFormatter({
|
|
1112
1080
|
value,
|
|
1113
1081
|
field: payload[0].dataKey,
|
|
1114
1082
|
fields: [
|
|
@@ -1116,9 +1084,9 @@ function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxi
|
|
|
1116
1084
|
{ field: xAxisField, format: xAxisFormat },
|
|
1117
1085
|
],
|
|
1118
1086
|
}), colors: colors, theme: theme }));
|
|
1119
|
-
}, position: { y: 0 } }), yAxisFields.map((elem, index) => ((
|
|
1087
|
+
}, position: { y: 0 } }), yAxisFields.map((elem, index) => (_jsx("defs", { children: _jsxs("linearGradient", { id: `gradient${index}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "5%", stopColor: selectColor(elem, colors, index), stopOpacity: 0.4 }), _jsx("stop", { offset: "95%", stopColor: 'rgba(0,0,0,0)', stopOpacity: 0 })] }) }, `defs${elem.field + index}`))), yAxisFields.map((elem, index) => (_jsx(Area, { name: elem.label, type: "linear", dataKey: elem.field, stroke: selectColor(elem, colors, index),
|
|
1120
1088
|
// if hide area
|
|
1121
1089
|
// fill="transparent"
|
|
1122
1090
|
fill: `url(#gradient${index})`, strokeWidth: 2, dot: false, isAnimationActive: true }, elem.field)))] }) }) }));
|
|
1123
1091
|
}
|
|
1124
|
-
|
|
1092
|
+
export default Chart;
|