@quillsql/react 2.12.29 → 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 (483) 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 +143 -183
  4. package/dist/cjs/ChartBuilder.d.ts +18 -12
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +125 -98
  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.map +1 -1
  11. package/dist/cjs/Context.js +42 -2
  12. package/dist/cjs/Dashboard.d.ts +16 -7
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +17 -22
  15. package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/Calendar.js +3 -6
  17. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  18. package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -3
  19. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  20. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  21. package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
  22. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  23. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  24. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
  25. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  26. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  27. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
  28. package/dist/cjs/ReportBuilder.d.ts +17 -5
  29. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  30. package/dist/cjs/ReportBuilder.js +510 -487
  31. package/dist/cjs/SQLEditor.d.ts +2 -9
  32. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  33. package/dist/cjs/SQLEditor.js +69 -86
  34. package/dist/cjs/Table.d.ts +19 -3
  35. package/dist/cjs/Table.d.ts.map +1 -1
  36. package/dist/cjs/Table.js +105 -87
  37. package/dist/cjs/TableChart.d.ts.map +1 -1
  38. package/dist/cjs/TableChart.js +0 -1
  39. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  40. package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
  41. package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
  42. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  43. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  44. package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
  45. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  46. package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
  47. package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
  48. package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
  49. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  50. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  51. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  52. package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
  53. package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
  54. package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
  55. package/dist/cjs/components/Banner/index.d.ts +1 -1
  56. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  57. package/dist/cjs/components/Banner/index.js +1 -1
  58. package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -1
  59. package/dist/cjs/components/BigModal/BigModal.js +6 -12
  60. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  61. package/dist/cjs/components/Chart/BarList.js +21 -14
  62. package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
  63. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  64. package/dist/cjs/components/Chart/ChartError.js +40 -5
  65. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  66. package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
  67. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  68. package/dist/cjs/components/Chart/LineChart.js +2 -2
  69. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  70. package/dist/cjs/components/Chart/PieChart.js +1 -3
  71. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
  72. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  73. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  74. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +5 -1
  75. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  76. package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
  77. package/dist/cjs/components/Dashboard/DataLoader.d.ts +2 -6
  78. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  79. package/dist/cjs/components/Dashboard/DataLoader.js +88 -181
  80. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  81. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
  82. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -4
  83. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  84. package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
  85. package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
  86. package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
  87. package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
  88. package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
  89. package/dist/cjs/components/Dropdown/index.d.ts +2 -2
  90. package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
  91. package/dist/cjs/components/Modal/Modal.js +2 -3
  92. package/dist/cjs/components/Modal/index.d.ts +1 -1
  93. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  94. package/dist/cjs/components/QuillMultiSelect.js +18 -3
  95. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  96. package/dist/cjs/components/QuillMultiSelectWithCombo.js +2 -2
  97. package/dist/cjs/components/QuillSelect.js +1 -1
  98. package/dist/cjs/components/QuillSelectWithCombo.js +2 -2
  99. package/dist/cjs/components/QuillTable.d.ts +1 -4
  100. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  101. package/dist/cjs/components/QuillTable.js +5 -11
  102. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  103. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  104. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
  105. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  106. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
  107. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  108. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
  109. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +22 -0
  110. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  111. package/dist/cjs/components/ReportBuilder/FilterModal.js +555 -0
  112. package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
  113. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  114. package/dist/cjs/components/ReportBuilder/ast.js +33 -6
  115. package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
  116. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  117. package/dist/cjs/components/ReportBuilder/constants.js +24 -3
  118. package/dist/cjs/components/ReportBuilder/convert.d.ts +12 -15
  119. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  120. package/dist/cjs/components/ReportBuilder/convert.js +326 -494
  121. package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
  122. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  123. package/dist/cjs/components/ReportBuilder/operators.js +32 -4
  124. package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
  125. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  126. package/dist/cjs/components/ReportBuilder/ui.js +30 -4
  127. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
  128. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  129. package/dist/cjs/components/ReportBuilder/util.js +15 -18
  130. package/dist/cjs/components/UiComponents.d.ts +10 -7
  131. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  132. package/dist/cjs/components/UiComponents.js +9 -8
  133. package/dist/cjs/components/selectUtils.d.ts +0 -1
  134. package/dist/cjs/components/selectUtils.d.ts.map +1 -1
  135. package/dist/cjs/components/selectUtils.js +1 -22
  136. package/dist/cjs/hooks/index.d.ts +4 -4
  137. package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
  138. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
  139. package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
  140. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  141. package/dist/cjs/hooks/useDashboard.js +5 -1
  142. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  143. package/dist/cjs/hooks/useExport.js +3 -1
  144. package/dist/cjs/hooks/useOnClickOutside.js +4 -4
  145. package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
  146. package/dist/cjs/hooks/useOnWindowResize.js +2 -2
  147. package/dist/cjs/hooks/useQuill.d.ts +10 -27
  148. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  149. package/dist/cjs/hooks/useQuill.js +114 -82
  150. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  151. package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
  152. package/dist/cjs/hooks/useTheme.js +1 -1
  153. package/dist/cjs/index.d.ts +1 -0
  154. package/dist/cjs/index.d.ts.map +1 -1
  155. package/dist/cjs/index.js +3 -1
  156. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  157. package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
  158. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
  159. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  160. package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
  161. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  162. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  163. package/dist/cjs/internals/ReportBuilder/PivotModal.js +8 -21
  164. package/dist/cjs/lib/utils.js +2 -2
  165. package/dist/cjs/models/Filter.d.ts +104 -4
  166. package/dist/cjs/models/Filter.d.ts.map +1 -1
  167. package/dist/cjs/models/Filter.js +91 -0
  168. package/dist/cjs/models/Pagination.d.ts +10 -0
  169. package/dist/cjs/models/Pagination.d.ts.map +1 -0
  170. package/dist/cjs/models/Pagination.js +2 -0
  171. package/dist/cjs/models/Report.d.ts +116 -0
  172. package/dist/cjs/models/Report.d.ts.map +1 -0
  173. package/dist/cjs/models/Report.js +2 -0
  174. package/dist/cjs/utils/aggregate.js +1 -1
  175. package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
  176. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
  177. package/dist/cjs/utils/astFilterProcessing.js +8056 -0
  178. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  179. package/dist/cjs/utils/astProcessing.js +4 -3
  180. package/dist/cjs/utils/axisFormatter.js +0 -71
  181. package/dist/cjs/utils/color.js +9 -87
  182. package/dist/cjs/utils/csv.d.ts.map +1 -1
  183. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  184. package/dist/cjs/utils/dashboard.js +3 -3
  185. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  186. package/dist/cjs/utils/dataFetcher.js +63 -1
  187. package/dist/cjs/utils/dataProcessing.d.ts +8 -0
  188. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
  189. package/dist/cjs/utils/dataProcessing.js +127 -0
  190. package/dist/cjs/utils/dates.d.ts +1 -1
  191. package/dist/cjs/utils/error.d.ts +5 -0
  192. package/dist/cjs/utils/error.d.ts.map +1 -0
  193. package/dist/cjs/utils/error.js +12 -0
  194. package/dist/cjs/utils/filterConstants.d.ts +34 -0
  195. package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
  196. package/dist/cjs/utils/filterConstants.js +36 -0
  197. package/dist/cjs/utils/filterProcessing.js +4 -4
  198. package/dist/cjs/utils/logging.d.ts.map +1 -1
  199. package/dist/cjs/utils/logging.js +1 -0
  200. package/dist/cjs/utils/merge.js +0 -21
  201. package/dist/cjs/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
  202. package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
  203. package/dist/cjs/utils/monacoConfig.js +324 -0
  204. package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
  205. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
  206. package/dist/cjs/utils/paginationProcessing.js +30 -0
  207. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  208. package/dist/cjs/utils/pivotConstructor.js +9 -0
  209. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  210. package/dist/cjs/utils/pivotProcessing.js +12 -6
  211. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  212. package/dist/cjs/utils/queryConstructor.js +4 -3
  213. package/dist/cjs/utils/report.d.ts +7 -0
  214. package/dist/cjs/utils/report.d.ts.map +1 -0
  215. package/dist/cjs/utils/report.js +93 -0
  216. package/dist/cjs/utils/schema.d.ts.map +1 -1
  217. package/dist/cjs/utils/schema.js +35 -6
  218. package/dist/cjs/utils/styles.d.ts +1 -1
  219. package/dist/cjs/utils/styles.d.ts.map +1 -1
  220. package/dist/cjs/utils/tableProcessing.d.ts +22 -8
  221. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  222. package/dist/cjs/utils/tableProcessing.js +116 -35
  223. package/dist/cjs/utils/textProcessing.js +3 -3
  224. package/dist/cjs/utils/validation.d.ts +9 -0
  225. package/dist/cjs/utils/validation.d.ts.map +1 -0
  226. package/dist/cjs/utils/validation.js +24 -0
  227. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  228. package/dist/cjs/utils/valueFormatter.js +8 -4
  229. package/dist/esm/Chart.d.ts +24 -10
  230. package/dist/esm/Chart.d.ts.map +1 -1
  231. package/dist/esm/Chart.js +146 -186
  232. package/dist/esm/ChartBuilder.d.ts +18 -12
  233. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  234. package/dist/esm/ChartBuilder.js +126 -99
  235. package/dist/esm/ChartEditor.d.ts +13 -1
  236. package/dist/esm/ChartEditor.d.ts.map +1 -1
  237. package/dist/esm/ChartEditor.js +63 -122
  238. package/dist/esm/Context.d.ts.map +1 -1
  239. package/dist/esm/Context.js +42 -2
  240. package/dist/esm/Dashboard.d.ts +16 -7
  241. package/dist/esm/Dashboard.d.ts.map +1 -1
  242. package/dist/esm/Dashboard.js +17 -22
  243. package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
  244. package/dist/esm/DateRangePicker/Calendar.js +5 -8
  245. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  246. package/dist/esm/DateRangePicker/DateRangePicker.js +2 -3
  247. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  248. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  249. package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
  250. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  251. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  252. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
  253. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  254. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  255. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
  256. package/dist/esm/ReportBuilder.d.ts +17 -5
  257. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  258. package/dist/esm/ReportBuilder.js +516 -493
  259. package/dist/esm/SQLEditor.d.ts +2 -9
  260. package/dist/esm/SQLEditor.d.ts.map +1 -1
  261. package/dist/esm/SQLEditor.js +68 -85
  262. package/dist/esm/Table.d.ts +19 -3
  263. package/dist/esm/Table.d.ts.map +1 -1
  264. package/dist/esm/Table.js +107 -89
  265. package/dist/esm/TableChart.d.ts.map +1 -1
  266. package/dist/esm/TableChart.js +0 -1
  267. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  268. package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
  269. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
  270. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  271. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  272. package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
  273. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  274. package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
  275. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
  276. package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
  277. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  278. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  279. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  280. package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
  281. package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
  282. package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
  283. package/dist/esm/components/Banner/index.d.ts +1 -1
  284. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  285. package/dist/esm/components/Banner/index.js +1 -1
  286. package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
  287. package/dist/esm/components/BigModal/BigModal.js +7 -13
  288. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  289. package/dist/esm/components/Chart/BarList.js +21 -14
  290. package/dist/esm/components/Chart/ChartError.d.ts +8 -1
  291. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  292. package/dist/esm/components/Chart/ChartError.js +39 -6
  293. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  294. package/dist/esm/components/Chart/ChartTooltip.js +8 -2
  295. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  296. package/dist/esm/components/Chart/LineChart.js +2 -2
  297. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  298. package/dist/esm/components/Chart/PieChart.js +1 -3
  299. package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
  300. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  301. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  302. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
  303. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  304. package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
  305. package/dist/esm/components/Dashboard/DataLoader.d.ts +2 -6
  306. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  307. package/dist/esm/components/Dashboard/DataLoader.js +88 -181
  308. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  309. package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
  310. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -4
  311. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  312. package/dist/esm/components/Dashboard/TableComponent.js +3 -3
  313. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  314. package/dist/esm/components/Dropdown/Dropdown.js +2 -4
  315. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
  316. package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
  317. package/dist/esm/components/Dropdown/index.d.ts +2 -2
  318. package/dist/esm/components/Dropdown/index.js +2 -2
  319. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  320. package/dist/esm/components/Modal/Modal.js +2 -3
  321. package/dist/esm/components/Modal/index.d.ts +1 -1
  322. package/dist/esm/components/Modal/index.js +1 -1
  323. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  324. package/dist/esm/components/QuillMultiSelect.js +18 -3
  325. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  326. package/dist/esm/components/QuillMultiSelectWithCombo.js +2 -2
  327. package/dist/esm/components/QuillSelect.js +1 -1
  328. package/dist/esm/components/QuillSelectWithCombo.js +2 -2
  329. package/dist/esm/components/QuillTable.d.ts +1 -4
  330. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  331. package/dist/esm/components/QuillTable.js +5 -11
  332. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  333. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  334. package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
  335. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  336. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
  337. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  338. package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
  339. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +22 -0
  340. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  341. package/dist/esm/components/ReportBuilder/FilterModal.js +552 -0
  342. package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
  343. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  344. package/dist/esm/components/ReportBuilder/ast.js +31 -5
  345. package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
  346. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  347. package/dist/esm/components/ReportBuilder/constants.js +24 -3
  348. package/dist/esm/components/ReportBuilder/convert.d.ts +12 -15
  349. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  350. package/dist/esm/components/ReportBuilder/convert.js +324 -493
  351. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
  352. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
  353. package/dist/esm/components/ReportBuilder/convert.uspec.js +1152 -0
  354. package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
  355. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  356. package/dist/esm/components/ReportBuilder/operators.js +32 -4
  357. package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
  358. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  359. package/dist/esm/components/ReportBuilder/ui.js +28 -3
  360. package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
  361. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  362. package/dist/esm/components/ReportBuilder/util.js +16 -19
  363. package/dist/esm/components/UiComponents.d.ts +10 -7
  364. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  365. package/dist/esm/components/UiComponents.js +9 -8
  366. package/dist/esm/components/selectUtils.d.ts +0 -1
  367. package/dist/esm/components/selectUtils.d.ts.map +1 -1
  368. package/dist/esm/components/selectUtils.js +0 -20
  369. package/dist/esm/hooks/index.d.ts +4 -4
  370. package/dist/esm/hooks/index.js +4 -4
  371. package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
  372. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
  373. package/dist/esm/hooks/useAstToFilterTree.js +24 -0
  374. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  375. package/dist/esm/hooks/useDashboard.js +5 -1
  376. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  377. package/dist/esm/hooks/useExport.js +4 -2
  378. package/dist/esm/hooks/useOnClickOutside.js +5 -5
  379. package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
  380. package/dist/esm/hooks/useOnWindowResize.js +3 -3
  381. package/dist/esm/hooks/useQuill.d.ts +10 -27
  382. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  383. package/dist/esm/hooks/useQuill.js +114 -82
  384. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  385. package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
  386. package/dist/esm/hooks/useTheme.js +1 -1
  387. package/dist/esm/index.d.ts +1 -0
  388. package/dist/esm/index.d.ts.map +1 -1
  389. package/dist/esm/index.js +1 -0
  390. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  391. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
  392. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
  393. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  394. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  395. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  396. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  397. package/dist/esm/internals/ReportBuilder/PivotModal.js +11 -24
  398. package/dist/esm/lib/utils.js +2 -2
  399. package/dist/esm/models/Filter.d.ts +104 -4
  400. package/dist/esm/models/Filter.d.ts.map +1 -1
  401. package/dist/esm/models/Filter.js +90 -1
  402. package/dist/esm/models/Pagination.d.ts +10 -0
  403. package/dist/esm/models/Pagination.d.ts.map +1 -0
  404. package/dist/esm/models/Pagination.js +1 -0
  405. package/dist/esm/models/Report.d.ts +116 -0
  406. package/dist/esm/models/Report.d.ts.map +1 -0
  407. package/dist/esm/models/Report.js +1 -0
  408. package/dist/esm/utils/aggregate.js +1 -1
  409. package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
  410. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
  411. package/dist/esm/utils/astFilterProcessing.js +8049 -0
  412. package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
  413. package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
  414. package/dist/esm/utils/astFilterProcessing.uspec.js +2729 -0
  415. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  416. package/dist/esm/utils/astProcessing.js +4 -3
  417. package/dist/esm/utils/axisFormatter.js +0 -71
  418. package/dist/esm/utils/color.js +9 -87
  419. package/dist/esm/utils/csv.d.ts.map +1 -1
  420. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  421. package/dist/esm/utils/dashboard.js +3 -3
  422. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  423. package/dist/esm/utils/dataFetcher.js +63 -1
  424. package/dist/esm/utils/dataProcessing.d.ts +8 -0
  425. package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
  426. package/dist/esm/utils/dataProcessing.js +122 -0
  427. package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
  428. package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
  429. package/dist/esm/utils/dataProcessing.uspec.js +204 -0
  430. package/dist/esm/utils/dates.d.ts +1 -1
  431. package/dist/esm/utils/error.d.ts +5 -0
  432. package/dist/esm/utils/error.d.ts.map +1 -0
  433. package/dist/esm/utils/error.js +8 -0
  434. package/dist/esm/utils/filterConstants.d.ts +34 -0
  435. package/dist/esm/utils/filterConstants.d.ts.map +1 -0
  436. package/dist/esm/utils/filterConstants.js +33 -0
  437. package/dist/esm/utils/filterProcessing.js +4 -4
  438. package/dist/esm/utils/logging.d.ts.map +1 -1
  439. package/dist/esm/utils/logging.js +1 -0
  440. package/dist/esm/utils/merge.js +0 -21
  441. package/dist/esm/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
  442. package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
  443. package/dist/esm/utils/monacoConfig.js +319 -0
  444. package/dist/esm/utils/paginationProcessing.d.ts +5 -0
  445. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
  446. package/dist/esm/utils/paginationProcessing.js +25 -0
  447. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  448. package/dist/esm/utils/pivotConstructor.js +9 -0
  449. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  450. package/dist/esm/utils/pivotProcessing.js +12 -6
  451. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  452. package/dist/esm/utils/queryConstructor.js +4 -3
  453. package/dist/esm/utils/queryConstructor.uspec.js +21 -21
  454. package/dist/esm/utils/report.d.ts +7 -0
  455. package/dist/esm/utils/report.d.ts.map +1 -0
  456. package/dist/esm/utils/report.ispec.d.ts +2 -0
  457. package/dist/esm/utils/report.ispec.d.ts.map +1 -0
  458. package/dist/esm/utils/report.ispec.js +46 -0
  459. package/dist/esm/utils/report.js +88 -0
  460. package/dist/esm/utils/schema.d.ts.map +1 -1
  461. package/dist/esm/utils/schema.js +35 -6
  462. package/dist/esm/utils/styles.d.ts +1 -1
  463. package/dist/esm/utils/styles.d.ts.map +1 -1
  464. package/dist/esm/utils/tableProcessing.d.ts +22 -8
  465. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  466. package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
  467. package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
  468. package/dist/esm/utils/tableProcessing.ispec.js +61 -0
  469. package/dist/esm/utils/tableProcessing.js +112 -33
  470. package/dist/esm/utils/textProcessing.js +3 -3
  471. package/dist/esm/utils/validation.d.ts +9 -0
  472. package/dist/esm/utils/validation.d.ts.map +1 -0
  473. package/dist/esm/utils/validation.js +20 -0
  474. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  475. package/dist/esm/utils/valueFormatter.js +8 -4
  476. package/package.json +1 -1
  477. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +0 -1
  478. package/dist/cjs/utils/monacoAutocomplete.js +0 -145
  479. package/dist/cjs/utils/queryConstructor.uspec.d.ts +0 -2
  480. package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +0 -1
  481. package/dist/cjs/utils/queryConstructor.uspec.js +0 -225
  482. package/dist/esm/utils/monacoAutocomplete.d.ts.map +0 -1
  483. package/dist/esm/utils/monacoAutocomplete.js +0 -140
@@ -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,8 +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");
44
- const constants_2 = require("./utils/constants");
45
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");
46
50
  exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SERVER_HOST) ||
47
51
  'https://quill-344421.uc.r.appspot.com';
48
52
  /**
@@ -76,7 +80,7 @@ exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SE
76
80
  * ### Report Builder API
77
81
  * @see https://docs.quillsql.com/components/report-builder
78
82
  */
79
- 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, }) {
80
84
  const { data: report } = (0, useQuill_1.useQuill)(reportId || '');
81
85
  const [aiPrompt, setAiPrompt] = (0, react_1.useState)('');
82
86
  const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
@@ -101,7 +105,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
101
105
  const [columns, setColumns] = (0, react_1.useState)([]);
102
106
  const [tempReport, setTempReport] = (0, react_1.useState)({});
103
107
  const [topLevelBinaryOperator, setTopLevelBinaryOperator] = (0, react_1.useState)('AND');
104
- const [editPopoverKey, setEditPopoverKey] = (0, react_1.useState)(null);
105
108
  const [uniqueValues, setUniqueValues] = (0, react_1.useState)({});
106
109
  const [pivot, setPivot] = (0, react_1.useState)(null);
107
110
  const [pivotData, setPivotData] = (0, react_1.useState)(null);
@@ -109,8 +112,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
109
112
  const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)([]);
110
113
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
111
114
  const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
112
- const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
113
- 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);
114
117
  const [askedAQuestion, setAskedAQuestion] = (0, react_1.useState)(false);
115
118
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
116
119
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!reportId);
@@ -126,11 +129,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
126
129
  const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
127
130
  const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
128
131
  const [dateRanges, setDateRanges] = (0, react_1.useState)(null);
129
- // eslint-disable-next-line no-unused-vars
130
- const [client, _setClient] = (0, react_1.useContext)(Context_1.ClientContext);
132
+ const [client] = (0, react_1.useContext)(Context_1.ClientContext);
131
133
  // JANK: This is temp and stupid
132
134
  const [overrideRecommendations, setOverrideRecommendations] = (0, react_1.useState)(true);
133
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
134
139
  (0, react_1.useEffect)(() => {
135
140
  if (!client) {
136
141
  return;
@@ -146,6 +151,21 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
146
151
  (0, width_1.updateFirstChildWidth)(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
147
152
  (0, width_1.updateFirstChildWidth)(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
148
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]);
149
169
  (0, react_1.useEffect)(() => {
150
170
  // Since the TextInput component takes a required numeric width parameter,
151
171
  // we dynamically calculate the width of this component here.
@@ -184,7 +204,17 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
184
204
  if (tempDateRange) {
185
205
  dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
186
206
  }
187
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
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);
188
218
  setPivotData(pivotedData || []);
189
219
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
190
220
  setPivot(newPivot);
@@ -224,7 +254,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
224
254
  setRows([]);
225
255
  setColumns([]);
226
256
  setTopLevelBinaryOperator('AND');
227
- setEditPopoverKey(null);
228
257
  setErrorMessage('');
229
258
  setFormattedRows([]);
230
259
  // setUniqueValues({});
@@ -252,8 +281,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
252
281
  if (pivot) {
253
282
  const formattedRows = copiedRows.map((row) => {
254
283
  const formattedRow = row;
255
- Object.keys(row).forEach((key, index) => {
256
- let column = columns.find((c) => c.field === key);
284
+ Object.keys(row).forEach((key) => {
285
+ const column = columns.find((c) => c.field === key);
257
286
  let format = 'string';
258
287
  if (!column) {
259
288
  format =
@@ -313,42 +342,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
313
342
  navigator.clipboard.writeText(query);
314
343
  setTimeout(() => setIsCopying(false), 800);
315
344
  };
316
- const copyToClipboard = (str) => {
317
- setIsCopying(true);
318
- navigator.clipboard.writeText(str);
319
- setTimeout(() => setIsCopying(false), 800);
320
- };
321
345
  const clearCheckboxes = () => {
322
346
  const checkboxes = uniqueValues;
323
347
  const newValues = {};
324
- for (let table of Object.keys(checkboxes)) {
348
+ for (const table of Object.keys(checkboxes)) {
325
349
  newValues[table] = {};
326
- for (let column of Object.keys(checkboxes[table])) {
350
+ for (const column of Object.keys(checkboxes[table])) {
327
351
  newValues[table][column] = {};
328
- for (let variant of Object.keys(checkboxes[table][column])) {
352
+ for (const variant of Object.keys(checkboxes[table][column])) {
329
353
  newValues[table][column][variant] = false;
330
354
  }
331
355
  }
332
356
  }
333
357
  setUniqueValues(newValues);
334
358
  };
335
- const setCheckboxes = (node) => {
336
- if (!['IN', 'NOT IN'].includes(node.operator))
337
- return;
338
- const selectedItems = node.right.value.flatMap((v) => v.args.value.map((x) => x.value.toLowerCase()));
339
- const checkboxes = uniqueValues;
340
- const newValues = {};
341
- for (let table of Object.keys(checkboxes)) {
342
- newValues[table] = {};
343
- for (let column of Object.keys(checkboxes[table])) {
344
- newValues[table][column] = {};
345
- for (let variant of Object.keys(checkboxes[table][column])) {
346
- newValues[table][column][variant] = selectedItems.includes(variant.toLowerCase());
347
- }
348
- }
349
- }
350
- setUniqueValues(newValues);
351
- };
352
359
  const fetchSqlQuery = async (ast, formData, fetchData = true) => {
353
360
  if (fetchData) {
354
361
  setLoading(true);
@@ -364,6 +371,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
364
371
  body: JSON.stringify({
365
372
  ast: { ...ast, where },
366
373
  publicKey: client.publicKey,
374
+ useNewNodeSql: true, // new flag
367
375
  }),
368
376
  });
369
377
  const data = await response.json();
@@ -371,6 +379,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
371
379
  if (fetchData) {
372
380
  fetchUponChange(ast, formData);
373
381
  }
382
+ return data.query;
374
383
  }
375
384
  catch (error) {
376
385
  setLoading(false);
@@ -495,83 +504,102 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
495
504
  };
496
505
  (0, react_1.useEffect)(() => {
497
506
  const loadChart = async () => {
498
- setInitalChartLoad(true);
507
+ setInitialChartLoad(true);
508
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
499
509
  if (!report || report.referencedTables.length !== 1) {
500
- setInitalChartLoad(false);
501
- return;
502
- }
503
- const tableName = report.referencedTables[0];
504
- if (!tableName) {
505
- return;
506
- }
507
- const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
508
- query: report.queryString,
509
- });
510
- if (resp.success === false) {
511
- setErrorMessage('Error: ' + resp.message);
510
+ setInitialChartLoad(false);
512
511
  return;
513
512
  }
514
- const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
515
- let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
516
- (0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
517
- convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
518
- let schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
519
- let newAst, groupByPivot;
520
- ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
521
- // @ts-ignore
522
- report.pivot, schemaInfo));
523
- if (convertedAst.where) {
524
- setFormData((0, util_1.deepCopy)(convertedAst.where));
525
- }
526
- setActiveQuery(report.queryString);
527
- newAst = groupByPivot ? newAst : convertedAst;
528
- setBaseAst(newAst);
529
- const initialRows = await fetchUponChange(newAst, undefined);
530
- const tableInfo = schemaInfo.find((table) => table.name === tableName);
531
- let newUniqueValues = undefined;
532
- let dateRangesTemp = undefined;
533
- if (tableName) {
534
- newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
535
- setUniqueValues(newUniqueValues);
536
- dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
537
- setDateRanges(dateRangesTemp);
538
- }
539
- if (groupByPivot) {
540
- // @ts-ignore
541
- setPivotRowField(groupByPivot.rowField);
542
- // @ts-ignore
543
- setPivotAggregation(groupByPivot.aggregationType);
544
- // @ts-ignore
545
- setPivotColumnField(groupByPivot.columnField);
546
- // @ts-ignore
547
- setPivotValueField(groupByPivot.valueField);
548
- setPivot(groupByPivot);
549
- let dateBucket = undefined;
550
- const tempDateRange = dateRangesTemp &&
551
- groupByPivot.rowField &&
552
- dateRangesTemp[groupByPivot.rowField];
553
- if (tempDateRange) {
554
- dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
555
- }
556
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(
557
- // @ts-ignore
558
- groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
559
- setPivotData(pivotedData || []);
560
- 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,
561
536
  // @ts-ignore
562
- groupByPivot.aggregationType);
563
- 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);
564
592
  }
565
- else {
566
- const formattedRows = formatRows(report.rows, report.columns);
567
- setFormattedRows(formattedRows);
593
+ catch (error) {
594
+ console.error(error);
595
+ setErrorMessage('Error loading report');
568
596
  }
569
- setCurrentTable(tableName);
570
597
  // This handles a flashing issue
571
598
  setTimeout(() => {
572
- setInitalChartLoad(false);
599
+ setInitialChartLoad(false);
573
600
  }, 500);
574
601
  };
602
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
575
603
  if (report && report.referencedTables.length === 1) {
576
604
  loadChart();
577
605
  }
@@ -897,10 +925,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
897
925
  isReplaceSubtree: true,
898
926
  });
899
927
  };
900
- // Function to handle the deletion of expressions
901
- const handleDelete = (key) => {
902
- updateFormData([{ path: key, value: null }], { isDeletion: true });
903
- };
904
928
  // Function to handle the insertion of expressions
905
929
  const handleInsertion = (value, op = 'OR', isCondition = undefined) => {
906
930
  updateFormData([{ path: '', value }], {
@@ -965,84 +989,61 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
965
989
  };
966
990
  const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
967
991
  const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
968
- page: { currentPage: 0, rowsPerPage: 20 },
992
+ page: paginationProcessing_1.DEFAULT_PAGINATION,
969
993
  });
970
994
  const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
971
995
  const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
972
996
  const onPageChange = (page) => {
973
- if (pivot) {
974
- return;
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);
975
1003
  }
976
- if ((previousPage < page.currentPage &&
977
- (page.currentPage * page.rowsPerPage) % constants_2.MAX_COLUMN_ROWS_LIMIT === 0) ||
978
- (previousPage > page.currentPage &&
979
- (previousPage * page.rowsPerPage) % constants_2.MAX_COLUMN_ROWS_LIMIT === 0)) {
980
- handleRunQuery({ ...currentProcessing, page });
1004
+ if (page > previousPage) {
1005
+ setPreviousPage(page);
981
1006
  }
982
- setPreviousPage(page.currentPage);
983
1007
  };
984
1008
  const onSortChange = (sort) => {
985
- if (pivot) {
1009
+ if (report &&
1010
+ (0, paginationProcessing_1.shouldSortInMemory)(paginationProcessing_1.DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
986
1011
  return;
987
1012
  }
988
- handleRunQuery({ sort, page: { currentPage: 0, rowsPerPage: 20 } });
1013
+ const updatedProcessing = { page: paginationProcessing_1.DEFAULT_PAGINATION, sort };
1014
+ handleRunQuery(updatedProcessing, true);
1015
+ setCurrentProcessing(updatedProcessing);
989
1016
  setPreviousPage(0);
990
1017
  };
991
- const handleRunQuery = async (processing) => {
1018
+ const handleRunQuery = async (processing, resetRows = false) => {
992
1019
  try {
993
1020
  setErrorMessage('');
994
1021
  setTableLoading(true);
995
- const hostedBody = {
996
- metadata: {
997
- query: activeQuery,
998
- task: 'query',
999
- orgId: client.customerId || '*',
1000
- clientId: client.publicKey,
1001
- databaseType: client?.databaseType,
1002
- getCustomFields: !client.customerId || client.customerId === '*' ? false : true,
1003
- customFieldsByTable: customFields,
1004
- additionalProcessing: processing,
1005
- useUpdatedDataGathering: true,
1006
- },
1007
- };
1008
- const cloudBody = { activeQuery };
1009
- const resp = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
1010
- if (resp && resp.errorMessage) {
1011
- setTableLoading(false);
1012
- setErrorMessage('Failed to run SQL query: ' + resp.errorMessage);
1013
- setRows([]);
1014
- setColumns([]);
1015
- return;
1022
+ const tableInfo = await (0, tableProcessing_1.fetchTableByQuery)(activeQuery, client, processing, customFields);
1023
+ if (tableInfo.error) {
1024
+ throw new Error(tableInfo.error);
1016
1025
  }
1017
- if (resp.rowCount) {
1018
- setNumberOfRows(resp.rowCount);
1026
+ else if (tableInfo.rows.length === 0) {
1027
+ throw new Error('No data found');
1028
+ }
1029
+ if (tableInfo.rowCount) {
1030
+ setNumberOfRows(tableInfo.rowCount);
1019
1031
  }
1020
- setErrorMessage('');
1021
1032
  setCurrentProcessing(processing);
1022
- if (resp.rows.length === 0) {
1023
- setErrorMessage('No data found');
1024
- }
1025
- const temp_rows = resp.rows && resp.rows.length ? resp.rows : [];
1026
- const processedFields = resp.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1027
- setRows(temp_rows);
1028
- // setNumberOfRows(resp.compareRows[0]?.count || temp_rows.length);
1029
- setFormattedRows(temp_rows.map((row) => {
1030
- return processedFields.reduce((formattedRow, column) => {
1031
- // Apply the format function to each field in the row
1032
- const formattedValue = (0, valueFormatter_1.quillFormat)({
1033
- value: row[column.field],
1034
- format: column.format,
1035
- });
1036
- formattedRow[column.field] = formattedValue;
1037
- return formattedRow;
1038
- }, {});
1039
- }));
1040
- setColumns(processedFields);
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);
1041
1040
  setTableLoading(false);
1042
1041
  }
1043
1042
  catch (e) {
1044
1043
  setTableLoading(false);
1045
- console.log('ERROR: ', e);
1044
+ setErrorMessage('Failed to run SQL query: ' + e);
1045
+ setRows([]);
1046
+ setColumns([]);
1046
1047
  return;
1047
1048
  }
1048
1049
  };
@@ -1061,10 +1062,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1061
1062
  case 'binary_expr':
1062
1063
  if (dateComparisonPartialMatch ||
1063
1064
  ((0, util_1.isDateTruncEquals)(node) && client.databaseType !== 'BigQuery')) {
1064
- const { dateColumn,
1065
- // see onChange callback handleChange
1066
- // eslint-disable-next-line no-unused-vars
1067
- dateColumnPath, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
1065
+ const { dateColumn, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
1068
1066
  const isPlural = intervalCount !== 1 && dateFilterType !== 'in the current'
1069
1067
  ? 's'
1070
1068
  : '';
@@ -1212,7 +1210,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1212
1210
  } }))] }));
1213
1211
  }
1214
1212
  else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
1215
- const { dateColumn, dateFilterType, intervalCount, intervalType } = (0, util_1.getDateFilterInfo)(node);
1213
+ const { dateColumn } = (0, util_1.getDateFilterInfo)(node);
1216
1214
  const options = getAllPossibleColumns().map((column) => ({
1217
1215
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1218
1216
  value: column.name,
@@ -1273,7 +1271,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1273
1271
  ], width: 200 }) })] }));
1274
1272
  }
1275
1273
  else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
1276
- const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
1277
1274
  const options = getAllPossibleColumns().map((column) => ({
1278
1275
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1279
1276
  value: column.name,
@@ -1332,7 +1329,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1332
1329
  { label: `week`, value: 'WEEK' },
1333
1330
  ], width: 200 })] }));
1334
1331
  }
1335
- else if ((0, util_1.isThePreviousInterval)(node, client.databaseType)) {
1332
+ else if ((0, util_1.isThePreviousInterval)(node)) {
1336
1333
  const options = getAllPossibleColumns().map((column) => ({
1337
1334
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1338
1335
  value: column.name,
@@ -1479,7 +1476,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1479
1476
  .find((tableInfo) => tableInfo.name === table)
1480
1477
  ?.columns.find((col) => col.name === leftChildValue);
1481
1478
  const columnType = column?.fieldType;
1482
- let operatorOptions = [
1479
+ const operatorOptions = [
1483
1480
  ...((0, ast_1.isNumericColumnType)(columnType)
1484
1481
  ? [
1485
1482
  { label: 'equal to', value: '=' },
@@ -1720,112 +1717,214 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1720
1717
  }
1721
1718
  return validPivot;
1722
1719
  };
1723
- const renderSentence = (formData, node, keyPrefix = '',
1724
- // @depreciated TODO: remove next update
1725
- // eslint-disable-next-line no-unused-vars
1726
- isTopLevel = false,
1727
- // @depreciated TODO: remove next update
1728
- // eslint-disable-next-line no-unused-vars
1729
- isTopLevelAnd = false, isParentRow = false) => {
1730
- const uniqueSentence = (0, util_1.getCustomSentence)(node, client.databaseType);
1731
- let dateComparisonPartialMatch = null;
1732
- let dateEqualityPartialMatch = null;
1733
- if (client.databaseType !== 'BigQuery') {
1734
- dateComparisonPartialMatch = (0, util_1.formatDateComparisonNode)(node);
1735
- 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
+ }
1736
1745
  }
1737
- const isRow = !(0, util_1.isTopLevelBoolean)(node);
1738
- const isCard = isRow && !isParentRow;
1739
- const OPS = {
1740
- AND: 'and',
1741
- OR: 'or',
1742
- LIKE: 'is exactly',
1743
- BETWEEN: 'is between',
1744
- IN: 'is',
1745
- 'NOT IN': 'is not',
1746
- 'NOT LIKE': 'is not exactly',
1747
- '!=': 'is not exactly',
1748
- '=': 'is',
1749
- '<': 'is less than',
1750
- '>': 'is greater than',
1751
- '<=': 'is less than or equal to',
1752
- '>=': 'is greater than or equal to',
1753
- '<>': 'is not',
1754
- '-': 'minus',
1755
- 'IS NOT': 'is not',
1756
- IS: 'is',
1757
- };
1758
- switch (node.type) {
1759
- case 'binary_expr':
1760
- 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 ??
1761
- dateEqualityPartialMatch ??
1762
- uniqueSentence ?? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [node.left &&
1763
- 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 &&
1764
- renderSentence(formData, node.right, keyPrefix + 'right.', false, false, isRow)] })) }));
1765
- case 'column_ref':
1766
- return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.column);
1767
- case 'expr_list':
1768
- if (node.value.length === 1) {
1769
- const subQuery = renderSentence(formData, node.value[0]);
1770
- if (subQuery) {
1771
- return `${subQuery}`;
1772
- }
1773
- 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}`;
1774
1764
  }
1775
- return `${node.value
1776
- .map((elem) => renderSentence(formData, elem))
1777
- .join(', ')}`;
1778
- case 'single_quote_string':
1779
- return node.value.replaceAll('%', '');
1780
- case 'double_quote_string':
1781
- case 'number':
1782
- return node.value;
1783
- case 'null':
1784
- return 'null';
1785
- case 'bool':
1786
- return node.value.toString();
1787
- case 'interval':
1788
- if (node.unit) {
1789
- // eg. `INTERVAL '90' DAY` -> "90 days"
1790
- return `${node.expr.value} ${node.unit}s`;
1765
+ else {
1766
+ value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
1791
1767
  }
1792
- return node.expr.value;
1793
- case 'function':
1794
- if (node.name.toLowerCase() === 'lower' ||
1795
- node.name.toLowerCase() === 'upper') {
1796
- // how many transactions were above 20 and not fuel or made in the last 90 days (hint: use lower)
1797
- if (node.args.value.length < 1)
1798
- return null;
1799
- if (node.args.value[0].value) {
1800
- if (node.args.value[0].type === 'single_quote_string') {
1801
- return node.args.value[0].value.replaceAll('%', '');
1802
- }
1803
- return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.args.value[0].value.replaceAll('%', ''));
1804
- }
1805
- if (node.args.value[0].column)
1806
- 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) {
1807
1790
  return null;
1808
1791
  }
1809
- if (node.name.toLowerCase() === 'current_date' ||
1810
- node.name.toLowerCase() === 'now') {
1811
- return 'today';
1812
- }
1813
- if (node.name.toLowerCase() === 'date_trunc') {
1814
- // eg. date_trunc('month', now())
1815
- if (!node.args)
1816
- return null;
1817
- if (node.args.type !== 'expr_list')
1818
- return null;
1819
- if (node.args.value?.length !== 2)
1820
- return null;
1821
- const interval = renderSentence(formData, node.args.value[0]);
1822
- const timestamp = renderSentence(formData, node.args.value[1]);
1823
- 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
+ }
1824
1809
  }
1825
- return null;
1826
- default:
1827
- return null;
1810
+ return newNode;
1811
+ }
1812
+ return buildTree(0);
1828
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
+ }) }));
1829
1928
  };
1830
1929
  const getAllPossibleColumns = () => {
1831
1930
  if (!baseAst || !baseAst.from) {
@@ -1867,7 +1966,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1867
1966
  if (selectedColumns.length < 1)
1868
1967
  return false;
1869
1968
  const allColumns = orderedColumnNames.filter((row) => {
1870
- const [table, _] = row.split('.');
1969
+ const [table] = row.split('.');
1871
1970
  const selectedTable = selectedColumns[0].split('.')[0];
1872
1971
  return selectedTable === table;
1873
1972
  });
@@ -1913,23 +2012,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1913
2012
  customFields,
1914
2013
  additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
1915
2014
  useUpdatedDataGathering: true,
2015
+ useNewNodeSql: true, // new flag
1916
2016
  },
1917
2017
  };
1918
- const cloudBody = {};
1919
- const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
1920
- if (data2.success === false) {
1921
- throw new Error(data2.errorMessage);
1922
- }
1923
- rows = data2.rows;
1924
- if (data2.rowCount) {
1925
- setNumberOfRows(data2.rowCount);
1926
- }
1927
2018
  const tables = (0, ast_1.getTableNames)(baseAst);
1928
2019
  const table = tables.length >= 1 ? tables[0] : initialTableName;
1929
2020
  let newUniqueValues = uniqueValues;
1930
2021
  let dateRangesTemp = dateRanges;
1931
- let curReport = undefined;
1932
- if (table !== currentTable) {
2022
+ let curReport = tempReport;
2023
+ if ((newUniqueValues && Object.keys(newUniqueValues).length === 0) ||
2024
+ table !== currentTable) {
1933
2025
  const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
1934
2026
  if (tableInfo) {
1935
2027
  newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
@@ -1941,6 +2033,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1941
2033
  }
1942
2034
  setCurrentTable(table);
1943
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
+ }
1944
2045
  if (data2.rows && data2.rows.length) {
1945
2046
  if (pivot) {
1946
2047
  // check if any of the pivot fields aren't in the data2.fields array
@@ -1970,13 +2071,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1970
2071
  setFormattedRows(formattedRows);
1971
2072
  return;
1972
2073
  }
2074
+ curReport = {
2075
+ ...formData,
2076
+ itemQuery: data2.itemQuery,
2077
+ rowCount: data2.rowCount,
2078
+ filtersApplied: [],
2079
+ rows: data2.rows,
2080
+ };
1973
2081
  // Do all of this to make sure we have the right unique columns when applying a pivot
1974
- let uniqueFormatted = {};
1975
- const uniqueRecords = Array.from(new Set(data2.rows.map((row) => row[pivot.columnField]))).reduce((acc, curr) => {
1976
- acc[curr] = false;
1977
- return acc;
1978
- }, {});
1979
- uniqueFormatted[pivot.columnField] = uniqueRecords;
1980
2082
  let dateBucket = undefined;
1981
2083
  const tempDateRange = dateRangesTemp &&
1982
2084
  pivot.rowField &&
@@ -1984,9 +2086,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1984
2086
  if (tempDateRange) {
1985
2087
  dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1986
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
+ }
1987
2100
  const pivotedData = await (0, PivotModal_1.generatePivotTable)(
1988
2101
  // @ts-ignore
1989
- pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, uniqueFormatted[pivot.columnField]);
2102
+ pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, distinctValuesForQuery ? distinctValuesForQuery : undefined);
1990
2103
  console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
1991
2104
  const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1992
2105
  setPivotData(pivotedData);
@@ -2048,105 +2161,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2048
2161
  setFormattedRows([]);
2049
2162
  setPivotData(null);
2050
2163
  }
2164
+ setLoading(false);
2165
+ setDataDisplayed(true);
2166
+ return rows;
2051
2167
  }
2052
2168
  catch (e) {
2053
- console.error(e);
2054
2169
  setErrorMessage(e.message);
2055
- }
2056
- finally {
2057
2170
  setLoading(false);
2058
2171
  setDataDisplayed(true);
2059
- return rows;
2172
+ setRows([]);
2173
+ setColumns([]);
2174
+ setFormattedRows([]);
2175
+ setPivotData(null);
2176
+ return { error: true, message: e.message };
2060
2177
  }
2061
2178
  }
2062
2179
  };
2063
- // Convert an array of columns to a map where the name is the
2064
- // key and the value is the column node.
2065
- const columnArrayToMap = (columns) => {
2066
- const columnMap = {};
2067
- for (const col of columns) {
2068
- const key = col.expr?.value ?? col.expr?.column ?? col.as;
2069
- columnMap[key] = col;
2070
- }
2071
- return columnMap;
2072
- };
2073
- const applyFormatting = (response, columns) => {
2074
- const columnFormatters = {};
2075
- const columnMap = columnArrayToMap(columns);
2076
- response.fields.forEach((field) => {
2077
- // TODO: columnMap[field.name] silently breaks for columnField columns
2078
- const formatType = (0, util_1.getPostgresBasicType)(field);
2079
- if (formatType === 'date') {
2080
- columnFormatters[field.name] = (x) => {
2081
- const d = new Date(x);
2082
- // check if d is a valid date
2083
- if (isNaN(d.getTime())) {
2084
- return 'Invalid Date';
2085
- }
2086
- d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); // TZ adjust
2087
- if (columnMap[field.name]?.expr.type === 'function' &&
2088
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
2089
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
2090
- 'month') {
2091
- return d.toLocaleString('default', {
2092
- month: 'short',
2093
- year: 'numeric',
2094
- });
2095
- }
2096
- else if (columnMap[field.name]?.expr.type === 'function' &&
2097
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
2098
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
2099
- 'quarter') {
2100
- return `Q${(0, date_fns_1.getQuarter)(d)} ${d.getFullYear()}`;
2101
- }
2102
- else if (columnMap[field.name]?.expr.type === 'function' &&
2103
- columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
2104
- columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
2105
- 'year') {
2106
- return d.toLocaleString('default', {
2107
- year: 'numeric',
2108
- });
2109
- }
2110
- return constants_1.DATE_FMT.format(d);
2111
- };
2112
- }
2113
- else if (formatType === 'number') {
2114
- columnFormatters[field.name] = (x) => {
2115
- if (columnMap[field.name]?.expr.type === 'extract' &&
2116
- columnMap[field.name]?.expr.args.field.toLowerCase() === 'dow') {
2117
- return constants_1.DAY_OF_WEEK[x];
2118
- }
2119
- else if (columnMap[field.name]?.expr.type === 'extract' &&
2120
- columnMap[field.name]?.expr.args.field.toLowerCase() === 'month') {
2121
- return constants_1.MONTH_OF_YEAR[x - 1];
2122
- }
2123
- else if (`${x}`.includes('.')) {
2124
- // return MONEY_FMT.format(Number(x ?? 0.0));
2125
- return Number(x ?? 0.0).toFixed(2);
2126
- }
2127
- return x ?? 0.0;
2128
- };
2129
- }
2130
- else if (formatType === 'boolean') {
2131
- columnFormatters[field.name] = (x) => {
2132
- if (x) {
2133
- return 'True';
2134
- }
2135
- return 'False';
2136
- };
2137
- }
2138
- else {
2139
- columnFormatters[field.name] = (x) => x;
2140
- }
2141
- });
2142
- return response.rows.map((row) => {
2143
- const newRow = {};
2144
- Object.keys(row).forEach((key) => (newRow[key] = columnFormatters[key]
2145
- ? columnFormatters[key](row[key])
2146
- : row[key]));
2147
- return newRow;
2148
- });
2149
- };
2150
2180
  // Returns whether a where-clause contains a nested subquery.
2151
2181
  const isSubquery = (node) => {
2152
2182
  if (!node)
@@ -2170,7 +2200,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2170
2200
  return;
2171
2201
  }
2172
2202
  try {
2173
- let errored = false;
2174
2203
  setLoading(true);
2175
2204
  setAskedAQuestion(true);
2176
2205
  setErrorMessage('');
@@ -2190,6 +2219,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2190
2219
  body: JSON.stringify({
2191
2220
  initialQuestion: aiPrompt || overridePrompt,
2192
2221
  publicKey: client.publicKey,
2222
+ useNewNodeSql: true, // new flag
2193
2223
  }),
2194
2224
  });
2195
2225
  }
@@ -2201,6 +2231,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2201
2231
  sqlQuery: activeQuery,
2202
2232
  initialQuestion: aiPrompt,
2203
2233
  publicKey: client.publicKey,
2234
+ useNewNodeSql: true, // new flag
2204
2235
  }),
2205
2236
  });
2206
2237
  }
@@ -2218,31 +2249,33 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2218
2249
  setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
2219
2250
  return;
2220
2251
  }
2252
+ let currentSchema = schema;
2253
+ if (currentSchema && currentSchema.length === 0) {
2254
+ currentSchema = await fetchSchema();
2255
+ }
2221
2256
  let newAst, groupByPivot;
2222
2257
  if (ast) {
2223
2258
  // Unwrap the ast object, supporting many possible types
2224
2259
  ast = ast.length ? ast[0] : ast;
2225
2260
  newAst = (0, convert_1.convertBigQuery)(ast);
2226
- newAst = (0, convert_1.convertWildcardColumns)(newAst, schema); // must go before groupby
2227
- ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, schema));
2228
- if (groupByPivot && !groupByPivot?.valueField) {
2229
- setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
2230
- return;
2231
- }
2261
+ newAst = (0, convert_1.convertWildcardColumns)(newAst, currentSchema); // must go before groupby
2262
+ ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, currentSchema));
2232
2263
  newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
2233
2264
  newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
2234
2265
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2235
2266
  const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2236
2267
  newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table, getAllPossibleColumns().map((col) => col.name));
2237
- setSelectedColumns((0, util_1.deepCopy)(newAst).columns?.map((column) => {
2268
+ const procesedColumns = (0, util_1.deepCopy)(newAst).columns?.map((column) => {
2238
2269
  if (column.expr.type === 'column_ref') {
2239
- return `${table}.${column.expr.column}`;
2270
+ const columnName = (0, ast_1.extractColumnish)(column.expr);
2271
+ return `${table}.${columnName}`;
2240
2272
  }
2241
2273
  else if (column.as) {
2242
2274
  return `${table}.${column.as}`;
2243
2275
  }
2244
2276
  return `${table}.${column.expr.value}`;
2245
- }));
2277
+ });
2278
+ setSelectedColumns(procesedColumns);
2246
2279
  if (groupByPivot) {
2247
2280
  setBaseAst((0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null }));
2248
2281
  newAst = (0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null });
@@ -2258,7 +2291,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2258
2291
  ast = newAst; // so we fetch data for newAst later.
2259
2292
  fetchSqlQuery(ast, undefined, false);
2260
2293
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2261
- const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2262
2294
  const hostedBody = {
2263
2295
  metadata: {
2264
2296
  clientId: client.publicKey,
@@ -2269,19 +2301,19 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2269
2301
  additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2270
2302
  useUpdatedDataGathering: true,
2271
2303
  pivot: groupByPivot,
2304
+ useNewNodeSql: true, // new flag
2272
2305
  },
2273
2306
  };
2274
- const cloudBody = {};
2275
- const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
2276
- if (data2.status === 'error') {
2277
- throw new Error('Error querying data from patterns');
2278
- }
2279
2307
  let currentUniqueValues = uniqueValues;
2280
2308
  let dateRangesTemp = dateRanges;
2281
- if (table !== currentTable) {
2282
- const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
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);
2283
2314
  if (tableInfo) {
2284
2315
  const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
2316
+ currentUniqueValues = newUniqueValues;
2285
2317
  if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
2286
2318
  setUniqueValues(newUniqueValues);
2287
2319
  }
@@ -2290,8 +2322,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2290
2322
  }
2291
2323
  setCurrentTable(table);
2292
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
+ }
2293
2330
  if (data2.rows && data2.rows.length) {
2294
- 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);
2295
2341
  let possiblePivot = true;
2296
2342
  const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
2297
2343
  if (groupByPivot &&
@@ -2305,7 +2351,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2305
2351
  let errorMessageEnding = '';
2306
2352
  if (groupByPivot.columnField &&
2307
2353
  !possibleColumns.columnFields.includes(groupByPivot?.columnField || '')) {
2308
- if (currentUniqueValues[table][groupByPivot?.columnField || '']) {
2354
+ if (currentUniqueValues[table]?.[groupByPivot?.columnField || '']) {
2309
2355
  errorMessageEnding = `The column ${groupByPivot?.columnField} has more than 24 unique values to pivot on.`;
2310
2356
  }
2311
2357
  else {
@@ -2314,7 +2360,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2314
2360
  }
2315
2361
  else if (groupByPivot.rowField &&
2316
2362
  !possibleColumns.rowFields.includes(groupByPivot?.rowField || '')) {
2317
- if (currentUniqueValues[table][groupByPivot?.rowField || '']) {
2363
+ if (currentUniqueValues[table]?.[groupByPivot?.rowField || '']) {
2318
2364
  errorMessageEnding = `The column ${groupByPivot?.rowField} has more than 36 unique values to pivot on.`;
2319
2365
  }
2320
2366
  else {
@@ -2326,7 +2372,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2326
2372
  errorMessageEnding = `The column ${groupByPivot?.valueField} is not a proper value field.`;
2327
2373
  }
2328
2374
  setErrorMessage(`The requested pivot is not supported. ${errorMessageEnding}`);
2329
- errored = true;
2330
2375
  }
2331
2376
  if (groupByPivot && possiblePivot) {
2332
2377
  let curReport = report ? report : undefined;
@@ -2403,7 +2448,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2403
2448
  setActiveQuery('');
2404
2449
  }
2405
2450
  if (data2.errorMessage) {
2406
- setErrorMessage(`Error: ${data2.errorMessage}`);
2451
+ setErrorMessage(`Error: Couldn't process your request, please re-word your prompt.`);
2407
2452
  }
2408
2453
  }
2409
2454
  catch (e) {
@@ -2423,7 +2468,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2423
2468
  setSelectedColumns((selectedColumns) => selectedColumns.filter((column) => !column.endsWith(name)));
2424
2469
  const columns = baseAst.columns.filter((col) => {
2425
2470
  if (col.expr.type === 'column_ref') {
2426
- return col.expr.column !== name;
2471
+ return (col.expr.column !== name &&
2472
+ (!col.expr.column.expr || col.expr.column.expr.value !== name));
2427
2473
  }
2428
2474
  else if (col.as) {
2429
2475
  return col.as !== name;
@@ -2438,14 +2484,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2438
2484
  setBaseAst(newAst);
2439
2485
  fetchSqlQuery(newAst);
2440
2486
  };
2441
- function TopLevelBooleanSwitch({ node, keyPrefix, handleOperatorChange, }) {
2442
- 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) => {
2443
- if (loading) {
2444
- return;
2445
- }
2446
- handleOperatorChange(event.target.value, node, keyPrefix);
2447
- } }) }));
2448
- }
2449
2487
  const DraggableItem = ({ id, label, onDelete }) => {
2450
2488
  const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
2451
2489
  const style = {
@@ -2472,7 +2510,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2472
2510
  setOrderedColumnNames(newOrder);
2473
2511
  const orderedSelectedColumns = [];
2474
2512
  for (const value of newOrder) {
2475
- const [_, column] = value.split('.');
2513
+ const column = value.split('.')[1];
2476
2514
  if (selectedColumns.includes(value)) {
2477
2515
  orderedSelectedColumns.push(column);
2478
2516
  }
@@ -2496,12 +2534,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2496
2534
  fetchSqlQuery(newAst, undefined, false);
2497
2535
  }
2498
2536
  }
2499
- const columnNamesInAst = baseAst?.columns.map((col) => {
2500
- if (col.expr.type === 'column_ref') {
2501
- 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
+ }
2502
2546
  }
2503
2547
  else if (col.as) {
2504
- return col.as;
2548
+ if (typeof col.as === 'string') {
2549
+ return col.as;
2550
+ }
2551
+ else {
2552
+ return col.as.expr?.value;
2553
+ }
2505
2554
  }
2506
2555
  else if (col.expr && col.expr.type === 'aggr_func') {
2507
2556
  if (col.expr.args) {
@@ -2510,22 +2559,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2510
2559
  return col.expr.name;
2511
2560
  }
2512
2561
  return col.expr.value;
2513
- }) ?? [];
2562
+ })
2563
+ .filter(
2564
+ // remove duplicate entries
2565
+ (value, index, self) => value && self.indexOf(value) === index) ?? [];
2514
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: {
2515
2567
  display: 'flex',
2516
2568
  flexDirection: 'column',
2517
2569
  gap: 8,
2518
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 } })] }) }) }));
2519
2571
  }
2520
- if (loading || initalChartLoad) {
2572
+ if (loading || initialChartLoad) {
2521
2573
  return ((0, jsx_runtime_1.jsxs)("div", { style: {
2522
2574
  display: 'flex',
2523
2575
  flexDirection: 'row',
2524
2576
  height: '100%',
2525
2577
  ...containerStyle,
2526
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: () => {
2527
- if (loadingSchema)
2528
- return;
2529
2579
  if (!openPopover) {
2530
2580
  setOpenPopover('AddColumnModal');
2531
2581
  }
@@ -2546,12 +2596,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2546
2596
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2547
2597
  setBaseAst(ast);
2548
2598
  fetchSqlQuery(ast);
2549
- }, 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: {
2550
2600
  display: 'flex',
2551
2601
  flexDirection: 'column',
2552
2602
  gap: 8,
2553
2603
  marginBottom: 12,
2554
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2604
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2555
2605
  display: 'flex',
2556
2606
  flexDirection: 'column',
2557
2607
  alignItems: 'flex-start',
@@ -2563,7 +2613,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2563
2613
  }
2564
2614
  if (!openPopover) {
2565
2615
  const value = orderedColumnNames[0];
2566
- const [_table, column] = value.split('.');
2616
+ const column = value.split('.')[1];
2567
2617
  const columnType = getColumnTypeByName(column);
2568
2618
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2569
2619
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2592,27 +2642,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2592
2642
  setActiveEditItem(null);
2593
2643
  }, 300);
2594
2644
  }
2595
- }, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(ui_1.AddFilterPopover, { onSave: () => {
2596
- if ((0, util_1.isNodeEmptyCollection)(activeEditItem)) {
2597
- setIsPending(false);
2598
- setActivePath(null);
2599
- setOpenPopover(null);
2600
- setTimeout(() => {
2601
- clearCheckboxes();
2602
- setActiveEditItem(null);
2603
- }, 300);
2604
- }
2605
- else {
2606
- setIsPending(false);
2607
- handleInsertion(activeEditItem, 'AND', false);
2608
- setActivePath(null);
2609
- setOpenPopover(null);
2610
- setTimeout(() => {
2611
- clearCheckboxes();
2612
- setActiveEditItem(null);
2613
- }, 300);
2614
- }
2615
- }, 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 &&
2616
2654
  false && ( // temp removed the AddConditionPopover
2617
2655
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2618
2656
  if (!openPopover) {
@@ -2651,14 +2689,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2651
2689
  setActivePath(null);
2652
2690
  setOpenPopover(null);
2653
2691
  }
2654
- } }) })] }))] })] }), (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: () => {
2655
2693
  setPivot(null);
2656
2694
  setPivotData(null);
2657
2695
  const formattedRows = formatRows(rows, columns, false);
2658
2696
  setFormattedRows(formattedRows);
2659
2697
  },
2660
2698
  // TODOs
2661
- selectPivot: (pivot) => {
2699
+ selectPivot: () => {
2662
2700
  return;
2663
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) => {
2664
2702
  setPivotRowField(value);
@@ -2675,7 +2713,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2675
2713
  }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
2676
2714
  type: pivot.sortDirection,
2677
2715
  expr: { type: 'column_ref', column: pivot.sortField },
2678
- }, 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: () => {
2679
2717
  setPivot({ ...pivot, sort: false });
2680
2718
  setBaseAst((0, util_1.deepCopy)(baseAst));
2681
2719
  if (!pivot) {
@@ -2724,7 +2762,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2724
2762
  if (!pivot) {
2725
2763
  fetchSqlQuery(newAst);
2726
2764
  }
2727
- }, 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: () => {
2728
2766
  const newAst = { ...baseAst };
2729
2767
  newAst.orderby.splice(id, 1);
2730
2768
  setBaseAst((0, util_1.deepCopy)(newAst));
@@ -2747,7 +2785,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2747
2785
  setActivePath(null);
2748
2786
  setOpenPopover(null);
2749
2787
  }
2750
- }, 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: {
2751
2789
  display: 'flex',
2752
2790
  flexDirection: 'column',
2753
2791
  gap: 8,
@@ -2802,7 +2840,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2802
2840
  ? askAIInputWidth
2803
2841
  : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
2804
2842
  initialLoad ||
2805
- 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: {
2806
2844
  display: 'flex',
2807
2845
  flexDirection: 'row',
2808
2846
  gap: '12px',
@@ -2817,8 +2855,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2817
2855
  boxSizing: 'border-box',
2818
2856
  ...containerStyle,
2819
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: () => {
2820
- if (loadingSchema)
2821
- return;
2822
2858
  if (!orderedColumnNames) {
2823
2859
  return;
2824
2860
  }
@@ -2842,12 +2878,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2842
2878
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2843
2879
  setBaseAst(ast);
2844
2880
  fetchSqlQuery(ast);
2845
- }, 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: {
2846
2882
  display: 'flex',
2847
2883
  flexDirection: 'column',
2848
2884
  gap: 8,
2849
2885
  marginBottom: 12,
2850
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2886
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2851
2887
  display: 'flex',
2852
2888
  flexDirection: 'column',
2853
2889
  alignItems: 'flex-start',
@@ -2859,7 +2895,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2859
2895
  }
2860
2896
  if (!openPopover) {
2861
2897
  const value = orderedColumnNames[0];
2862
- const [_table, column] = value.split('.');
2898
+ const column = value.split('.')[1];
2863
2899
  const columnType = getColumnTypeByName(column);
2864
2900
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2865
2901
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2889,27 +2925,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2889
2925
  setActiveEditItem(null);
2890
2926
  }, 300);
2891
2927
  }
2892
- }, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(ui_1.AddFilterPopover, { onSave: () => {
2893
- if ((0, util_1.isNodeEmptyCollection)(activeEditItem)) {
2894
- setOpenPopover(null);
2895
- clearCheckboxes();
2896
- setIsPending(false);
2897
- setTimeout(() => {
2898
- setActivePath(null);
2899
- setActiveEditItem(null);
2900
- }, 300);
2901
- }
2902
- else {
2903
- setOpenPopover(null);
2904
- setIsPending(false);
2905
- handleInsertion(activeEditItem, 'AND', false);
2906
- setActivePath(null);
2907
- setTimeout(() => {
2908
- clearCheckboxes();
2909
- setActiveEditItem(null);
2910
- }, 300);
2911
- }
2912
- }, 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 &&
2913
2935
  false && ( // temp removed the AddConditionPopover
2914
2936
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2915
2937
  if (!openPopover) {
@@ -2949,7 +2971,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2949
2971
  setOpenPopover(null);
2950
2972
  clearCheckboxes();
2951
2973
  }
2952
- } }) })] }))] })] }), (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: () => {
2953
2975
  setPivot(null);
2954
2976
  setPivotData(null);
2955
2977
  const formattedRows = formatRows(rows, columns, false);
@@ -3008,7 +3030,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3008
3030
  `.${pivot.rowField}`,
3009
3031
  `.${pivot.valueField || 'count'}`,
3010
3032
  ]
3011
- : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
3033
+ : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
3012
3034
  if (pivot) {
3013
3035
  const tempPivot = { ...pivot, sort: false };
3014
3036
  let dateBucket = undefined;
@@ -3063,7 +3085,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3063
3085
  flexDirection: 'column',
3064
3086
  gap: 8,
3065
3087
  marginBottom: 12,
3066
- }, 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: () => {
3067
3089
  if (pivot) {
3068
3090
  setPivot({ ...pivot, sort: false });
3069
3091
  return;
@@ -3173,7 +3195,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3173
3195
  setOpenPopover(null);
3174
3196
  setBaseAst((0, util_1.deepCopy)(newAst));
3175
3197
  fetchSqlQuery((0, util_1.deepCopy)(newAst));
3176
- } }) }) })] }), (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: {
3177
3199
  display: 'flex',
3178
3200
  flexDirection: 'column',
3179
3201
  gap: 8,
@@ -3246,7 +3268,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3246
3268
  ? 'Ask a follow-up question...'
3247
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 ||
3248
3270
  (loading && errorMessage.length === 0) ||
3249
- initalChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3271
+ initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3250
3272
  ? pivotData?.columns || emptyPivotColumns()
3251
3273
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
3252
3274
  return {
@@ -3264,9 +3286,10 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3264
3286
  overflow: 'hidden',
3265
3287
  width: '100%',
3266
3288
  gap: 12,
3267
- }, 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: () => {
3268
3291
  setIsChartBuilderOpen(true);
3269
- }, 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
3270
3293
  ? {
3271
3294
  ...report,
3272
3295
  ...tempReport,
@@ -3280,6 +3303,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3280
3303
  queryString: activeQuery,
3281
3304
  rows: rows,
3282
3305
  }
3283
- : 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 }))] }));
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 }))] }));
3284
3307
  }
3285
3308
  exports.default = ReportBuilder;