@quillsql/react 2.12.28 → 2.12.30

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 (502) hide show
  1. package/dist/cjs/Chart.d.ts +24 -10
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +151 -189
  4. package/dist/cjs/ChartBuilder.d.ts +51 -11
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +162 -101
  7. package/dist/cjs/ChartEditor.d.ts +13 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +62 -121
  10. package/dist/cjs/Context.d.ts +1 -19
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +74 -85
  13. package/dist/cjs/Dashboard.d.ts +16 -7
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +90 -68
  16. package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/Calendar.js +3 -6
  18. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -3
  20. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  21. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  22. package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
  23. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  24. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  25. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
  26. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  27. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  28. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
  29. package/dist/cjs/ReportBuilder.d.ts +22 -1
  30. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  31. package/dist/cjs/ReportBuilder.js +758 -505
  32. package/dist/cjs/SQLEditor.d.ts +2 -9
  33. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  34. package/dist/cjs/SQLEditor.js +142 -90
  35. package/dist/cjs/Table.d.ts +19 -3
  36. package/dist/cjs/Table.d.ts.map +1 -1
  37. package/dist/cjs/Table.js +110 -92
  38. package/dist/cjs/TableChart.d.ts.map +1 -1
  39. package/dist/cjs/TableChart.js +0 -1
  40. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  41. package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
  42. package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
  43. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  44. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  45. package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
  46. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  47. package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
  48. package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
  49. package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
  50. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  51. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  52. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  53. package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
  54. package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
  55. package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
  56. package/dist/cjs/components/Banner/index.d.ts +1 -1
  57. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  58. package/dist/cjs/components/Banner/index.js +1 -1
  59. package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -1
  60. package/dist/cjs/components/BigModal/BigModal.js +6 -12
  61. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  62. package/dist/cjs/components/Chart/BarList.js +21 -14
  63. package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
  64. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  65. package/dist/cjs/components/Chart/ChartError.js +40 -5
  66. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  67. package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
  68. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  69. package/dist/cjs/components/Chart/LineChart.js +2 -2
  70. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  71. package/dist/cjs/components/Chart/PieChart.js +1 -3
  72. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
  73. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  74. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  75. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +5 -1
  76. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  77. package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
  78. package/dist/cjs/components/Dashboard/DataLoader.d.ts +2 -6
  79. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  80. package/dist/cjs/components/Dashboard/DataLoader.js +98 -187
  81. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  82. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
  83. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -4
  84. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  85. package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
  86. package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
  87. package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
  88. package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
  89. package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
  90. package/dist/cjs/components/Dropdown/index.d.ts +2 -2
  91. package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
  92. package/dist/cjs/components/Modal/Modal.js +2 -3
  93. package/dist/cjs/components/Modal/index.d.ts +1 -1
  94. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  95. package/dist/cjs/components/QuillMultiSelect.js +18 -3
  96. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  97. package/dist/cjs/components/QuillMultiSelectWithCombo.js +2 -2
  98. package/dist/cjs/components/QuillSelect.js +1 -1
  99. package/dist/cjs/components/QuillSelectWithCombo.js +2 -2
  100. package/dist/cjs/components/QuillTable.d.ts +1 -4
  101. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  102. package/dist/cjs/components/QuillTable.js +5 -11
  103. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  104. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  105. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
  106. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  107. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
  108. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  109. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
  110. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +22 -0
  111. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  112. package/dist/cjs/components/ReportBuilder/FilterModal.js +555 -0
  113. package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
  114. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  115. package/dist/cjs/components/ReportBuilder/ast.js +33 -6
  116. package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
  117. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  118. package/dist/cjs/components/ReportBuilder/constants.js +24 -3
  119. package/dist/cjs/components/ReportBuilder/convert.d.ts +12 -15
  120. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  121. package/dist/cjs/components/ReportBuilder/convert.js +326 -494
  122. package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
  123. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  124. package/dist/cjs/components/ReportBuilder/operators.js +32 -4
  125. package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
  126. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  127. package/dist/cjs/components/ReportBuilder/ui.js +30 -4
  128. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
  129. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  130. package/dist/cjs/components/ReportBuilder/util.js +15 -18
  131. package/dist/cjs/components/UiComponents.d.ts +10 -7
  132. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  133. package/dist/cjs/components/UiComponents.js +9 -8
  134. package/dist/cjs/components/selectUtils.d.ts +0 -1
  135. package/dist/cjs/components/selectUtils.d.ts.map +1 -1
  136. package/dist/cjs/components/selectUtils.js +1 -22
  137. package/dist/cjs/hooks/index.d.ts +4 -4
  138. package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
  139. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
  140. package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
  141. package/dist/cjs/hooks/useDashboard.d.ts +1 -1
  142. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  143. package/dist/cjs/hooks/useDashboard.js +22 -4
  144. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  145. package/dist/cjs/hooks/useExport.js +3 -1
  146. package/dist/cjs/hooks/useOnClickOutside.js +4 -4
  147. package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
  148. package/dist/cjs/hooks/useOnWindowResize.js +2 -2
  149. package/dist/cjs/hooks/useQuill.d.ts +10 -27
  150. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  151. package/dist/cjs/hooks/useQuill.js +114 -82
  152. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  153. package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
  154. package/dist/cjs/hooks/useTheme.js +1 -1
  155. package/dist/cjs/index.d.ts +1 -0
  156. package/dist/cjs/index.d.ts.map +1 -1
  157. package/dist/cjs/index.js +3 -1
  158. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  159. package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
  160. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
  161. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  162. package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
  163. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  164. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  165. package/dist/cjs/internals/ReportBuilder/PivotModal.js +64 -78
  166. package/dist/cjs/lib/utils.js +2 -2
  167. package/dist/cjs/models/Filter.d.ts +104 -4
  168. package/dist/cjs/models/Filter.d.ts.map +1 -1
  169. package/dist/cjs/models/Filter.js +91 -0
  170. package/dist/cjs/models/Pagination.d.ts +10 -0
  171. package/dist/cjs/models/Pagination.d.ts.map +1 -0
  172. package/dist/cjs/models/Pagination.js +2 -0
  173. package/dist/cjs/models/Report.d.ts +116 -0
  174. package/dist/cjs/models/Report.d.ts.map +1 -0
  175. package/dist/cjs/models/Report.js +2 -0
  176. package/dist/cjs/utils/aggregate.js +1 -1
  177. package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
  178. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
  179. package/dist/cjs/utils/astFilterProcessing.js +8056 -0
  180. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  181. package/dist/cjs/utils/astProcessing.js +4 -3
  182. package/dist/cjs/utils/axisFormatter.js +0 -71
  183. package/dist/cjs/utils/color.js +9 -87
  184. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  185. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  186. package/dist/cjs/utils/columnProcessing.js +8 -1
  187. package/dist/cjs/utils/csv.d.ts.map +1 -1
  188. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  189. package/dist/cjs/utils/dashboard.js +4 -4
  190. package/dist/cjs/utils/dataFetcher.d.ts +1 -1
  191. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  192. package/dist/cjs/utils/dataFetcher.js +72 -5
  193. package/dist/cjs/utils/dataProcessing.d.ts +8 -0
  194. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
  195. package/dist/cjs/utils/dataProcessing.js +127 -0
  196. package/dist/cjs/utils/dates.d.ts +2 -1
  197. package/dist/cjs/utils/dates.d.ts.map +1 -1
  198. package/dist/cjs/utils/dates.js +12 -3
  199. package/dist/cjs/utils/error.d.ts +5 -0
  200. package/dist/cjs/utils/error.d.ts.map +1 -0
  201. package/dist/cjs/utils/error.js +12 -0
  202. package/dist/cjs/utils/filterConstants.d.ts +34 -0
  203. package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
  204. package/dist/cjs/utils/filterConstants.js +36 -0
  205. package/dist/cjs/utils/filterProcessing.js +4 -4
  206. package/dist/cjs/utils/logging.d.ts.map +1 -1
  207. package/dist/cjs/utils/logging.js +1 -0
  208. package/dist/cjs/utils/merge.js +0 -21
  209. package/dist/cjs/utils/monacoConfig.d.ts +21 -0
  210. package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
  211. package/dist/cjs/utils/monacoConfig.js +324 -0
  212. package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
  213. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
  214. package/dist/cjs/utils/paginationProcessing.js +30 -0
  215. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  216. package/dist/cjs/utils/pivotConstructor.js +67 -5
  217. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  218. package/dist/cjs/utils/pivotProcessing.js +12 -6
  219. package/dist/cjs/utils/queryConstructor.d.ts +4 -2
  220. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  221. package/dist/cjs/utils/queryConstructor.js +121 -59
  222. package/dist/cjs/utils/report.d.ts +7 -0
  223. package/dist/cjs/utils/report.d.ts.map +1 -0
  224. package/dist/cjs/utils/report.js +93 -0
  225. package/dist/cjs/utils/schema.d.ts.map +1 -1
  226. package/dist/cjs/utils/schema.js +35 -6
  227. package/dist/cjs/utils/styles.d.ts +1 -1
  228. package/dist/cjs/utils/styles.d.ts.map +1 -1
  229. package/dist/cjs/utils/tableProcessing.d.ts +23 -8
  230. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  231. package/dist/cjs/utils/tableProcessing.js +156 -38
  232. package/dist/cjs/utils/textProcessing.js +3 -3
  233. package/dist/cjs/utils/validation.d.ts +9 -0
  234. package/dist/cjs/utils/validation.d.ts.map +1 -0
  235. package/dist/cjs/utils/validation.js +24 -0
  236. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  237. package/dist/cjs/utils/valueFormatter.js +8 -4
  238. package/dist/esm/Chart.d.ts +24 -10
  239. package/dist/esm/Chart.d.ts.map +1 -1
  240. package/dist/esm/Chart.js +154 -192
  241. package/dist/esm/ChartBuilder.d.ts +51 -11
  242. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  243. package/dist/esm/ChartBuilder.js +161 -101
  244. package/dist/esm/ChartEditor.d.ts +13 -1
  245. package/dist/esm/ChartEditor.d.ts.map +1 -1
  246. package/dist/esm/ChartEditor.js +63 -122
  247. package/dist/esm/Context.d.ts +1 -19
  248. package/dist/esm/Context.d.ts.map +1 -1
  249. package/dist/esm/Context.js +74 -84
  250. package/dist/esm/Dashboard.d.ts +16 -7
  251. package/dist/esm/Dashboard.d.ts.map +1 -1
  252. package/dist/esm/Dashboard.js +91 -69
  253. package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
  254. package/dist/esm/DateRangePicker/Calendar.js +5 -8
  255. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  256. package/dist/esm/DateRangePicker/DateRangePicker.js +2 -3
  257. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  258. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  259. package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
  260. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  261. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  262. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
  263. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  264. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  265. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
  266. package/dist/esm/ReportBuilder.d.ts +22 -1
  267. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  268. package/dist/esm/ReportBuilder.js +766 -513
  269. package/dist/esm/SQLEditor.d.ts +2 -9
  270. package/dist/esm/SQLEditor.d.ts.map +1 -1
  271. package/dist/esm/SQLEditor.js +144 -92
  272. package/dist/esm/Table.d.ts +19 -3
  273. package/dist/esm/Table.d.ts.map +1 -1
  274. package/dist/esm/Table.js +112 -94
  275. package/dist/esm/TableChart.d.ts.map +1 -1
  276. package/dist/esm/TableChart.js +0 -1
  277. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  278. package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
  279. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
  280. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  281. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  282. package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
  283. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  284. package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
  285. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
  286. package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
  287. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  288. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  289. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  290. package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
  291. package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
  292. package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
  293. package/dist/esm/components/Banner/index.d.ts +1 -1
  294. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  295. package/dist/esm/components/Banner/index.js +1 -1
  296. package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
  297. package/dist/esm/components/BigModal/BigModal.js +7 -13
  298. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  299. package/dist/esm/components/Chart/BarList.js +21 -14
  300. package/dist/esm/components/Chart/ChartError.d.ts +8 -1
  301. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  302. package/dist/esm/components/Chart/ChartError.js +39 -6
  303. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  304. package/dist/esm/components/Chart/ChartTooltip.js +8 -2
  305. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  306. package/dist/esm/components/Chart/LineChart.js +2 -2
  307. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  308. package/dist/esm/components/Chart/PieChart.js +1 -3
  309. package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
  310. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  311. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  312. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
  313. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  314. package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
  315. package/dist/esm/components/Dashboard/DataLoader.d.ts +2 -6
  316. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  317. package/dist/esm/components/Dashboard/DataLoader.js +98 -187
  318. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  319. package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
  320. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -4
  321. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  322. package/dist/esm/components/Dashboard/TableComponent.js +3 -3
  323. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  324. package/dist/esm/components/Dropdown/Dropdown.js +2 -4
  325. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
  326. package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
  327. package/dist/esm/components/Dropdown/index.d.ts +2 -2
  328. package/dist/esm/components/Dropdown/index.js +2 -2
  329. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  330. package/dist/esm/components/Modal/Modal.js +2 -3
  331. package/dist/esm/components/Modal/index.d.ts +1 -1
  332. package/dist/esm/components/Modal/index.js +1 -1
  333. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  334. package/dist/esm/components/QuillMultiSelect.js +18 -3
  335. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  336. package/dist/esm/components/QuillMultiSelectWithCombo.js +2 -2
  337. package/dist/esm/components/QuillSelect.js +1 -1
  338. package/dist/esm/components/QuillSelectWithCombo.js +2 -2
  339. package/dist/esm/components/QuillTable.d.ts +1 -4
  340. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  341. package/dist/esm/components/QuillTable.js +5 -11
  342. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  343. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  344. package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
  345. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  346. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
  347. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  348. package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
  349. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +22 -0
  350. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  351. package/dist/esm/components/ReportBuilder/FilterModal.js +552 -0
  352. package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
  353. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  354. package/dist/esm/components/ReportBuilder/ast.js +31 -5
  355. package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
  356. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  357. package/dist/esm/components/ReportBuilder/constants.js +24 -3
  358. package/dist/esm/components/ReportBuilder/convert.d.ts +12 -15
  359. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  360. package/dist/esm/components/ReportBuilder/convert.js +324 -493
  361. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
  362. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
  363. package/dist/esm/components/ReportBuilder/convert.uspec.js +1152 -0
  364. package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
  365. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  366. package/dist/esm/components/ReportBuilder/operators.js +32 -4
  367. package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
  368. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  369. package/dist/esm/components/ReportBuilder/ui.js +28 -3
  370. package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
  371. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  372. package/dist/esm/components/ReportBuilder/util.js +16 -19
  373. package/dist/esm/components/UiComponents.d.ts +10 -7
  374. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  375. package/dist/esm/components/UiComponents.js +9 -8
  376. package/dist/esm/components/selectUtils.d.ts +0 -1
  377. package/dist/esm/components/selectUtils.d.ts.map +1 -1
  378. package/dist/esm/components/selectUtils.js +0 -20
  379. package/dist/esm/hooks/index.d.ts +4 -4
  380. package/dist/esm/hooks/index.js +4 -4
  381. package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
  382. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
  383. package/dist/esm/hooks/useAstToFilterTree.js +24 -0
  384. package/dist/esm/hooks/useDashboard.d.ts +1 -1
  385. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  386. package/dist/esm/hooks/useDashboard.js +23 -5
  387. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  388. package/dist/esm/hooks/useExport.js +4 -2
  389. package/dist/esm/hooks/useOnClickOutside.js +5 -5
  390. package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
  391. package/dist/esm/hooks/useOnWindowResize.js +3 -3
  392. package/dist/esm/hooks/useQuill.d.ts +10 -27
  393. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  394. package/dist/esm/hooks/useQuill.js +114 -82
  395. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  396. package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
  397. package/dist/esm/hooks/useTheme.js +1 -1
  398. package/dist/esm/index.d.ts +1 -0
  399. package/dist/esm/index.d.ts.map +1 -1
  400. package/dist/esm/index.js +1 -0
  401. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  402. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
  403. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
  404. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  405. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  406. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  407. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  408. package/dist/esm/internals/ReportBuilder/PivotModal.js +68 -82
  409. package/dist/esm/lib/utils.js +2 -2
  410. package/dist/esm/models/Filter.d.ts +104 -4
  411. package/dist/esm/models/Filter.d.ts.map +1 -1
  412. package/dist/esm/models/Filter.js +90 -1
  413. package/dist/esm/models/Pagination.d.ts +10 -0
  414. package/dist/esm/models/Pagination.d.ts.map +1 -0
  415. package/dist/esm/models/Pagination.js +1 -0
  416. package/dist/esm/models/Report.d.ts +116 -0
  417. package/dist/esm/models/Report.d.ts.map +1 -0
  418. package/dist/esm/models/Report.js +1 -0
  419. package/dist/esm/utils/aggregate.js +1 -1
  420. package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
  421. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
  422. package/dist/esm/utils/astFilterProcessing.js +8049 -0
  423. package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
  424. package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
  425. package/dist/esm/utils/astFilterProcessing.uspec.js +2729 -0
  426. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  427. package/dist/esm/utils/astProcessing.js +4 -3
  428. package/dist/esm/utils/axisFormatter.js +0 -71
  429. package/dist/esm/utils/color.js +9 -87
  430. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  431. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  432. package/dist/esm/utils/columnProcessing.js +6 -0
  433. package/dist/esm/utils/csv.d.ts.map +1 -1
  434. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  435. package/dist/esm/utils/dashboard.js +4 -4
  436. package/dist/esm/utils/dataFetcher.d.ts +1 -1
  437. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  438. package/dist/esm/utils/dataFetcher.js +72 -5
  439. package/dist/esm/utils/dataProcessing.d.ts +8 -0
  440. package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
  441. package/dist/esm/utils/dataProcessing.js +122 -0
  442. package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
  443. package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
  444. package/dist/esm/utils/dataProcessing.uspec.js +204 -0
  445. package/dist/esm/utils/dates.d.ts +2 -1
  446. package/dist/esm/utils/dates.d.ts.map +1 -1
  447. package/dist/esm/utils/dates.js +10 -2
  448. package/dist/esm/utils/error.d.ts +5 -0
  449. package/dist/esm/utils/error.d.ts.map +1 -0
  450. package/dist/esm/utils/error.js +8 -0
  451. package/dist/esm/utils/filterConstants.d.ts +34 -0
  452. package/dist/esm/utils/filterConstants.d.ts.map +1 -0
  453. package/dist/esm/utils/filterConstants.js +33 -0
  454. package/dist/esm/utils/filterProcessing.js +4 -4
  455. package/dist/esm/utils/logging.d.ts.map +1 -1
  456. package/dist/esm/utils/logging.js +1 -0
  457. package/dist/esm/utils/merge.js +0 -21
  458. package/dist/esm/utils/monacoConfig.d.ts +21 -0
  459. package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
  460. package/dist/esm/utils/monacoConfig.js +319 -0
  461. package/dist/esm/utils/paginationProcessing.d.ts +5 -0
  462. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
  463. package/dist/esm/utils/paginationProcessing.js +25 -0
  464. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  465. package/dist/esm/utils/pivotConstructor.js +67 -5
  466. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  467. package/dist/esm/utils/pivotProcessing.js +12 -6
  468. package/dist/esm/utils/queryConstructor.d.ts +4 -2
  469. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  470. package/dist/esm/utils/queryConstructor.js +118 -58
  471. package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
  472. package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
  473. package/dist/esm/utils/queryConstructor.uspec.js +223 -0
  474. package/dist/esm/utils/report.d.ts +7 -0
  475. package/dist/esm/utils/report.d.ts.map +1 -0
  476. package/dist/esm/utils/report.ispec.d.ts +2 -0
  477. package/dist/esm/utils/report.ispec.d.ts.map +1 -0
  478. package/dist/esm/utils/report.ispec.js +46 -0
  479. package/dist/esm/utils/report.js +88 -0
  480. package/dist/esm/utils/schema.d.ts.map +1 -1
  481. package/dist/esm/utils/schema.js +35 -6
  482. package/dist/esm/utils/styles.d.ts +1 -1
  483. package/dist/esm/utils/styles.d.ts.map +1 -1
  484. package/dist/esm/utils/tableProcessing.d.ts +23 -8
  485. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  486. package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
  487. package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
  488. package/dist/esm/utils/tableProcessing.ispec.js +61 -0
  489. package/dist/esm/utils/tableProcessing.js +152 -37
  490. package/dist/esm/utils/textProcessing.js +3 -3
  491. package/dist/esm/utils/validation.d.ts +9 -0
  492. package/dist/esm/utils/validation.d.ts.map +1 -0
  493. package/dist/esm/utils/validation.js +20 -0
  494. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  495. package/dist/esm/utils/valueFormatter.js +8 -4
  496. package/package.json +1 -1
  497. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  498. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  499. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
  500. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  501. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  502. package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
@@ -5,13 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.QUILL_SERVER = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- /* eslint-disable no-unused-vars */
9
8
  const react_1 = require("react");
10
9
  const UiComponents_1 = require("./components/UiComponents");
11
10
  const core_1 = require("@dnd-kit/core");
12
11
  const sortable_1 = require("@dnd-kit/sortable");
13
12
  const utilities_1 = require("@dnd-kit/utilities");
14
- const date_fns_1 = require("date-fns");
15
13
  const Context_1 = require("./Context");
16
14
  const ast_1 = require("./components/ReportBuilder/ast");
17
15
  const ChartBuilder_1 = require("./ChartBuilder");
@@ -41,6 +39,14 @@ const columnProcessing_1 = require("./utils/columnProcessing");
41
39
  const astProcessing_1 = require("./utils/astProcessing");
42
40
  const PivotForm_1 = __importDefault(require("./internals/ReportBuilder/PivotForm"));
43
41
  const schema_1 = require("./utils/schema");
42
+ const dates_1 = require("./utils/dates");
43
+ const FilterModal_1 = __importDefault(require("./components/ReportBuilder/FilterModal"));
44
+ const Filter_1 = require("./models/Filter");
45
+ const astFilterProcessing_1 = require("./utils/astFilterProcessing");
46
+ const useAstToFilterTree_1 = __importDefault(require("./hooks/useAstToFilterTree"));
47
+ const QuillMultiSelect_1 = require("./components/QuillMultiSelect");
48
+ const paginationProcessing_1 = require("./utils/paginationProcessing");
49
+ const report_1 = require("./utils/report");
44
50
  exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SERVER_HOST) ||
45
51
  'https://quill-344421.uc.r.appspot.com';
46
52
  /**
@@ -74,7 +80,7 @@ exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SE
74
80
  * ### Report Builder API
75
81
  * @see https://docs.quillsql.com/components/report-builder
76
82
  */
77
- function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void null, onSubmitCreateReport = (_) => void null, destinationDashboard = undefined, organizationName = '', ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, ModalComponent = UiComponents_1.MemoizedModal, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, TableComponent = UiComponents_1.QuillTableSQLEditorComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs, CheckboxComponent = UiComponents_1.MemoizedCheckbox, SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, ChartBuilderModalComponent = UiComponents_1.MemoizedModal, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, hideCopySQL = true, isChartBuilderHorizontalView = true, onClickChartElement, }) {
83
+ function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, destinationDashboard = undefined, organizationName = '', ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, ModalComponent = UiComponents_1.MemoizedModal, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, MultiSelectComponent = QuillMultiSelect_1.QuillMultiSelectComponent, TableComponent = UiComponents_1.QuillTableSQLEditorComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs, CheckboxComponent = UiComponents_1.MemoizedCheckbox, SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, ChartBuilderModalComponent = UiComponents_1.MemoizedModal, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, hideCopySQL = true, isChartBuilderHorizontalView = true, onClickChartElement, }) {
78
84
  const { data: report } = (0, useQuill_1.useQuill)(reportId || '');
79
85
  const [aiPrompt, setAiPrompt] = (0, react_1.useState)('');
80
86
  const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
@@ -97,8 +103,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
97
103
  const [rows, setRows] = (0, react_1.useState)([]);
98
104
  const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
99
105
  const [columns, setColumns] = (0, react_1.useState)([]);
106
+ const [tempReport, setTempReport] = (0, react_1.useState)({});
100
107
  const [topLevelBinaryOperator, setTopLevelBinaryOperator] = (0, react_1.useState)('AND');
101
- const [editPopoverKey, setEditPopoverKey] = (0, react_1.useState)(null);
102
108
  const [uniqueValues, setUniqueValues] = (0, react_1.useState)({});
103
109
  const [pivot, setPivot] = (0, react_1.useState)(null);
104
110
  const [pivotData, setPivotData] = (0, react_1.useState)(null);
@@ -106,8 +112,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
106
112
  const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)([]);
107
113
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
108
114
  const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
109
- const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
110
- const [initalChartLoad, setInitalChartLoad] = (0, react_1.useState)(false);
115
+ const [isEditingPivot, setIsEditingPivot] = (0, react_1.useState)(false);
116
+ const [initialChartLoad, setInitialChartLoad] = (0, react_1.useState)(false);
111
117
  const [askedAQuestion, setAskedAQuestion] = (0, react_1.useState)(false);
112
118
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
113
119
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!reportId);
@@ -122,23 +128,44 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
122
128
  const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(undefined);
123
129
  const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
124
130
  const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
125
- // eslint-disable-next-line no-unused-vars
126
- const [client, _setClient] = (0, react_1.useContext)(Context_1.ClientContext);
131
+ const [dateRanges, setDateRanges] = (0, react_1.useState)(null);
132
+ const [client] = (0, react_1.useContext)(Context_1.ClientContext);
127
133
  // JANK: This is temp and stupid
128
134
  const [overrideRecommendations, setOverrideRecommendations] = (0, react_1.useState)(true);
129
135
  const [customFields, setCustomFields] = (0, react_1.useContext)(Context_1.CustomFieldContext);
136
+ const [openFilterIndex, setOpenFilterIndex] = (0, react_1.useState)(null); // Sets open filter modals
137
+ const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
138
+ const filterTree = (0, useAstToFilterTree_1.default)(formData, client); // Stores the state of filters
130
139
  (0, react_1.useEffect)(() => {
140
+ if (!client) {
141
+ return;
142
+ }
131
143
  if (client.publicKey === '663416663aa9bc716e59a89d') {
132
144
  setOverrideRecommendations(false);
133
145
  }
134
146
  if (!loadingSchema) {
135
147
  fetchSchema();
136
148
  }
137
- }, [client.publicKey, client.customerId]);
149
+ }, [client]);
138
150
  (0, react_1.useEffect)(() => {
139
151
  (0, width_1.updateFirstChildWidth)(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
140
152
  (0, width_1.updateFirstChildWidth)(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
141
153
  }, [dataDisplayed]);
154
+ // Whenever unique values changes, update the fieldValuesMap, used in FilterModals
155
+ (0, react_1.useEffect)(() => {
156
+ const tables = (0, ast_1.getTableNames)(baseAst);
157
+ const table = tables.length === 1 ? tables[0] : initialTableName;
158
+ const newFieldValues = {};
159
+ if (uniqueValues[table]) {
160
+ for (const field of Object.keys(uniqueValues[table])) {
161
+ newFieldValues[field] = [];
162
+ for (const value of Object.keys(uniqueValues[table][field])) {
163
+ newFieldValues[field]?.push(value);
164
+ }
165
+ }
166
+ }
167
+ setFieldValuesMap(newFieldValues);
168
+ }, [uniqueValues]);
142
169
  (0, react_1.useEffect)(() => {
143
170
  // Since the TextInput component takes a required numeric width parameter,
144
171
  // we dynamically calculate the width of this component here.
@@ -152,8 +179,9 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
152
179
  window.removeEventListener('resize', handleResize);
153
180
  };
154
181
  }, []);
155
- const updatePivot = (changeField, fieldKey) => {
182
+ const updatePivot = async (changeField, fieldKey) => {
156
183
  const newPivot = pivot;
184
+ setTableLoading(true);
157
185
  // @ts-ignore
158
186
  newPivot[fieldKey] = changeField;
159
187
  if (fieldKey === 'rowField') {
@@ -171,11 +199,27 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
171
199
  newPivot.sort = undefined;
172
200
  }
173
201
  }
174
- setPivot(newPivot);
175
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(newPivot, rows, undefined, false);
202
+ let dateBucket = undefined;
203
+ const tempDateRange = dateRanges && dateRanges[newPivot.rowField];
204
+ if (tempDateRange) {
205
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
206
+ }
207
+ let distinctValuesForQuery = {};
208
+ if (pivot.columnField) {
209
+ distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
210
+ {
211
+ field: pivot.columnField,
212
+ label: pivot.columnField,
213
+ format: 'string',
214
+ },
215
+ ], activeQuery, [], client, customFields);
216
+ }
217
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
176
218
  setPivotData(pivotedData || []);
177
219
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
220
+ setPivot(newPivot);
178
221
  setFormattedRows(formattedRows);
222
+ setTableLoading(false);
179
223
  };
180
224
  const enforceOrderOnColumns = (columnNames) => {
181
225
  if (pivot) {
@@ -210,7 +254,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
210
254
  setRows([]);
211
255
  setColumns([]);
212
256
  setTopLevelBinaryOperator('AND');
213
- setEditPopoverKey(null);
214
257
  setErrorMessage('');
215
258
  setFormattedRows([]);
216
259
  // setUniqueValues({});
@@ -220,10 +263,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
220
263
  }, 0);
221
264
  };
222
265
  (0, react_1.useEffect)(() => {
266
+ if (!client) {
267
+ return;
268
+ }
223
269
  if (!initialLoad && client.publicKey) {
224
270
  clearAllState();
225
271
  }
226
- }, [client.publicKey, client.customerId]);
272
+ }, [client]);
227
273
  (0, react_1.useEffect)(() => {
228
274
  if (activePath !== null) {
229
275
  // update the modal with the new subtree
@@ -235,8 +281,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
235
281
  if (pivot) {
236
282
  const formattedRows = copiedRows.map((row) => {
237
283
  const formattedRow = row;
238
- Object.keys(row).forEach((key, index) => {
239
- let column = columns.find((c) => c.field === key);
284
+ Object.keys(row).forEach((key) => {
285
+ const column = columns.find((c) => c.field === key);
240
286
  let format = 'string';
241
287
  if (!column) {
242
288
  format =
@@ -296,42 +342,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
296
342
  navigator.clipboard.writeText(query);
297
343
  setTimeout(() => setIsCopying(false), 800);
298
344
  };
299
- const copyToClipboard = (str) => {
300
- setIsCopying(true);
301
- navigator.clipboard.writeText(str);
302
- setTimeout(() => setIsCopying(false), 800);
303
- };
304
345
  const clearCheckboxes = () => {
305
346
  const checkboxes = uniqueValues;
306
347
  const newValues = {};
307
- for (let table of Object.keys(checkboxes)) {
348
+ for (const table of Object.keys(checkboxes)) {
308
349
  newValues[table] = {};
309
- for (let column of Object.keys(checkboxes[table])) {
350
+ for (const column of Object.keys(checkboxes[table])) {
310
351
  newValues[table][column] = {};
311
- for (let variant of Object.keys(checkboxes[table][column])) {
352
+ for (const variant of Object.keys(checkboxes[table][column])) {
312
353
  newValues[table][column][variant] = false;
313
354
  }
314
355
  }
315
356
  }
316
357
  setUniqueValues(newValues);
317
358
  };
318
- const setCheckboxes = (node) => {
319
- if (!['IN', 'NOT IN'].includes(node.operator))
320
- return;
321
- const selectedItems = node.right.value.flatMap((v) => v.args.value.map((x) => x.value.toLowerCase()));
322
- const checkboxes = uniqueValues;
323
- const newValues = {};
324
- for (let table of Object.keys(checkboxes)) {
325
- newValues[table] = {};
326
- for (let column of Object.keys(checkboxes[table])) {
327
- newValues[table][column] = {};
328
- for (let variant of Object.keys(checkboxes[table][column])) {
329
- newValues[table][column][variant] = selectedItems.includes(variant.toLowerCase());
330
- }
331
- }
332
- }
333
- setUniqueValues(newValues);
334
- };
335
359
  const fetchSqlQuery = async (ast, formData, fetchData = true) => {
336
360
  if (fetchData) {
337
361
  setLoading(true);
@@ -347,6 +371,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
347
371
  body: JSON.stringify({
348
372
  ast: { ...ast, where },
349
373
  publicKey: client.publicKey,
374
+ useNewNodeSql: true, // new flag
350
375
  }),
351
376
  });
352
377
  const data = await response.json();
@@ -354,12 +379,41 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
354
379
  if (fetchData) {
355
380
  fetchUponChange(ast, formData);
356
381
  }
382
+ return data.query;
357
383
  }
358
384
  catch (error) {
359
385
  setLoading(false);
360
386
  console.error(error);
361
387
  }
362
388
  };
389
+ const getUniqueStringValues = async (columns, tableName) => {
390
+ const convertedStringColumns = columns
391
+ .filter((column) => {
392
+ return (0, ast_1.isTextColumnType)(column.fieldType);
393
+ })
394
+ .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
395
+ const stringNames = convertedStringColumns.map((column) => column.field);
396
+ const smallStringColumns = await (0, tableProcessing_1.getCountsByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${tableName}`, client, customFields);
397
+ const smallStringNames = smallStringColumns.map((column) => column.field);
398
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(smallStringColumns, `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, customFields);
399
+ const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
400
+ joinedUniqueValues[tableName] = newUniqueValues;
401
+ return joinedUniqueValues;
402
+ };
403
+ const getDateRanges = async (columns, tableName) => {
404
+ const dateColumns = columns.filter((column) => {
405
+ return column.fieldType === 'date';
406
+ });
407
+ if (dateColumns.length === 0) {
408
+ return {};
409
+ }
410
+ const dateColumnNames = dateColumns.map((column) => {
411
+ //@ts-ignore
412
+ return column.field || column.name;
413
+ });
414
+ const dateRanges = await (0, tableProcessing_1.getDateRangeByColumns)(dateColumns, `Select ${dateColumnNames.join(', ')} from ${tableName}`, client, customFields);
415
+ return dateRanges;
416
+ };
363
417
  // It's just like getColumnsInPivot but we expand the columnField
364
418
  // if there is one to include all the variants just like it would
365
419
  // show up in the table. (eg. category -> ...[Fuel, Food, Other])
@@ -386,18 +440,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
386
440
  setLoading(true);
387
441
  const tableInfo = tables.find((tableInfo) => tableInfo.name === initialTableName);
388
442
  if (tableInfo) {
389
- const convertedStringColumns = tableInfo.columns
390
- .filter((column) => {
391
- return (0, ast_1.isTextColumnType)(column.fieldType);
392
- })
393
- .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
394
- const stringNames = convertedStringColumns.map((column) => column.field);
395
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${initialTableName}`, [], client, customFields);
396
- const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
397
- joinedUniqueValues[initialTableName] = newUniqueValues;
398
- if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(joinedUniqueValues)) {
399
- setUniqueValues(joinedUniqueValues);
443
+ const newUniqueValues = await getUniqueStringValues(tableInfo.columns, initialTableName);
444
+ if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
445
+ setUniqueValues(newUniqueValues);
400
446
  }
447
+ const dateRangesTemp = await getDateRanges(tableInfo.columns, initialTableName);
448
+ setDateRanges(dateRangesTemp);
401
449
  }
402
450
  const columnsForTable = tables
403
451
  .find((t) => t.name === initialTableName)
@@ -456,80 +504,102 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
456
504
  };
457
505
  (0, react_1.useEffect)(() => {
458
506
  const loadChart = async () => {
459
- setInitalChartLoad(true);
507
+ setInitialChartLoad(true);
508
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
460
509
  if (!report || report.referencedTables.length !== 1) {
461
- setInitalChartLoad(false);
462
- return;
463
- }
464
- const tableName = report.referencedTables[0];
465
- if (!tableName) {
466
- return;
467
- }
468
- const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
469
- query: report.queryString,
470
- });
471
- if (resp.success === false) {
472
- setErrorMessage('Error: ' + resp.message);
510
+ setInitialChartLoad(false);
473
511
  return;
474
512
  }
475
- const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
476
- let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
477
- (0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
478
- convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
479
- let schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
480
- let newAst, groupByPivot;
481
- ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
482
- // @ts-ignore
483
- report.pivot, schemaInfo));
484
- if (convertedAst.where) {
485
- setFormData((0, util_1.deepCopy)(convertedAst.where));
486
- }
487
- setActiveQuery(report.queryString);
488
- newAst = groupByPivot ? newAst : convertedAst;
489
- setBaseAst(newAst);
490
- const initialRows = await fetchUponChange(newAst, undefined);
491
- const tableInfo = schemaInfo.find((table) => table.name === tableName);
492
- const stringColumns = tableInfo.columns
493
- .filter((column) => {
494
- return column.fieldType === 'varchar' || column.fieldType === 'text';
495
- })
496
- .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
497
- if (stringColumns.length !== 0 && tableName) {
498
- const stringNames = stringColumns.map((column) => column.field);
499
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, `Select ${stringNames.join(', ')} from ${tableName}`, [], client, customFields);
500
- const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
501
- joinedUniqueValues[tableName] = newUniqueValues;
502
- setUniqueValues(joinedUniqueValues);
503
- }
504
- if (groupByPivot) {
505
- // @ts-ignore
506
- setPivotRowField(groupByPivot.rowField);
507
- // @ts-ignore
508
- setPivotAggregation(groupByPivot.aggregationType);
509
- // @ts-ignore
510
- setPivotColumnField(groupByPivot.columnField);
511
- // @ts-ignore
512
- setPivotValueField(groupByPivot.valueField);
513
- setPivot(groupByPivot);
514
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(
515
- // @ts-ignore
516
- groupByPivot, initialRows, undefined, false);
517
- setPivotData(pivotedData || []);
518
- const formattedRows = formatRows(pivotedData.rows, report.columns, true,
513
+ try {
514
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
515
+ const tableName = report.referencedTables[0];
516
+ if (!tableName) {
517
+ return;
518
+ }
519
+ const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
520
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
521
+ query: report.queryString,
522
+ useNewNodeSql: true,
523
+ });
524
+ if (resp.success === false) {
525
+ setErrorMessage(resp.message);
526
+ return;
527
+ }
528
+ const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
529
+ let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
530
+ (0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
531
+ convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
532
+ const schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
533
+ let newAst;
534
+ let groupByPivot = {};
535
+ ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
519
536
  // @ts-ignore
520
- groupByPivot.aggregationType);
521
- setFormattedRows(formattedRows);
537
+ report.pivot, schemaInfo));
538
+ if (convertedAst.where) {
539
+ setFormData((0, util_1.deepCopy)(convertedAst.where));
540
+ }
541
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
542
+ setActiveQuery(report.queryString);
543
+ newAst = groupByPivot ? newAst : convertedAst;
544
+ const initialRows = await fetchUponChange(newAst, undefined);
545
+ if (initialRows.error) {
546
+ setBaseAst(null);
547
+ setErrorMessage(initialRows.message);
548
+ setInitialChartLoad(false);
549
+ return;
550
+ }
551
+ setBaseAst(newAst);
552
+ const tableInfo = schemaInfo.find((table) => table.name === tableName);
553
+ let newUniqueValues = undefined;
554
+ let dateRangesTemp = undefined;
555
+ if (tableName) {
556
+ newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
557
+ setUniqueValues(newUniqueValues);
558
+ dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
559
+ setDateRanges(dateRangesTemp);
560
+ }
561
+ if (groupByPivot) {
562
+ // @ts-ignore
563
+ setPivotRowField(groupByPivot.rowField);
564
+ // @ts-ignore
565
+ setPivotAggregation(groupByPivot.aggregationType);
566
+ // @ts-ignore
567
+ setPivotColumnField(groupByPivot.columnField);
568
+ // @ts-ignore
569
+ setPivotValueField(groupByPivot.valueField);
570
+ setPivot(groupByPivot);
571
+ let dateBucket = undefined;
572
+ const tempDateRange = dateRangesTemp &&
573
+ groupByPivot.rowField &&
574
+ dateRangesTemp[groupByPivot.rowField];
575
+ if (tempDateRange) {
576
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
577
+ }
578
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(
579
+ // @ts-ignore
580
+ groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
581
+ setPivotData(pivotedData || []);
582
+ const formattedRows = formatRows(pivotedData.rows, report.columns, true,
583
+ // @ts-ignore
584
+ groupByPivot.aggregationType);
585
+ setFormattedRows(formattedRows);
586
+ }
587
+ else {
588
+ const formattedRows = formatRows(report.rows, report.columns);
589
+ setFormattedRows(formattedRows);
590
+ }
591
+ setCurrentTable(tableName);
522
592
  }
523
- else {
524
- const formattedRows = formatRows(report.rows, report.columns);
525
- setFormattedRows(formattedRows);
593
+ catch (error) {
594
+ console.error(error);
595
+ setErrorMessage('Error loading report');
526
596
  }
527
- setCurrentTable(tableName);
528
597
  // This handles a flashing issue
529
598
  setTimeout(() => {
530
- setInitalChartLoad(false);
599
+ setInitialChartLoad(false);
531
600
  }, 500);
532
601
  };
602
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
533
603
  if (report && report.referencedTables.length === 1) {
534
604
  loadChart();
535
605
  }
@@ -855,10 +925,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
855
925
  isReplaceSubtree: true,
856
926
  });
857
927
  };
858
- // Function to handle the deletion of expressions
859
- const handleDelete = (key) => {
860
- updateFormData([{ path: key, value: null }], { isDeletion: true });
861
- };
862
928
  // Function to handle the insertion of expressions
863
929
  const handleInsertion = (value, op = 'OR', isCondition = undefined) => {
864
930
  updateFormData([{ path: '', value }], {
@@ -921,6 +987,66 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
921
987
  return [{ label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(pivot.valueField) }];
922
988
  }
923
989
  };
990
+ const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
991
+ const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
992
+ page: paginationProcessing_1.DEFAULT_PAGINATION,
993
+ });
994
+ const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
995
+ const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
996
+ const onPageChange = (page) => {
997
+ if (currentProcessing.page &&
998
+ (0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
999
+ const newPagination = { ...currentProcessing.page, page };
1000
+ const updatedProcessing = { ...currentProcessing, page: newPagination };
1001
+ setCurrentProcessing(updatedProcessing);
1002
+ handleRunQuery(updatedProcessing);
1003
+ }
1004
+ if (page > previousPage) {
1005
+ setPreviousPage(page);
1006
+ }
1007
+ };
1008
+ const onSortChange = (sort) => {
1009
+ if (report &&
1010
+ (0, paginationProcessing_1.shouldSortInMemory)(paginationProcessing_1.DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
1011
+ return;
1012
+ }
1013
+ const updatedProcessing = { page: paginationProcessing_1.DEFAULT_PAGINATION, sort };
1014
+ handleRunQuery(updatedProcessing, true);
1015
+ setCurrentProcessing(updatedProcessing);
1016
+ setPreviousPage(0);
1017
+ };
1018
+ const handleRunQuery = async (processing, resetRows = false) => {
1019
+ try {
1020
+ setErrorMessage('');
1021
+ setTableLoading(true);
1022
+ const tableInfo = await (0, tableProcessing_1.fetchTableByQuery)(activeQuery, client, processing, customFields);
1023
+ if (tableInfo.error) {
1024
+ throw new Error(tableInfo.error);
1025
+ }
1026
+ else if (tableInfo.rows.length === 0) {
1027
+ throw new Error('No data found');
1028
+ }
1029
+ if (tableInfo.rowCount) {
1030
+ setNumberOfRows(tableInfo.rowCount);
1031
+ }
1032
+ setCurrentProcessing(processing);
1033
+ let tempRows = [...rows, ...tableInfo.rows];
1034
+ if (resetRows) {
1035
+ tempRows = tableInfo.rows;
1036
+ }
1037
+ setRows(tempRows);
1038
+ setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
1039
+ setColumns(tableInfo.columns);
1040
+ setTableLoading(false);
1041
+ }
1042
+ catch (e) {
1043
+ setTableLoading(false);
1044
+ setErrorMessage('Failed to run SQL query: ' + e);
1045
+ setRows([]);
1046
+ setColumns([]);
1047
+ return;
1048
+ }
1049
+ };
924
1050
  /**
925
1051
  * Render form fields based on the type of the node
926
1052
  * @param node the AST or subtree to render recursively
@@ -936,10 +1062,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
936
1062
  case 'binary_expr':
937
1063
  if (dateComparisonPartialMatch ||
938
1064
  ((0, util_1.isDateTruncEquals)(node) && client.databaseType !== 'BigQuery')) {
939
- const { dateColumn,
940
- // see onChange callback handleChange
941
- // eslint-disable-next-line no-unused-vars
942
- dateColumnPath, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
1065
+ const { dateColumn, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
943
1066
  const isPlural = intervalCount !== 1 && dateFilterType !== 'in the current'
944
1067
  ? 's'
945
1068
  : '';
@@ -1087,7 +1210,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1087
1210
  } }))] }));
1088
1211
  }
1089
1212
  else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
1090
- const { dateColumn, dateFilterType, intervalCount, intervalType } = (0, util_1.getDateFilterInfo)(node);
1213
+ const { dateColumn } = (0, util_1.getDateFilterInfo)(node);
1091
1214
  const options = getAllPossibleColumns().map((column) => ({
1092
1215
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1093
1216
  value: column.name,
@@ -1148,7 +1271,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1148
1271
  ], width: 200 }) })] }));
1149
1272
  }
1150
1273
  else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
1151
- const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
1152
1274
  const options = getAllPossibleColumns().map((column) => ({
1153
1275
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1154
1276
  value: column.name,
@@ -1207,7 +1329,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1207
1329
  { label: `week`, value: 'WEEK' },
1208
1330
  ], width: 200 })] }));
1209
1331
  }
1210
- else if ((0, util_1.isThePreviousInterval)(node, client.databaseType)) {
1332
+ else if ((0, util_1.isThePreviousInterval)(node)) {
1211
1333
  const options = getAllPossibleColumns().map((column) => ({
1212
1334
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1213
1335
  value: column.name,
@@ -1354,7 +1476,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1354
1476
  .find((tableInfo) => tableInfo.name === table)
1355
1477
  ?.columns.find((col) => col.name === leftChildValue);
1356
1478
  const columnType = column?.fieldType;
1357
- let operatorOptions = [
1479
+ const operatorOptions = [
1358
1480
  ...((0, ast_1.isNumericColumnType)(columnType)
1359
1481
  ? [
1360
1482
  { label: 'equal to', value: '=' },
@@ -1595,112 +1717,214 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1595
1717
  }
1596
1718
  return validPivot;
1597
1719
  };
1598
- const renderSentence = (formData, node, keyPrefix = '',
1599
- // @depreciated TODO: remove next update
1600
- // eslint-disable-next-line no-unused-vars
1601
- isTopLevel = false,
1602
- // @depreciated TODO: remove next update
1603
- // eslint-disable-next-line no-unused-vars
1604
- isTopLevelAnd = false, isParentRow = false) => {
1605
- const uniqueSentence = (0, util_1.getCustomSentence)(node, client.databaseType);
1606
- let dateComparisonPartialMatch = null;
1607
- let dateEqualityPartialMatch = null;
1608
- if (client.databaseType !== 'BigQuery') {
1609
- dateComparisonPartialMatch = (0, util_1.formatDateComparisonNode)(node);
1610
- dateEqualityPartialMatch = (0, util_1.tryConvertDateEquality)(node, client.databaseType);
1720
+ /**
1721
+ *
1722
+ * @param filterTree
1723
+ * Returns a list of filters to be displayed
1724
+ * Replaces the functionality of renderNodes in the context of filters
1725
+ * Contains filterSentence, which replaces renderSentence
1726
+ */
1727
+ const renderFilters = (filterTree) => {
1728
+ let tree = filterTree;
1729
+ let filterStack = [];
1730
+ /**
1731
+ * Function that takes in a FilterTree and flattens it into an array using in order traversal
1732
+ */
1733
+ function traverseTree(node) {
1734
+ if (!node) {
1735
+ return;
1736
+ }
1737
+ if (node.leaf) {
1738
+ filterStack.push(node);
1739
+ }
1740
+ else {
1741
+ traverseTree(node.leftNode);
1742
+ filterStack.push(node);
1743
+ traverseTree(node.rightNode);
1744
+ }
1611
1745
  }
1612
- const isRow = !(0, util_1.isTopLevelBoolean)(node);
1613
- const isCard = isRow && !isParentRow;
1614
- const OPS = {
1615
- AND: 'and',
1616
- OR: 'or',
1617
- LIKE: 'is exactly',
1618
- BETWEEN: 'is between',
1619
- IN: 'is',
1620
- 'NOT IN': 'is not',
1621
- 'NOT LIKE': 'is not exactly',
1622
- '!=': 'is not exactly',
1623
- '=': 'is',
1624
- '<': 'is less than',
1625
- '>': 'is greater than',
1626
- '<=': 'is less than or equal to',
1627
- '>=': 'is greater than or equal to',
1628
- '<>': 'is not',
1629
- '-': 'minus',
1630
- 'IS NOT': 'is not',
1631
- IS: 'is',
1632
- };
1633
- switch (node.type) {
1634
- case 'binary_expr':
1635
- return ((0, jsx_runtime_1.jsx)(ui_1.TagWrapper, { keyPrefix: keyPrefix, formData: formData, activeEditItem: activeEditItem, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setCheckboxes: setCheckboxes, handleReplaceSubtree: handleReplaceSubtree, FilterPopover: FilterPopoverComponent, setActivePath: setActivePath, setOpenPopover: setOpenPopover, setIsPending: setIsPending, clearCheckboxes: clearCheckboxes, handleDelete: handleDelete, editPopoverKey: editPopoverKey, isCard: isCard, isRow: isRow, getByKey: getByKey, EditPopover: ui_1.EditPopover, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, renderNode: renderNode, children: dateComparisonPartialMatch ??
1636
- dateEqualityPartialMatch ??
1637
- uniqueSentence ?? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [node.left &&
1638
- renderSentence(formData, node.left, keyPrefix + 'left.', false, false, isRow), isRow ? (' ' + OPS[node.operator] + ' ') : isTopLevel || topLevelBinaryOperator === 'OR' ? ((0, jsx_runtime_1.jsx)(TopLevelBooleanSwitch, { node: node, keyPrefix: keyPrefix, handleOperatorChange: handleOperatorChange, Select: SelectComponent })) : null, node.right &&
1639
- renderSentence(formData, node.right, keyPrefix + 'right.', false, false, isRow)] })) }));
1640
- case 'column_ref':
1641
- return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.column);
1642
- case 'expr_list':
1643
- if (node.value.length === 1) {
1644
- const subQuery = renderSentence(formData, node.value[0]);
1645
- if (subQuery) {
1646
- return `${subQuery}`;
1647
- }
1648
- return '()';
1746
+ /**
1747
+ * Returns a sentence to describe a Filter
1748
+ */
1749
+ function filterSentence(filter) {
1750
+ let value = '';
1751
+ if (filter.name == Filter_1.FilterNames.NullFilter) {
1752
+ return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}`;
1753
+ }
1754
+ else if (filter.value === null || filter.value === undefined) {
1755
+ return 'Error: filter missing value';
1756
+ }
1757
+ if (typeof filter.value === 'string' ||
1758
+ typeof filter.value === 'number') {
1759
+ value = filter.value.toString();
1760
+ }
1761
+ else if ('unit' in filter.value) {
1762
+ if (filter.operator === Filter_1.DateOperator.InTheCurrent) {
1763
+ value = `${filter.value.unit}`;
1649
1764
  }
1650
- return `${node.value
1651
- .map((elem) => renderSentence(formData, elem))
1652
- .join(', ')}`;
1653
- case 'single_quote_string':
1654
- return node.value.replaceAll('%', '');
1655
- case 'double_quote_string':
1656
- case 'number':
1657
- return node.value;
1658
- case 'null':
1659
- return 'null';
1660
- case 'bool':
1661
- return node.value.toString();
1662
- case 'interval':
1663
- if (node.unit) {
1664
- // eg. `INTERVAL '90' DAY` -> "90 days"
1665
- return `${node.expr.value} ${node.unit}s`;
1765
+ else {
1766
+ value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
1666
1767
  }
1667
- return node.expr.value;
1668
- case 'function':
1669
- if (node.name.toLowerCase() === 'lower' ||
1670
- node.name.toLowerCase() === 'upper') {
1671
- // how many transactions were above 20 and not fuel or made in the last 90 days (hint: use lower)
1672
- if (node.args.value.length < 1)
1673
- return null;
1674
- if (node.args.value[0].value) {
1675
- if (node.args.value[0].type === 'single_quote_string') {
1676
- return node.args.value[0].value.replaceAll('%', '');
1677
- }
1678
- return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.args.value[0].value.replaceAll('%', ''));
1679
- }
1680
- if (node.args.value[0].column)
1681
- return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.args.value[0].column.replaceAll('%', ''));
1768
+ }
1769
+ else if ('startDate' in filter.value) {
1770
+ value = `from ${filter.value.startDate}`;
1771
+ }
1772
+ else if (filter.value.length > 0) {
1773
+ value = filter.value.join(', ');
1774
+ }
1775
+ return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator} ${value}`;
1776
+ }
1777
+ /**
1778
+ * Given an array of Filters (presumed to be in in-order state), generate
1779
+ * the corresponding Filter tree. Essentially the reverse of what traverseTree does
1780
+ */
1781
+ function filterStackToFilterTree(stack) {
1782
+ function buildTree(i) {
1783
+ const newNode = {
1784
+ leaf: false,
1785
+ operator: null,
1786
+ leftNode: null,
1787
+ rightNode: null,
1788
+ };
1789
+ if (i >= stack.length) {
1682
1790
  return null;
1683
1791
  }
1684
- if (node.name.toLowerCase() === 'current_date' ||
1685
- node.name.toLowerCase() === 'now') {
1686
- return 'today';
1687
- }
1688
- if (node.name.toLowerCase() === 'date_trunc') {
1689
- // eg. date_trunc('month', now())
1690
- if (!node.args)
1691
- return null;
1692
- if (node.args.type !== 'expr_list')
1693
- return null;
1694
- if (node.args.value?.length !== 2)
1695
- return null;
1696
- const interval = renderSentence(formData, node.args.value[0]);
1697
- const timestamp = renderSentence(formData, node.args.value[1]);
1698
- return `start of the ${interval} of ${timestamp}`;
1792
+ else if (stack[i].leaf) {
1793
+ if (i < stack.length - 1) {
1794
+ // more nodes later
1795
+ newNode.operator = stack[i + 1].operator;
1796
+ newNode.leftNode = {
1797
+ leaf: true,
1798
+ leftNode: null,
1799
+ rightNode: null,
1800
+ operator: null,
1801
+ value: stack[i].value,
1802
+ };
1803
+ newNode.rightNode = buildTree(i + 2);
1804
+ }
1805
+ else {
1806
+ newNode.leaf = true;
1807
+ newNode.value = stack[i].value;
1808
+ }
1699
1809
  }
1700
- return null;
1701
- default:
1702
- return null;
1810
+ return newNode;
1811
+ }
1812
+ return buildTree(0);
1703
1813
  }
1814
+ traverseTree(tree);
1815
+ // Remove null (invalid) filters from filter stack
1816
+ filterStack = filterStack.filter((filter) => {
1817
+ return ((!filter.leaf &&
1818
+ filter.rightNode &&
1819
+ (!filter.rightNode.leaf || filter.rightNode.value)) ||
1820
+ (filter.leaf && filter.value));
1821
+ });
1822
+ // Render filterStack
1823
+ return ((0, jsx_runtime_1.jsx)("div", { style: {
1824
+ display: 'flex',
1825
+ flexDirection: 'column',
1826
+ }, children: filterStack.map((item, index) => {
1827
+ if (!item.leaf &&
1828
+ (item.operator === 'and' || item.operator === 'or')) {
1829
+ return ((0, jsx_runtime_1.jsx)("div", { style: {
1830
+ width: 'fit-content',
1831
+ marginBottom: '8px',
1832
+ marginTop: '8px',
1833
+ }, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: item.operator.toUpperCase(), options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: () => {
1834
+ if (item.operator === 'and') {
1835
+ item.operator = 'or';
1836
+ }
1837
+ else {
1838
+ item.operator = 'and';
1839
+ }
1840
+ let newFormData = null;
1841
+ if (tree) {
1842
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1843
+ }
1844
+ const newAst = (0, util_1.deepCopy)({
1845
+ ...constants_1.defaultAST,
1846
+ ...baseAst,
1847
+ ...(!baseAst?.columns && {
1848
+ columns: getAllPossibleColumns().map((c) => {
1849
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1850
+ newColumn.expr.column = c.name;
1851
+ return newColumn;
1852
+ }),
1853
+ }),
1854
+ ...(!baseAst?.from && {
1855
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1856
+ }),
1857
+ where: newFormData,
1858
+ });
1859
+ setBaseAst(newAst);
1860
+ setFormData(newFormData);
1861
+ fetchSqlQuery(newAst, newFormData);
1862
+ } }) }, index));
1863
+ }
1864
+ else {
1865
+ return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: schema.find((s) => s.name === currentTable ||
1866
+ s.displayName === currentTable) ?? schema[0], filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, openFilterIndex: openFilterIndex, setOpenFilterIndex: setOpenFilterIndex, FilterPopover: FilterPopoverComponent, FilterModal: FilterModal_1.default, fieldValuesMap: fieldValuesMap, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
1867
+ item.value = filter;
1868
+ let newFormData = null;
1869
+ if (tree) {
1870
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1871
+ }
1872
+ const newAst = (0, util_1.deepCopy)({
1873
+ ...constants_1.defaultAST,
1874
+ ...baseAst,
1875
+ ...(!baseAst?.columns && {
1876
+ columns: getAllPossibleColumns().map((c) => {
1877
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1878
+ newColumn.expr.column = c.name;
1879
+ return newColumn;
1880
+ }),
1881
+ }),
1882
+ ...(!baseAst?.from && {
1883
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1884
+ }),
1885
+ where: newFormData,
1886
+ });
1887
+ setBaseAst(newAst);
1888
+ setFormData(newFormData);
1889
+ fetchSqlQuery(newAst, newFormData);
1890
+ }, handleFilterDelete: (i) => {
1891
+ if (i > 0) {
1892
+ filterStack.splice(i - 1, 2);
1893
+ }
1894
+ else {
1895
+ if (filterStack.length > 1) {
1896
+ filterStack.splice(i, 2);
1897
+ }
1898
+ else {
1899
+ filterStack.splice(i, 1);
1900
+ }
1901
+ }
1902
+ tree = filterStackToFilterTree(filterStack);
1903
+ let newFormData = null;
1904
+ if (tree) {
1905
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1906
+ }
1907
+ const newAst = (0, util_1.deepCopy)({
1908
+ ...constants_1.defaultAST,
1909
+ ...baseAst,
1910
+ ...(!baseAst?.columns && {
1911
+ columns: getAllPossibleColumns().map((c) => {
1912
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1913
+ newColumn.expr.column = c.name;
1914
+ return newColumn;
1915
+ }),
1916
+ }),
1917
+ ...(!baseAst?.from && {
1918
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1919
+ }),
1920
+ where: newFormData,
1921
+ });
1922
+ setBaseAst(newAst);
1923
+ setFormData(newFormData);
1924
+ fetchSqlQuery(newAst, newFormData);
1925
+ } }) }, index));
1926
+ }
1927
+ }) }));
1704
1928
  };
1705
1929
  const getAllPossibleColumns = () => {
1706
1930
  if (!baseAst || !baseAst.from) {
@@ -1742,7 +1966,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1742
1966
  if (selectedColumns.length < 1)
1743
1967
  return false;
1744
1968
  const allColumns = orderedColumnNames.filter((row) => {
1745
- const [table, _] = row.split('.');
1969
+ const [table] = row.split('.');
1746
1970
  const selectedTable = selectedColumns[0].split('.')[0];
1747
1971
  return selectedTable === table;
1748
1972
  });
@@ -1786,35 +2010,38 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1786
2010
  task: 'patterns',
1787
2011
  getCustomFields: false,
1788
2012
  customFields,
1789
- // additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2013
+ additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2014
+ useUpdatedDataGathering: true,
2015
+ useNewNodeSql: true, // new flag
1790
2016
  },
1791
2017
  };
1792
- const cloudBody = {};
1793
- const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
1794
- if (data2.success === false) {
1795
- throw new Error(data2.errorMessage);
1796
- }
1797
- rows = data2.rows;
1798
2018
  const tables = (0, ast_1.getTableNames)(baseAst);
1799
2019
  const table = tables.length >= 1 ? tables[0] : initialTableName;
1800
- if (table !== currentTable) {
2020
+ let newUniqueValues = uniqueValues;
2021
+ let dateRangesTemp = dateRanges;
2022
+ let curReport = tempReport;
2023
+ if ((newUniqueValues && Object.keys(newUniqueValues).length === 0) ||
2024
+ table !== currentTable) {
1801
2025
  const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
1802
2026
  if (tableInfo) {
1803
- const convertedStringColumns = tableInfo.columns
1804
- .filter((column) => {
1805
- return (0, ast_1.isTextColumnType)(column.fieldType);
1806
- })
1807
- .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
1808
- const stringNames = convertedStringColumns.map((column) => column.field);
1809
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client, customFields);
1810
- const joinedUniqueValues = (0, util_1.deepCopy)(uniqueValues);
1811
- joinedUniqueValues[table] = newUniqueValues;
1812
- if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(joinedUniqueValues)) {
1813
- setUniqueValues(joinedUniqueValues);
2027
+ newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
2028
+ if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
2029
+ setUniqueValues(newUniqueValues);
1814
2030
  }
2031
+ dateRangesTemp = await getDateRanges(tableInfo.columns, table);
2032
+ setDateRanges(dateRangesTemp || {});
1815
2033
  }
1816
2034
  setCurrentTable(table);
1817
2035
  }
2036
+ const cloudBody = {};
2037
+ const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
2038
+ if (data2.success === false) {
2039
+ throw new Error(data2.errorMessage);
2040
+ }
2041
+ rows = data2.rows;
2042
+ if (data2.rowCount) {
2043
+ setNumberOfRows(data2.rowCount);
2044
+ }
1818
2045
  if (data2.rows && data2.rows.length) {
1819
2046
  if (pivot) {
1820
2047
  // check if any of the pivot fields aren't in the data2.fields array
@@ -1824,23 +2051,75 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1824
2051
  setPivotData(null);
1825
2052
  setRows(data2.rows);
1826
2053
  setColumns(processedFields);
2054
+ if (data2.rowCount) {
2055
+ const processedFormData = report
2056
+ ? report
2057
+ : (0, ChartBuilder_1.createInitialFormData)(processedFields);
2058
+ setNumberOfRows(data2.rowCount);
2059
+ curReport = {
2060
+ ...formData,
2061
+ ...processedFormData,
2062
+ itemQuery: data2.itemQuery,
2063
+ rowCount: data2.rowCount,
2064
+ filtersApplied: [],
2065
+ rows: data2.rows,
2066
+ columns: processedFields,
2067
+ };
2068
+ setTempReport(curReport);
2069
+ }
1827
2070
  const formattedRows = formatRows(data2.rows, processedFields, false);
1828
2071
  setFormattedRows(formattedRows);
1829
2072
  return;
1830
2073
  }
2074
+ curReport = {
2075
+ ...formData,
2076
+ itemQuery: data2.itemQuery,
2077
+ rowCount: data2.rowCount,
2078
+ filtersApplied: [],
2079
+ rows: data2.rows,
2080
+ };
1831
2081
  // Do all of this to make sure we have the right unique columns when applying a pivot
1832
- let uniqueFormatted = {};
1833
- const uniqueRecords = Array.from(new Set(data2.rows.map((row) => row[pivot.columnField]))).reduce((acc, curr) => {
1834
- acc[curr] = false;
1835
- return acc;
1836
- }, {});
1837
- uniqueFormatted[pivot.columnField] = uniqueRecords;
1838
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(pivot, data2.rows, undefined, false);
2082
+ let dateBucket = undefined;
2083
+ const tempDateRange = dateRangesTemp &&
2084
+ pivot.rowField &&
2085
+ dateRangesTemp[pivot.rowField];
2086
+ if (tempDateRange) {
2087
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
2088
+ }
2089
+ let distinctValuesForQuery = {};
2090
+ if (pivot.columnField) {
2091
+ const sqlQuery = await fetchSqlQuery({ ...baseAst, where: curFormData }, null, false);
2092
+ distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
2093
+ {
2094
+ field: pivot.columnField,
2095
+ label: pivot.columnField,
2096
+ format: 'string',
2097
+ },
2098
+ ], sqlQuery, [], client, customFields);
2099
+ }
2100
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(
2101
+ // @ts-ignore
2102
+ pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, distinctValuesForQuery ? distinctValuesForQuery : undefined);
1839
2103
  console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
1840
2104
  const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1841
2105
  setPivotData(pivotedData);
1842
2106
  setRows(data2.rows);
1843
2107
  setColumns(processedFields);
2108
+ if (data2.rowCount) {
2109
+ const processedFormData = report
2110
+ ? report
2111
+ : (0, ChartBuilder_1.createInitialFormData)(processedFields);
2112
+ setNumberOfRows(data2.rowCount);
2113
+ setTempReport({
2114
+ ...formData,
2115
+ ...processedFormData,
2116
+ itemQuery: data2.itemQuery,
2117
+ rowCount: data2.rowCount,
2118
+ filtersApplied: [],
2119
+ rows: data2.rows,
2120
+ columns: processedFields,
2121
+ });
2122
+ }
1844
2123
  const formattedRows = formatRows(pivotedData.rows, processedFields, true, pivot.aggregationType);
1845
2124
  setSelectedColumns(processedFields.map((column) => {
1846
2125
  return `${table}.${column.field}`;
@@ -1851,6 +2130,21 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1851
2130
  const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1852
2131
  setRows(data2.rows);
1853
2132
  setColumns(processedFields);
2133
+ if (data2.rowCount) {
2134
+ const processedFormData = report
2135
+ ? report
2136
+ : (0, ChartBuilder_1.createInitialFormData)(processedFields);
2137
+ setNumberOfRows(data2.rowCount);
2138
+ setTempReport({
2139
+ ...formData,
2140
+ ...processedFormData,
2141
+ itemQuery: data2.itemQuery,
2142
+ rowCount: data2.rowCount,
2143
+ filtersApplied: [],
2144
+ rows: data2.rows,
2145
+ columns: processedFields,
2146
+ });
2147
+ }
1854
2148
  setSelectedColumns(processedFields.map((column) => {
1855
2149
  return `${table}.${column.field}`;
1856
2150
  }));
@@ -1867,105 +2161,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1867
2161
  setFormattedRows([]);
1868
2162
  setPivotData(null);
1869
2163
  }
2164
+ setLoading(false);
2165
+ setDataDisplayed(true);
2166
+ return rows;
1870
2167
  }
1871
2168
  catch (e) {
1872
- console.error(e);
1873
2169
  setErrorMessage(e.message);
1874
- }
1875
- finally {
1876
2170
  setLoading(false);
1877
2171
  setDataDisplayed(true);
1878
- return rows;
2172
+ setRows([]);
2173
+ setColumns([]);
2174
+ setFormattedRows([]);
2175
+ setPivotData(null);
2176
+ return { error: true, message: e.message };
1879
2177
  }
1880
2178
  }
1881
2179
  };
1882
- // Convert an array of columns to a map where the name is the
1883
- // key and the value is the column node.
1884
- const columnArrayToMap = (columns) => {
1885
- const columnMap = {};
1886
- for (const col of columns) {
1887
- const key = col.expr?.value ?? col.expr?.column ?? col.as;
1888
- columnMap[key] = col;
1889
- }
1890
- return columnMap;
1891
- };
1892
- const applyFormatting = (response, columns) => {
1893
- const columnFormatters = {};
1894
- const columnMap = columnArrayToMap(columns);
1895
- response.fields.forEach((field) => {
1896
- // TODO: columnMap[field.name] silently breaks for columnField columns
1897
- const formatType = (0, util_1.getPostgresBasicType)(field);
1898
- if (formatType === 'date') {
1899
- columnFormatters[field.name] = (x) => {
1900
- const d = new Date(x);
1901
- // check if d is a valid date
1902
- if (isNaN(d.getTime())) {
1903
- return 'Invalid Date';
1904
- }
1905
- d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); // TZ adjust
1906
- if (columnMap[field.name]?.expr.type === 'function' &&
1907
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
1908
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
1909
- 'month') {
1910
- return d.toLocaleString('default', {
1911
- month: 'short',
1912
- year: 'numeric',
1913
- });
1914
- }
1915
- else if (columnMap[field.name]?.expr.type === 'function' &&
1916
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
1917
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
1918
- 'quarter') {
1919
- return `Q${(0, date_fns_1.getQuarter)(d)} ${d.getFullYear()}`;
1920
- }
1921
- else if (columnMap[field.name]?.expr.type === 'function' &&
1922
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
1923
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
1924
- 'year') {
1925
- return d.toLocaleString('default', {
1926
- year: 'numeric',
1927
- });
1928
- }
1929
- return constants_1.DATE_FMT.format(d);
1930
- };
1931
- }
1932
- else if (formatType === 'number') {
1933
- columnFormatters[field.name] = (x) => {
1934
- if (columnMap[field.name]?.expr.type === 'extract' &&
1935
- columnMap[field.name]?.expr.args.field.toLowerCase() === 'dow') {
1936
- return constants_1.DAY_OF_WEEK[x];
1937
- }
1938
- else if (columnMap[field.name]?.expr.type === 'extract' &&
1939
- columnMap[field.name]?.expr.args.field.toLowerCase() === 'month') {
1940
- return constants_1.MONTH_OF_YEAR[x - 1];
1941
- }
1942
- else if (`${x}`.includes('.')) {
1943
- // return MONEY_FMT.format(Number(x ?? 0.0));
1944
- return Number(x ?? 0.0).toFixed(2);
1945
- }
1946
- return x ?? 0.0;
1947
- };
1948
- }
1949
- else if (formatType === 'boolean') {
1950
- columnFormatters[field.name] = (x) => {
1951
- if (x) {
1952
- return 'True';
1953
- }
1954
- return 'False';
1955
- };
1956
- }
1957
- else {
1958
- columnFormatters[field.name] = (x) => x;
1959
- }
1960
- });
1961
- return response.rows.map((row) => {
1962
- const newRow = {};
1963
- Object.keys(row).forEach((key) => (newRow[key] = columnFormatters[key]
1964
- ? columnFormatters[key](row[key])
1965
- : row[key]));
1966
- return newRow;
1967
- });
1968
- };
1969
2180
  // Returns whether a where-clause contains a nested subquery.
1970
2181
  const isSubquery = (node) => {
1971
2182
  if (!node)
@@ -1989,7 +2200,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1989
2200
  return;
1990
2201
  }
1991
2202
  try {
1992
- let errored = false;
1993
2203
  setLoading(true);
1994
2204
  setAskedAQuestion(true);
1995
2205
  setErrorMessage('');
@@ -2009,6 +2219,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2009
2219
  body: JSON.stringify({
2010
2220
  initialQuestion: aiPrompt || overridePrompt,
2011
2221
  publicKey: client.publicKey,
2222
+ useNewNodeSql: true, // new flag
2012
2223
  }),
2013
2224
  });
2014
2225
  }
@@ -2020,6 +2231,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2020
2231
  sqlQuery: activeQuery,
2021
2232
  initialQuestion: aiPrompt,
2022
2233
  publicKey: client.publicKey,
2234
+ useNewNodeSql: true, // new flag
2023
2235
  }),
2024
2236
  });
2025
2237
  }
@@ -2037,31 +2249,33 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2037
2249
  setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
2038
2250
  return;
2039
2251
  }
2252
+ let currentSchema = schema;
2253
+ if (currentSchema && currentSchema.length === 0) {
2254
+ currentSchema = await fetchSchema();
2255
+ }
2040
2256
  let newAst, groupByPivot;
2041
2257
  if (ast) {
2042
2258
  // Unwrap the ast object, supporting many possible types
2043
2259
  ast = ast.length ? ast[0] : ast;
2044
2260
  newAst = (0, convert_1.convertBigQuery)(ast);
2045
- newAst = (0, convert_1.convertWildcardColumns)(newAst, schema); // must go before groupby
2046
- ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, schema));
2047
- if (groupByPivot && !groupByPivot?.valueField) {
2048
- setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
2049
- return;
2050
- }
2261
+ newAst = (0, convert_1.convertWildcardColumns)(newAst, currentSchema); // must go before groupby
2262
+ ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, currentSchema));
2051
2263
  newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
2052
2264
  newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
2053
2265
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2054
2266
  const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2055
2267
  newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table, getAllPossibleColumns().map((col) => col.name));
2056
- setSelectedColumns((0, util_1.deepCopy)(newAst).columns?.map((column) => {
2268
+ const procesedColumns = (0, util_1.deepCopy)(newAst).columns?.map((column) => {
2057
2269
  if (column.expr.type === 'column_ref') {
2058
- return `${table}.${column.expr.column}`;
2270
+ const columnName = (0, ast_1.extractColumnish)(column.expr);
2271
+ return `${table}.${columnName}`;
2059
2272
  }
2060
2273
  else if (column.as) {
2061
2274
  return `${table}.${column.as}`;
2062
2275
  }
2063
2276
  return `${table}.${column.expr.value}`;
2064
- }));
2277
+ });
2278
+ setSelectedColumns(procesedColumns);
2065
2279
  if (groupByPivot) {
2066
2280
  setBaseAst((0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null }));
2067
2281
  newAst = (0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null });
@@ -2077,7 +2291,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2077
2291
  ast = newAst; // so we fetch data for newAst later.
2078
2292
  fetchSqlQuery(ast, undefined, false);
2079
2293
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2080
- const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2081
2294
  const hostedBody = {
2082
2295
  metadata: {
2083
2296
  clientId: client.publicKey,
@@ -2085,34 +2298,46 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2085
2298
  publicKey: client.publicKey,
2086
2299
  orgId: client.customerId,
2087
2300
  task: 'patterns',
2088
- // additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2301
+ additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2302
+ useUpdatedDataGathering: true,
2303
+ pivot: groupByPivot,
2304
+ useNewNodeSql: true, // new flag
2089
2305
  },
2090
2306
  };
2091
- const cloudBody = {};
2092
- const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
2093
- if (data2.status === 'error') {
2094
- throw new Error('Error querying data from patterns');
2095
- }
2096
2307
  let currentUniqueValues = uniqueValues;
2097
- if (table !== currentTable) {
2098
- const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
2308
+ let dateRangesTemp = dateRanges;
2309
+ if ((currentUniqueValues &&
2310
+ currentUniqueValues[table] &&
2311
+ Object.keys(currentUniqueValues[table]).length === 0) ||
2312
+ table !== currentTable) {
2313
+ const tableInfo = currentSchema.find((tableInfo) => tableInfo.name === table);
2099
2314
  if (tableInfo) {
2100
- const convertedStringColumns = tableInfo.columns
2101
- .filter((column) => {
2102
- return (0, ast_1.isTextColumnType)(column.fieldType);
2103
- })
2104
- .map((column) => (0, columnProcessing_1.convertColumnInfoToColumnInternal)(column));
2105
- const stringNames = convertedStringColumns.map((column) => column.field);
2106
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(convertedStringColumns, `Select ${stringNames.join(', ')} from ${table}`, rows, client, customFields);
2107
- currentUniqueValues[table] = newUniqueValues;
2108
- if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(currentUniqueValues)) {
2109
- setUniqueValues(currentUniqueValues);
2315
+ const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
2316
+ currentUniqueValues = newUniqueValues;
2317
+ if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
2318
+ setUniqueValues(newUniqueValues);
2110
2319
  }
2320
+ dateRangesTemp = await getDateRanges(tableInfo.columns, table);
2321
+ setDateRanges(dateRangesTemp);
2111
2322
  }
2112
2323
  setCurrentTable(table);
2113
2324
  }
2325
+ const cloudBody = {};
2326
+ const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
2327
+ if (!data2 || data2.status === 'error') {
2328
+ throw new Error('Error querying data from patterns');
2329
+ }
2114
2330
  if (data2.rows && data2.rows.length) {
2115
- const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
2331
+ const processedFields = data2.fields
2332
+ .map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem))
2333
+ .map((elem) => {
2334
+ const tableInfo = currentSchema.find((t) => t.name === table);
2335
+ const columnInfo = tableInfo?.columns.find((column) => column.name === elem.field);
2336
+ return columnInfo
2337
+ ? (0, columnProcessing_1.convertColumnInfoToColumnInternal)(columnInfo)
2338
+ : null;
2339
+ })
2340
+ .filter((elem) => elem);
2116
2341
  let possiblePivot = true;
2117
2342
  const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
2118
2343
  if (groupByPivot &&
@@ -2126,7 +2351,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2126
2351
  let errorMessageEnding = '';
2127
2352
  if (groupByPivot.columnField &&
2128
2353
  !possibleColumns.columnFields.includes(groupByPivot?.columnField || '')) {
2129
- if (currentUniqueValues[table][groupByPivot?.columnField || '']) {
2354
+ if (currentUniqueValues[table]?.[groupByPivot?.columnField || '']) {
2130
2355
  errorMessageEnding = `The column ${groupByPivot?.columnField} has more than 24 unique values to pivot on.`;
2131
2356
  }
2132
2357
  else {
@@ -2135,7 +2360,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2135
2360
  }
2136
2361
  else if (groupByPivot.rowField &&
2137
2362
  !possibleColumns.rowFields.includes(groupByPivot?.rowField || '')) {
2138
- if (currentUniqueValues[table][groupByPivot?.rowField || '']) {
2363
+ if (currentUniqueValues[table]?.[groupByPivot?.rowField || '']) {
2139
2364
  errorMessageEnding = `The column ${groupByPivot?.rowField} has more than 36 unique values to pivot on.`;
2140
2365
  }
2141
2366
  else {
@@ -2147,18 +2372,45 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2147
2372
  errorMessageEnding = `The column ${groupByPivot?.valueField} is not a proper value field.`;
2148
2373
  }
2149
2374
  setErrorMessage(`The requested pivot is not supported. ${errorMessageEnding}`);
2150
- errored = true;
2151
2375
  }
2152
2376
  if (groupByPivot && possiblePivot) {
2153
- setPivotRowField(groupByPivot?.rowField);
2154
- setPivotColumnField(groupByPivot?.columnField);
2155
- setPivotValueField(groupByPivot?.valueField);
2156
- setPivotAggregation(groupByPivot?.aggregationType);
2157
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(groupByPivot, data2.rows, undefined, false);
2377
+ let curReport = report ? report : undefined;
2378
+ if (data2.rowCount) {
2379
+ const processedFormData = report
2380
+ ? report
2381
+ : (0, ChartBuilder_1.createInitialFormData)(processedFields);
2382
+ setNumberOfRows(data2.rowCount);
2383
+ curReport = {
2384
+ ...formData,
2385
+ ...processedFormData,
2386
+ itemQuery: data2.itemQuery,
2387
+ rowCount: data2.rowCount,
2388
+ filtersApplied: [],
2389
+ rows: data2.rows,
2390
+ columns: processedFields,
2391
+ };
2392
+ setTempReport(curReport || null);
2393
+ }
2394
+ let dateBucket = undefined;
2395
+ const tempDateRange = dateRangesTemp &&
2396
+ groupByPivot.rowField &&
2397
+ dateRangesTemp[groupByPivot.rowField];
2398
+ if (tempDateRange) {
2399
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
2400
+ }
2401
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(
2402
+ // @ts-ignore
2403
+ groupByPivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, groupByPivot.columnField
2404
+ ? currentUniqueValues[groupByPivot.columnField]
2405
+ : undefined);
2158
2406
  console.info(`%c[Pivot]: ${JSON.stringify(groupByPivot)}`, 'color: dimgray');
2159
2407
  setPivotData(pivotedData);
2160
2408
  setPivot(groupByPivot);
2161
2409
  setRows(data2.rows);
2410
+ setPivotRowField(groupByPivot?.rowField);
2411
+ setPivotColumnField(groupByPivot?.columnField);
2412
+ setPivotValueField(groupByPivot?.valueField);
2413
+ setPivotAggregation(groupByPivot?.aggregationType);
2162
2414
  setColumns(processedFields);
2163
2415
  const formattedRows = formatRows(pivotedData.rows, processedFields, true, groupByPivot.aggregationType);
2164
2416
  setFormattedRows(formattedRows);
@@ -2167,6 +2419,17 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2167
2419
  const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
2168
2420
  setRows(data2.rows);
2169
2421
  setColumns(processedFields);
2422
+ if (data2.rowCount) {
2423
+ setNumberOfRows(data2.rowCount);
2424
+ setTempReport({
2425
+ ...formData,
2426
+ itemQuery: data2.itemQuery,
2427
+ rowCount: data2.rowCount,
2428
+ filtersApplied: [],
2429
+ rows: data2.rows,
2430
+ columns: processedFields,
2431
+ });
2432
+ }
2170
2433
  const formattedRows = formatRows(data2.rows, processedFields, false);
2171
2434
  setFormattedRows(formattedRows);
2172
2435
  }
@@ -2185,7 +2448,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2185
2448
  setActiveQuery('');
2186
2449
  }
2187
2450
  if (data2.errorMessage) {
2188
- setErrorMessage(`Error: ${data2.errorMessage}`);
2451
+ setErrorMessage(`Error: Couldn't process your request, please re-word your prompt.`);
2189
2452
  }
2190
2453
  }
2191
2454
  catch (e) {
@@ -2205,7 +2468,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2205
2468
  setSelectedColumns((selectedColumns) => selectedColumns.filter((column) => !column.endsWith(name)));
2206
2469
  const columns = baseAst.columns.filter((col) => {
2207
2470
  if (col.expr.type === 'column_ref') {
2208
- return col.expr.column !== name;
2471
+ return (col.expr.column !== name &&
2472
+ (!col.expr.column.expr || col.expr.column.expr.value !== name));
2209
2473
  }
2210
2474
  else if (col.as) {
2211
2475
  return col.as !== name;
@@ -2220,14 +2484,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2220
2484
  setBaseAst(newAst);
2221
2485
  fetchSqlQuery(newAst);
2222
2486
  };
2223
- function TopLevelBooleanSwitch({ node, keyPrefix, handleOperatorChange, }) {
2224
- return ((0, jsx_runtime_1.jsx)("div", { style: { width: 'fit-content' }, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: node.operator, options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: (event) => {
2225
- if (loading) {
2226
- return;
2227
- }
2228
- handleOperatorChange(event.target.value, node, keyPrefix);
2229
- } }) }));
2230
- }
2231
2487
  const DraggableItem = ({ id, label, onDelete }) => {
2232
2488
  const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
2233
2489
  const style = {
@@ -2254,7 +2510,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2254
2510
  setOrderedColumnNames(newOrder);
2255
2511
  const orderedSelectedColumns = [];
2256
2512
  for (const value of newOrder) {
2257
- const [_, column] = value.split('.');
2513
+ const column = value.split('.')[1];
2258
2514
  if (selectedColumns.includes(value)) {
2259
2515
  orderedSelectedColumns.push(column);
2260
2516
  }
@@ -2278,12 +2534,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2278
2534
  fetchSqlQuery(newAst, undefined, false);
2279
2535
  }
2280
2536
  }
2281
- const columnNamesInAst = baseAst?.columns.map((col) => {
2282
- if (col.expr.type === 'column_ref') {
2283
- return col.expr.column;
2537
+ const columnNamesInAst = baseAst?.columns
2538
+ .map((col) => {
2539
+ if (col.expr.type === 'column_ref' && col.expr.column) {
2540
+ if (typeof col.expr.column === 'string') {
2541
+ return col.expr.column;
2542
+ }
2543
+ else {
2544
+ return col.expr.column.expr.value;
2545
+ }
2284
2546
  }
2285
2547
  else if (col.as) {
2286
- return col.as;
2548
+ if (typeof col.as === 'string') {
2549
+ return col.as;
2550
+ }
2551
+ else {
2552
+ return col.as.expr?.value;
2553
+ }
2287
2554
  }
2288
2555
  else if (col.expr && col.expr.type === 'aggr_func') {
2289
2556
  if (col.expr.args) {
@@ -2292,22 +2559,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2292
2559
  return col.expr.name;
2293
2560
  }
2294
2561
  return col.expr.value;
2295
- }) ?? [];
2562
+ })
2563
+ .filter(
2564
+ // remove duplicate entries
2565
+ (value, index, self) => value && self.indexOf(value) === index) ?? [];
2296
2566
  return ((0, jsx_runtime_1.jsx)(core_1.DndContext, { sensors: sensors, collisionDetection: core_1.closestCenter, onDragEnd: handleDragEnd, children: (0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: columnNamesInAst, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsxs)("div", { style: {
2297
2567
  display: 'flex',
2298
2568
  flexDirection: 'column',
2299
2569
  gap: 8,
2300
2570
  }, children: [columnNamesInAst.map((name) => ((0, jsx_runtime_1.jsx)(DraggableItem, { id: name, label: name, onDelete: () => handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && (0, jsx_runtime_1.jsx)("div", { style: { height: 6 } })] }) }) }));
2301
2571
  }
2302
- if (loading || initalChartLoad) {
2572
+ if (loading || initialChartLoad) {
2303
2573
  return ((0, jsx_runtime_1.jsxs)("div", { style: {
2304
2574
  display: 'flex',
2305
2575
  flexDirection: 'row',
2306
2576
  height: '100%',
2307
2577
  ...containerStyle,
2308
2578
  }, className: className, ref: parentRef, children: [(0, jsx_runtime_1.jsxs)(SidebarComponent, { children: [(0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Columns" }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2309
- if (loadingSchema)
2310
- return;
2311
2579
  if (!openPopover) {
2312
2580
  setOpenPopover('AddColumnModal');
2313
2581
  }
@@ -2328,12 +2596,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2328
2596
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2329
2597
  setBaseAst(ast);
2330
2598
  fetchSqlQuery(ast);
2331
- }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
2599
+ }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
2332
2600
  display: 'flex',
2333
2601
  flexDirection: 'column',
2334
2602
  gap: 8,
2335
2603
  marginBottom: 12,
2336
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2604
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2337
2605
  display: 'flex',
2338
2606
  flexDirection: 'column',
2339
2607
  alignItems: 'flex-start',
@@ -2345,7 +2613,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2345
2613
  }
2346
2614
  if (!openPopover) {
2347
2615
  const value = orderedColumnNames[0];
2348
- const [_table, column] = value.split('.');
2616
+ const column = value.split('.')[1];
2349
2617
  const columnType = getColumnTypeByName(column);
2350
2618
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2351
2619
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2374,27 +2642,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2374
2642
  setActiveEditItem(null);
2375
2643
  }, 300);
2376
2644
  }
2377
- }, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(ui_1.AddFilterPopover, { onSave: () => {
2378
- if ((0, util_1.isNodeEmptyCollection)(activeEditItem)) {
2379
- setIsPending(false);
2380
- setActivePath(null);
2381
- setOpenPopover(null);
2382
- setTimeout(() => {
2383
- clearCheckboxes();
2384
- setActiveEditItem(null);
2385
- }, 300);
2386
- }
2387
- else {
2388
- setIsPending(false);
2389
- handleInsertion(activeEditItem, 'AND', false);
2390
- setActivePath(null);
2391
- setOpenPopover(null);
2392
- setTimeout(() => {
2393
- clearCheckboxes();
2394
- setActiveEditItem(null);
2395
- }, 300);
2396
- }
2397
- }, Button: ButtonComponent, renderNode: renderNode, activeEditItem: activeEditItem }) }) }), baseAst?.where &&
2645
+ }, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
2646
+ s.displayName === currentTable) ?? schema[0], fieldValuesMap: uniqueValues[(0, ast_1.getTableNames)(baseAst).length === 1
2647
+ ? (0, ast_1.getTableNames)(baseAst)[0]
2648
+ : initialTableName], onSubmitFilter: (filter) => {
2649
+ setOpenPopover(null);
2650
+ setIsPending(false);
2651
+ const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
2652
+ handleInsertion(item, 'AND', false);
2653
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
2398
2654
  false && ( // temp removed the AddConditionPopover
2399
2655
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2400
2656
  if (!openPopover) {
@@ -2433,25 +2689,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2433
2689
  setActivePath(null);
2434
2690
  setOpenPopover(null);
2435
2691
  }
2436
- } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2692
+ } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEditingPivot, setShowUpdatePivot: setIsEditingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2437
2693
  setPivot(null);
2438
2694
  setPivotData(null);
2439
2695
  const formattedRows = formatRows(rows, columns, false);
2440
2696
  setFormattedRows(formattedRows);
2441
2697
  },
2442
2698
  // TODOs
2443
- selectPivot: (pivot) => {
2444
- if (!pivot)
2445
- return;
2446
- const newAst = { ...baseAst };
2447
- newAst.orderby = null;
2448
- setBaseAst(newAst); // trigger refetch
2449
- setPivot(pivot);
2450
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(pivot, rows, undefined, false);
2451
- setPivotData(pivotedData || []);
2452
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2453
- setFormattedRows(formattedRows);
2454
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2699
+ selectPivot: () => {
2700
+ return;
2701
+ }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, report: tempReport ?? report }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2455
2702
  setPivotRowField(value);
2456
2703
  }, setPivotColumnField: setPivotColumnField, setPivotValueField: setPivotValueField, setPivotAggregation: setPivotAggregation, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, onDelete: () => {
2457
2704
  setPivot(null);
@@ -2466,7 +2713,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2466
2713
  }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
2467
2714
  type: pivot.sortDirection,
2468
2715
  expr: { type: 'column_ref', column: pivot.sortField },
2469
- }, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2716
+ }, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2470
2717
  setPivot({ ...pivot, sort: false });
2471
2718
  setBaseAst((0, util_1.deepCopy)(baseAst));
2472
2719
  if (!pivot) {
@@ -2515,7 +2762,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2515
2762
  if (!pivot) {
2516
2763
  fetchSqlQuery(newAst);
2517
2764
  }
2518
- }, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2765
+ }, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2519
2766
  const newAst = { ...baseAst };
2520
2767
  newAst.orderby.splice(id, 1);
2521
2768
  setBaseAst((0, util_1.deepCopy)(newAst));
@@ -2538,7 +2785,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2538
2785
  setActivePath(null);
2539
2786
  setOpenPopover(null);
2540
2787
  }
2541
- }, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: SelectComponent, Button: ButtonComponent, onSave: () => { } }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
2788
+ }, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: SelectComponent, Button: ButtonComponent, onSave: () => { } }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit && baseAst.limit.value?.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { style: {
2542
2789
  display: 'flex',
2543
2790
  flexDirection: 'column',
2544
2791
  gap: 8,
@@ -2593,7 +2840,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2593
2840
  ? askAIInputWidth
2594
2841
  : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
2595
2842
  initialLoad ||
2596
- initalChartLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => { }, label: "New report" }))] }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableComponent, { isLoading: true, rows: [], columns: [] }), baseAst && dataDisplayed && !initalChartLoad && ((0, jsx_runtime_1.jsxs)("div", { style: {
2843
+ initialChartLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => { }, label: "New report" }))] }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableComponent, { isLoading: true, rows: [], columns: [] }), baseAst && dataDisplayed && !initialChartLoad && ((0, jsx_runtime_1.jsxs)("div", { style: {
2597
2844
  display: 'flex',
2598
2845
  flexDirection: 'row',
2599
2846
  gap: '12px',
@@ -2608,8 +2855,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2608
2855
  boxSizing: 'border-box',
2609
2856
  ...containerStyle,
2610
2857
  }, className: className, children: [(0, jsx_runtime_1.jsxs)(SidebarComponent, { children: [(0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Columns" }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2611
- if (loadingSchema)
2612
- return;
2613
2858
  if (!orderedColumnNames) {
2614
2859
  return;
2615
2860
  }
@@ -2633,12 +2878,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2633
2878
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2634
2879
  setBaseAst(ast);
2635
2880
  fetchSqlQuery(ast);
2636
- }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
2881
+ }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, schemaLoading: loadingSchema, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
2637
2882
  display: 'flex',
2638
2883
  flexDirection: 'column',
2639
2884
  gap: 8,
2640
2885
  marginBottom: 12,
2641
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2886
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2642
2887
  display: 'flex',
2643
2888
  flexDirection: 'column',
2644
2889
  alignItems: 'flex-start',
@@ -2650,7 +2895,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2650
2895
  }
2651
2896
  if (!openPopover) {
2652
2897
  const value = orderedColumnNames[0];
2653
- const [_table, column] = value.split('.');
2898
+ const column = value.split('.')[1];
2654
2899
  const columnType = getColumnTypeByName(column);
2655
2900
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2656
2901
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2680,27 +2925,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2680
2925
  setActiveEditItem(null);
2681
2926
  }, 300);
2682
2927
  }
2683
- }, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(ui_1.AddFilterPopover, { onSave: () => {
2684
- if ((0, util_1.isNodeEmptyCollection)(activeEditItem)) {
2685
- setOpenPopover(null);
2686
- clearCheckboxes();
2687
- setIsPending(false);
2688
- setTimeout(() => {
2689
- setActivePath(null);
2690
- setActiveEditItem(null);
2691
- }, 300);
2692
- }
2693
- else {
2694
- setOpenPopover(null);
2695
- setIsPending(false);
2696
- handleInsertion(activeEditItem, 'AND', false);
2697
- setActivePath(null);
2698
- setTimeout(() => {
2699
- clearCheckboxes();
2700
- setActiveEditItem(null);
2701
- }, 300);
2702
- }
2703
- }, Button: ButtonComponent, renderNode: renderNode, activeEditItem: activeEditItem }) }) }), baseAst?.where &&
2928
+ }, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
2929
+ s.displayName === currentTable) ?? schema[0], fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
2930
+ setOpenPopover(null);
2931
+ setIsPending(false);
2932
+ const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
2933
+ handleInsertion(item, 'AND', false);
2934
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
2704
2935
  false && ( // temp removed the AddConditionPopover
2705
2936
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2706
2937
  if (!openPopover) {
@@ -2740,12 +2971,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2740
2971
  setOpenPopover(null);
2741
2972
  clearCheckboxes();
2742
2973
  }
2743
- } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2974
+ } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEditingPivot, setShowUpdatePivot: setIsEditingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
2744
2975
  setPivot(null);
2745
2976
  setPivotData(null);
2746
2977
  const formattedRows = formatRows(rows, columns, false);
2747
2978
  setFormattedRows(formattedRows);
2748
- }, selectPivot: (pivot) => {
2979
+ }, selectPivot: async (pivot, uniqueValues, dateRange, pivotTable) => {
2749
2980
  if (!pivot)
2750
2981
  return;
2751
2982
  const newAst = { ...baseAst };
@@ -2755,13 +2986,19 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2755
2986
  pivot['sortDirection'] = 'ASC';
2756
2987
  }
2757
2988
  setBaseAst(newAst); // trigger refetch
2989
+ let dateBucket = undefined;
2990
+ if (dateRange) {
2991
+ dateBucket = (0, dates_1.getDateBucketFromRange)(dateRange);
2992
+ }
2993
+ if (!pivotTable) {
2994
+ pivotTable = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues);
2995
+ }
2996
+ setPivotData(pivotTable || []);
2758
2997
  setPivot(pivot);
2759
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)(pivot, rows, undefined, false);
2760
- setPivotData(pivotedData || []);
2761
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2998
+ const formattedRows = formatRows(pivotTable.rows, columns, true, pivot.aggregationType);
2762
2999
  setFormattedRows(formattedRows);
2763
3000
  setErrorMessage('');
2764
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !baseAst || !dataDisplayed, pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
3001
+ }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !baseAst || !dataDisplayed, pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, report: tempReport }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
2765
3002
  setPivotRowField(value);
2766
3003
  updatePivot(value, 'rowField');
2767
3004
  }, setPivotColumnField: (value) => {
@@ -2793,10 +3030,18 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2793
3030
  `.${pivot.rowField}`,
2794
3031
  `.${pivot.valueField || 'count'}`,
2795
3032
  ]
2796
- : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
3033
+ : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
2797
3034
  if (pivot) {
2798
- setPivot({ ...pivot, sort: false });
2799
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)({ ...pivot, sort: false }, rows, undefined, false);
3035
+ const tempPivot = { ...pivot, sort: false };
3036
+ let dateBucket = undefined;
3037
+ const tempDateRange = dateRanges &&
3038
+ pivot.rowField &&
3039
+ dateRanges[pivot.rowField];
3040
+ if (tempDateRange) {
3041
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
3042
+ }
3043
+ setPivot(tempPivot);
3044
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2800
3045
  setPivotData(pivotedData || []);
2801
3046
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2802
3047
  setFormattedRows(formattedRows);
@@ -2805,25 +3050,27 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2805
3050
  }
2806
3051
  setBaseAst((0, util_1.deepCopy)(baseAst));
2807
3052
  fetchSqlQuery((0, util_1.deepCopy)(baseAst));
2808
- }, onSave: (column, direction) => {
3053
+ }, onSave: async (column, direction) => {
2809
3054
  if (pivot) {
2810
3055
  const sortFieldType = column === (pivot.valueField || 'count')
2811
3056
  ? 'number'
2812
3057
  : pivot.rowFieldType;
2813
- setPivot({
3058
+ const tempPivot = {
2814
3059
  ...pivot,
2815
3060
  sort: true,
2816
3061
  sortDirection: direction,
2817
3062
  sortField: column,
2818
3063
  sortFieldType: sortFieldType,
2819
- });
2820
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)({
2821
- ...pivot,
2822
- sort: true,
2823
- sortDirection: direction,
2824
- sortField: column,
2825
- sortFieldType: sortFieldType,
2826
- }, rows, undefined, false);
3064
+ };
3065
+ setPivot(tempPivot);
3066
+ let dateBucket = undefined;
3067
+ const tempDateRange = dateRanges &&
3068
+ pivot.rowField &&
3069
+ dateRanges[pivot.rowField];
3070
+ if (tempDateRange) {
3071
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
3072
+ }
3073
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2827
3074
  setPivotData(pivotedData || []);
2828
3075
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
2829
3076
  setFormattedRows(formattedRows);
@@ -2838,7 +3085,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2838
3085
  flexDirection: 'column',
2839
3086
  gap: 8,
2840
3087
  marginBottom: 12,
2841
- }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
3088
+ }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2842
3089
  if (pivot) {
2843
3090
  setPivot({ ...pivot, sort: false });
2844
3091
  return;
@@ -2904,27 +3151,29 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2904
3151
  `.${pivot.rowField}`,
2905
3152
  `.${pivot.valueField || 'count'}`,
2906
3153
  ]
2907
- : selectedColumns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: (column, direction) => {
3154
+ : selectedColumns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: async (column, direction) => {
2908
3155
  if (column === '')
2909
3156
  return;
2910
3157
  if (pivot) {
2911
3158
  const sortFieldType = column === (pivot.valueField || 'count')
2912
3159
  ? 'number'
2913
3160
  : pivot.rowFieldType;
2914
- setPivot({
2915
- ...pivot,
2916
- sort: true,
2917
- sortDirection: direction,
2918
- sortField: column,
2919
- sortFieldType: sortFieldType,
2920
- });
2921
- const pivotedData = (0, PivotModal_1.generatePivotTableInMemory)({
3161
+ const tempPivot = {
2922
3162
  ...pivot,
2923
3163
  sort: true,
2924
3164
  sortDirection: direction,
2925
3165
  sortField: column,
2926
3166
  sortFieldType: sortFieldType,
2927
- }, rows, undefined, false);
3167
+ };
3168
+ setPivot(tempPivot);
3169
+ let dateBucket = undefined;
3170
+ const tempDateRange = dateRanges &&
3171
+ pivot.rowField &&
3172
+ dateRanges[pivot.rowField];
3173
+ if (tempDateRange) {
3174
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
3175
+ }
3176
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
2928
3177
  setErrorMessage('');
2929
3178
  setPivotData(pivotedData || []);
2930
3179
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
@@ -2946,7 +3195,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2946
3195
  setOpenPopover(null);
2947
3196
  setBaseAst((0, util_1.deepCopy)(newAst));
2948
3197
  fetchSqlQuery((0, util_1.deepCopy)(newAst));
2949
- } }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
3198
+ } }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit && baseAst.limit.value?.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { style: {
2950
3199
  display: 'flex',
2951
3200
  flexDirection: 'column',
2952
3201
  gap: 8,
@@ -3017,14 +3266,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3017
3266
  ? askAIInputWidth
3018
3267
  : askAILoadingContainerWidth, onChange: (e) => setAiPrompt(e.target.value), placeholder: askedAQuestion
3019
3268
  ? 'Ask a follow-up question...'
3020
- : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: (loading && errorMessage.length === 0) || initalChartLoad, rows: formattedRows, columns: pivot
3269
+ : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: tableLoading ||
3270
+ (loading && errorMessage.length === 0) ||
3271
+ initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3021
3272
  ? pivotData?.columns || emptyPivotColumns()
3022
3273
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
3023
3274
  return {
3024
3275
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(c),
3025
3276
  field: c,
3026
3277
  };
3027
- }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
3278
+ }), onPageChange: onPageChange, onSortChange: onSortChange })), (0, jsx_runtime_1.jsxs)("div", { style: {
3028
3279
  display: 'flex',
3029
3280
  flexDirection: 'row',
3030
3281
  gap: '12px',
@@ -3035,11 +3286,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3035
3286
  overflow: 'hidden',
3036
3287
  width: '100%',
3037
3288
  gap: 12,
3038
- }, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAsk, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initalChartLoad && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [!hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
3289
+ alignItems: 'center',
3290
+ }, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAsk, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initialChartLoad && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [!hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
3039
3291
  setIsChartBuilderOpen(true);
3040
- }, label: report ? 'Save changes' : 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: report
3292
+ }, disabled: !!errorMessage, label: report ? 'Save changes' : 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: report
3041
3293
  ? {
3042
3294
  ...report,
3295
+ ...tempReport,
3043
3296
  pivot: pivot,
3044
3297
  yAxisFields: report.pivot && !pivot ? [] : report.yAxisFields,
3045
3298
  columns: report.columns.filter((col) => {
@@ -3050,6 +3303,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3050
3303
  queryString: activeQuery,
3051
3304
  rows: rows,
3052
3305
  }
3053
- : undefined, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement }))] }));
3306
+ : tempReport, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement, rowCount: numberOfRows, onPageChange: onPageChange, onSortChange: onSortChange, isLoading: tableLoading }))] }));
3054
3307
  }
3055
3308
  exports.default = ReportBuilder;