@quillsql/react 2.9.1 → 2.9.3

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 +82 -62
  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 +238 -336
  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
@@ -1,19 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatePivotTable = exports.isDateField = exports.generatePivotTableYAxis = exports.PivotModal = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
2
  // @ts-nocheck
6
- const react_1 = require("react");
7
- const Context_1 = require("../../Context");
8
- const dataFetcher_1 = require("../../utils/dataFetcher");
9
- const assets_1 = require("../../assets");
10
- const PivotList_1 = require("./PivotList");
11
- const date_fns_1 = require("date-fns");
12
- const valueFormatter_1 = require("../../utils/valueFormatter");
13
- const ChartBuilder_1 = require("../../ChartBuilder");
14
- const QuillCard_1 = require("../../components/QuillCard");
3
+ import { useCallback, useContext, useMemo, useState, useEffect, useRef, } from 'react';
4
+ import { ClientContext } from '../../Context';
5
+ import { getDataFromCloud } from '../../utils/dataFetcher';
6
+ import { RefreshIcon } from '../../assets';
7
+ import { PivotList, PivotCard } from './PivotList';
8
+ import { differenceInDays, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, eachYearOfInterval, endOfDay, isWithinInterval, subMilliseconds, min, max, } from 'date-fns';
9
+ import { valueFormatter } from '../../utils/valueFormatter';
10
+ import { numberFormatOptions, snakeCaseToTitleCase } from '../../ChartBuilder';
11
+ import { QuillCard } from '../../components/QuillCard';
15
12
  const QuillHover = () => {
16
- return ((0, jsx_runtime_1.jsx)("style", { children: `
13
+ return (_jsx("style", { children: `
17
14
  .quill-hover {
18
15
  background-color: white;
19
16
  }
@@ -25,8 +22,8 @@ const QuillHover = () => {
25
22
  }
26
23
  ` }));
27
24
  };
28
- const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, PopoverComponent, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, }) => {
29
- const [isLoading, setIsLoading] = (0, react_1.useState)(false);
25
+ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, PopoverComponent, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, }) => {
26
+ const [isLoading, setIsLoading] = useState(false);
30
27
  // for testing
31
28
  // const [createdPivots, setCreatedPivots] = useState<Pivot[]>([
32
29
  // {
@@ -57,16 +54,16 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
57
54
  // title: 'sum of amount by created_at and merchant',
58
55
  // },
59
56
  // ]);
60
- const [pivotUpdateIndex, setPivotUpdateIndex] = (0, react_1.useState)(null);
61
- const [selectedPivotType, setSelectedPivotType] = (0, react_1.useState)('recommended');
62
- const [errors, setErrors] = (0, react_1.useState)([]);
63
- const [client] = (0, react_1.useContext)(Context_1.ClientContext);
64
- const [divWidth, setDivWidth] = (0, react_1.useState)(0);
65
- const editModalRef = (0, react_1.useRef)();
57
+ const [pivotUpdateIndex, setPivotUpdateIndex] = useState(null);
58
+ const [selectedPivotType, setSelectedPivotType] = useState('recommended');
59
+ const [errors, setErrors] = useState([]);
60
+ const [client] = useContext(ClientContext);
61
+ const [divWidth, setDivWidth] = useState(0);
62
+ const editModalRef = useRef();
66
63
  const calculateWidth = () => {
67
64
  return editModalRef.current.offsetWidth;
68
65
  };
69
- (0, react_1.useEffect)(() => {
66
+ useEffect(() => {
70
67
  // Measure the width of the div and update state
71
68
  if (editModalRef.current) {
72
69
  setDivWidth(calculateWidth());
@@ -83,13 +80,13 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
83
80
  window.removeEventListener('resize', handleResize);
84
81
  };
85
82
  }, []);
86
- (0, react_1.useEffect)(() => {
83
+ useEffect(() => {
87
84
  // Measure the width of the div and update state
88
85
  if (editModalRef.current) {
89
86
  setDivWidth(calculateWidth());
90
87
  }
91
88
  }, [editModalRef.current, showUpdatePivot]);
92
- (0, react_1.useEffect)(() => {
89
+ useEffect(() => {
93
90
  setSelectedPivotIndex(-1);
94
91
  setPivotUpdateIndex(null);
95
92
  setSelectedPivotType(undefined);
@@ -100,7 +97,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
100
97
  setIsOpen(false);
101
98
  setErrors([]);
102
99
  }, [selectedTable]);
103
- const columnsToShow = (0, react_1.useMemo)(() => {
100
+ const columnsToShow = useMemo(() => {
104
101
  return (columns || []).reduce((map, col) => {
105
102
  // only use columns shown in the report builder's table
106
103
  // also filter out id
@@ -110,7 +107,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
110
107
  return map;
111
108
  }, {});
112
109
  }, [columns]);
113
- const selectedPivotTable = (0, react_1.useMemo)(() => {
110
+ const selectedPivotTable = useMemo(() => {
114
111
  if (selectedPivotIndex === -1) {
115
112
  return null;
116
113
  }
@@ -122,7 +119,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
122
119
  columns: columns,
123
120
  };
124
121
  }, [selectedPivotIndex, data, dateRange, createdPivots]);
125
- const columnSelectOptions = (0, react_1.useMemo)(() => {
122
+ const columnSelectOptions = useMemo(() => {
126
123
  return [
127
124
  { label: 'Select', value: '' },
128
125
  ...Object.keys(columnsToShow).map((key) => {
@@ -161,7 +158,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
161
158
  const onEditRecommendedPivot = (pivot, index) => {
162
159
  onEditPivot(pivot, null);
163
160
  };
164
- const refreshPivots = (0, react_1.useCallback)(async () => {
161
+ const refreshPivots = useCallback(async () => {
165
162
  if (isLoading || Object.keys(columnsToShow).length === 0) {
166
163
  return;
167
164
  }
@@ -178,7 +175,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
178
175
  }, {}),
179
176
  };
180
177
  try {
181
- const resp = await (0, dataFetcher_1.getDataFromCloud)(client, 'pivotai', cloudBody);
178
+ const resp = await getDataFromCloud(client, 'pivotai', cloudBody);
182
179
  const recommendedPivots = resp?.data?.pivotTables || [];
183
180
  // for testing if needed
184
181
  // const recommendedPivots = [
@@ -241,26 +238,26 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
241
238
  }
242
239
  setIsLoading(false);
243
240
  }, [selectedTable, data, columnsToShow, isLoading]);
244
- (0, react_1.useEffect)(() => {
241
+ useEffect(() => {
245
242
  if (recommendedPivots.length === 0) {
246
243
  refreshPivots();
247
244
  }
248
245
  }, [refreshPivots]);
249
- const recommendedPivotTables = (0, react_1.useMemo)(() => {
246
+ const recommendedPivotTables = useMemo(() => {
250
247
  const pts = recommendedPivots.map((p) => {
251
248
  const { rows, columns } = generatePivotTable(p, data, dateRange, 6);
252
249
  return { pivot: p, rows, columns };
253
250
  });
254
251
  return pts;
255
252
  }, [recommendedPivots, data]);
256
- const createdPivotTables = (0, react_1.useMemo)(() => {
253
+ const createdPivotTables = useMemo(() => {
257
254
  const pts = createdPivots.map((p) => {
258
255
  const { rows, columns } = generatePivotTable(p, data, dateRange, 6);
259
256
  return { pivot: p, rows, columns };
260
257
  });
261
258
  return pts;
262
259
  }, [createdPivots, data]);
263
- const samplePivotTable = (0, react_1.useMemo)(() => {
260
+ const samplePivotTable = useMemo(() => {
264
261
  if (!pivotAggregation || !pivotRowField) {
265
262
  return null;
266
263
  }
@@ -281,15 +278,15 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
281
278
  pivotColumnField,
282
279
  columnsToShow,
283
280
  ]);
284
- return ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
281
+ return (_jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsxs("div", { style: {
285
282
  position: 'relative',
286
283
  display: 'inline-block',
287
284
  textAlign: 'left',
288
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
285
+ }, children: [_jsx("div", { style: {
289
286
  display: 'flex',
290
287
  flexDirection: 'row',
291
288
  alignItems: 'center',
292
- }, children: selectedPivotIndex !== -1 && ((0, jsx_runtime_1.jsx)("span", { style: {
289
+ }, children: selectedPivotIndex !== -1 && (_jsx("span", { style: {
293
290
  height: 10,
294
291
  width: 10,
295
292
  backgroundColor: theme.primaryButtonColor,
@@ -297,7 +294,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
297
294
  position: 'absolute',
298
295
  top: -2,
299
296
  right: -2,
300
- } })) }), (0, jsx_runtime_1.jsx)(PopoverComponent, { onClose: () => {
297
+ } })) }), _jsx(PopoverComponent, { onClose: () => {
301
298
  setShowUpdatePivot(false);
302
299
  setPopUpTitle('Add Pivot');
303
300
  }, style: rightAlign ? { right: 0 } : {}, parentRef: parentRef, showTrigger: showTrigger, label: triggerButtonText, isOpen: isOpen, setIsOpen: setIsOpen, onClick: () => {
@@ -309,52 +306,52 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
309
306
  refreshPivots();
310
307
  }
311
308
  setShowUpdatePivot(false);
312
- }, children: (0, jsx_runtime_1.jsx)("div", { children: showUpdatePivot ? ((0, jsx_runtime_1.jsxs)("div", { className: "ref-in-use", ref: editModalRef, style: {
309
+ }, children: _jsx("div", { children: showUpdatePivot ? (_jsxs("div", { className: "ref-in-use", ref: editModalRef, style: {
313
310
  backgroundColor: 'rgb(255, 255, 255)',
314
311
  display: 'flex',
315
312
  flexDirection: 'column',
316
- }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { children: popUpTitle }), (0, jsx_runtime_1.jsx)("div", { style: { height: 12 } }), (0, jsx_runtime_1.jsx)("div", { style: { width: divWidth }, children: samplePivotTable ? ((0, jsx_runtime_1.jsx)("div", { style: {
313
+ }, children: [_jsx(HeaderComponent, { children: popUpTitle }), _jsx("div", { style: { height: 12 } }), _jsx("div", { style: { width: divWidth }, children: samplePivotTable ? (_jsx("div", { style: {
317
314
  marginBottom: 20,
318
315
  minHeight: 160,
319
- }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, onSelectPivot: () => { }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight: 140, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) })) : ((0, jsx_runtime_1.jsx)("div", { style: { marginBottom: 20, maxWidth: 470 }, children: (0, jsx_runtime_1.jsx)(QuillCard_1.QuillCard, { theme: theme, clickable: false, children: (0, jsx_runtime_1.jsx)("div", { style: {
316
+ }, children: _jsx(PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, onSelectPivot: () => { }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight: 140, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) })) : (_jsx("div", { style: { marginBottom: 20, maxWidth: 470 }, children: _jsx(QuillCard, { theme: theme, clickable: false, children: _jsx("div", { style: {
320
317
  color: theme.secondaryTextColor,
321
- }, children: "Select a row field and aggregation type to see a preview" }) }) })) }), (0, jsx_runtime_1.jsxs)("div", { style: {
318
+ }, children: "Select a row field and aggregation type to see a preview" }) }) })) }), _jsxs("div", { style: {
322
319
  display: 'flex',
323
320
  flexDirection: 'column',
324
321
  gap: 10,
325
322
  alignItems: 'center',
326
323
  justifyContent: 'space-between',
327
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
324
+ }, children: [_jsxs("div", { style: {
328
325
  display: 'flex',
329
326
  flexDirection: 'row',
330
327
  gap: 20,
331
328
  marginBottom: 5,
332
- }, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { children: "Row Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: 'Row Field', id: "pivot-row-field", value: pivotRowField, onChange: (e) => {
329
+ }, children: [_jsxs("div", { children: [_jsx(LabelComponent, { children: "Row Field" }), _jsx(SelectComponent, { label: 'Row Field', id: "pivot-row-field", value: pivotRowField, onChange: (e) => {
333
330
  setPivotRowField(e === '' ? undefined : e);
334
- }, options: columnSelectOptions, theme: theme })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { children: "Column Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: 'Column Field', id: "pivot-row-field", value: pivotColumnField, onChange: (e) => {
331
+ }, options: columnSelectOptions, theme: theme })] }), _jsxs("div", { children: [_jsx(LabelComponent, { children: "Column Field" }), _jsx(SelectComponent, { label: 'Column Field', id: "pivot-row-field", value: pivotColumnField, onChange: (e) => {
335
332
  setPivotColumnField(e === '' ? undefined : e);
336
- }, options: columnSelectOptions, theme: theme })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
333
+ }, options: columnSelectOptions, theme: theme })] })] }), _jsxs("div", { style: {
337
334
  display: 'flex',
338
335
  flexDirection: 'row',
339
336
  gap: 20,
340
337
  marginBottom: 20,
341
- }, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { children: "Value Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: 'Value Field', id: "pivot-row-field", value: pivotValueField, onChange: (e) => {
338
+ }, children: [_jsxs("div", { children: [_jsx(LabelComponent, { children: "Value Field" }), _jsx(SelectComponent, { label: 'Value Field', id: "pivot-row-field", value: pivotValueField, onChange: (e) => {
342
339
  setPivotValueField(e === '' ? undefined : e);
343
340
  }, options: pivotAggregation === 'count'
344
341
  ? columnSelectOptions
345
342
  : columnSelectOptions.filter((option) => {
346
343
  return (option.value === '' ||
347
- ChartBuilder_1.numberFormatOptions.includes(columns.find((col) => col.field === option.value)?.format));
348
- }), theme: theme })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(LabelComponent, { children: "Aggregation Type" }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: 'Aggregation Type', id: "pivot-row-field", value: pivotAggregation, theme: theme, onChange: (e) => {
344
+ numberFormatOptions.includes(columns.find((col) => col.field === option.value)?.format));
345
+ }), theme: theme })] }), _jsxs("div", { children: [_jsx(LabelComponent, { children: "Aggregation Type" }), _jsx(SelectComponent, { label: 'Aggregation Type', id: "pivot-row-field", value: pivotAggregation, theme: theme, onChange: (e) => {
349
346
  if (e !== 'count' &&
350
347
  pivotValueField &&
351
- !ChartBuilder_1.numberFormatOptions.includes(columns.find((col) => col.field === pivotValueField)?.format)) {
348
+ !numberFormatOptions.includes(columns.find((col) => col.field === pivotValueField)?.format)) {
352
349
  setPivotValueField(null);
353
350
  }
354
351
  setPivotAggregation(e === '' ? undefined : e);
355
352
  }, options: ['', 'sum', 'average', 'count'].map((option) => {
356
353
  return { label: option || 'Select', value: option };
357
- }) })] })] })] }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(ButtonComponent, { id: "custom-button", onClick: () => {
354
+ }) })] })] })] }), _jsx("div", { children: _jsx(ButtonComponent, { id: "custom-button", onClick: () => {
358
355
  const errors = [];
359
356
  if (!pivotRowField) {
360
357
  errors.push('Row field cannot be empty');
@@ -381,13 +378,13 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
381
378
  setPopUpTitle('Add Pivot');
382
379
  }
383
380
  setErrors(errors);
384
- }, label: popUpTitle }) }), (0, jsx_runtime_1.jsx)("div", { children: errors.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { style: {
381
+ }, label: popUpTitle }) }), _jsx("div", { children: errors.length > 0 && (_jsxs("div", { children: [_jsx("div", { style: {
385
382
  fontSize: 14,
386
383
  marginBottom: '6px',
387
384
  marginTop: '12px',
388
385
  fontWeight: '600',
389
386
  color: theme.secondaryTextColor,
390
- }, children: "Pivot Errors" }), errors.map((error, index) => ((0, jsx_runtime_1.jsx)("div", { style: {
387
+ }, children: "Pivot Errors" }), errors.map((error, index) => (_jsx("div", { style: {
391
388
  borderRadius: 8,
392
389
  backgroundColor: '#FF9494',
393
390
  paddingLeft: '12px',
@@ -400,7 +397,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
400
397
  fontFamily: theme?.fontFamily,
401
398
  color: 'white',
402
399
  marginBottom: 5,
403
- }, children: error }, index)))] })) })] })) : ((0, jsx_runtime_1.jsx)("div", { style: {
400
+ }, children: error }, index)))] })) })] })) : (_jsx("div", { style: {
404
401
  display: 'flex',
405
402
  flexDirection: 'column',
406
403
  fontFamily: theme?.fontFamily,
@@ -408,20 +405,20 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
408
405
  width: selectedPivotTable ? 500 : 600,
409
406
  maxHeight: 600,
410
407
  overflowY: 'scroll',
411
- }, children: selectedPivotIndex >= 0 ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", { onClick: () => {
408
+ }, children: selectedPivotIndex >= 0 ? (_jsx("div", { children: _jsx("div", { onClick: () => {
412
409
  setPopUpTitle('Edit Pivot');
413
410
  onEditPivot(createdPivots[0], 0);
414
- }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
411
+ }, children: _jsx(PivotCard, { pivotTable: {
415
412
  pivot: selectedPivotTable?.pivot,
416
413
  rows: selectedPivotTable?.rows,
417
414
  columns: selectedPivotTable?.columns,
418
415
  }, theme: theme, index: 0, onSelectPivot: () => { }, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, onClose: () => {
419
416
  removePivot();
420
- }, clickable: true, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) }) })) : ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
417
+ }, clickable: true, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent }) }) })) : (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: {
421
418
  fontWeight: '600',
422
419
  marginBottom: 5,
423
420
  fontSize: 18,
424
- }, children: "Recommended Pivots" }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { onClick: refreshPivots, style: {
421
+ }, children: "Recommended Pivots" }), _jsx("div", { children: _jsxs("div", { onClick: refreshPivots, style: {
425
422
  color: theme?.secondaryTextColor,
426
423
  cursor: 'pointer',
427
424
  marginTop: 0,
@@ -436,7 +433,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
436
433
  paddingTop: 6,
437
434
  paddingBottom: 6,
438
435
  borderRadius: 5,
439
- }, className: "quill-hover", children: [(0, jsx_runtime_1.jsx)(QuillHover, {}), (0, jsx_runtime_1.jsx)(assets_1.RefreshIcon, { style: { marginRight: 5 } }), "Refresh"] }) }), isLoading ? ((0, jsx_runtime_1.jsxs)("div", { style: {
436
+ }, className: "quill-hover", children: [_jsx(QuillHover, {}), _jsx(RefreshIcon, { style: { marginRight: 5 } }), "Refresh"] }) }), isLoading ? (_jsxs("div", { style: {
440
437
  background: theme.backgroundColor,
441
438
  width: 250,
442
439
  minWidth: 250,
@@ -447,20 +444,19 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
447
444
  display: 'flex',
448
445
  margin: '0px auto',
449
446
  justifyContent: 'center',
450
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: { height: 100 } }), (0, jsx_runtime_1.jsxs)("svg", { width: "24", height: "24", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 6)", stroke: theme?.primaryTextColor || '#364153', fill: "none", transform: "rotate(-90 12 12)", children: (0, jsx_runtime_1.jsx)("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "-180 12 12", to: "180 12 12", dur: "0.8s", repeatCount: "indefinite" }) }), (0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 1 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: (0, jsx_runtime_1.jsx)("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] })] })) : ((0, jsx_runtime_1.jsxs)("div", { children: [recommendedPivotTables.length == 0 && ((0, jsx_runtime_1.jsx)("div", { style: { marginBottom: 20 }, children: "There are currently no recommended pivots available." })), (0, jsx_runtime_1.jsx)(PivotList_1.PivotList, { recommendedPivotTables: recommendedPivotTables, createdPivotTables: createdPivotTables, theme: theme, onSelectRecommendedPivot: onSelectRecommendedPivot, onSelectCreatedPivot: onSelectCreatedPivot, selectedPivotIndex: selectedPivotIndex, selectedPivotType: selectedPivotType, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, onEditRecommendedPivot: onEditRecommendedPivot, onEditCreatedPivot: onEditPivot, showCreatePivot: true, showPivotEditButton: showPivotEditButton, LabelComponent: LabelComponent, TextComponent: TextComponent })] }))] })) })) }) })] }) }));
447
+ }, children: [_jsx("div", { style: { height: 100 } }), _jsxs("svg", { width: "24", height: "24", children: [_jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 6)", stroke: theme?.primaryTextColor || '#364153', fill: "none", transform: "rotate(-90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "-180 12 12", to: "180 12 12", dur: "0.8s", repeatCount: "indefinite" }) }), _jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 1 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] })] })) : (_jsxs("div", { children: [recommendedPivotTables.length == 0 && (_jsx("div", { style: { marginBottom: 20 }, children: "There are currently no recommended pivots available." })), _jsx(PivotList, { recommendedPivotTables: recommendedPivotTables, createdPivotTables: createdPivotTables, theme: theme, onSelectRecommendedPivot: onSelectRecommendedPivot, onSelectCreatedPivot: onSelectCreatedPivot, selectedPivotIndex: selectedPivotIndex, selectedPivotType: selectedPivotType, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, onEditRecommendedPivot: onEditRecommendedPivot, onEditCreatedPivot: onEditPivot, showCreatePivot: true, showPivotEditButton: showPivotEditButton, LabelComponent: LabelComponent, TextComponent: TextComponent })] }))] })) })) }) })] }) }));
451
448
  };
452
- exports.PivotModal = PivotModal;
453
- function generatePivotTableYAxis(pivot, cols, format) {
449
+ export function generatePivotTableYAxis(pivot, cols, format) {
454
450
  // Use the column field for the field and label if there is one
455
451
  if (pivot.columnField) {
456
452
  return cols.slice(1).map(({ field, label }) => ({ field, label, format }));
457
453
  }
458
454
  // For count aggregations, use 'count' for the label
459
- if (pivot?.aggregationType === "count") {
460
- return [{ field: pivot.valueField, label: "count", format: format }];
455
+ if (pivot?.aggregationType === 'count') {
456
+ return [{ field: pivot.valueField, label: 'count', format: format }];
461
457
  }
462
458
  // For average aggregations, use 'average <label>' for the label
463
- if (pivot?.aggregationType === "average") {
459
+ if (pivot?.aggregationType === 'average') {
464
460
  const label = `average ${pivot.valueField}`;
465
461
  return [{ field: pivot.valueField, label, format: format }];
466
462
  }
@@ -473,9 +469,8 @@ function generatePivotTableYAxis(pivot, cols, format) {
473
469
  },
474
470
  ];
475
471
  }
476
- exports.generatePivotTableYAxis = generatePivotTableYAxis;
477
472
  function generatePivotTitle(pivot) {
478
- return (0, ChartBuilder_1.snakeCaseToTitleCase)(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
473
+ return snakeCaseToTitleCase(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
479
474
  }
480
475
  function getDateRange(dateRange, column, data) {
481
476
  if (!dateRange || !dateRange[0]) {
@@ -494,9 +489,9 @@ function getDateRange(dateRange, column, data) {
494
489
  for (let i = 0; i < data.length; i++) {
495
490
  if (data[i][column]) {
496
491
  const value = new Date(data[i][column]);
497
- lastestDate = lastestDate === null ? value : (0, date_fns_1.max)([lastestDate, value]);
492
+ lastestDate = lastestDate === null ? value : max([lastestDate, value]);
498
493
  earliestDate =
499
- earliestDate === null ? value : (0, date_fns_1.min)([earliestDate, value]);
494
+ earliestDate === null ? value : min([earliestDate, value]);
500
495
  }
501
496
  }
502
497
  return { start: earliestDate, end: lastestDate };
@@ -507,20 +502,30 @@ function getDateRange(dateRange, column, data) {
507
502
  }
508
503
  function getDateBuckets(dateRange, column, data) {
509
504
  if (!dateRange || !dateRange[0]) {
510
- return (0, date_fns_1.eachMonthOfInterval)(getDateRange(dateRange, column, data));
505
+ return eachMonthOfInterval(getDateRange(dateRange, column, data));
511
506
  }
512
- const dayDifference = (0, date_fns_1.differenceInDays)(new Date(dateRange[1]), new Date(dateRange[0]));
507
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
508
+ return dayDifferenceToInterval(dayDifference, dateRange);
509
+ }
510
+ function getCompDateBuckets(dateRange, compDateRange, column, data) {
511
+ if (!dateRange || !dateRange[0]) {
512
+ return eachMonthOfInterval(getDateRange(dateRange, column, data));
513
+ }
514
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
515
+ return dayDifferenceToInterval(dayDifference, compDateRange);
516
+ }
517
+ function dayDifferenceToInterval(dayDifference, dateRange) {
513
518
  if (dayDifference < 14) {
514
- return (0, date_fns_1.eachDayOfInterval)({ start: dateRange[0], end: dateRange[1] });
519
+ return eachDayOfInterval({ start: dateRange[0], end: dateRange[1] });
515
520
  }
516
521
  else if (dayDifference < 60) {
517
- return (0, date_fns_1.eachWeekOfInterval)({ start: dateRange[0], end: dateRange[1] }, { weekStartsOn: 1 });
522
+ return eachWeekOfInterval({ start: dateRange[0], end: dateRange[1] }, { weekStartsOn: 1 });
518
523
  }
519
524
  else if (dayDifference < 365 * 3) {
520
- return (0, date_fns_1.eachMonthOfInterval)({ start: dateRange[0], end: dateRange[1] });
525
+ return eachMonthOfInterval({ start: dateRange[0], end: dateRange[1] });
521
526
  }
522
527
  else {
523
- return (0, date_fns_1.eachYearOfInterval)({ start: dateRange[0], end: dateRange[1] });
528
+ return eachYearOfInterval({ start: dateRange[0], end: dateRange[1] });
524
529
  }
525
530
  }
526
531
  function getDateString(value, dateRange) {
@@ -529,7 +534,7 @@ function getDateString(value, dateRange) {
529
534
  format = 'MMM_yyyy';
530
535
  }
531
536
  else {
532
- const dayDifference = (0, date_fns_1.differenceInDays)(new Date(dateRange[1]), new Date(dateRange[0]));
537
+ const dayDifference = differenceInDays(new Date(dateRange[1]), new Date(dateRange[0]));
533
538
  if (dayDifference < 14) {
534
539
  format = 'MMM_dd_yyyy';
535
540
  }
@@ -543,24 +548,23 @@ function getDateString(value, dateRange) {
543
548
  format = 'yyyy';
544
549
  }
545
550
  }
546
- return (0, valueFormatter_1.valueFormatter)({
551
+ return valueFormatter({
547
552
  value,
548
553
  field: 'date',
549
554
  fields: [{ field: 'date', format }],
550
555
  });
551
556
  }
552
- function isDateField(fieldType) {
557
+ export function isDateField(fieldType) {
553
558
  return (fieldType === 'date' ||
554
559
  fieldType === 'datetime' ||
555
560
  fieldType === 'timestamp' ||
556
561
  fieldType === 'timestamptz');
557
562
  }
558
- exports.isDateField = isDateField;
559
- function generatePivotTable(pivot, data, dateRange, rowLimit = -1) {
563
+ export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = null) {
560
564
  const pivotRows = [];
561
- const uniqueRows = isDateField(pivot.rowFieldType)
565
+ const uniqueRows = (isDateField(pivot.rowFieldType)
562
566
  ? getDateBuckets(dateRange, pivot.rowField, data)
563
- : [...new Set(data.map((item) => item[pivot.rowField]))];
567
+ : [...new Set(data.map((item) => item[pivot.rowField]))]).filter((row) => Boolean(row));
564
568
  const rowDateRange = pivot.rowField
565
569
  ? getDateRange(dateRange, pivot.rowField, data)
566
570
  : null;
@@ -568,11 +572,49 @@ function generatePivotTable(pivot, data, dateRange, rowLimit = -1) {
568
572
  ? getDateRange(dateRange, pivot.columnField, data)
569
573
  : null;
570
574
  // If columnField is not provided, we will not be using uniqueColumns
571
- const uniqueColumns = pivot.columnField && pivot.columnField.trim()
575
+ const uniqueColumns = (pivot.columnField && pivot.columnField.trim()
572
576
  ? isDateField(pivot.columnFieldType)
573
577
  ? getDateBuckets(dateRange, pivot.columnField, data)
574
578
  : [...new Set(data.map((item) => item[pivot.columnField || '']))]
575
- : [pivot.valueField];
579
+ : [pivot.valueField]).filter((col) => Boolean(col));
580
+ // Map from new dates to their corresponding prior dates
581
+ const COL_DATE_MAP = {};
582
+ const ROW_DATE_MAP = {};
583
+ // add in the comparison columns for all columns in the pivot
584
+ let compUniqueRows = [];
585
+ let compRowDateRange = [];
586
+ if (isComparison) {
587
+ if (pivot.columnField) {
588
+ const col = pivot.columnField;
589
+ const row = pivot.rowField;
590
+ const isDateCol = isDateField(pivot.columnFieldType);
591
+ const isDateRow = isDateField(pivot.rowFieldType);
592
+ data.forEach((item) => {
593
+ if (isDateCol) {
594
+ const key = getDateString(item[col], dateRange);
595
+ const value = getDateString(item[`comparison_${col}`], dateRange);
596
+ COL_DATE_MAP[key] = value;
597
+ }
598
+ if (isDateRow) {
599
+ const key = getDateString(item[row], dateRange);
600
+ const value = getDateString(item[`comparison_${row}`], dateRange);
601
+ ROW_DATE_MAP[key] = value;
602
+ }
603
+ });
604
+ }
605
+ else {
606
+ const primaryColumns = [...uniqueColumns];
607
+ for (const primaryKey of primaryColumns) {
608
+ uniqueColumns.push(`comparison_${primaryKey}`);
609
+ }
610
+ }
611
+ compUniqueRows = (isDateField(pivot.rowFieldType)
612
+ ? getCompDateBuckets(dateRange, compRange ?? dateRange, pivot.rowField, data)
613
+ : [...new Set(data.map((item) => item[pivot.rowField]))]).filter((row) => Boolean(row));
614
+ compRowDateRange = pivot.rowField
615
+ ? getDateRange(compRange ?? dateRange, pivot.rowField, data)
616
+ : null;
617
+ }
576
618
  const rowsToGenerate = rowLimit !== -1 && rowLimit <= uniqueRows.length
577
619
  ? uniqueRows.slice(0, rowLimit + 1)
578
620
  : uniqueRows;
@@ -589,78 +631,149 @@ function generatePivotTable(pivot, data, dateRange, rowLimit = -1) {
589
631
  : rowValue,
590
632
  };
591
633
  uniqueColumns.forEach((colValue, colIndex) => {
592
- let filteredData;
634
+ let comparisonFilteredData = [];
635
+ let filteredData = [];
636
+ let comparisonValue;
593
637
  let value;
594
638
  const nextRowValue = isDateField(pivot.rowFieldType)
595
- ? uniqueRows[rowIndex + 1] || (0, date_fns_1.endOfDay)(rowDateRange.end)
639
+ ? uniqueRows[rowIndex + 1] ?? endOfDay(rowDateRange.end)
640
+ : null;
641
+ const compRowValue = compUniqueRows[rowIndex];
642
+ const compNextRowValue = isDateField(pivot.rowFieldType)
643
+ ? compUniqueRows[rowIndex + 1] ?? endOfDay(compRowDateRange.end)
596
644
  : null;
597
645
  if (pivot.columnField) {
598
646
  const nextColumnValue = isDateField(pivot.columnFieldType)
599
- ? uniqueColumns[colIndex + 1] || (0, date_fns_1.endOfDay)(columnDateRange.end)
647
+ ? uniqueColumns[colIndex + 1] || endOfDay(columnDateRange.end)
600
648
  : null;
601
649
  // If columnField is provided, filter by both rowField and columnField
602
650
  if (isDateField(pivot.columnFieldType) &&
603
651
  isDateField(pivot.rowFieldType)) {
604
652
  filteredData = data.filter((item) => {
605
- return ((0, date_fns_1.isWithinInterval)(new Date(item[pivot.rowField]), {
653
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
606
654
  start: rowValue,
607
- end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
655
+ end: subMilliseconds(nextRowValue, 1),
608
656
  }) &&
609
- (0, date_fns_1.isWithinInterval)(new Date(item[pivot.columnField]), {
657
+ isWithinInterval(new Date(item[pivot.columnField]), {
610
658
  start: colValue,
611
- end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
659
+ end: subMilliseconds(nextColumnValue, 1),
612
660
  }));
613
661
  });
662
+ if (isComparison) {
663
+ comparisonFilteredData = data.filter((item) => {
664
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
665
+ start: rowValue,
666
+ end: subMilliseconds(nextRowValue, 1),
667
+ }) &&
668
+ isWithinInterval(new Date(item[pivot.columnField]), {
669
+ start: colValue,
670
+ end: subMilliseconds(nextColumnValue, 1),
671
+ }));
672
+ });
673
+ }
614
674
  }
615
675
  else if (isDateField(pivot.columnFieldType) &&
616
676
  !isDateField(pivot.rowFieldType)) {
617
677
  filteredData = data.filter((item) => {
618
678
  return (item[pivot.rowField] === rowValue &&
619
- (0, date_fns_1.isWithinInterval)(new Date(item[pivot.columnField]), {
679
+ isWithinInterval(new Date(item[pivot.columnField]), {
620
680
  start: colValue,
621
- end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
681
+ end: subMilliseconds(nextColumnValue, 1),
622
682
  }));
623
683
  });
684
+ if (isComparison) {
685
+ comparisonFilteredData = data.filter((item) => {
686
+ return (item[`comparison_${pivot.rowField}`] === rowValue &&
687
+ isWithinInterval(new Date(item[pivot.columnField]), {
688
+ start: colValue,
689
+ end: subMilliseconds(nextColumnValue, 1),
690
+ }));
691
+ });
692
+ }
624
693
  }
625
694
  else if (!isDateField(pivot.columnFieldType) &&
626
695
  isDateField(pivot.rowFieldType)) {
627
696
  filteredData = data.filter((item) => {
628
- return ((0, date_fns_1.isWithinInterval)(new Date(item[pivot.rowField]), {
697
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
629
698
  start: rowValue,
630
- end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
699
+ end: subMilliseconds(nextRowValue, 1),
631
700
  }) && item[pivot.columnField || ''] === colValue);
632
701
  });
702
+ if (isComparison) {
703
+ comparisonFilteredData = data.filter((item) => {
704
+ return (isWithinInterval(new Date(item[pivot.rowField]), {
705
+ start: rowValue,
706
+ end: subMilliseconds(nextRowValue, 1),
707
+ }) &&
708
+ item[`comparison_${pivot.columnField}` || ''] === colValue);
709
+ });
710
+ }
633
711
  }
634
712
  else {
635
713
  filteredData = data.filter((item) => {
636
714
  return (item[pivot.rowField] === rowValue &&
637
715
  item[pivot.columnField || ''] === colValue);
638
716
  });
717
+ if (isComparison) {
718
+ comparisonFilteredData = data.filter((item) => {
719
+ return (item[`comparison_${pivot.rowField}`] === rowValue &&
720
+ item[`comparison_${pivot.columnField}`] === colValue);
721
+ });
722
+ }
639
723
  }
640
724
  }
641
725
  else {
726
+ // NOTE: For 1D columns, the comparisons are handled inside the colvalue
727
+ // so there is no need to filter for comparisonFilteredData here.
642
728
  // If columnField is not provided, filter by rowField only
643
- filteredData = isDateField(pivot.rowFieldType)
644
- ? data.filter((item) => {
645
- return (0, date_fns_1.isWithinInterval)(new Date(item[pivot.rowField]), {
646
- start: rowValue,
647
- end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
648
- });
649
- })
650
- : data.filter((item) => item[pivot.rowField] === rowValue);
729
+ if (colValue.startsWith('comparison_')) {
730
+ filteredData = isDateField(pivot.rowFieldType)
731
+ ? data.filter((item) => {
732
+ return (compRowValue &&
733
+ isWithinInterval(new Date(item[`comparison_${pivot.rowField}`]), {
734
+ start: compRowValue,
735
+ end: subMilliseconds(compNextRowValue, 1),
736
+ }));
737
+ })
738
+ : data.filter((item) => item[`comparison_${pivot.rowField}`] === compRowValue);
739
+ }
740
+ else {
741
+ filteredData = isDateField(pivot.rowFieldType)
742
+ ? data.filter((item) => {
743
+ return isWithinInterval(new Date(item[pivot.rowField]), {
744
+ start: rowValue,
745
+ end: subMilliseconds(nextRowValue, 1),
746
+ });
747
+ })
748
+ : data.filter((item) => item[pivot.rowField] === rowValue);
749
+ }
651
750
  }
652
751
  // Aggregation logic remains the same
752
+ const key = pivot.columnField && pivot.columnField.trim()
753
+ ? pivot.valueField
754
+ : colValue;
653
755
  switch (pivot.aggregationType) {
654
756
  case 'sum':
655
- value = filteredData.reduce((sum, item) => sum + parseFloat(item[pivot.valueField] || 0), 0);
757
+ value = filteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0);
758
+ if (isComparison) {
759
+ comparisonValue = comparisonFilteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0);
760
+ }
656
761
  break;
657
762
  case 'count':
658
763
  value = filteredData.length;
764
+ if (isComparison) {
765
+ comparisonValue = comparisonFilteredData.length;
766
+ }
659
767
  break;
660
768
  case 'average':
661
769
  value = filteredData.length
662
- ? filteredData.reduce((sum, item) => sum + parseFloat(item[pivot.valueField] || 0), 0) / filteredData.length
770
+ ? filteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0) / filteredData.length
663
771
  : 0;
772
+ if (isComparison) {
773
+ comparisonValue = comparisonFilteredData.length
774
+ ? comparisonFilteredData.reduce((sum, item) => sum + parseFloat(item[key] ?? 0), 0) / comparisonFilteredData.length
775
+ : 0;
776
+ }
664
777
  break;
665
778
  // Implement other aggregation types as needed
666
779
  default:
@@ -671,15 +784,46 @@ function generatePivotTable(pivot, data, dateRange, rowLimit = -1) {
671
784
  row[isDateField(pivot.columnFieldType)
672
785
  ? getDateString(colValue, dateRange)
673
786
  : colValue] = pivot.aggregationType === 'count' ? value : value.toFixed(2);
787
+ if (isComparison && pivot.columnField) {
788
+ if (isDateField(pivot.columnFieldType)) {
789
+ row[`comparison_${getDateString(colValue, dateRange)}`] =
790
+ pivot.aggregationType === 'count'
791
+ ? comparisonValue
792
+ : comparisonValue.toFixed(2);
793
+ }
794
+ else {
795
+ row[`comparison_${colValue}`] =
796
+ pivot.aggregationType === 'count'
797
+ ? comparisonValue
798
+ : comparisonValue.toFixed(2);
799
+ }
800
+ }
674
801
  });
675
802
  pivotRows.push(row);
676
803
  });
677
- // need to ensure that the rowField is the first column
678
- uniqueColumns.unshift(pivot.rowField);
679
- return {
680
- rows: pivotRows,
681
- columns: uniqueColumns.map((column, index) => {
682
- const columnName = isDateField(pivot.columnFieldType) && index > 0 // first row is rowField
804
+ const columns = [
805
+ {
806
+ label: pivot.rowField === null
807
+ ? 'Null'
808
+ : pivot.rowField === false
809
+ ? 'False'
810
+ : snakeCaseToTitleCase(pivot.rowField),
811
+ field: pivot.rowField,
812
+ },
813
+ ...(!pivot.columnField
814
+ ? [
815
+ {
816
+ label: pivot.rowField === null
817
+ ? 'Null'
818
+ : pivot.rowField === false
819
+ ? 'False'
820
+ : `Comparison ${snakeCaseToTitleCase(pivot.rowField)}`,
821
+ field: `comparison_${pivot.rowField}`,
822
+ },
823
+ ]
824
+ : []),
825
+ ...uniqueColumns.map((column, index) => {
826
+ const columnName = isDateField(pivot.columnFieldType)
683
827
  ? getDateString(column, dateRange)
684
828
  : column;
685
829
  return {
@@ -691,11 +835,32 @@ function generatePivotTable(pivot, data, dateRange, rowLimit = -1) {
691
835
  !pivot.columnField &&
692
836
  index === 1
693
837
  ? 'Count'
694
- : (0, ChartBuilder_1.snakeCaseToTitleCase)(columnName),
838
+ : snakeCaseToTitleCase(columnName),
695
839
  field: columnName,
696
840
  };
697
841
  }),
698
- };
842
+ ...(isComparison && pivot.columnField
843
+ ? uniqueColumns.map((column, index) => {
844
+ const columnName = isDateField(pivot.columnFieldType)
845
+ ? getDateString(column, dateRange)
846
+ : column;
847
+ return {
848
+ label: column === null
849
+ ? 'Null'
850
+ : column === false
851
+ ? 'False'
852
+ : pivot.aggregationType === 'count' &&
853
+ !pivot.columnField &&
854
+ index === 1
855
+ ? 'Comparison Count'
856
+ : isDateField(pivot.columnFieldType)
857
+ ? COL_DATE_MAP[getDateString(column, dateRange)] ??
858
+ 'Comparison'
859
+ : `Comparison ${snakeCaseToTitleCase(columnName)}`,
860
+ field: `comparison_${columnName}`,
861
+ };
862
+ })
863
+ : []),
864
+ ];
865
+ return { rows: pivotRows, columns };
699
866
  }
700
- exports.generatePivotTable = generatePivotTable;
701
- //# sourceMappingURL=PivotModal.js.map