@quillsql/react 2.9.1 → 2.9.2

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 (309) hide show
  1. package/dist/AddToDashboardModal.d.ts +1 -0
  2. package/dist/AddToDashboardModal.d.ts.map +1 -1
  3. package/dist/AddToDashboardModal.js +152 -181
  4. package/dist/AddToDashboardModal.js.map +1 -1
  5. package/dist/BarList.d.ts +1 -0
  6. package/dist/BarList.js +36 -44
  7. package/dist/Chart.d.ts +5 -24
  8. package/dist/Chart.d.ts.map +1 -1
  9. package/dist/Chart.js +203 -802
  10. package/dist/Chart.js.map +1 -1
  11. package/dist/ChartBuilder.d.ts +1 -0
  12. package/dist/ChartBuilder.d.ts.map +1 -1
  13. package/dist/ChartBuilder.js +89 -91
  14. package/dist/ChartBuilder.js.map +1 -1
  15. package/dist/ChartEditor.d.ts +1 -0
  16. package/dist/ChartEditor.d.ts.map +1 -1
  17. package/dist/ChartEditor.js +23 -22
  18. package/dist/ChartEditor.js.map +1 -1
  19. package/dist/Context.d.ts +20 -0
  20. package/dist/Context.d.ts.map +1 -1
  21. package/dist/Context.js +81 -61
  22. package/dist/Context.js.map +1 -1
  23. package/dist/Dashboard.d.ts +4 -1
  24. package/dist/Dashboard.d.ts.map +1 -1
  25. package/dist/Dashboard.js +250 -251
  26. package/dist/Dashboard.js.map +1 -1
  27. package/dist/DateRangePicker/Calendar.d.ts +1 -0
  28. package/dist/DateRangePicker/Calendar.js +41 -46
  29. package/dist/DateRangePicker/DateRangePicker.d.ts +1 -0
  30. package/dist/DateRangePicker/DateRangePicker.js +32 -61
  31. package/dist/DateRangePicker/DateRangePickerButton.d.ts +1 -0
  32. package/dist/DateRangePicker/DateRangePickerButton.js +14 -17
  33. package/dist/DateRangePicker/dateRangePickerUtils.d.ts +1 -0
  34. package/dist/DateRangePicker/dateRangePickerUtils.js +76 -90
  35. package/dist/DateRangePicker/index.d.ts +1 -0
  36. package/dist/DateRangePicker/index.js +1 -9
  37. package/dist/PieChart.d.ts +1 -0
  38. package/dist/PieChart.js +35 -70
  39. package/dist/QuillProvider.d.ts +1 -0
  40. package/dist/QuillProvider.js +4 -7
  41. package/dist/ReportBuilder.d.ts +1 -0
  42. package/dist/ReportBuilder.js +120 -129
  43. package/dist/SQLEditor.d.ts +1 -0
  44. package/dist/SQLEditor.js +56 -65
  45. package/dist/SQLEditor.js.map +1 -1
  46. package/dist/Table.d.ts +1 -0
  47. package/dist/Table.d.ts.map +1 -1
  48. package/dist/Table.js +65 -65
  49. package/dist/Table.js.map +1 -1
  50. package/dist/TableChart.d.ts +1 -0
  51. package/dist/TableChart.js +17 -45
  52. package/dist/api/ServerClient.d.ts +30 -0
  53. package/dist/api/ServerClient.d.ts.map +1 -0
  54. package/dist/api/ServerClient.js +39 -0
  55. package/dist/api/ServerClient.js.map +1 -0
  56. package/dist/assets/ArrowDownHeadIcon.d.ts +1 -0
  57. package/dist/assets/ArrowDownHeadIcon.js +3 -6
  58. package/dist/assets/ArrowDownIcon.d.ts +1 -0
  59. package/dist/assets/ArrowDownIcon.js +3 -6
  60. package/dist/assets/ArrowDownRightIcon.d.ts +1 -0
  61. package/dist/assets/ArrowDownRightIcon.js +3 -6
  62. package/dist/assets/ArrowLeftHeadIcon.d.ts +1 -0
  63. package/dist/assets/ArrowLeftHeadIcon.js +3 -6
  64. package/dist/assets/ArrowRightHeadIcon.d.ts +1 -0
  65. package/dist/assets/ArrowRightHeadIcon.js +3 -6
  66. package/dist/assets/ArrowRightIcon.d.ts +1 -0
  67. package/dist/assets/ArrowRightIcon.js +3 -6
  68. package/dist/assets/ArrowUpHeadIcon.d.ts +1 -0
  69. package/dist/assets/ArrowUpHeadIcon.js +3 -6
  70. package/dist/assets/ArrowUpIcon.d.ts +1 -0
  71. package/dist/assets/ArrowUpIcon.js +3 -6
  72. package/dist/assets/ArrowUpRightIcon.d.ts +1 -0
  73. package/dist/assets/ArrowUpRightIcon.js +3 -6
  74. package/dist/assets/CalendarIcon.d.ts +1 -0
  75. package/dist/assets/CalendarIcon.js +3 -6
  76. package/dist/assets/CalendarNormalIcon.d.ts +1 -0
  77. package/dist/assets/CalendarNormalIcon.js +3 -6
  78. package/dist/assets/DoubleArrowLeftHeadIcon.d.ts +1 -0
  79. package/dist/assets/DoubleArrowLeftHeadIcon.js +3 -6
  80. package/dist/assets/DoubleArrowRightHeadIcon.d.ts +1 -0
  81. package/dist/assets/DoubleArrowRightHeadIcon.js +3 -6
  82. package/dist/assets/ExclamationFilledIcon.d.ts +1 -0
  83. package/dist/assets/ExclamationFilledIcon.js +3 -6
  84. package/dist/assets/FilterIcon.d.ts +1 -0
  85. package/dist/assets/FilterIcon.js +3 -6
  86. package/dist/assets/LoadingSpinner.d.ts +1 -0
  87. package/dist/assets/LoadingSpinner.js +3 -6
  88. package/dist/assets/RefreshIcon.d.ts +1 -0
  89. package/dist/assets/RefreshIcon.js +3 -6
  90. package/dist/assets/SearchIcon.d.ts +1 -0
  91. package/dist/assets/SearchIcon.js +3 -6
  92. package/dist/assets/UpLeftArrowsIcon.d.ts +1 -0
  93. package/dist/assets/UpLeftArrowsIcon.js +3 -6
  94. package/dist/assets/XCircleIcon.d.ts +1 -0
  95. package/dist/assets/XCircleIcon.js +3 -6
  96. package/dist/assets/XIcon.d.ts +1 -0
  97. package/dist/assets/XIcon.js +3 -6
  98. package/dist/assets/index.d.ts +1 -0
  99. package/dist/assets/index.js +21 -49
  100. package/dist/components/Banner/index.d.ts +1 -0
  101. package/dist/components/Banner/index.js +6 -10
  102. package/dist/components/BigModal/BigModal.d.ts +1 -0
  103. package/dist/components/BigModal/BigModal.js +13 -39
  104. package/dist/components/Chart/BarChart.d.ts +15 -0
  105. package/dist/components/Chart/BarChart.d.ts.map +1 -0
  106. package/dist/components/Chart/BarChart.js +57 -0
  107. package/dist/components/Chart/BarChart.js.map +1 -0
  108. package/dist/components/Chart/ChartTooltip.d.ts +29 -0
  109. package/dist/components/Chart/ChartTooltip.d.ts.map +1 -0
  110. package/dist/components/Chart/ChartTooltip.js +229 -0
  111. package/dist/components/Chart/ChartTooltip.js.map +1 -0
  112. package/dist/components/Chart/ChartTooltipFrame.d.ts +6 -0
  113. package/dist/components/Chart/ChartTooltipFrame.d.ts.map +1 -0
  114. package/dist/components/Chart/ChartTooltipFrame.js +12 -0
  115. package/dist/components/Chart/ChartTooltipFrame.js.map +1 -0
  116. package/dist/components/Chart/ChartTooltipGroup.d.ts +11 -0
  117. package/dist/components/Chart/ChartTooltipGroup.d.ts.map +1 -0
  118. package/dist/components/Chart/ChartTooltipGroup.js +23 -0
  119. package/dist/components/Chart/ChartTooltipGroup.js.map +1 -0
  120. package/dist/components/Chart/ChartTooltipRow.d.ts +8 -0
  121. package/dist/components/Chart/ChartTooltipRow.d.ts.map +1 -0
  122. package/dist/components/Chart/ChartTooltipRow.js +41 -0
  123. package/dist/components/Chart/ChartTooltipRow.js.map +1 -0
  124. package/dist/components/Chart/LineChart.d.ts +13 -0
  125. package/dist/components/Chart/LineChart.d.ts.map +1 -0
  126. package/dist/components/Chart/LineChart.js +68 -0
  127. package/dist/components/Chart/LineChart.js.map +1 -0
  128. package/dist/components/Dropdown/Dropdown.d.ts +1 -0
  129. package/dist/components/Dropdown/Dropdown.js +24 -53
  130. package/dist/components/Dropdown/DropdownItem.d.ts +1 -0
  131. package/dist/components/Dropdown/DropdownItem.js +9 -35
  132. package/dist/components/Dropdown/index.d.ts +1 -0
  133. package/dist/components/Dropdown/index.js +2 -11
  134. package/dist/components/Modal/Modal.d.ts +1 -0
  135. package/dist/components/Modal/Modal.js +13 -39
  136. package/dist/components/Modal/index.d.ts +1 -0
  137. package/dist/components/Modal/index.js +1 -9
  138. package/dist/components/QuillCard.d.ts +1 -0
  139. package/dist/components/QuillCard.js +8 -13
  140. package/dist/components/ReportBuilder/ColumnSelector.d.ts +24 -6
  141. package/dist/components/ReportBuilder/ColumnSelector.d.ts.map +1 -1
  142. package/dist/components/ReportBuilder/ColumnSelector.js +56 -8
  143. package/dist/components/ReportBuilder/ColumnSelector.js.map +1 -0
  144. package/dist/components/ReportBuilder/FiltersModal.d.ts +40 -0
  145. package/dist/components/ReportBuilder/FiltersModal.d.ts.map +1 -0
  146. package/dist/components/ReportBuilder/FiltersModal.js +273 -0
  147. package/dist/components/ReportBuilder/FiltersModal.js.map +1 -0
  148. package/dist/components/ReportBuilder/SortModal.d.ts +28 -0
  149. package/dist/components/ReportBuilder/SortModal.d.ts.map +1 -0
  150. package/dist/components/ReportBuilder/SortModal.js +41 -0
  151. package/dist/components/ReportBuilder/SortModal.js.map +1 -0
  152. package/dist/components/SqlTextEditor.d.ts +1 -0
  153. package/dist/components/SqlTextEditor.js +4 -11
  154. package/dist/components/UiComponents.d.ts +1 -0
  155. package/dist/components/UiComponents.js +37 -51
  156. package/dist/components/selectUtils.d.ts +1 -0
  157. package/dist/components/selectUtils.js +6 -17
  158. package/dist/contexts/BaseColorContext.d.ts +1 -0
  159. package/dist/contexts/BaseColorContext.js +3 -6
  160. package/dist/contexts/HoveredValueContext.d.ts +1 -0
  161. package/dist/contexts/HoveredValueContext.js +3 -6
  162. package/dist/contexts/RootStylesContext.d.ts +1 -0
  163. package/dist/contexts/RootStylesContext.js +3 -6
  164. package/dist/contexts/SelectedValueContext.d.ts +1 -0
  165. package/dist/contexts/SelectedValueContext.js +3 -6
  166. package/dist/contexts/index.d.ts +1 -0
  167. package/dist/contexts/index.js +4 -15
  168. package/dist/hooks/index.d.ts +1 -0
  169. package/dist/hooks/index.js +4 -15
  170. package/dist/hooks/useDashboard.d.ts +1 -0
  171. package/dist/hooks/useDashboard.js +10 -15
  172. package/dist/hooks/useInternalState.d.ts +1 -0
  173. package/dist/hooks/useInternalState.js +3 -6
  174. package/dist/hooks/useOnClickOutside.d.ts +1 -0
  175. package/dist/hooks/useOnClickOutside.js +3 -6
  176. package/dist/hooks/useOnWindowResize.d.ts +1 -0
  177. package/dist/hooks/useOnWindowResize.js +4 -7
  178. package/dist/hooks/useQuill.d.ts +3 -2
  179. package/dist/hooks/useQuill.d.ts.map +1 -1
  180. package/dist/hooks/useQuill.js +37 -28
  181. package/dist/hooks/useQuill.js.map +1 -1
  182. package/dist/hooks/useSelectOnKeyDown.d.ts +1 -0
  183. package/dist/hooks/useSelectOnKeyDown.js +4 -7
  184. package/dist/index.d.ts +1 -0
  185. package/dist/index.js +13 -33
  186. package/dist/internals/ReportBuilder/PivotList.d.ts +1 -0
  187. package/dist/internals/ReportBuilder/PivotList.js +14 -20
  188. package/dist/internals/ReportBuilder/PivotModal.d.ts +3 -2
  189. package/dist/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  190. package/dist/internals/ReportBuilder/PivotModal.js +280 -115
  191. package/dist/internals/ReportBuilder/PivotModal.js.map +1 -1
  192. package/dist/internals/ReportBuilder/PivotModal.spec.d.ts +1 -0
  193. package/dist/internals/ReportBuilder/PivotModal.spec.js +70 -73
  194. package/dist/lib/font.d.ts +1 -0
  195. package/dist/lib/font.js +2 -6
  196. package/dist/lib/index.d.ts +1 -0
  197. package/dist/lib/index.js +3 -20
  198. package/dist/lib/inputTypes.d.ts +1 -0
  199. package/dist/lib/inputTypes.js +1 -3
  200. package/dist/lib/utils.d.ts +1 -0
  201. package/dist/lib/utils.js +8 -19
  202. package/dist/test-data/tables.d.ts.map +1 -1
  203. package/dist/test-data/tables.js +27 -585
  204. package/dist/test-data/tables.js.map +1 -0
  205. package/dist/utils/aggregate.d.ts +1 -0
  206. package/dist/utils/aggregate.js +28 -35
  207. package/dist/utils/ast.d.ts +18 -0
  208. package/dist/utils/ast.d.ts.map +1 -0
  209. package/dist/utils/ast.js +310 -0
  210. package/dist/utils/ast.js.map +1 -0
  211. package/dist/utils/axisFormatter.d.ts +1 -0
  212. package/dist/utils/axisFormatter.js +19 -24
  213. package/dist/utils/color.d.ts +13 -0
  214. package/dist/utils/color.d.ts.map +1 -0
  215. package/dist/utils/color.js +247 -0
  216. package/dist/utils/color.js.map +1 -0
  217. package/dist/utils/colorToHex.d.ts +1 -0
  218. package/dist/utils/colorToHex.js +1 -5
  219. package/dist/utils/crypto.d.ts +2 -0
  220. package/dist/utils/crypto.d.ts.map +1 -0
  221. package/dist/utils/crypto.js +6 -0
  222. package/dist/utils/crypto.js.map +1 -0
  223. package/dist/utils/dataFetcher.d.ts +1 -0
  224. package/dist/utils/dataFetcher.d.ts.map +1 -1
  225. package/dist/utils/dataFetcher.js +8 -9
  226. package/dist/utils/dataFetcher.js.map +1 -1
  227. package/dist/utils/dates.d.ts +10 -0
  228. package/dist/utils/dates.d.ts.map +1 -0
  229. package/dist/utils/dates.js +32 -0
  230. package/dist/utils/dates.js.map +1 -0
  231. package/dist/utils/downloadCSV.d.ts +1 -0
  232. package/dist/utils/downloadCSV.js +1 -6
  233. package/dist/utils/getDomain.d.ts +8 -0
  234. package/dist/utils/getDomain.d.ts.map +1 -0
  235. package/dist/utils/getDomain.js +28 -0
  236. package/dist/utils/getDomain.js.map +1 -0
  237. package/dist/utils/merge.d.ts +2 -0
  238. package/dist/utils/merge.d.ts.map +1 -0
  239. package/dist/utils/merge.js +45 -0
  240. package/dist/utils/merge.js.map +1 -0
  241. package/dist/utils/schema.d.ts +7 -2
  242. package/dist/utils/schema.d.ts.map +1 -1
  243. package/dist/utils/schema.js +13 -7
  244. package/dist/utils/schema.js.map +1 -0
  245. package/dist/utils/sorting.d.ts +5 -0
  246. package/dist/utils/sorting.d.ts.map +1 -0
  247. package/dist/utils/sorting.js +14 -0
  248. package/dist/utils/sorting.js.map +1 -0
  249. package/dist/utils/textFormatting.d.ts.map +1 -1
  250. package/dist/utils/textFormatting.js +0 -1
  251. package/dist/utils/textFormatting.js.map +1 -0
  252. package/dist/utils/valueFormatter.d.ts +1 -0
  253. package/dist/utils/valueFormatter.js +19 -24
  254. package/dist/utils/valueFormatterCSV.d.ts +1 -0
  255. package/dist/utils/valueFormatterCSV.js +19 -24
  256. package/package.json +2 -3
  257. package/dist/DateRangePicker/Calendar.js.map +0 -1
  258. package/dist/DateRangePicker/dateRangePickerUtils.js.map +0 -1
  259. package/dist/DateRangePicker/index.js.map +0 -1
  260. package/dist/PieChart.js.map +0 -1
  261. package/dist/QuillProvider.js.map +0 -1
  262. package/dist/assets/ArrowDownIcon.js.map +0 -1
  263. package/dist/assets/ArrowDownRightIcon.js.map +0 -1
  264. package/dist/assets/ArrowLeftHeadIcon.js.map +0 -1
  265. package/dist/assets/ArrowRightHeadIcon.js.map +0 -1
  266. package/dist/assets/ArrowRightIcon.js.map +0 -1
  267. package/dist/assets/ArrowUpHeadIcon.js.map +0 -1
  268. package/dist/assets/ArrowUpIcon.js.map +0 -1
  269. package/dist/assets/ArrowUpRightIcon.js.map +0 -1
  270. package/dist/assets/CalendarIcon.js.map +0 -1
  271. package/dist/assets/CalendarNormalIcon.js.map +0 -1
  272. package/dist/assets/DoubleArrowLeftHeadIcon.js.map +0 -1
  273. package/dist/assets/DoubleArrowRightHeadIcon.js.map +0 -1
  274. package/dist/assets/ExclamationFilledIcon.js.map +0 -1
  275. package/dist/assets/FilterIcon.js.map +0 -1
  276. package/dist/assets/LoadingSpinner.js.map +0 -1
  277. package/dist/assets/RefreshIcon.js.map +0 -1
  278. package/dist/assets/SearchIcon.js.map +0 -1
  279. package/dist/assets/UpLeftArrowsIcon.js.map +0 -1
  280. package/dist/assets/XCircleIcon.js.map +0 -1
  281. package/dist/assets/XIcon.js.map +0 -1
  282. package/dist/assets/index.js.map +0 -1
  283. package/dist/components/BigModal/BigModal.js.map +0 -1
  284. package/dist/components/Dropdown/Dropdown.js.map +0 -1
  285. package/dist/components/Dropdown/DropdownItem.js.map +0 -1
  286. package/dist/components/Dropdown/index.js.map +0 -1
  287. package/dist/components/Modal/Modal.js.map +0 -1
  288. package/dist/components/Modal/index.js.map +0 -1
  289. package/dist/components/QuillCard.js.map +0 -1
  290. package/dist/components/selectUtils.js.map +0 -1
  291. package/dist/contexts/BaseColorContext.js.map +0 -1
  292. package/dist/contexts/HoveredValueContext.js.map +0 -1
  293. package/dist/contexts/RootStylesContext.js.map +0 -1
  294. package/dist/contexts/SelectedValueContext.js.map +0 -1
  295. package/dist/contexts/index.js.map +0 -1
  296. package/dist/hooks/index.js.map +0 -1
  297. package/dist/hooks/useDashboard.js.map +0 -1
  298. package/dist/hooks/useInternalState.js.map +0 -1
  299. package/dist/hooks/useOnClickOutside.js.map +0 -1
  300. package/dist/hooks/useOnWindowResize.js.map +0 -1
  301. package/dist/hooks/useSelectOnKeyDown.js.map +0 -1
  302. package/dist/index.js.map +0 -1
  303. package/dist/internals/ReportBuilder/PivotModal.spec.js.map +0 -1
  304. package/dist/lib/font.js.map +0 -1
  305. package/dist/lib/index.js.map +0 -1
  306. package/dist/lib/inputTypes.js.map +0 -1
  307. package/dist/lib/utils.js.map +0 -1
  308. package/dist/utils/aggregate.js.map +0 -1
  309. package/dist/utils/downloadCSV.js.map +0 -1
package/dist/Chart.js CHANGED
@@ -1,321 +1,19 @@
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
- exports.ChartTooltipRow = exports.ChartTooltipFrame = void 0;
30
- const jsx_runtime_1 = require("react/jsx-runtime");
31
- /* eslint-disable @typescript-eslint/ban-ts-comment */
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
2
  // @ts-nocheck
33
- const react_1 = require("react");
34
- const aggregate_1 = require("./utils/aggregate");
35
- const ReportBuilder_1 = require("./ReportBuilder");
36
- const recharts_1 = require("recharts");
37
- const date_fns_1 = require("date-fns");
38
- const BarList_1 = __importDefault(require("./BarList"));
39
- const PieChart_1 = __importStar(require("./PieChart"));
40
- const Context_1 = require("./Context");
41
- const Table_1 = require("./Table");
42
- const dataFetcher_1 = require("./utils/dataFetcher");
43
- const PivotModal_1 = require("./internals/ReportBuilder/PivotModal");
44
- const colorToHex_1 = require("./utils/colorToHex");
45
- const valueFormatter_1 = require("./utils/valueFormatter");
46
- const axisFormatter_1 = require("./utils/axisFormatter");
47
- const colorValues = [
48
- 'slate',
49
- 'silver',
50
- 'zinc',
51
- 'neutral',
52
- 'stone',
53
- 'red',
54
- 'orange',
55
- 'amber',
56
- 'yellow',
57
- 'lime',
58
- 'green',
59
- 'emerald',
60
- 'teal',
61
- 'cyan',
62
- 'sky',
63
- 'blue',
64
- 'indigo',
65
- 'violet',
66
- 'purple',
67
- 'fuchsia',
68
- 'pink',
69
- 'rose',
70
- ];
71
- /**
72
- * Selects a color from the list of colors based on the element's index. If
73
- * the element is a comparison range, it will select the color and then
74
- * transform it to be grayscale.
75
- * @param element the chart element to select the color for
76
- * @param colors a list of colors to choose from
77
- * @param index the index of this element in colors
78
- */
79
- function selectColor(element, colors, index) {
80
- const isComparison = element.field.includes('comparison_');
81
- const color = colors[index % colors.length];
82
- if (!isComparison) {
83
- return color;
84
- }
85
- // If the element is a comparison, make the color grayscale.
86
- if (Object.keys(colorToHex_1.COLOR_TO_HEX).includes(color)) {
87
- const colorHex = colorToHex_1.COLOR_TO_HEX[color];
88
- const rgbArray = hexToRGB(colorHex);
89
- return toGrayscale(rgbArray);
90
- }
91
- return 'gray'; // unknown color, fallback on gray
92
- }
93
- /**
94
- * Transform a hex string to an RGB array (eg. #000000 -> [0, 0, 0]).
95
- */
96
- function hexToRGB(hex) {
97
- // Matches 3-4 pairs of hex digits with an optional leading `#` character
98
- const regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i;
99
- const result = regex.exec(hex);
100
- if (result) {
101
- return [
102
- parseInt(result[0], 16),
103
- parseInt(result[1], 16),
104
- parseInt(result[2], 16),
105
- ...(result[3] && [parseInt(result[3], 16)]), // <- alpha channel
106
- ];
107
- }
108
- // try 'RGB[A](0, 0, 0[, 0])' style colors, matching on digits (with decimals)
109
- const rgba = hex.match(/[0-9.]+/g);
110
- if (rgba) {
111
- return [rgba[0], rgba[1], rgba[2], ...(rgba[3] && [rgba[3]])];
112
- }
113
- return [128, 128, 128]; // unknown color, return 'gray'
114
- }
115
- /**
116
- * Converts an RGB object to grayscale.
117
- *
118
- * This implementation uses the luminosity method (same as GIMP's grayscale
119
- * algorithm) to convert colors with proportions relative to what the human
120
- * eye can percieve. This lets us maximize the visual difference between
121
- * different shades of gray.
122
- */
123
- function toGrayscale(rgba) {
124
- let sum = 0;
125
- sum += parseFloat(rgba[0] * 0.89);
126
- sum += parseFloat(rgba[1] * 1.77);
127
- sum += parseFloat(rgba[2] * 0.33);
128
- const avg = sum / 3;
129
- return `rgb(${avg}, ${avg}, ${avg})`;
130
- }
131
- // const data = [
132
- // {
133
- // date: 'Jan 22',
134
- // SemiAnalysis: 2890,
135
- // 'The Pragmatic Engineer': 2338,
136
- // },
137
- // {
138
- // date: 'Feb 22',
139
- // SemiAnalysis: 2756,
140
- // 'The Pragmatic Engineer': 2103,
141
- // },
142
- // {
143
- // date: 'Mar 22',
144
- // SemiAnalysis: 3322,
145
- // 'The Pragmatic Engineer': 2194,
146
- // },
147
- // {
148
- // date: 'Apr 22',
149
- // SemiAnalysis: 3470,
150
- // 'The Pragmatic Engineer': 2108,
151
- // },
152
- // {
153
- // date: 'May 22',
154
- // SemiAnalysis: 3475,
155
- // 'The Pragmatic Engineer': 1812,
156
- // },
157
- // {
158
- // date: 'Jun 22',
159
- // SemiAnalysis: 3129,
160
- // 'The Pragmatic Engineer': 1726,
161
- // },
162
- // ];
163
- const yAxisFields = [
164
- { field: 'avg_days', label: 'average days' },
165
- { field: 'median_days', label: 'median days' },
166
- ];
167
- const labelFormatter = (name) => {
168
- // return yAxisFields.filter(elem => elem.field === name)[0].label;
169
- return name;
170
- };
171
- const ChartTooltipFrame = ({ children, theme, }) => ((0, jsx_runtime_1.jsx)("div", { style: {
172
- borderStyle: 'solid',
173
- borderColor: theme?.borderColor || '#E5E7EB',
174
- overflow: 'hidden',
175
- borderWidth: 1,
176
- background: theme?.backgroundColor || '#ffffff',
177
- borderRadius: '6px',
178
- boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
179
- }, children: children }));
180
- exports.ChartTooltipFrame = ChartTooltipFrame;
181
- const ChartTooltipRow = ({ value, name, color, theme, }) => ((0, jsx_runtime_1.jsxs)("div", { style: {
182
- marginRight: '24px',
183
- display: 'flex',
184
- alignItems: 'center',
185
- justifyContent: 'space-between',
186
- width: '100%',
187
- paddingTop: 2,
188
- paddingBottom: 2,
189
- }, children: [(0, jsx_runtime_1.jsxs)("div", {
190
- // className="qq-flex qq-items-center qq-space-x-2"
191
- style: {
192
- // marginLeft: '0.5rem',
193
- display: 'flex',
194
- alignItems: 'center',
195
- }, children: [(0, jsx_runtime_1.jsx)("span", { style: {
196
- background: color,
197
- borderWidth: 2,
198
- borderStyle: 'solid',
199
- borderColor: 'white',
200
- boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
201
- height: '12px',
202
- width: '12px',
203
- borderRadius: 100,
204
- marginRight: 6,
205
- boxSizing: 'border-box',
206
- } }), (0, jsx_runtime_1.jsx)("p", {
207
- // className={twMerge(
208
- // 'font-medium tabular-nums text-right whitespace-nowrap',
209
- // 'text-[#212121] !important'
210
- // )}
211
- style: {
212
- marginTop: 0,
213
- marginBottom: 0,
214
- fontFamily: theme?.fontFamily,
215
- color: theme?.primaryTextColor,
216
- fontSize: theme?.fontSizeSmall || '14px',
217
- fontWeight: theme?.fontWeightMedium || '500',
218
- }, children: value })] }), (0, jsx_runtime_1.jsx)("p", { style: {
219
- marginTop: 0,
220
- marginBottom: 0,
221
- fontFamily: theme?.fontFamily,
222
- color: theme?.secondaryTextColor,
223
- textAlign: 'right',
224
- whiteSpace: 'nowrap',
225
- overflow: 'hidden',
226
- textOverflow: 'ellipsis',
227
- fontSize: theme?.fontSizeSmall || '14px',
228
- fontWeight: theme?.fontWeightNormal || '400',
229
- }, children: name })] }));
230
- exports.ChartTooltipRow = ChartTooltipRow;
231
- const ChartTooltip = ({ active, payload, label, label2, colors, valueFormatter, dateFormatter, theme, }) => {
232
- if (active && payload) {
233
- if (label2) {
234
- return ((0, jsx_runtime_1.jsx)(exports.ChartTooltipFrame, { theme: theme, children: payload.map(({ value, name }, idx) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [idx === 0 && ((0, jsx_runtime_1.jsx)("div", { style: {
235
- borderStyle: 'solid',
236
- borderBottomColor: theme?.borderColor || '#E5E7EB',
237
- background: theme?.backgroundColor || 'white',
238
- borderTop: 'none',
239
- borderLeft: 'none',
240
- borderRight: 'none',
241
- borderBottomWidth: 1,
242
- display: 'flex',
243
- flexDirection: 'column',
244
- paddingLeft: '16px',
245
- paddingRight: '16px',
246
- paddingTop: '8px',
247
- paddingBottom: '8px',
248
- }, children: (0, jsx_runtime_1.jsx)("p", { style: {
249
- textAlign: 'left',
250
- marginTop: 0,
251
- marginBottom: 0,
252
- fontFamily: theme?.fontFamily,
253
- color: theme?.primaryTextColor,
254
- fontSize: theme?.fontSizeSmall || '14px',
255
- fontWeight: theme?.boldFontWeight || '500',
256
- paddingTop: 2,
257
- paddingBottom: 2,
258
- }, children: labelFormatter(name) }) })), (0, jsx_runtime_1.jsx)("div", {
259
- // className="qq-px-4 qq-space-y-1 qq-py-2 qq-px-4"
260
- style: {
261
- paddingRight: '16px',
262
- paddingLeft: '16px',
263
- paddingTop: idx === 0 && '8px',
264
- paddingBottom: '8px',
265
- // marginTop: '0.25rem',
266
- }, children: (0, jsx_runtime_1.jsx)(exports.ChartTooltipRow, { name: valueFormatter(value), value: !isNaN(new Date(idx === 0 ? label : label2)) &&
267
- dateFormatter
268
- ? dateFormatter(idx === 0 ? label : label2)
269
- : !isNaN(new Date(idx === 0 ? label : label2))
270
- ? (0, date_fns_1.format)(new Date(idx === 0 ? label : label2), 'MMM yyyy')
271
- : idx === 0
272
- ? label
273
- : label2,
274
- // color={categoryColors.get(name) ?? BaseColors.Blue}
275
- color: colors[idx], theme: theme }, `id-${idx}`) })] }))) }));
276
- }
277
- return ((0, jsx_runtime_1.jsxs)(exports.ChartTooltipFrame, { theme: theme, children: [(0, jsx_runtime_1.jsx)("div", { style: {
278
- borderStyle: 'solid',
279
- borderBottomColor: theme?.borderColor || '#E5E7EB',
280
- background: theme?.backgroundColor || 'white',
281
- borderTop: 'none',
282
- borderLeft: 'none',
283
- borderRight: 'none',
284
- borderBottomWidth: 1,
285
- display: 'flex',
286
- flexDirection: 'column',
287
- paddingLeft: '16px',
288
- paddingRight: '16px',
289
- paddingTop: '8px',
290
- paddingBottom: '8px',
291
- }, children: (0, jsx_runtime_1.jsx)("p", { style: {
292
- textAlign: 'left',
293
- marginTop: 0,
294
- marginBottom: 0,
295
- fontFamily: theme?.fontFamily,
296
- color: theme?.primaryTextColor,
297
- fontSize: theme?.fontSizeSmall || '14px',
298
- fontWeight: theme?.boldFontWeight || '500',
299
- paddingTop: 2,
300
- paddingBottom: 2,
301
- }, children: !isNaN(new Date(label)) && dateFormatter
302
- ? dateFormatter(label)
303
- : !isNaN(new Date(label))
304
- ? (0, date_fns_1.format)(new Date(label), 'MMM yyyy')
305
- : label }) }), (0, jsx_runtime_1.jsx)("div", {
306
- // className="qq-px-4 qq-space-y-1 qq-py-2 qq-px-4"
307
- style: {
308
- paddingRight: '16px',
309
- paddingLeft: '16px',
310
- paddingTop: '8px',
311
- paddingBottom: '8px',
312
- // marginTop: '0.25rem',
313
- }, children: payload.map(({ value, name }, idx) => ((0, jsx_runtime_1.jsx)(exports.ChartTooltipRow, { value: valueFormatter(value), name: labelFormatter(name),
314
- // color={categoryColors.get(name) ?? BaseColors.Blue}
315
- color: colors[idx], theme: theme }, `id-${idx}`))) })] }));
316
- }
317
- return null;
318
- };
3
+ import { useState, useEffect, useContext, useMemo } from 'react';
4
+ import { aggregate } from './utils/aggregate';
5
+ import { getPostgresBasicType } from './ReportBuilder';
6
+ import { differenceInHours } from 'date-fns';
7
+ import BarList from './BarList';
8
+ import PieChart from './PieChart';
9
+ import { ClientContext, DashboardContext, ThemeContext, DashboardFiltersContext, } from './Context';
10
+ import { SpecialTable } from './Table';
11
+ import { getData } from './utils/dataFetcher';
12
+ import { generatePivotTable, generatePivotTableYAxis, } from './internals/ReportBuilder/PivotModal';
13
+ import { valueFormatter } from './utils/valueFormatter';
14
+ import LineChart from './components/Chart/LineChart';
15
+ import BarChart from './components/Chart/BarChart';
16
+ import { mergeComparisonRange } from './utils/merge';
319
17
  // @ts-ignore
320
18
  function sumByKey(arr, key) {
321
19
  // @ts-ignore
@@ -324,11 +22,8 @@ function sumByKey(arr, key) {
324
22
  return isNaN(val) ? acc : acc + val;
325
23
  }, 0);
326
24
  }
327
- function isDate(str) {
328
- return !isNaN(Date.parse(str));
329
- }
330
25
  function areDatesNearby(dateStr1, dateStr2) {
331
- return Math.abs((0, date_fns_1.differenceInHours)(dateStr1, dateStr2)) < 24;
26
+ return Math.abs(differenceInHours(dateStr1, dateStr2)) < 24;
332
27
  }
333
28
  function isEquivalent(filters1, filters2) {
334
29
  if (Object.keys(filters2).length !== Object.keys(filters1).length) {
@@ -365,132 +60,100 @@ function isEquivalent(filters1, filters2) {
365
60
  }
366
61
  function didFiltersChange(dashboardItem, filters) {
367
62
  if (!dashboardItem?.filtersApplied || !filters) {
368
- return false;
63
+ return true;
64
+ }
65
+ if (dashboardItem?.filtersApplied.comparison !== !filters.comparison) {
66
+ return true;
369
67
  }
370
68
  return !isEquivalent(dashboardItem.filtersApplied, filters);
371
69
  }
372
- const Chart = ({ chartId, config, colors, containerStyle, query,
373
- //chartFilters
374
- SelectComponent, DatePickerComponent, }) => {
375
- const { dateFilter, setDateFilter } = (0, react_1.useContext)(Context_1.DateFilterContext);
376
- const { dispatch, dashboard } = (0, react_1.useContext)(Context_1.DashboardContext);
377
- const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
378
- // const [chartFilters, setChartFilters] = useState({
379
- // chart_filter: {
380
- // table: 'transactions',
381
- // field: 'category',
382
- // labelField: 'category',
383
- // label: 'Category',
384
- // filterType: 'string',
385
- // query:
386
- // 'WITH transactionssubview AS (select * from transactions), transactions AS (select * from transactionssubview WHERE customer_id = 2)\n' +
387
- // 'select category, category from transactions group by category, category;',
388
- // options: [
389
- // { category: 'Food' },
390
- // { category: 'Fuel' },
391
- // { category: 'Other' },
392
- // ],
393
- // },
394
- // });
395
- const [client, _] = (0, react_1.useContext)(Context_1.ClientContext);
396
- const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
397
- const chartColors = (0, react_1.useMemo)(() => {
70
+ function hashCode(s) {
71
+ return s.split('').reduce(function (a, b) {
72
+ a = (a << 5) - a + b.charCodeAt(0);
73
+ return a & a;
74
+ }, 0);
75
+ }
76
+ const Chart = ({ chartId, config, colors, containerStyle, query, SelectComponent, DatePickerComponent, isAnimationActive = true, }) => {
77
+ const { dispatch, dashboard } = useContext(DashboardContext);
78
+ const { dashboardFilters } = useContext(DashboardFiltersContext);
79
+ // eslint-disable-next-line no-unused-vars
80
+ const [client, _] = useContext(ClientContext);
81
+ const [theme] = useContext(ThemeContext);
82
+ const chartColors = useMemo(() => {
398
83
  return colors?.length
399
84
  ? colors
400
85
  : theme && theme.chartColors.length
401
86
  ? theme.chartColors
402
87
  : ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
403
88
  }, [colors]);
404
- return ((0, jsx_runtime_1.jsx)(ChartUpdater, { config: config, dispatch: dispatch, dashboard: dashboard, chartId: chartId, containerStyle: containerStyle, colors: chartColors, client: client, theme: theme,
405
- // isDateFilter={dateFilter}
406
- dateFilter: dateFilter, dashboardFilters: dashboardFilters,
407
- // chartFilters={chartFilters}
408
- // setChartFilters={setChartFilters}
409
- query: query, SelectComponent: SelectComponent, DatePickerComponent: DatePickerComponent }));
89
+ return (_jsx(ChartUpdater, { config: config, dispatch: dispatch, dashboard: dashboard, chartId: chartId, containerStyle: containerStyle, colors: chartColors, client: client, theme: theme, dashboardFilters: dashboardFilters, query: query, SelectComponent: SelectComponent, DatePickerComponent: DatePickerComponent, isAnimationActive: isAnimationActive }));
410
90
  };
411
- const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, dispatch, client, theme,
412
- // dateFilter,
413
- // isDateFilter,
414
- dashboardFilters,
415
- // chartFilters,
416
- // setChartFilters,
417
- query, SelectComponent, DatePickerComponent, }) => {
418
- const [loading, setLoading] = (0, react_1.useState)(false);
419
- const [isComparison, setIsComparison] = (0, react_1.useState)(false);
420
- const [bucketData, setBucketData] = (0, react_1.useState)(null);
421
- (0, react_1.useEffect)(() => {
422
- let isSubscribed = true;
91
+ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, dispatch, client, theme, dashboardFilters, isAnimationActive, }) => {
92
+ const [loading, setLoading] = useState(false);
93
+ const [isComparison, setIsComparison] = useState(false);
94
+ const [bucketData, setBucketData] = useState(null);
95
+ useEffect(() => {
423
96
  async function getChartOptions() {
424
- if (dashboard[chartId] &&
425
- !didFiltersChange(dashboard[chartId], dashboardFilters)) {
97
+ if (!didFiltersChange(dashboard[chartId], dashboardFilters)) {
98
+ setLoading(false);
426
99
  return;
427
100
  }
428
- if (isSubscribed) {
429
- try {
430
- setLoading(true);
431
- const hostedBody = {
432
- metadata: client.customerId
433
- ? {
434
- dashboardItemId: chartId,
435
- orgId: client.customerId,
436
- clientId: client.publicKey,
437
- task: 'item',
438
- filters: [...Object.values(dashboardFilters)],
439
- }
440
- : {
441
- dashboardItemId: chartId,
442
- task: 'item',
443
- clientId: client.publicKey,
444
- filters: [...Object.values(dashboardFilters)],
445
- },
446
- };
447
- const cloudBody = {
448
- id: chartId,
449
- filters: [...Object.values(dashboardFilters)],
450
- };
451
- const resp = await (0, dataFetcher_1.getData)(client, 'itempost', 'omit', hostedBody, cloudBody);
452
- if (resp) {
453
- setLoading(false);
454
- setIsComparison(!!resp.comparisonRows);
455
- if (resp.comparisonRows) {
456
- // merge the data into one dataset, starting from the back
457
- const compRows = resp.comparisonRows;
458
- let j = compRows.length - 1;
459
- for (let i = resp.rows.length - 1; i >= 0; i--) {
460
- if (j >= 0) {
461
- for (const [key, value] of Object.entries(compRows[j])) {
462
- resp.rows[i][`comparison_${key}`] = value;
463
- }
464
- }
465
- j--;
466
- }
101
+ try {
102
+ setLoading(true);
103
+ const yoloFilters = Object.values(dashboardFilters).length
104
+ ? Object.values(dashboardFilters).map((filter) => {
105
+ const newFilter = { ...filter };
106
+ if (newFilter.filterType === 'date_range') {
107
+ // filter.field = chartDateFilter?.field;
108
+ delete newFilter['field'];
109
+ delete newFilter['options'];
110
+ delete newFilter['selectedValue'];
467
111
  }
468
- dispatch({
469
- type: 'UPDATE_DASHBOARD_ITEM',
470
- id: chartId,
471
- data: {
472
- ...resp,
473
- filtersApplied: dashboardFilters,
474
- },
475
- });
476
- }
477
- }
478
- catch (e) {
479
- console.log('Error fetching chart: ', e);
112
+ return newFilter;
113
+ })
114
+ : [];
115
+ const hostedBody = {
116
+ metadata: {
117
+ dashboardItemId: chartId,
118
+ ...(client.customerId && { orgId: client.customerId }),
119
+ clientId: client.publicKey,
120
+ task: 'item',
121
+ filters: yoloFilters,
122
+ },
123
+ };
124
+ const cloudBody = {
125
+ id: chartId,
126
+ filters: yoloFilters,
127
+ };
128
+ const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody);
129
+ if (resp) {
480
130
  setLoading(false);
131
+ setIsComparison(!!resp.compareRows?.length);
132
+ if (resp.compareRows) {
133
+ mergeComparisonRange(resp);
134
+ }
135
+ dispatch({
136
+ type: 'UPDATE_DASHBOARD_ITEM',
137
+ id: chartId,
138
+ data: {
139
+ ...resp,
140
+ filtersApplied: dashboardFilters,
141
+ },
142
+ });
481
143
  }
482
144
  }
145
+ catch (e) {
146
+ console.log('Error fetching chart: ', e);
147
+ setLoading(false);
148
+ }
483
149
  }
484
150
  if (config) {
485
151
  setLoading(false);
486
152
  return;
487
153
  }
488
154
  getChartOptions();
489
- return () => {
490
- isSubscribed = false;
491
- };
492
155
  }, [dashboardFilters, client, chartId]);
493
- (0, react_1.useEffect)(() => {
156
+ useEffect(() => {
494
157
  if (!dashboardFilters ||
495
158
  !chartId ||
496
159
  !dashboard[chartId] ||
@@ -500,7 +163,7 @@ query, SelectComponent, DatePickerComponent, }) => {
500
163
  }
501
164
  const dateFilter = Object.values(dashboardFilters).find((filter) => filter.filterType == 'date_range');
502
165
  if (dateFilter && dashboard[chartId].rows.length) {
503
- const aggregatedObj = (0, aggregate_1.aggregate)(dashboard[chartId], dashboard[chartId].buckets, dateFilter);
166
+ const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, dateFilter);
504
167
  setBucketData({
505
168
  name: dashboard[chartId].name,
506
169
  xAxisFormat: aggregatedObj.xAxisFormat,
@@ -510,10 +173,10 @@ query, SelectComponent, DatePickerComponent, }) => {
510
173
  });
511
174
  }
512
175
  const stringFilters = dashboard[chartId].buckets.filter((bucket) => {
513
- return ((0, ReportBuilder_1.getPostgresBasicType)(dashboard[chartId].fields.find((field) => field.name === bucket.field)) === 'string');
176
+ return (getPostgresBasicType(dashboard[chartId].fields.find((field) => field.name === bucket.field)) === 'string');
514
177
  });
515
178
  if (stringFilters.length && dashboard[chartId].rows.length) {
516
- const aggregatedObj = (0, aggregate_1.aggregate)(dashboard[chartId], dashboard[chartId].buckets, null);
179
+ const aggregatedObj = aggregate(dashboard[chartId], dashboard[chartId].buckets, null);
517
180
  setBucketData({
518
181
  name: dashboard[chartId].name,
519
182
  xAxisFormat: aggregatedObj.xAxisFormat,
@@ -526,38 +189,25 @@ query, SelectComponent, DatePickerComponent, }) => {
526
189
  setBucketData(null);
527
190
  }
528
191
  }, [dashboard[chartId]]);
529
- // useEffect(() => {
530
- // if (comparison && compareRows) {
531
- // setCombinedRows(combineArraysByKey(compareRows, data, xAxisField));
532
- // }
533
- // }, [compareRows, data]);x
534
- // console.log('combinedRows', combinedRows);
535
- // const onChangeFilter = (filter, value) => {
536
- // if (filter.filterType === 'string') {
537
- // const newFilterValue = {
538
- // ...filter,
539
- // selectedValue: filter.options.find(
540
- // elem => elem[removeQuotes(filter.field)] === value
541
- // )[removeQuotes(filter.field)],
542
- // };
543
- // setChartFilters(prevFilters => ({
544
- // ...prevFilters,
545
- // chart_filter: newFilterValue,
546
- // }));
547
- // return;
548
- // }
549
- // };
550
- const dateFilter = Object.values(dashboardFilters).find((filter) => filter.filterType == 'date_range');
551
- const pivotTable = (0, react_1.useMemo)(() => {
192
+ const dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType == 'date_range');
193
+ const isPivot = dashboard[chartId]?.pivot || config?.pivot;
194
+ const pivotTable = useMemo(() => {
552
195
  const pivot = dashboard[chartId]?.pivot || config?.pivot;
553
196
  const data = dashboard[chartId] ? dashboard[chartId] : config;
554
197
  return pivot && data?.rows
555
- ? (0, PivotModal_1.generatePivotTable)(pivot, data.rows, dateFilter?.startDate
198
+ ? generatePivotTable(pivot, JSON.parse(JSON.stringify(data.rows)), // deep copy
199
+ dateFilter?.startDate
556
200
  ? [dateFilter?.startDate, dateFilter?.endDate, null]
201
+ : [null, null, null], Boolean(dateFilter?.comparisonRange?.startDate), -1, dateFilter?.comparisonRange?.startDate
202
+ ? [
203
+ dateFilter?.comparisonRange.startDate,
204
+ dateFilter?.comparisonRange.endDate,
205
+ null,
206
+ ]
557
207
  : [null, null, null])
558
208
  : null;
559
- }, [dashboard, chartId, config, dateFilter]);
560
- const pivotTableYAxis = (0, react_1.useMemo)(() => {
209
+ }, [dashboard, chartId, dashboard[chartId], config, dateFilter]);
210
+ const pivotTableYAxis = useMemo(() => {
561
211
  if (!pivotTable) {
562
212
  return null;
563
213
  }
@@ -566,30 +216,25 @@ query, SelectComponent, DatePickerComponent, }) => {
566
216
  ? config.yAxisFields
567
217
  : dashboard[chartId]?.yAxisFields;
568
218
  return yAxisFields
569
- ? (0, PivotModal_1.generatePivotTableYAxis)(pivot, pivotTable.columns, yAxisFields?.[0]?.format)
219
+ ? generatePivotTableYAxis(pivot, pivotTable.columns, yAxisFields?.[0]?.format)
570
220
  : null;
571
221
  }, [pivotTable]);
572
222
  if (!config && (!dashboard[chartId] || loading)) {
573
- return ((0, jsx_runtime_1.jsx)("div", {
574
- // className="flex flex-col flex-1 h-[100%]"
575
- style: {
223
+ return (_jsx("div", { style: {
576
224
  ...containerStyle,
577
- // marginLeft: 25,
578
- // marginRight: 25,
579
225
  boxSizing: 'content-box',
580
226
  height: '100%',
581
- // display: 'flex',
582
- // flexDirection: 'column',
583
- // flex: 1,
584
- }, children: (0, jsx_runtime_1.jsx)("div", { style: {
227
+ }, children: _jsx("div", { style: {
585
228
  height: containerStyle?.height,
586
229
  width: '100%',
587
230
  boxSizing: 'content-box',
588
231
  borderRadius: 8,
589
232
  overflow: 'hidden',
590
- }, children: (0, jsx_runtime_1.jsxs)("svg", { width: "100%", height: "100%", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", children: [(0, jsx_runtime_1.jsx)("rect", { width: "100%", height: "100%", fill: theme?.loadingStateBackgroundColor || '#F9F9FA' }), (0, jsx_runtime_1.jsx)("defs", { fill: theme?.loadingStateBackgroundColor || '#F9F9FA', children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: "skeletonGradient", x1: "0%", y1: "0%", x2: "10%", y2: "0%", gradientUnits: "userSpaceOnUse", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "0%", stopColor: "rgba(255,255,255,0)" }), (0, jsx_runtime_1.jsx)("stop", { offset: "50%", stopColor: "#FEFEFE" }), (0, jsx_runtime_1.jsx)("stop", { offset: "100%", stopColor: "rgba(255,255,255,0)" }), (0, jsx_runtime_1.jsx)("animate", { attributeName: "x1", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }), (0, jsx_runtime_1.jsx)("animate", { attributeName: "x2", from: "-50%", to: "150%", dur: "2s", repeatCount: "indefinite" })] }) }), (0, jsx_runtime_1.jsx)("rect", { width: "50%", height: "100%", fill: "url(#skeletonGradient)", children: (0, jsx_runtime_1.jsx)("animate", { attributeName: "x", from: "-100%", to: "100%", dur: "2s", repeatCount: "indefinite" }) })] }) }) }));
233
+ }, 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" }) })] }) }) }));
591
234
  }
592
- if (config?.chartType === 'pie' || dashboard[chartId]?.chartType === 'pie') {
235
+ // TODO: Figure out if we can use ?? to coalesce these into the variable.
236
+ const chartTypes = [config?.chartType, dashboard[chartId]?.chartType];
237
+ if (chartTypes.includes('pie')) {
593
238
  const rows = pivotTable
594
239
  ? pivotTable.rows
595
240
  : config
@@ -603,48 +248,43 @@ query, SelectComponent, DatePickerComponent, }) => {
603
248
  const xAxisField = config
604
249
  ? config.xAxisField
605
250
  : dashboard[chartId].xAxisField;
606
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(PieChart_1.default
607
- // @ts-ignore
608
- , {
609
- // @ts-ignore
610
- containerStyle: containerStyle, data: rows.map((row) => {
611
- return {
612
- ...row,
613
- count: parseInt(row[yAxisFields[0].field]) /
614
- sumByKey(rows, yAxisFields[0].field),
615
- };
616
- }), category: yAxisFields[0].field, index: xAxisField, colors: colors, theme: theme }) }));
251
+ return (_jsx(PieChart, { containerStyle: containerStyle, data: rows.map((row) => {
252
+ return {
253
+ ...row,
254
+ count: parseInt(row[yAxisFields[0].field]) /
255
+ sumByKey(rows, yAxisFields[0].field),
256
+ };
257
+ }), category: yAxisFields[0].field, index: xAxisField, colors: colors, theme: theme }));
617
258
  }
618
- if (config?.chartType === 'table' ||
619
- dashboard[chartId]?.chartType === 'table') {
259
+ if (chartTypes.includes('table')) {
620
260
  const data = dashboard[chartId] ? dashboard[chartId] : config;
621
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(Table_1.SpecialTable, { rows: pivotTable?.rows || data.rows, columns: pivotTable?.columns || data.columns || data.yAxisFields, height: '400px', containerStyle: {
622
- ...containerStyle,
623
- }, theme: theme, isTableChart: true, name: data.name }) }));
261
+ return (_jsx(SpecialTable, { rows: pivotTable?.rows ?? data.rows ?? [], columns: pivotTable?.columns || data.columns || data.yAxisFields, height: '400px', containerStyle: {
262
+ ...containerStyle,
263
+ }, theme: theme, isTableChart: true, name: data.name }));
624
264
  }
625
- if (config?.chartType === 'bar' || dashboard[chartId]?.chartType === 'bar') {
626
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(BarList_1.default, { data: pivotTable
627
- ? pivotTable.rows
628
- : config
629
- ? (config.bucketedRows &&
630
- config.bucketedRows.length > 0 &&
631
- config.bucketedRows) ||
632
- config.rows
633
- : bucketData && bucketData.rows
634
- ? bucketData.rows
635
- : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
636
- ? pivotTableYAxis
637
- : config
638
- ? config.yAxisFields
639
- : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config
640
- ? config.xAxisField
641
- : bucketData
642
- ? bucketData.xAxisField
643
- : dashboard[chartId].xAxisField, xAxisFormat: config
644
- ? config.xAxisFormat
645
- : bucketData
646
- ? bucketData.xAxisFormat
647
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }) }));
265
+ if (chartTypes.includes('bar')) {
266
+ return (_jsx(BarList, { data: pivotTable
267
+ ? pivotTable.rows
268
+ : config
269
+ ? (config.bucketedRows &&
270
+ config.bucketedRows.length > 0 &&
271
+ config.bucketedRows) ||
272
+ config.rows
273
+ : bucketData && bucketData.rows
274
+ ? bucketData.rows
275
+ : dashboard[chartId].rows, theme: theme, yAxisFields: pivotTableYAxis
276
+ ? pivotTableYAxis
277
+ : config
278
+ ? config.yAxisFields
279
+ : dashboard[chartId].yAxisFields, colors: colors, xAxisField: config
280
+ ? config.xAxisField
281
+ : bucketData
282
+ ? bucketData.xAxisField
283
+ : dashboard[chartId].xAxisField, xAxisFormat: config
284
+ ? config.xAxisFormat
285
+ : bucketData
286
+ ? bucketData.xAxisFormat
287
+ : dashboard[chartId].xAxisFormat, containerStyle: containerStyle }));
648
288
  }
649
289
  const yAxisFields = pivotTableYAxis
650
290
  ? pivotTableYAxis
@@ -659,79 +299,24 @@ query, SelectComponent, DatePickerComponent, }) => {
659
299
  label: `comparison ${sampleField.label}`,
660
300
  };
661
301
  }
662
- if (config?.chartType === 'column' ||
663
- dashboard[chartId]?.chartType === 'column') {
664
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(BarChart, { colors: colors, theme: theme, yAxisFields: yAxisFields,
665
- // @ts-ignore
666
- data: pivotTable
667
- ? pivotTable.rows
668
- : config
669
- ? (config.bucketedRows &&
670
- config.bucketedRows.length > 0 &&
671
- config.bucketedRows) ||
672
- config.rows
673
- : bucketData && bucketData.rows && bucketData.rows.length > 0
674
- ? bucketData.rows
675
- : dashboard[chartId].rows, xAxisField: config
676
- ? config.xAxisField
677
- : bucketData
678
- ? bucketData.xAxisField
679
- : dashboard[chartId].xAxisField, xAxisLabel: config
680
- ? config.xAxisLabel
681
- : bucketData
682
- ? bucketData.xAxisLabel
683
- : dashboard[chartId].xAxisLabel, xAxisFormat: config
684
- ? config.xAxisFormat
685
- : bucketData
686
- ? bucketData.xAxisFormat
687
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison }) }));
688
- }
689
- if (config?.chartType === 'metric' ||
690
- dashboard[chartId]?.chartType === 'metric') {
691
- const data = dashboard[chartId] ? dashboard[chartId] : config;
692
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("div", { style: {
693
- fontFamily: theme?.fontFamily,
694
- fontSize: 32,
695
- color: theme?.primaryTextColor,
696
- fontWeight: '600',
697
- textOverflow: 'ellipsis',
698
- margin: 0,
699
- // paddingTop: 20,
700
- // paddingBottom: 20,
701
- // paddingLeft: 25,
702
- // paddingRight: 25,
703
- whiteSpace: 'nowrap',
704
- boxSizing: 'content-box',
705
- maxWidth: '100%',
706
- textAlign: 'left',
707
- overflow: 'hidden',
708
- height: containerStyle?.height || '100%',
709
- display: 'flex',
710
- flexDirection: 'column',
711
- }, children: data.rows.length > 0 &&
712
- (0, valueFormatter_1.valueFormatter)({
713
- value: data.rows[0][data.xAxisField],
714
- field: data.xAxisField,
715
- fields: [
716
- {
717
- field: data.xAxisField,
718
- format: data.xAxisFormat,
719
- },
720
- ],
721
- }) }) }));
722
- }
723
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(LineChart, { colors: colors, yAxisFields: yAxisFields,
302
+ const data = (pivotTable
303
+ ? pivotTable.rows
304
+ : config
305
+ ? (config.bucketedRows &&
306
+ config.bucketedRows.length > 0 &&
307
+ config.bucketedRows) ||
308
+ config.rows
309
+ : bucketData && bucketData.rows && bucketData.rows.length > 0
310
+ ? bucketData.rows
311
+ : dashboard[chartId].rows)
312
+ // filter out any rows with a comparison key but no corresponding primary
313
+ ?.filter((row) => Object.keys(row).every((key) => !key.startsWith('comparison_') ||
314
+ (key.startsWith('comparison_') &&
315
+ Boolean(row[key.replace('comparison_', '')]))));
316
+ if (chartTypes.includes('column')) {
317
+ return (_jsx(BarChart, { colors: colors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields,
724
318
  // @ts-ignore
725
- data: pivotTable
726
- ? pivotTable.rows
727
- : config
728
- ? (config.bucketedRows &&
729
- config.bucketedRows.length > 0 &&
730
- config.bucketedRows) ||
731
- config.rows
732
- : bucketData
733
- ? bucketData.rows
734
- : dashboard[chartId].rows, xAxisField: config
319
+ data: data, xAxisField: config
735
320
  ? config.xAxisField
736
321
  : bucketData
737
322
  ? bucketData.xAxisField
@@ -743,233 +328,49 @@ query, SelectComponent, DatePickerComponent, }) => {
743
328
  ? config.xAxisFormat
744
329
  : bucketData
745
330
  ? bucketData.xAxisFormat
746
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison }) }));
747
- };
748
- function formatNumber(num, label) {
749
- num = Number(num);
750
- if (num < 1000) {
751
- return num.toFixed(2) + ' ' + label;
331
+ : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive }));
752
332
  }
753
- if (num >= 1.0e6) {
754
- return Math.round(num / 1.0e6).toLocaleString() + 'M';
755
- }
756
- else {
757
- return Math.round(num / 1.0e6).toLocaleString() + 'M';
758
- }
759
- }
760
- // @ts-ignore
761
- // function getDomain(data, fields) {
762
- // // @ts-ignore
763
- // const fieldsArray = fields.map(elem => elem.field);
764
- // const [minValue, maxValue] = data.reduce(
765
- // // @ts-ignore
766
- // ([min, max], item) => [
767
- // // @ts-ignore
768
- // Math.min(min, ...fieldsArray.map(field => item[field])),
769
- // // @ts-ignore
770
- // Math.max(max, ...fieldsArray.map(field => item[field])),
771
- // ],
772
- // [Infinity, -Infinity]
773
- // );
774
- // const adjustedMin = Math.min(minValue, 0);
775
- // const padding = Math.round(0.2 * (maxValue - minValue));
776
- // const adjustedMax = maxValue + padding;
777
- // return [adjustedMin, adjustedMax];
778
- // }
779
- function getDomain(data, fields) {
780
- const fieldsArray = fields.map((elem) => elem.field);
781
- const numericValues = [];
782
- data.forEach((item) => {
783
- fieldsArray.forEach((field) => {
784
- let value = item[field];
785
- // Try to cast the value to a number
786
- const numericValue = parseFloat(value);
787
- if (!isNaN(numericValue)) {
788
- value = numericValue;
789
- }
790
- if (typeof value === 'number') {
791
- numericValues.push(value);
792
- }
793
- });
794
- });
795
- const [minValue, maxValue] = numericValues.reduce(([min, max], value) => [Math.min(min, value), Math.max(max, value)], [Infinity, -Infinity]);
796
- const adjustedMin = Math.min(minValue, 0);
797
- const padding = Math.round(0.2 * (maxValue - minValue));
798
- const adjustedMax = maxValue + padding;
799
- return [adjustedMin, adjustedMax];
800
- }
801
- const CustomizedTick = ({ x, y, payload, theme, }) => {
802
- // const { x, y, payload } = props;
803
- const maxLength = 10;
804
- const value = payload.value;
805
- const truncatedValue = value.length > maxLength ? value.substring(0, maxLength) + '...' : value;
806
- return ((0, jsx_runtime_1.jsx)("text", { xlinkTitle: value, fill: theme?.chartLabelColor, fontSize: 12, x: x, y: y + 15, width: 30, textAnchor: "middle", children: truncatedValue }));
807
- };
808
- function BarChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxisLabel, xAxisFormat, theme, comparison, }) {
809
- const newColors = (0, PieChart_1.findComplementaryAndAnalogousColors)(colors[0], colors[1]);
810
- if (!data || data.length === 0) {
811
- return ((0, jsx_runtime_1.jsx)("div", { style: {
812
- display: 'flex',
813
- flex: '1 0 auto',
814
- height: '100%',
815
- margin: 'auto',
816
- justifyContent: 'center',
817
- alignItems: 'center',
818
- fontSize: 13,
819
- color: theme.secondaryTextColor,
820
- }, children: "No results found for specified time period." }));
821
- }
822
- return ((0, jsx_runtime_1.jsx)("div", { style: {
823
- ...containerStyle,
824
- boxSizing: 'content-box',
825
- }, children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: '100%', children: (0, jsx_runtime_1.jsxs)(recharts_1.BarChart, { data: data,
826
- // stackOffset={'none'}
827
- layout: 'horizontal', children: [(0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { strokeDasharray: "3 3", horizontal: true, vertical: false }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis
828
- // width={56}
829
- , {
830
- // width={56}
831
- width: 44,
832
- // width={30}
833
- // textAnchor="start"
834
- hide: false, axisLine: false, tickLine: false, type: "number", domain: getDomain(data, yAxisFields),
835
- // domain={[0, 150]}
836
- tick: { transform: 'translate(-3, 0)' }, style: {
837
- fontSize: '12px',
838
- fontFamily: theme.chartLabelFontFamily,
839
- }, tickFormatter: (tick) => (0, axisFormatter_1.axisFormatter)({
840
- value: tick,
841
- field: yAxisFields[0].field || 'what',
842
- fields: yAxisFields,
843
- }) }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis, { hide: false, dataKey: xAxisField,
844
- // interval="preserveStartEnd"
845
- tick: { transform: 'translate(0, 6)' },
846
- //padding between labels and axis
847
- style: {
848
- fontSize: '12px',
849
- // TODO: generalize
850
- fontFamily: theme.chartLabelFontFamily,
851
- marginTop: '20px',
852
- }, tickLine: false, axisLine: false, tickFormatter: (tick) => (0, axisFormatter_1.axisFormatter)({
853
- value: tick,
854
- field: xAxisField,
855
- fields: [{ field: xAxisField, format: xAxisFormat }],
856
- }) }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { wrapperStyle: { outline: 'none', zIndex: 2 }, isAnimationActive: false, cursor: { fill: '#d1d5db', opacity: '0.15' }, content: ({ active, payload, label }) => {
857
- let label2;
858
- if (comparison &&
859
- payload?.length > 1 &&
860
- payload[0].payload[xAxisField + '2']) {
861
- label2 = payload[0].payload[xAxisField + '2'];
862
- }
863
- return ((0, jsx_runtime_1.jsx)(ChartTooltip, { theme: theme, active: active, payload: payload, label: label, label2: label2, dateFormatter: (value) => (0, valueFormatter_1.valueFormatter)({
864
- value,
865
- field: xAxisField,
866
- fields: [{ field: xAxisField, format: xAxisFormat }],
867
- }), valueFormatter: (value) => (0, valueFormatter_1.valueFormatter)({
868
- value,
869
- field: payload[0].dataKey,
870
- fields: yAxisFields,
871
- }), colors: colors }));
872
- }, position: { y: 0 } }), yAxisFields.map((elem, index) => ((0, jsx_runtime_1.jsx)(recharts_1.Bar, { name: elem.label, dataKey: elem.field, type: "linear",
873
- // stackId={stack || relative ? "a" : undefined}
874
- fill: selectColor(elem, colors, index),
875
- // barSize={20}
876
- isAnimationActive: true }, elem.field)))] }) }) }));
877
- }
878
- function removeQuotes(str) {
879
- if (str.startsWith('"') && str.endsWith('"')) {
880
- return str.slice(1, -1);
881
- }
882
- else {
883
- return str;
884
- }
885
- }
886
- function LineChart({ colors, yAxisFields, data, containerStyle, xAxisField, xAxisLabel, xAxisFormat, theme, comparison, }) {
887
- if (!yAxisFields || !yAxisFields.length) {
888
- return null;
889
- }
890
- if (!data || data.length === 0) {
891
- return ((0, jsx_runtime_1.jsx)("div", { style: {
333
+ if (chartTypes.includes('metric')) {
334
+ const data = dashboard[chartId] ? dashboard[chartId] : config;
335
+ return (_jsx("div", { style: {
336
+ fontFamily: theme?.fontFamily,
337
+ fontSize: 32,
338
+ color: theme?.primaryTextColor,
339
+ fontWeight: '600',
340
+ textOverflow: 'ellipsis',
341
+ margin: 0,
342
+ whiteSpace: 'nowrap',
343
+ boxSizing: 'content-box',
344
+ maxWidth: '100%',
345
+ textAlign: 'left',
346
+ overflow: 'hidden',
347
+ height: containerStyle?.height || '100%',
892
348
  display: 'flex',
893
- flex: '1 0 auto',
894
- height: '100%',
895
- margin: 'auto',
896
- justifyContent: 'center',
897
- alignItems: 'center',
898
- fontSize: 13,
899
- color: theme.secondaryTextColor,
900
- }, children: "No results found for specified time period." }));
349
+ flexDirection: 'column',
350
+ }, children: data.rows.length > 0 &&
351
+ valueFormatter({
352
+ value: data.rows[0][data.xAxisField],
353
+ field: data.xAxisField,
354
+ fields: [
355
+ {
356
+ field: data.xAxisField,
357
+ format: data.xAxisFormat,
358
+ },
359
+ ],
360
+ }) }));
901
361
  }
902
- return ((0, jsx_runtime_1.jsx)("div", { style: { ...containerStyle, boxSizing: 'content-box' }, children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: '100%', children: (0, jsx_runtime_1.jsxs)(recharts_1.ComposedChart, { data: data, children: [(0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { strokeDasharray: "3 3", horizontal: true, vertical: false }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis
903
- // hide={!showXAxis}
904
- , {
905
- // hide={!showXAxis}
906
- dataKey: xAxisField, tick: { transform: 'translate(0, 6)' },
907
- // ticks={
908
- // startEndOnly
909
- // ? [data[0][index], data[data.length - 1][index]]
910
- // : undefined
911
- // }
912
- style: {
913
- fontSize: '12px',
914
- fontFamily: theme?.chartLabelFontFamily ||
915
- theme?.fontFamily ||
916
- 'Inter; Helvetica',
917
- color: theme?.chartLabelColor || '#666666',
918
- },
919
- // interval="preserveStartEnd"
920
- interval: "preserveStartEnd",
921
- // interval={0}
922
- tickLine: false, axisLine: false, padding: { left: 10, right: 10 }, minTickGap: 5, tickFormatter: (tick) => (0, axisFormatter_1.axisFormatter)({
923
- value: tick,
924
- field: xAxisField,
925
- fields: [{ field: xAxisField, format: xAxisFormat }],
926
- }) }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis
927
- // textAnchor="left"
928
- // tickMargin={11}
929
- , {
930
- // textAnchor="left"
931
- // tickMargin={11}
932
- width: 44,
933
- // width={30}
934
- // hide={!showYAxis}
935
- axisLine: false, tickLine: false, type: "number",
936
- // domain={yAxisDomain as AxisDomain}
937
- domain: getDomain(data, yAxisFields), tick: { transform: 'translate(-3, 0)' }, style: {
938
- fontSize: '12px',
939
- fontFamily: theme?.chartLabelFontFamily ||
940
- theme?.fontFamily ||
941
- 'Inter; Helvetica',
942
- color: theme?.chartLabelColor || '#666666',
943
- }, tickFormatter: (value) => (0, axisFormatter_1.axisFormatter)({
944
- value,
945
- field: yAxisFields[0].field,
946
- fields: [
947
- ...yAxisFields,
948
- { field: xAxisField, format: xAxisFormat },
949
- ],
950
- }) }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { wrapperStyle: { outline: 'none' }, isAnimationActive: false, cursor: { stroke: '#d1d5db', strokeWidth: 1 }, content: ({ active, payload, label }) => {
951
- let label2;
952
- if (comparison &&
953
- payload?.length > 1 &&
954
- payload[0].payload[xAxisField + '2']) {
955
- label2 = payload[0].payload[xAxisField + '2'];
956
- }
957
- return ((0, jsx_runtime_1.jsx)(ChartTooltip, { active: active, payload: payload, label: label, label2: label2, dateFormatter: (value) => (0, valueFormatter_1.valueFormatter)({
958
- value,
959
- field: xAxisField,
960
- fields: [{ field: xAxisField, format: xAxisFormat }],
961
- }), valueFormatter: (value) => (0, valueFormatter_1.valueFormatter)({
962
- value,
963
- field: payload[0].dataKey,
964
- fields: [
965
- ...yAxisFields,
966
- { field: xAxisField, format: xAxisFormat },
967
- ],
968
- }), colors: colors, theme: theme }));
969
- }, position: { y: 0 } }), yAxisFields.map((elem, index) => ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: `gradient${index}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "5%", stopColor: selectColor(elem, colors, index), stopOpacity: 0.4 }), (0, jsx_runtime_1.jsx)("stop", { offset: "95%", stopColor: 'rgba(0,0,0,0)', stopOpacity: 0 })] }) }, `defs${elem.field + index}`))), yAxisFields.map((elem, index) => ((0, jsx_runtime_1.jsx)(recharts_1.Area, { name: elem.label, type: "linear", dataKey: elem.field, stroke: selectColor(elem, colors, index),
970
- // if hide area
971
- // fill="transparent"
972
- fill: `url(#gradient${index})`, strokeWidth: 2, dot: false, isAnimationActive: true }, elem.field)))] }) }) }));
973
- }
974
- exports.default = Chart;
975
- //# sourceMappingURL=Chart.js.map
362
+ return (_jsx(LineChart, { colors: colors, yAxisFields: yAxisFields, data: data, xAxisField: config
363
+ ? config.xAxisField
364
+ : bucketData
365
+ ? bucketData.xAxisField
366
+ : dashboard[chartId].xAxisField, xAxisLabel: config
367
+ ? config.xAxisLabel
368
+ : bucketData
369
+ ? bucketData.xAxisLabel
370
+ : dashboard[chartId].xAxisLabel, xAxisFormat: config
371
+ ? config.xAxisFormat
372
+ : bucketData
373
+ ? bucketData.xAxisFormat
374
+ : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive }));
375
+ };
376
+ export default Chart;