@quillsql/react 2.12.29 → 2.12.31

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 (530) hide show
  1. package/dist/cjs/Chart.d.ts +29 -46
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +187 -468
  4. package/dist/cjs/ChartBuilder.d.ts +30 -61
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +190 -131
  7. package/dist/cjs/ChartEditor.d.ts +14 -2
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +70 -125
  10. package/dist/cjs/Context.d.ts +4 -1
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +52 -6
  13. package/dist/cjs/Dashboard.d.ts +74 -118
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +273 -47
  16. package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/Calendar.js +3 -6
  18. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -29
  20. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  21. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  22. package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
  23. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  24. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  25. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
  26. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  27. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  28. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
  29. package/dist/cjs/ReportBuilder.d.ts +18 -6
  30. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  31. package/dist/cjs/ReportBuilder.js +477 -489
  32. package/dist/cjs/SQLEditor.d.ts +4 -11
  33. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  34. package/dist/cjs/SQLEditor.js +76 -88
  35. package/dist/cjs/Table.d.ts +19 -3
  36. package/dist/cjs/Table.d.ts.map +1 -1
  37. package/dist/cjs/Table.js +130 -114
  38. package/dist/cjs/TableChart.d.ts.map +1 -1
  39. package/dist/cjs/TableChart.js +0 -1
  40. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  41. package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
  42. package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
  43. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  44. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  45. package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
  46. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  47. package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
  48. package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
  49. package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
  50. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  51. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  52. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  53. package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
  54. package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
  55. package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
  56. package/dist/cjs/components/Banner/index.d.ts +1 -1
  57. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  58. package/dist/cjs/components/Banner/index.js +1 -1
  59. package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -1
  60. package/dist/cjs/components/BigModal/BigModal.js +6 -12
  61. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  62. package/dist/cjs/components/Chart/BarChart.js +12 -1
  63. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  64. package/dist/cjs/components/Chart/BarList.js +21 -14
  65. package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
  66. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  67. package/dist/cjs/components/Chart/ChartError.js +40 -5
  68. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  69. package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
  70. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  71. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  72. package/dist/cjs/components/Chart/LineChart.js +27 -3
  73. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  74. package/dist/cjs/components/Chart/PieChart.js +1 -3
  75. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
  76. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  77. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  78. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +5 -1
  79. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  80. package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
  81. package/dist/cjs/components/Dashboard/DataLoader.d.ts +8 -12
  82. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  83. package/dist/cjs/components/Dashboard/DataLoader.js +137 -194
  84. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  85. package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
  86. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -5
  87. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  88. package/dist/cjs/components/Dashboard/TableComponent.js +3 -32
  89. package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
  90. package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
  91. package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
  92. package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
  93. package/dist/cjs/components/Dropdown/index.d.ts +2 -2
  94. package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
  95. package/dist/cjs/components/Modal/Modal.js +2 -3
  96. package/dist/cjs/components/Modal/index.d.ts +1 -1
  97. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  98. package/dist/cjs/components/QuillMultiSelect.js +18 -3
  99. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  100. package/dist/cjs/components/QuillMultiSelectWithCombo.js +18 -3
  101. package/dist/cjs/components/QuillSelect.js +1 -1
  102. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  103. package/dist/cjs/components/QuillSelectWithCombo.js +6 -3
  104. package/dist/cjs/components/QuillTable.d.ts +1 -4
  105. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  106. package/dist/cjs/components/QuillTable.js +5 -11
  107. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  108. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  109. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
  110. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  111. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
  112. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  113. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
  114. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +30 -0
  115. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  116. package/dist/cjs/components/ReportBuilder/FilterModal.js +579 -0
  117. package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
  118. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  119. package/dist/cjs/components/ReportBuilder/ast.js +33 -6
  120. package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
  121. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  122. package/dist/cjs/components/ReportBuilder/constants.js +24 -3
  123. package/dist/cjs/components/ReportBuilder/convert.d.ts +18 -16
  124. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  125. package/dist/cjs/components/ReportBuilder/convert.js +378 -494
  126. package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
  127. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  128. package/dist/cjs/components/ReportBuilder/operators.js +32 -4
  129. package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
  130. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  131. package/dist/cjs/components/ReportBuilder/ui.js +15 -5
  132. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
  133. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  134. package/dist/cjs/components/ReportBuilder/util.js +15 -18
  135. package/dist/cjs/components/UiComponents.d.ts +36 -8
  136. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  137. package/dist/cjs/components/UiComponents.js +106 -12
  138. package/dist/cjs/components/selectUtils.d.ts +0 -1
  139. package/dist/cjs/components/selectUtils.d.ts.map +1 -1
  140. package/dist/cjs/components/selectUtils.js +1 -22
  141. package/dist/cjs/hooks/index.d.ts +4 -4
  142. package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
  143. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
  144. package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
  145. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  146. package/dist/cjs/hooks/useDashboard.js +5 -1
  147. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  148. package/dist/cjs/hooks/useExport.js +3 -1
  149. package/dist/cjs/hooks/useOnClickOutside.js +4 -4
  150. package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
  151. package/dist/cjs/hooks/useOnWindowResize.js +2 -2
  152. package/dist/cjs/hooks/useQuill.d.ts +10 -27
  153. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  154. package/dist/cjs/hooks/useQuill.js +133 -85
  155. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  156. package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
  157. package/dist/cjs/hooks/useTheme.js +1 -1
  158. package/dist/cjs/index.d.ts +3 -1
  159. package/dist/cjs/index.d.ts.map +1 -1
  160. package/dist/cjs/index.js +3 -1
  161. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  162. package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
  163. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
  164. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  165. package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
  166. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
  167. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  168. package/dist/cjs/internals/ReportBuilder/PivotModal.js +8 -21
  169. package/dist/cjs/lib/utils.js +2 -2
  170. package/dist/cjs/models/Columns.d.ts +2 -1
  171. package/dist/cjs/models/Columns.d.ts.map +1 -1
  172. package/dist/cjs/models/Filter.d.ts +115 -4
  173. package/dist/cjs/models/Filter.d.ts.map +1 -1
  174. package/dist/cjs/models/Filter.js +99 -0
  175. package/dist/cjs/models/Pagination.d.ts +10 -0
  176. package/dist/cjs/models/Pagination.d.ts.map +1 -0
  177. package/dist/cjs/models/Pagination.js +2 -0
  178. package/dist/cjs/models/Report.d.ts +103 -0
  179. package/dist/cjs/models/Report.d.ts.map +1 -0
  180. package/dist/cjs/models/Report.js +2 -0
  181. package/dist/cjs/utils/aggregate.js +1 -1
  182. package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
  183. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
  184. package/dist/cjs/utils/astFilterProcessing.js +8091 -0
  185. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  186. package/dist/cjs/utils/astProcessing.js +4 -3
  187. package/dist/cjs/utils/axisFormatter.js +0 -71
  188. package/dist/cjs/utils/color.js +9 -87
  189. package/dist/cjs/utils/columnProcessing.d.ts +2 -0
  190. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  191. package/dist/cjs/utils/columnProcessing.js +54 -1
  192. package/dist/cjs/utils/csv.d.ts.map +1 -1
  193. package/dist/cjs/utils/dashboard.d.ts +1 -1
  194. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  195. package/dist/cjs/utils/dashboard.js +6 -59
  196. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  197. package/dist/cjs/utils/dataFetcher.js +63 -1
  198. package/dist/cjs/utils/dataProcessing.d.ts +10 -0
  199. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
  200. package/dist/cjs/utils/dataProcessing.js +144 -0
  201. package/dist/cjs/utils/dates.d.ts +2 -1
  202. package/dist/cjs/utils/dates.d.ts.map +1 -1
  203. package/dist/cjs/utils/dates.js +23 -1
  204. package/dist/cjs/utils/error.d.ts +5 -0
  205. package/dist/cjs/utils/error.d.ts.map +1 -0
  206. package/dist/cjs/utils/error.js +12 -0
  207. package/dist/cjs/utils/filterConstants.d.ts +34 -0
  208. package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
  209. package/dist/cjs/utils/filterConstants.js +36 -0
  210. package/dist/cjs/utils/filterProcessing.d.ts +7 -1
  211. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  212. package/dist/cjs/utils/filterProcessing.js +104 -17
  213. package/dist/cjs/utils/logging.d.ts.map +1 -1
  214. package/dist/cjs/utils/logging.js +1 -0
  215. package/dist/cjs/utils/merge.js +0 -21
  216. package/dist/cjs/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
  217. package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
  218. package/dist/cjs/utils/monacoConfig.js +324 -0
  219. package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
  220. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
  221. package/dist/cjs/utils/paginationProcessing.js +30 -0
  222. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  223. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  224. package/dist/cjs/utils/pivotConstructor.js +16 -1
  225. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  226. package/dist/cjs/utils/pivotProcessing.js +12 -6
  227. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  228. package/dist/cjs/utils/queryConstructor.js +4 -3
  229. package/dist/cjs/utils/report.d.ts +10 -0
  230. package/dist/cjs/utils/report.d.ts.map +1 -0
  231. package/dist/cjs/utils/report.js +180 -0
  232. package/dist/cjs/utils/schema.d.ts.map +1 -1
  233. package/dist/cjs/utils/schema.js +35 -6
  234. package/dist/cjs/utils/styles.d.ts +1 -1
  235. package/dist/cjs/utils/styles.d.ts.map +1 -1
  236. package/dist/cjs/utils/tableProcessing.d.ts +22 -8
  237. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  238. package/dist/cjs/utils/tableProcessing.js +116 -35
  239. package/dist/cjs/utils/textProcessing.js +3 -3
  240. package/dist/cjs/utils/validation.d.ts +9 -0
  241. package/dist/cjs/utils/validation.d.ts.map +1 -0
  242. package/dist/cjs/utils/validation.js +24 -0
  243. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  244. package/dist/cjs/utils/valueFormatter.js +8 -4
  245. package/dist/esm/Chart.d.ts +29 -46
  246. package/dist/esm/Chart.d.ts.map +1 -1
  247. package/dist/esm/Chart.js +189 -471
  248. package/dist/esm/ChartBuilder.d.ts +30 -61
  249. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  250. package/dist/esm/ChartBuilder.js +191 -129
  251. package/dist/esm/ChartEditor.d.ts +14 -2
  252. package/dist/esm/ChartEditor.d.ts.map +1 -1
  253. package/dist/esm/ChartEditor.js +71 -126
  254. package/dist/esm/Context.d.ts +4 -1
  255. package/dist/esm/Context.d.ts.map +1 -1
  256. package/dist/esm/Context.js +51 -5
  257. package/dist/esm/Dashboard.d.ts +74 -118
  258. package/dist/esm/Dashboard.d.ts.map +1 -1
  259. package/dist/esm/Dashboard.js +275 -49
  260. package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
  261. package/dist/esm/DateRangePicker/Calendar.js +5 -8
  262. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  263. package/dist/esm/DateRangePicker/DateRangePicker.js +2 -29
  264. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  265. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  266. package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
  267. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  268. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  269. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
  270. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  271. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  272. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
  273. package/dist/esm/ReportBuilder.d.ts +18 -6
  274. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  275. package/dist/esm/ReportBuilder.js +484 -496
  276. package/dist/esm/SQLEditor.d.ts +4 -11
  277. package/dist/esm/SQLEditor.d.ts.map +1 -1
  278. package/dist/esm/SQLEditor.js +75 -87
  279. package/dist/esm/Table.d.ts +19 -3
  280. package/dist/esm/Table.d.ts.map +1 -1
  281. package/dist/esm/Table.js +132 -116
  282. package/dist/esm/TableChart.d.ts.map +1 -1
  283. package/dist/esm/TableChart.js +0 -1
  284. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  285. package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
  286. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
  287. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  288. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  289. package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
  290. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  291. package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
  292. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
  293. package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
  294. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  295. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  296. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  297. package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
  298. package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
  299. package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
  300. package/dist/esm/components/Banner/index.d.ts +1 -1
  301. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  302. package/dist/esm/components/Banner/index.js +1 -1
  303. package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
  304. package/dist/esm/components/BigModal/BigModal.js +7 -13
  305. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  306. package/dist/esm/components/Chart/BarChart.js +13 -2
  307. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  308. package/dist/esm/components/Chart/BarList.js +21 -14
  309. package/dist/esm/components/Chart/ChartError.d.ts +8 -1
  310. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  311. package/dist/esm/components/Chart/ChartError.js +39 -6
  312. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  313. package/dist/esm/components/Chart/ChartTooltip.js +8 -2
  314. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  315. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  316. package/dist/esm/components/Chart/LineChart.js +28 -4
  317. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  318. package/dist/esm/components/Chart/PieChart.js +1 -3
  319. package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
  320. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  321. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  322. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
  323. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  324. package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
  325. package/dist/esm/components/Dashboard/DataLoader.d.ts +8 -12
  326. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  327. package/dist/esm/components/Dashboard/DataLoader.js +137 -194
  328. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  329. package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
  330. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -5
  331. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  332. package/dist/esm/components/Dashboard/TableComponent.js +3 -32
  333. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  334. package/dist/esm/components/Dropdown/Dropdown.js +2 -4
  335. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
  336. package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
  337. package/dist/esm/components/Dropdown/index.d.ts +2 -2
  338. package/dist/esm/components/Dropdown/index.js +2 -2
  339. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  340. package/dist/esm/components/Modal/Modal.js +2 -3
  341. package/dist/esm/components/Modal/index.d.ts +1 -1
  342. package/dist/esm/components/Modal/index.js +1 -1
  343. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  344. package/dist/esm/components/QuillMultiSelect.js +18 -3
  345. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  346. package/dist/esm/components/QuillMultiSelectWithCombo.js +18 -3
  347. package/dist/esm/components/QuillSelect.js +1 -1
  348. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  349. package/dist/esm/components/QuillSelectWithCombo.js +7 -4
  350. package/dist/esm/components/QuillTable.d.ts +1 -4
  351. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  352. package/dist/esm/components/QuillTable.js +5 -11
  353. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  354. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  355. package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
  356. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  357. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
  358. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  359. package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
  360. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +30 -0
  361. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  362. package/dist/esm/components/ReportBuilder/FilterModal.js +576 -0
  363. package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
  364. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  365. package/dist/esm/components/ReportBuilder/ast.js +31 -5
  366. package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
  367. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  368. package/dist/esm/components/ReportBuilder/constants.js +24 -3
  369. package/dist/esm/components/ReportBuilder/convert.d.ts +18 -16
  370. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  371. package/dist/esm/components/ReportBuilder/convert.js +375 -493
  372. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
  373. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
  374. package/dist/esm/components/ReportBuilder/convert.uspec.js +1419 -0
  375. package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
  376. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  377. package/dist/esm/components/ReportBuilder/operators.js +32 -4
  378. package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
  379. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  380. package/dist/esm/components/ReportBuilder/ui.js +13 -4
  381. package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
  382. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  383. package/dist/esm/components/ReportBuilder/util.js +16 -19
  384. package/dist/esm/components/UiComponents.d.ts +36 -8
  385. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  386. package/dist/esm/components/UiComponents.js +104 -11
  387. package/dist/esm/components/selectUtils.d.ts +0 -1
  388. package/dist/esm/components/selectUtils.d.ts.map +1 -1
  389. package/dist/esm/components/selectUtils.js +0 -20
  390. package/dist/esm/hooks/index.d.ts +4 -4
  391. package/dist/esm/hooks/index.js +4 -4
  392. package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
  393. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
  394. package/dist/esm/hooks/useAstToFilterTree.js +24 -0
  395. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  396. package/dist/esm/hooks/useDashboard.js +5 -1
  397. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  398. package/dist/esm/hooks/useExport.js +4 -2
  399. package/dist/esm/hooks/useOnClickOutside.js +5 -5
  400. package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
  401. package/dist/esm/hooks/useOnWindowResize.js +3 -3
  402. package/dist/esm/hooks/useQuill.d.ts +10 -27
  403. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  404. package/dist/esm/hooks/useQuill.js +133 -85
  405. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  406. package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
  407. package/dist/esm/hooks/useTheme.js +1 -1
  408. package/dist/esm/index.d.ts +3 -1
  409. package/dist/esm/index.d.ts.map +1 -1
  410. package/dist/esm/index.js +1 -0
  411. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  412. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
  413. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
  414. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  415. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  416. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
  417. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  418. package/dist/esm/internals/ReportBuilder/PivotModal.js +11 -24
  419. package/dist/esm/lib/utils.js +2 -2
  420. package/dist/esm/models/Columns.d.ts +2 -1
  421. package/dist/esm/models/Columns.d.ts.map +1 -1
  422. package/dist/esm/models/Filter.d.ts +115 -4
  423. package/dist/esm/models/Filter.d.ts.map +1 -1
  424. package/dist/esm/models/Filter.js +98 -1
  425. package/dist/esm/models/Pagination.d.ts +10 -0
  426. package/dist/esm/models/Pagination.d.ts.map +1 -0
  427. package/dist/esm/models/Pagination.js +1 -0
  428. package/dist/esm/models/Report.d.ts +103 -0
  429. package/dist/esm/models/Report.d.ts.map +1 -0
  430. package/dist/esm/models/Report.js +1 -0
  431. package/dist/esm/test-utils/constants.d.ts +56 -0
  432. package/dist/esm/test-utils/constants.d.ts.map +1 -0
  433. package/dist/esm/test-utils/constants.js +271 -0
  434. package/dist/esm/test-utils/generators.d.ts +4 -0
  435. package/dist/esm/test-utils/generators.d.ts.map +1 -0
  436. package/dist/esm/test-utils/generators.js +37 -0
  437. package/dist/esm/utils/aggregate.js +1 -1
  438. package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
  439. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
  440. package/dist/esm/utils/astFilterProcessing.js +8084 -0
  441. package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
  442. package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
  443. package/dist/esm/utils/astFilterProcessing.uspec.js +2877 -0
  444. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  445. package/dist/esm/utils/astProcessing.js +4 -3
  446. package/dist/esm/utils/axisFormatter.js +0 -71
  447. package/dist/esm/utils/color.js +9 -87
  448. package/dist/esm/utils/columnProcessing.d.ts +2 -0
  449. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  450. package/dist/esm/utils/columnProcessing.js +52 -0
  451. package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
  452. package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
  453. package/dist/esm/utils/columnProcessing.uspec.js +65 -0
  454. package/dist/esm/utils/csv.d.ts.map +1 -1
  455. package/dist/esm/utils/dashboard.d.ts +1 -1
  456. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  457. package/dist/esm/utils/dashboard.js +6 -59
  458. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  459. package/dist/esm/utils/dataFetcher.js +63 -1
  460. package/dist/esm/utils/dataProcessing.d.ts +10 -0
  461. package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
  462. package/dist/esm/utils/dataProcessing.js +138 -0
  463. package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
  464. package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
  465. package/dist/esm/utils/dataProcessing.uspec.js +205 -0
  466. package/dist/esm/utils/dates.d.ts +2 -1
  467. package/dist/esm/utils/dates.d.ts.map +1 -1
  468. package/dist/esm/utils/dates.js +21 -0
  469. package/dist/esm/utils/error.d.ts +5 -0
  470. package/dist/esm/utils/error.d.ts.map +1 -0
  471. package/dist/esm/utils/error.js +8 -0
  472. package/dist/esm/utils/filterConstants.d.ts +34 -0
  473. package/dist/esm/utils/filterConstants.d.ts.map +1 -0
  474. package/dist/esm/utils/filterConstants.js +33 -0
  475. package/dist/esm/utils/filterProcessing.d.ts +7 -1
  476. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  477. package/dist/esm/utils/filterProcessing.js +101 -16
  478. package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
  479. package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
  480. package/dist/esm/utils/filterProcessing.uspec.js +245 -0
  481. package/dist/esm/utils/logging.d.ts.map +1 -1
  482. package/dist/esm/utils/logging.js +1 -0
  483. package/dist/esm/utils/merge.js +0 -21
  484. package/dist/esm/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
  485. package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
  486. package/dist/esm/utils/monacoConfig.js +319 -0
  487. package/dist/esm/utils/paginationProcessing.d.ts +5 -0
  488. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
  489. package/dist/esm/utils/paginationProcessing.js +25 -0
  490. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  491. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  492. package/dist/esm/utils/pivotConstructor.js +16 -1
  493. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  494. package/dist/esm/utils/pivotProcessing.js +12 -6
  495. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  496. package/dist/esm/utils/queryConstructor.js +4 -3
  497. package/dist/esm/utils/queryConstructor.uspec.js +21 -21
  498. package/dist/esm/utils/report.d.ts +10 -0
  499. package/dist/esm/utils/report.d.ts.map +1 -0
  500. package/dist/esm/utils/report.ispec.d.ts +2 -0
  501. package/dist/esm/utils/report.ispec.d.ts.map +1 -0
  502. package/dist/esm/utils/report.ispec.js +46 -0
  503. package/dist/esm/utils/report.js +174 -0
  504. package/dist/esm/utils/report.uspec.d.ts +2 -0
  505. package/dist/esm/utils/report.uspec.d.ts.map +1 -0
  506. package/dist/esm/utils/report.uspec.js +66 -0
  507. package/dist/esm/utils/schema.d.ts.map +1 -1
  508. package/dist/esm/utils/schema.js +35 -6
  509. package/dist/esm/utils/styles.d.ts +1 -1
  510. package/dist/esm/utils/styles.d.ts.map +1 -1
  511. package/dist/esm/utils/tableProcessing.d.ts +22 -8
  512. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  513. package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
  514. package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
  515. package/dist/esm/utils/tableProcessing.ispec.js +61 -0
  516. package/dist/esm/utils/tableProcessing.js +112 -33
  517. package/dist/esm/utils/textProcessing.js +3 -3
  518. package/dist/esm/utils/validation.d.ts +9 -0
  519. package/dist/esm/utils/validation.d.ts.map +1 -0
  520. package/dist/esm/utils/validation.js +20 -0
  521. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  522. package/dist/esm/utils/valueFormatter.js +8 -4
  523. package/package.json +1 -1
  524. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +0 -1
  525. package/dist/cjs/utils/monacoAutocomplete.js +0 -145
  526. package/dist/cjs/utils/queryConstructor.uspec.d.ts +0 -2
  527. package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +0 -1
  528. package/dist/cjs/utils/queryConstructor.uspec.js +0 -225
  529. package/dist/esm/utils/monacoAutocomplete.d.ts.map +0 -1
  530. 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 astFilterProcessing_1 = require("./utils/astFilterProcessing");
45
+ const useAstToFilterTree_1 = __importDefault(require("./hooks/useAstToFilterTree"));
46
+ const filterProcessing_1 = require("./utils/filterProcessing");
47
+ const QuillMultiSelectWithCombo_1 = require("./components/QuillMultiSelectWithCombo");
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 = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, 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)('');
@@ -99,9 +103,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
99
103
  const [rows, setRows] = (0, react_1.useState)([]);
100
104
  const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
101
105
  const [columns, setColumns] = (0, react_1.useState)([]);
102
- const [tempReport, setTempReport] = (0, react_1.useState)({});
106
+ const [tempReport, setTempReport] = (0, react_1.useState)(report_1.EMPTY_REPORT);
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,12 @@ 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 [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
137
+ const filterTree = (0, useAstToFilterTree_1.default)(formData, client); // Stores the state of filters
134
138
  (0, react_1.useEffect)(() => {
135
139
  if (!client) {
136
140
  return;
@@ -146,6 +150,21 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
146
150
  (0, width_1.updateFirstChildWidth)(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
147
151
  (0, width_1.updateFirstChildWidth)(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
148
152
  }, [dataDisplayed]);
153
+ // Whenever unique values changes, update the fieldValuesMap, used in FilterModals
154
+ (0, react_1.useEffect)(() => {
155
+ const tables = (0, ast_1.getTableNames)(baseAst);
156
+ const table = tables.length === 1 ? tables[0] : initialTableName;
157
+ const newFieldValues = {};
158
+ if (uniqueValues[table]) {
159
+ for (const field of Object.keys(uniqueValues[table])) {
160
+ newFieldValues[field] = [];
161
+ for (const value of Object.keys(uniqueValues[table][field])) {
162
+ newFieldValues[field]?.push(value);
163
+ }
164
+ }
165
+ }
166
+ setFieldValuesMap(newFieldValues);
167
+ }, [uniqueValues]);
149
168
  (0, react_1.useEffect)(() => {
150
169
  // Since the TextInput component takes a required numeric width parameter,
151
170
  // we dynamically calculate the width of this component here.
@@ -184,7 +203,17 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
184
203
  if (tempDateRange) {
185
204
  dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
186
205
  }
187
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
206
+ let distinctValuesForQuery = {};
207
+ if (pivot.columnField) {
208
+ distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
209
+ {
210
+ field: pivot.columnField,
211
+ label: pivot.columnField,
212
+ format: 'string',
213
+ },
214
+ ], activeQuery, [], client, customFields);
215
+ }
216
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
188
217
  setPivotData(pivotedData || []);
189
218
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
190
219
  setPivot(newPivot);
@@ -224,7 +253,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
224
253
  setRows([]);
225
254
  setColumns([]);
226
255
  setTopLevelBinaryOperator('AND');
227
- setEditPopoverKey(null);
228
256
  setErrorMessage('');
229
257
  setFormattedRows([]);
230
258
  // setUniqueValues({});
@@ -252,8 +280,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
252
280
  if (pivot) {
253
281
  const formattedRows = copiedRows.map((row) => {
254
282
  const formattedRow = row;
255
- Object.keys(row).forEach((key, index) => {
256
- let column = columns.find((c) => c.field === key);
283
+ Object.keys(row).forEach((key) => {
284
+ const column = columns.find((c) => c.field === key);
257
285
  let format = 'string';
258
286
  if (!column) {
259
287
  format =
@@ -313,42 +341,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
313
341
  navigator.clipboard.writeText(query);
314
342
  setTimeout(() => setIsCopying(false), 800);
315
343
  };
316
- const copyToClipboard = (str) => {
317
- setIsCopying(true);
318
- navigator.clipboard.writeText(str);
319
- setTimeout(() => setIsCopying(false), 800);
320
- };
321
344
  const clearCheckboxes = () => {
322
345
  const checkboxes = uniqueValues;
323
346
  const newValues = {};
324
- for (let table of Object.keys(checkboxes)) {
347
+ for (const table of Object.keys(checkboxes)) {
325
348
  newValues[table] = {};
326
- for (let column of Object.keys(checkboxes[table])) {
349
+ for (const column of Object.keys(checkboxes[table])) {
327
350
  newValues[table][column] = {};
328
- for (let variant of Object.keys(checkboxes[table][column])) {
351
+ for (const variant of Object.keys(checkboxes[table][column])) {
329
352
  newValues[table][column][variant] = false;
330
353
  }
331
354
  }
332
355
  }
333
356
  setUniqueValues(newValues);
334
357
  };
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
358
  const fetchSqlQuery = async (ast, formData, fetchData = true) => {
353
359
  if (fetchData) {
354
360
  setLoading(true);
@@ -364,6 +370,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
364
370
  body: JSON.stringify({
365
371
  ast: { ...ast, where },
366
372
  publicKey: client.publicKey,
373
+ useNewNodeSql: true, // new flag
367
374
  }),
368
375
  });
369
376
  const data = await response.json();
@@ -371,6 +378,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
371
378
  if (fetchData) {
372
379
  fetchUponChange(ast, formData);
373
380
  }
381
+ return data.query;
374
382
  }
375
383
  catch (error) {
376
384
  setLoading(false);
@@ -495,83 +503,102 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
495
503
  };
496
504
  (0, react_1.useEffect)(() => {
497
505
  const loadChart = async () => {
498
- setInitalChartLoad(true);
506
+ setInitialChartLoad(true);
507
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
499
508
  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);
509
+ setInitialChartLoad(false);
512
510
  return;
513
511
  }
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,
512
+ try {
513
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
514
+ const tableName = report.referencedTables[0];
515
+ if (!tableName) {
516
+ return;
517
+ }
518
+ const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
519
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
520
+ query: report.queryString,
521
+ useNewNodeSql: true,
522
+ });
523
+ if (resp.success === false) {
524
+ setErrorMessage(resp.message);
525
+ return;
526
+ }
527
+ const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
528
+ let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
529
+ (0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
530
+ convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
531
+ const schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
532
+ let newAst;
533
+ let groupByPivot = {};
534
+ ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
561
535
  // @ts-ignore
562
- groupByPivot.aggregationType);
563
- setFormattedRows(formattedRows);
536
+ report.pivot, schemaInfo));
537
+ if (convertedAst.where) {
538
+ setFormData((0, util_1.deepCopy)(convertedAst.where));
539
+ }
540
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
541
+ setActiveQuery(report.queryString);
542
+ newAst = groupByPivot ? newAst : convertedAst;
543
+ const initialRows = await fetchUponChange(newAst, undefined);
544
+ if (initialRows.error) {
545
+ setBaseAst(null);
546
+ setErrorMessage(initialRows.message);
547
+ setInitialChartLoad(false);
548
+ return;
549
+ }
550
+ setBaseAst(newAst);
551
+ const tableInfo = schemaInfo.find((table) => table.name === tableName);
552
+ let newUniqueValues = undefined;
553
+ let dateRangesTemp = undefined;
554
+ if (tableName) {
555
+ newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
556
+ setUniqueValues(newUniqueValues);
557
+ dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
558
+ setDateRanges(dateRangesTemp);
559
+ }
560
+ if (groupByPivot) {
561
+ // @ts-ignore
562
+ setPivotRowField(groupByPivot.rowField);
563
+ // @ts-ignore
564
+ setPivotAggregation(groupByPivot.aggregationType);
565
+ // @ts-ignore
566
+ setPivotColumnField(groupByPivot.columnField);
567
+ // @ts-ignore
568
+ setPivotValueField(groupByPivot.valueField);
569
+ setPivot(groupByPivot);
570
+ let dateBucket = undefined;
571
+ const tempDateRange = dateRangesTemp &&
572
+ groupByPivot.rowField &&
573
+ dateRangesTemp[groupByPivot.rowField];
574
+ if (tempDateRange) {
575
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
576
+ }
577
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)(
578
+ // @ts-ignore
579
+ groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
580
+ setPivotData(pivotedData || []);
581
+ const formattedRows = formatRows(pivotedData.rows, report.columns, true,
582
+ // @ts-ignore
583
+ groupByPivot.aggregationType);
584
+ setFormattedRows(formattedRows);
585
+ }
586
+ else {
587
+ const formattedRows = formatRows(report.rows, report.columns);
588
+ setFormattedRows(formattedRows);
589
+ }
590
+ setCurrentTable(tableName);
564
591
  }
565
- else {
566
- const formattedRows = formatRows(report.rows, report.columns);
567
- setFormattedRows(formattedRows);
592
+ catch (error) {
593
+ console.error(error);
594
+ setErrorMessage('Error loading report');
568
595
  }
569
- setCurrentTable(tableName);
570
596
  // This handles a flashing issue
571
597
  setTimeout(() => {
572
- setInitalChartLoad(false);
598
+ setInitialChartLoad(false);
573
599
  }, 500);
574
600
  };
601
+ // @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
575
602
  if (report && report.referencedTables.length === 1) {
576
603
  loadChart();
577
604
  }
@@ -897,10 +924,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
897
924
  isReplaceSubtree: true,
898
925
  });
899
926
  };
900
- // Function to handle the deletion of expressions
901
- const handleDelete = (key) => {
902
- updateFormData([{ path: key, value: null }], { isDeletion: true });
903
- };
904
927
  // Function to handle the insertion of expressions
905
928
  const handleInsertion = (value, op = 'OR', isCondition = undefined) => {
906
929
  updateFormData([{ path: '', value }], {
@@ -965,84 +988,60 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
965
988
  };
966
989
  const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
967
990
  const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
968
- page: { currentPage: 0, rowsPerPage: 20 },
991
+ page: paginationProcessing_1.DEFAULT_PAGINATION,
969
992
  });
970
993
  const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
971
994
  const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
972
995
  const onPageChange = (page) => {
973
- if (pivot) {
974
- return;
996
+ if (currentProcessing.page &&
997
+ (0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
998
+ const newPagination = { ...currentProcessing.page, page };
999
+ const updatedProcessing = { ...currentProcessing, page: newPagination };
1000
+ setCurrentProcessing(updatedProcessing);
1001
+ handleRunQuery(updatedProcessing);
975
1002
  }
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 });
1003
+ if (page > previousPage) {
1004
+ setPreviousPage(page);
981
1005
  }
982
- setPreviousPage(page.currentPage);
983
1006
  };
984
1007
  const onSortChange = (sort) => {
985
- if (pivot) {
1008
+ if ((0, paginationProcessing_1.shouldSortInMemory)(paginationProcessing_1.DEFAULT_PAGINATION, numberOfRows, !!pivot)) {
986
1009
  return;
987
1010
  }
988
- handleRunQuery({ sort, page: { currentPage: 0, rowsPerPage: 20 } });
1011
+ const updatedProcessing = { page: paginationProcessing_1.DEFAULT_PAGINATION, sort };
1012
+ handleRunQuery(updatedProcessing, true);
1013
+ setCurrentProcessing(updatedProcessing);
989
1014
  setPreviousPage(0);
990
1015
  };
991
- const handleRunQuery = async (processing) => {
1016
+ const handleRunQuery = async (processing, resetRows = false) => {
992
1017
  try {
993
1018
  setErrorMessage('');
994
1019
  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;
1020
+ const tableInfo = await (0, tableProcessing_1.fetchTableByQuery)(activeQuery, client, processing, customFields);
1021
+ if (tableInfo.error) {
1022
+ throw new Error(tableInfo.error);
1016
1023
  }
1017
- if (resp.rowCount) {
1018
- setNumberOfRows(resp.rowCount);
1024
+ else if (tableInfo.rows.length === 0) {
1025
+ throw new Error('No data found');
1026
+ }
1027
+ if (tableInfo.rowCount) {
1028
+ setNumberOfRows(tableInfo.rowCount);
1019
1029
  }
1020
- setErrorMessage('');
1021
1030
  setCurrentProcessing(processing);
1022
- if (resp.rows.length === 0) {
1023
- setErrorMessage('No data found');
1031
+ let tempRows = [...rows, ...tableInfo.rows];
1032
+ if (resetRows) {
1033
+ tempRows = tableInfo.rows;
1024
1034
  }
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);
1035
+ setRows(tempRows);
1036
+ setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
1037
+ setColumns(tableInfo.columns);
1041
1038
  setTableLoading(false);
1042
1039
  }
1043
1040
  catch (e) {
1044
1041
  setTableLoading(false);
1045
- console.log('ERROR: ', e);
1042
+ setErrorMessage('Failed to run SQL query: ' + e.message);
1043
+ setRows([]);
1044
+ setColumns([]);
1046
1045
  return;
1047
1046
  }
1048
1047
  };
@@ -1061,10 +1060,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1061
1060
  case 'binary_expr':
1062
1061
  if (dateComparisonPartialMatch ||
1063
1062
  ((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);
1063
+ const { dateColumn, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
1068
1064
  const isPlural = intervalCount !== 1 && dateFilterType !== 'in the current'
1069
1065
  ? 's'
1070
1066
  : '';
@@ -1212,7 +1208,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1212
1208
  } }))] }));
1213
1209
  }
1214
1210
  else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
1215
- const { dateColumn, dateFilterType, intervalCount, intervalType } = (0, util_1.getDateFilterInfo)(node);
1211
+ const { dateColumn } = (0, util_1.getDateFilterInfo)(node);
1216
1212
  const options = getAllPossibleColumns().map((column) => ({
1217
1213
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1218
1214
  value: column.name,
@@ -1273,7 +1269,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1273
1269
  ], width: 200 }) })] }));
1274
1270
  }
1275
1271
  else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
1276
- const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
1277
1272
  const options = getAllPossibleColumns().map((column) => ({
1278
1273
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1279
1274
  value: column.name,
@@ -1332,7 +1327,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1332
1327
  { label: `week`, value: 'WEEK' },
1333
1328
  ], width: 200 })] }));
1334
1329
  }
1335
- else if ((0, util_1.isThePreviousInterval)(node, client.databaseType)) {
1330
+ else if ((0, util_1.isThePreviousInterval)(node)) {
1336
1331
  const options = getAllPossibleColumns().map((column) => ({
1337
1332
  label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
1338
1333
  value: column.name,
@@ -1479,7 +1474,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1479
1474
  .find((tableInfo) => tableInfo.name === table)
1480
1475
  ?.columns.find((col) => col.name === leftChildValue);
1481
1476
  const columnType = column?.fieldType;
1482
- let operatorOptions = [
1477
+ const operatorOptions = [
1483
1478
  ...((0, ast_1.isNumericColumnType)(columnType)
1484
1479
  ? [
1485
1480
  { label: 'equal to', value: '=' },
@@ -1720,112 +1715,180 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1720
1715
  }
1721
1716
  return validPivot;
1722
1717
  };
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);
1718
+ /**
1719
+ * @param filterTree
1720
+ * Returns a list of filters to be displayed
1721
+ * Replaces the functionality of renderNodes in the context of filters
1722
+ */
1723
+ const renderFilters = (filterTree) => {
1724
+ let tree = filterTree;
1725
+ let filterStack = [];
1726
+ /**
1727
+ * Function that takes in a FilterTree and flattens it into an array using in order traversal
1728
+ */
1729
+ function traverseTree(node) {
1730
+ if (!node) {
1731
+ return;
1732
+ }
1733
+ if (node.leaf) {
1734
+ filterStack.push(node);
1735
+ }
1736
+ else {
1737
+ traverseTree(node.leftNode);
1738
+ filterStack.push(node);
1739
+ traverseTree(node.rightNode);
1740
+ }
1736
1741
  }
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 '()';
1774
- }
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`;
1791
- }
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('%', ''));
1742
+ /**
1743
+ * Given an array of Filters (presumed to be in in-order state), generate
1744
+ * the corresponding Filter tree. Essentially the reverse of what traverseTree does
1745
+ */
1746
+ function filterStackToFilterTree(stack) {
1747
+ function buildTree(i) {
1748
+ const newNode = {
1749
+ leaf: false,
1750
+ operator: null,
1751
+ leftNode: null,
1752
+ rightNode: null,
1753
+ };
1754
+ if (i >= stack.length) {
1807
1755
  return null;
1808
1756
  }
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}`;
1757
+ else if (stack[i].leaf) {
1758
+ if (i < stack.length - 1) {
1759
+ // more nodes later
1760
+ newNode.operator = stack[i + 1].operator;
1761
+ newNode.leftNode = {
1762
+ leaf: true,
1763
+ leftNode: null,
1764
+ rightNode: null,
1765
+ operator: null,
1766
+ value: stack[i].value,
1767
+ };
1768
+ newNode.rightNode = buildTree(i + 2);
1769
+ }
1770
+ else {
1771
+ newNode.leaf = true;
1772
+ newNode.value = stack[i].value;
1773
+ }
1824
1774
  }
1825
- return null;
1826
- default:
1827
- return null;
1775
+ return newNode;
1776
+ }
1777
+ return buildTree(0);
1828
1778
  }
1779
+ traverseTree(tree);
1780
+ // Remove null (invalid) filters from filter stack
1781
+ filterStack = filterStack.filter((filter) => {
1782
+ return ((!filter.leaf &&
1783
+ filter.rightNode &&
1784
+ (!filter.rightNode.leaf || filter.rightNode.value)) ||
1785
+ (filter.leaf && filter.value));
1786
+ });
1787
+ // Render filterStack
1788
+ return ((0, jsx_runtime_1.jsx)("div", { style: {
1789
+ display: 'flex',
1790
+ flexDirection: 'column',
1791
+ }, children: filterStack.map((item, index) => {
1792
+ if (!item.leaf &&
1793
+ (item.operator === 'and' || item.operator === 'or')) {
1794
+ return ((0, jsx_runtime_1.jsx)("div", { style: {
1795
+ width: 'fit-content',
1796
+ marginBottom: '8px',
1797
+ marginTop: '8px',
1798
+ }, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: item.operator.toUpperCase(), options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: () => {
1799
+ if (item.operator === 'and') {
1800
+ item.operator = 'or';
1801
+ }
1802
+ else {
1803
+ item.operator = 'and';
1804
+ }
1805
+ let newFormData = null;
1806
+ if (tree) {
1807
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1808
+ }
1809
+ const newAst = (0, util_1.deepCopy)({
1810
+ ...constants_1.defaultAST,
1811
+ ...baseAst,
1812
+ ...(!baseAst?.columns && {
1813
+ columns: getAllPossibleColumns().map((c) => {
1814
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1815
+ newColumn.expr.column = c.name;
1816
+ return newColumn;
1817
+ }),
1818
+ }),
1819
+ ...(!baseAst?.from && {
1820
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1821
+ }),
1822
+ where: newFormData,
1823
+ });
1824
+ setBaseAst(newAst);
1825
+ setFormData(newFormData);
1826
+ fetchSqlQuery(newAst, newFormData);
1827
+ } }) }, index));
1828
+ }
1829
+ else {
1830
+ return ((0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: schema.find((s) => s.name === currentTable || s.displayName === currentTable) ?? schema[0], filter: item.value, filterLabel: item.value ? (0, filterProcessing_1.filterSentence)(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal_1.default, fieldValuesMap: fieldValuesMap, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
1831
+ item.value = filter;
1832
+ let newFormData = null;
1833
+ if (tree) {
1834
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1835
+ }
1836
+ const newAst = (0, util_1.deepCopy)({
1837
+ ...constants_1.defaultAST,
1838
+ ...baseAst,
1839
+ ...(!baseAst?.columns && {
1840
+ columns: getAllPossibleColumns().map((c) => {
1841
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1842
+ newColumn.expr.column = c.name;
1843
+ return newColumn;
1844
+ }),
1845
+ }),
1846
+ ...(!baseAst?.from && {
1847
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1848
+ }),
1849
+ where: newFormData,
1850
+ });
1851
+ setBaseAst(newAst);
1852
+ setFormData(newFormData);
1853
+ fetchSqlQuery(newAst, newFormData);
1854
+ }, handleFilterDelete: (i) => {
1855
+ if (i > 0) {
1856
+ filterStack.splice(i - 1, 2);
1857
+ }
1858
+ else {
1859
+ if (filterStack.length > 1) {
1860
+ filterStack.splice(i, 2);
1861
+ }
1862
+ else {
1863
+ filterStack.splice(i, 1);
1864
+ }
1865
+ }
1866
+ tree = filterStackToFilterTree(filterStack);
1867
+ let newFormData = null;
1868
+ if (tree) {
1869
+ newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
1870
+ }
1871
+ const newAst = (0, util_1.deepCopy)({
1872
+ ...constants_1.defaultAST,
1873
+ ...baseAst,
1874
+ ...(!baseAst?.columns && {
1875
+ columns: getAllPossibleColumns().map((c) => {
1876
+ const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
1877
+ newColumn.expr.column = c.name;
1878
+ return newColumn;
1879
+ }),
1880
+ }),
1881
+ ...(!baseAst?.from && {
1882
+ from: [{ ...constants_1.defaultTable, table: initialTableName }],
1883
+ }),
1884
+ where: newFormData,
1885
+ });
1886
+ setBaseAst(newAst);
1887
+ setFormData(newFormData);
1888
+ fetchSqlQuery(newAst, newFormData);
1889
+ } }, 'filter' + index));
1890
+ }
1891
+ }) }));
1829
1892
  };
1830
1893
  const getAllPossibleColumns = () => {
1831
1894
  if (!baseAst || !baseAst.from) {
@@ -1867,7 +1930,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1867
1930
  if (selectedColumns.length < 1)
1868
1931
  return false;
1869
1932
  const allColumns = orderedColumnNames.filter((row) => {
1870
- const [table, _] = row.split('.');
1933
+ const [table] = row.split('.');
1871
1934
  const selectedTable = selectedColumns[0].split('.')[0];
1872
1935
  return selectedTable === table;
1873
1936
  });
@@ -1913,23 +1976,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1913
1976
  customFields,
1914
1977
  additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
1915
1978
  useUpdatedDataGathering: true,
1979
+ useNewNodeSql: true, // new flag
1916
1980
  },
1917
1981
  };
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
1982
  const tables = (0, ast_1.getTableNames)(baseAst);
1928
1983
  const table = tables.length >= 1 ? tables[0] : initialTableName;
1929
1984
  let newUniqueValues = uniqueValues;
1930
1985
  let dateRangesTemp = dateRanges;
1931
- let curReport = undefined;
1932
- if (table !== currentTable) {
1986
+ let curReport = tempReport;
1987
+ if ((newUniqueValues && Object.keys(newUniqueValues).length === 0) ||
1988
+ table !== currentTable) {
1933
1989
  const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
1934
1990
  if (tableInfo) {
1935
1991
  newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
@@ -1941,6 +1997,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1941
1997
  }
1942
1998
  setCurrentTable(table);
1943
1999
  }
2000
+ const cloudBody = {};
2001
+ const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
2002
+ if (data2.success === false) {
2003
+ throw new Error(data2.errorMessage);
2004
+ }
2005
+ rows = data2.rows;
2006
+ if (data2.rowCount) {
2007
+ setNumberOfRows(data2.rowCount);
2008
+ }
1944
2009
  if (data2.rows && data2.rows.length) {
1945
2010
  if (pivot) {
1946
2011
  // check if any of the pivot fields aren't in the data2.fields array
@@ -1970,13 +2035,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1970
2035
  setFormattedRows(formattedRows);
1971
2036
  return;
1972
2037
  }
2038
+ curReport = {
2039
+ ...formData,
2040
+ itemQuery: data2.itemQuery,
2041
+ rowCount: data2.rowCount,
2042
+ filtersApplied: [],
2043
+ rows: data2.rows,
2044
+ };
1973
2045
  // 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
2046
  let dateBucket = undefined;
1981
2047
  const tempDateRange = dateRangesTemp &&
1982
2048
  pivot.rowField &&
@@ -1984,9 +2050,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
1984
2050
  if (tempDateRange) {
1985
2051
  dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1986
2052
  }
2053
+ let distinctValuesForQuery = {};
2054
+ if (pivot.columnField) {
2055
+ const sqlQuery = await fetchSqlQuery({ ...baseAst, where: curFormData }, null, false);
2056
+ distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
2057
+ {
2058
+ field: pivot.columnField,
2059
+ label: pivot.columnField,
2060
+ format: 'string',
2061
+ },
2062
+ ], sqlQuery, [], client, customFields);
2063
+ }
1987
2064
  const pivotedData = await (0, PivotModal_1.generatePivotTable)(
1988
2065
  // @ts-ignore
1989
- pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, uniqueFormatted[pivot.columnField]);
2066
+ pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, distinctValuesForQuery ? distinctValuesForQuery : undefined);
1990
2067
  console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
1991
2068
  const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
1992
2069
  setPivotData(pivotedData);
@@ -2048,105 +2125,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2048
2125
  setFormattedRows([]);
2049
2126
  setPivotData(null);
2050
2127
  }
2128
+ setLoading(false);
2129
+ setDataDisplayed(true);
2130
+ return rows;
2051
2131
  }
2052
2132
  catch (e) {
2053
- console.error(e);
2054
2133
  setErrorMessage(e.message);
2055
- }
2056
- finally {
2057
2134
  setLoading(false);
2058
2135
  setDataDisplayed(true);
2059
- return rows;
2136
+ setRows([]);
2137
+ setColumns([]);
2138
+ setFormattedRows([]);
2139
+ setPivotData(null);
2140
+ return { error: true, message: e.message };
2060
2141
  }
2061
2142
  }
2062
2143
  };
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
2144
  // Returns whether a where-clause contains a nested subquery.
2151
2145
  const isSubquery = (node) => {
2152
2146
  if (!node)
@@ -2170,7 +2164,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2170
2164
  return;
2171
2165
  }
2172
2166
  try {
2173
- let errored = false;
2174
2167
  setLoading(true);
2175
2168
  setAskedAQuestion(true);
2176
2169
  setErrorMessage('');
@@ -2190,6 +2183,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2190
2183
  body: JSON.stringify({
2191
2184
  initialQuestion: aiPrompt || overridePrompt,
2192
2185
  publicKey: client.publicKey,
2186
+ useNewNodeSql: true, // new flag
2193
2187
  }),
2194
2188
  });
2195
2189
  }
@@ -2201,6 +2195,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2201
2195
  sqlQuery: activeQuery,
2202
2196
  initialQuestion: aiPrompt,
2203
2197
  publicKey: client.publicKey,
2198
+ useNewNodeSql: true, // new flag
2204
2199
  }),
2205
2200
  });
2206
2201
  }
@@ -2218,31 +2213,34 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2218
2213
  setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
2219
2214
  return;
2220
2215
  }
2216
+ let currentSchema = schema;
2217
+ if (currentSchema && currentSchema.length === 0) {
2218
+ currentSchema = await fetchSchema();
2219
+ }
2221
2220
  let newAst, groupByPivot;
2222
2221
  if (ast) {
2223
2222
  // Unwrap the ast object, supporting many possible types
2224
2223
  ast = ast.length ? ast[0] : ast;
2225
2224
  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
- }
2225
+ newAst = (0, convert_1.convertWildcardColumns)(newAst, currentSchema); // must go before groupby
2226
+ ({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, currentSchema));
2232
2227
  newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
2233
2228
  newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
2234
2229
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2235
2230
  const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2231
+ newAst = (0, convert_1.convertUnaryToBinary)(newAst);
2236
2232
  newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table, getAllPossibleColumns().map((col) => col.name));
2237
- setSelectedColumns((0, util_1.deepCopy)(newAst).columns?.map((column) => {
2233
+ const procesedColumns = (0, util_1.deepCopy)(newAst).columns?.map((column) => {
2238
2234
  if (column.expr.type === 'column_ref') {
2239
- return `${table}.${column.expr.column}`;
2235
+ const columnName = (0, ast_1.extractColumnish)(column.expr);
2236
+ return `${table}.${columnName}`;
2240
2237
  }
2241
2238
  else if (column.as) {
2242
2239
  return `${table}.${column.as}`;
2243
2240
  }
2244
2241
  return `${table}.${column.expr.value}`;
2245
- }));
2242
+ });
2243
+ setSelectedColumns(procesedColumns);
2246
2244
  if (groupByPivot) {
2247
2245
  setBaseAst((0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null }));
2248
2246
  newAst = (0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null });
@@ -2258,7 +2256,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2258
2256
  ast = newAst; // so we fetch data for newAst later.
2259
2257
  fetchSqlQuery(ast, undefined, false);
2260
2258
  const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
2261
- const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
2262
2259
  const hostedBody = {
2263
2260
  metadata: {
2264
2261
  clientId: client.publicKey,
@@ -2269,19 +2266,19 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2269
2266
  additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
2270
2267
  useUpdatedDataGathering: true,
2271
2268
  pivot: groupByPivot,
2269
+ useNewNodeSql: true, // new flag
2272
2270
  },
2273
2271
  };
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
2272
  let currentUniqueValues = uniqueValues;
2280
2273
  let dateRangesTemp = dateRanges;
2281
- if (table !== currentTable) {
2282
- const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
2274
+ if ((currentUniqueValues &&
2275
+ currentUniqueValues[table] &&
2276
+ Object.keys(currentUniqueValues[table]).length === 0) ||
2277
+ table !== currentTable) {
2278
+ const tableInfo = currentSchema.find((tableInfo) => tableInfo.name === table);
2283
2279
  if (tableInfo) {
2284
2280
  const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
2281
+ currentUniqueValues = newUniqueValues;
2285
2282
  if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
2286
2283
  setUniqueValues(newUniqueValues);
2287
2284
  }
@@ -2290,8 +2287,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2290
2287
  }
2291
2288
  setCurrentTable(table);
2292
2289
  }
2290
+ const cloudBody = {};
2291
+ const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
2292
+ if (!data2 || data2.status === 'error') {
2293
+ throw new Error('Error querying data from patterns');
2294
+ }
2293
2295
  if (data2.rows && data2.rows.length) {
2294
- const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
2296
+ const processedFields = data2.fields
2297
+ .map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem))
2298
+ .map((elem) => {
2299
+ const tableInfo = currentSchema.find((t) => t.name === table);
2300
+ const columnInfo = tableInfo?.columns.find((column) => column.name === elem.field);
2301
+ return columnInfo
2302
+ ? (0, columnProcessing_1.convertColumnInfoToColumnInternal)(columnInfo)
2303
+ : null;
2304
+ })
2305
+ .filter((elem) => elem);
2295
2306
  let possiblePivot = true;
2296
2307
  const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
2297
2308
  if (groupByPivot &&
@@ -2305,7 +2316,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2305
2316
  let errorMessageEnding = '';
2306
2317
  if (groupByPivot.columnField &&
2307
2318
  !possibleColumns.columnFields.includes(groupByPivot?.columnField || '')) {
2308
- if (currentUniqueValues[table][groupByPivot?.columnField || '']) {
2319
+ if (currentUniqueValues[table]?.[groupByPivot?.columnField || '']) {
2309
2320
  errorMessageEnding = `The column ${groupByPivot?.columnField} has more than 24 unique values to pivot on.`;
2310
2321
  }
2311
2322
  else {
@@ -2314,7 +2325,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2314
2325
  }
2315
2326
  else if (groupByPivot.rowField &&
2316
2327
  !possibleColumns.rowFields.includes(groupByPivot?.rowField || '')) {
2317
- if (currentUniqueValues[table][groupByPivot?.rowField || '']) {
2328
+ if (currentUniqueValues[table]?.[groupByPivot?.rowField || '']) {
2318
2329
  errorMessageEnding = `The column ${groupByPivot?.rowField} has more than 36 unique values to pivot on.`;
2319
2330
  }
2320
2331
  else {
@@ -2326,7 +2337,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2326
2337
  errorMessageEnding = `The column ${groupByPivot?.valueField} is not a proper value field.`;
2327
2338
  }
2328
2339
  setErrorMessage(`The requested pivot is not supported. ${errorMessageEnding}`);
2329
- errored = true;
2330
2340
  }
2331
2341
  if (groupByPivot && possiblePivot) {
2332
2342
  let curReport = report ? report : undefined;
@@ -2403,7 +2413,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2403
2413
  setActiveQuery('');
2404
2414
  }
2405
2415
  if (data2.errorMessage) {
2406
- setErrorMessage(`Error: ${data2.errorMessage}`);
2416
+ setErrorMessage(`Error: Couldn't process your request, please re-word your prompt.`);
2407
2417
  }
2408
2418
  }
2409
2419
  catch (e) {
@@ -2423,7 +2433,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2423
2433
  setSelectedColumns((selectedColumns) => selectedColumns.filter((column) => !column.endsWith(name)));
2424
2434
  const columns = baseAst.columns.filter((col) => {
2425
2435
  if (col.expr.type === 'column_ref') {
2426
- return col.expr.column !== name;
2436
+ return (col.expr.column !== name &&
2437
+ (!col.expr.column.expr || col.expr.column.expr.value !== name));
2427
2438
  }
2428
2439
  else if (col.as) {
2429
2440
  return col.as !== name;
@@ -2438,14 +2449,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2438
2449
  setBaseAst(newAst);
2439
2450
  fetchSqlQuery(newAst);
2440
2451
  };
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
2452
  const DraggableItem = ({ id, label, onDelete }) => {
2450
2453
  const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
2451
2454
  const style = {
@@ -2472,7 +2475,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2472
2475
  setOrderedColumnNames(newOrder);
2473
2476
  const orderedSelectedColumns = [];
2474
2477
  for (const value of newOrder) {
2475
- const [_, column] = value.split('.');
2478
+ const column = value.split('.')[1];
2476
2479
  if (selectedColumns.includes(value)) {
2477
2480
  orderedSelectedColumns.push(column);
2478
2481
  }
@@ -2496,12 +2499,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2496
2499
  fetchSqlQuery(newAst, undefined, false);
2497
2500
  }
2498
2501
  }
2499
- const columnNamesInAst = baseAst?.columns.map((col) => {
2500
- if (col.expr.type === 'column_ref') {
2501
- return col.expr.column;
2502
+ const columnNamesInAst = baseAst?.columns
2503
+ .map((col) => {
2504
+ if (col.expr.type === 'column_ref' && col.expr.column) {
2505
+ if (typeof col.expr.column === 'string') {
2506
+ return col.expr.column;
2507
+ }
2508
+ else {
2509
+ return col.expr.column.expr.value;
2510
+ }
2502
2511
  }
2503
2512
  else if (col.as) {
2504
- return col.as;
2513
+ if (typeof col.as === 'string') {
2514
+ return col.as;
2515
+ }
2516
+ else {
2517
+ return col.as.expr?.value;
2518
+ }
2505
2519
  }
2506
2520
  else if (col.expr && col.expr.type === 'aggr_func') {
2507
2521
  if (col.expr.args) {
@@ -2510,22 +2524,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2510
2524
  return col.expr.name;
2511
2525
  }
2512
2526
  return col.expr.value;
2513
- }) ?? [];
2527
+ })
2528
+ .filter(
2529
+ // remove duplicate entries
2530
+ (value, index, self) => value && self.indexOf(value) === index) ?? [];
2514
2531
  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
2532
  display: 'flex',
2516
2533
  flexDirection: 'column',
2517
2534
  gap: 8,
2518
2535
  }, 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
2536
  }
2520
- if (loading || initalChartLoad) {
2537
+ if (loading || initialChartLoad) {
2521
2538
  return ((0, jsx_runtime_1.jsxs)("div", { style: {
2522
2539
  display: 'flex',
2523
2540
  flexDirection: 'row',
2524
2541
  height: '100%',
2525
2542
  ...containerStyle,
2526
2543
  }, 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
2544
  if (!openPopover) {
2530
2545
  setOpenPopover('AddColumnModal');
2531
2546
  }
@@ -2546,12 +2561,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2546
2561
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2547
2562
  setBaseAst(ast);
2548
2563
  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: {
2564
+ }, 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
2565
  display: 'flex',
2551
2566
  flexDirection: 'column',
2552
2567
  gap: 8,
2553
2568
  marginBottom: 12,
2554
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2569
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2555
2570
  display: 'flex',
2556
2571
  flexDirection: 'column',
2557
2572
  alignItems: 'flex-start',
@@ -2563,7 +2578,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2563
2578
  }
2564
2579
  if (!openPopover) {
2565
2580
  const value = orderedColumnNames[0];
2566
- const [_table, column] = value.split('.');
2581
+ const column = value.split('.')[1];
2567
2582
  const columnType = getColumnTypeByName(column);
2568
2583
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2569
2584
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2592,27 +2607,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2592
2607
  setActiveEditItem(null);
2593
2608
  }, 300);
2594
2609
  }
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 &&
2610
+ }, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
2611
+ s.displayName === currentTable) ?? schema[0], fieldValuesMap: uniqueValues[(0, ast_1.getTableNames)(baseAst).length === 1
2612
+ ? (0, ast_1.getTableNames)(baseAst)[0]
2613
+ : initialTableName], onSubmitFilter: (filter) => {
2614
+ setOpenPopover(null);
2615
+ setIsPending(false);
2616
+ const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
2617
+ handleInsertion(item, 'AND', false);
2618
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
2616
2619
  false && ( // temp removed the AddConditionPopover
2617
2620
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2618
2621
  if (!openPopover) {
@@ -2651,14 +2654,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2651
2654
  setActivePath(null);
2652
2655
  setOpenPopover(null);
2653
2656
  }
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: () => {
2657
+ } }) })] }))] })] }), (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
2658
  setPivot(null);
2656
2659
  setPivotData(null);
2657
2660
  const formattedRows = formatRows(rows, columns, false);
2658
2661
  setFormattedRows(formattedRows);
2659
2662
  },
2660
2663
  // TODOs
2661
- selectPivot: (pivot) => {
2664
+ selectPivot: () => {
2662
2665
  return;
2663
2666
  }, 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
2667
  setPivotRowField(value);
@@ -2675,7 +2678,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2675
2678
  }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
2676
2679
  type: pivot.sortDirection,
2677
2680
  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: () => {
2681
+ }, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2679
2682
  setPivot({ ...pivot, sort: false });
2680
2683
  setBaseAst((0, util_1.deepCopy)(baseAst));
2681
2684
  if (!pivot) {
@@ -2724,7 +2727,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2724
2727
  if (!pivot) {
2725
2728
  fetchSqlQuery(newAst);
2726
2729
  }
2727
- }, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2730
+ }, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
2728
2731
  const newAst = { ...baseAst };
2729
2732
  newAst.orderby.splice(id, 1);
2730
2733
  setBaseAst((0, util_1.deepCopy)(newAst));
@@ -2747,7 +2750,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2747
2750
  setActivePath(null);
2748
2751
  setOpenPopover(null);
2749
2752
  }
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: {
2753
+ }, 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
2754
  display: 'flex',
2752
2755
  flexDirection: 'column',
2753
2756
  gap: 8,
@@ -2802,7 +2805,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2802
2805
  ? askAIInputWidth
2803
2806
  : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
2804
2807
  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: {
2808
+ 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
2809
  display: 'flex',
2807
2810
  flexDirection: 'row',
2808
2811
  gap: '12px',
@@ -2817,8 +2820,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2817
2820
  boxSizing: 'border-box',
2818
2821
  ...containerStyle,
2819
2822
  }, 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
2823
  if (!orderedColumnNames) {
2823
2824
  return;
2824
2825
  }
@@ -2842,12 +2843,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2842
2843
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
2843
2844
  setBaseAst(ast);
2844
2845
  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: {
2846
+ }, 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
2847
  display: 'flex',
2847
2848
  flexDirection: 'column',
2848
2849
  gap: 8,
2849
2850
  marginBottom: 12,
2850
- }, children: renderSentence(formData, formData, '', true) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2851
+ }, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
2851
2852
  display: 'flex',
2852
2853
  flexDirection: 'column',
2853
2854
  alignItems: 'flex-start',
@@ -2859,7 +2860,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2859
2860
  }
2860
2861
  if (!openPopover) {
2861
2862
  const value = orderedColumnNames[0];
2862
- const [_table, column] = value.split('.');
2863
+ const column = value.split('.')[1];
2863
2864
  const columnType = getColumnTypeByName(column);
2864
2865
  if ((0, ast_1.isNumericColumnType)(columnType)) {
2865
2866
  const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
@@ -2889,27 +2890,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2889
2890
  setActiveEditItem(null);
2890
2891
  }, 300);
2891
2892
  }
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 &&
2893
+ }, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
2894
+ s.displayName === currentTable) ?? schema[0], fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
2895
+ setOpenPopover(null);
2896
+ setIsPending(false);
2897
+ const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
2898
+ handleInsertion(item, 'AND', false);
2899
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
2913
2900
  false && ( // temp removed the AddConditionPopover
2914
2901
  (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
2915
2902
  if (!openPopover) {
@@ -2949,7 +2936,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
2949
2936
  setOpenPopover(null);
2950
2937
  clearCheckboxes();
2951
2938
  }
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: () => {
2939
+ } }) })] }))] })] }), (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
2940
  setPivot(null);
2954
2941
  setPivotData(null);
2955
2942
  const formattedRows = formatRows(rows, columns, false);
@@ -3008,7 +2995,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3008
2995
  `.${pivot.rowField}`,
3009
2996
  `.${pivot.valueField || 'count'}`,
3010
2997
  ]
3011
- : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
2998
+ : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
3012
2999
  if (pivot) {
3013
3000
  const tempPivot = { ...pivot, sort: false };
3014
3001
  let dateBucket = undefined;
@@ -3063,7 +3050,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3063
3050
  flexDirection: 'column',
3064
3051
  gap: 8,
3065
3052
  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: () => {
3053
+ }, 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
3054
  if (pivot) {
3068
3055
  setPivot({ ...pivot, sort: false });
3069
3056
  return;
@@ -3173,7 +3160,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3173
3160
  setOpenPopover(null);
3174
3161
  setBaseAst((0, util_1.deepCopy)(newAst));
3175
3162
  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: {
3163
+ } }) }) })] }), (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
3164
  display: 'flex',
3178
3165
  flexDirection: 'column',
3179
3166
  gap: 8,
@@ -3246,7 +3233,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3246
3233
  ? 'Ask a follow-up question...'
3247
3234
  : '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
3235
  (loading && errorMessage.length === 0) ||
3249
- initalChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3236
+ initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
3250
3237
  ? pivotData?.columns || emptyPivotColumns()
3251
3238
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
3252
3239
  return {
@@ -3264,9 +3251,10 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3264
3251
  overflow: 'hidden',
3265
3252
  width: '100%',
3266
3253
  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: () => {
3254
+ alignItems: 'center',
3255
+ }, 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
3256
  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
3257
+ }, 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
3258
  ? {
3271
3259
  ...report,
3272
3260
  ...tempReport,
@@ -3280,6 +3268,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
3280
3268
  queryString: activeQuery,
3281
3269
  rows: rows,
3282
3270
  }
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 }))] }));
3271
+ : 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
3272
  }
3285
3273
  exports.default = ReportBuilder;