@quillsql/react 2.13.7 → 2.13.9

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 (368) hide show
  1. package/dist/cjs/Chart.d.ts +5 -5
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +19 -8
  4. package/dist/cjs/ChartBuilder.d.ts +1 -1
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +58 -93
  7. package/dist/cjs/ChartEditor.js +1 -1
  8. package/dist/cjs/Context.d.ts +9 -8
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +119 -34
  11. package/dist/cjs/Dashboard.d.ts +20 -8
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +68 -58
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -2
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +64 -52
  20. package/dist/cjs/ReportBuilder.d.ts +2 -1
  21. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  22. package/dist/cjs/ReportBuilder.js +339 -339
  23. package/dist/cjs/SQLEditor.d.ts +1 -1
  24. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  25. package/dist/cjs/SQLEditor.js +30 -18
  26. package/dist/cjs/components/Banner/index.d.ts +0 -1
  27. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  28. package/dist/cjs/components/Banner/index.js +1 -1
  29. package/dist/cjs/components/Chart/BarChart.d.ts +0 -1
  30. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/BarChart.js +1 -1
  32. package/dist/cjs/components/Chart/BarList.js +1 -2
  33. package/dist/cjs/components/Chart/ChartError.js +2 -3
  34. package/dist/cjs/components/Chart/ChartSkeleton.js +1 -1
  35. package/dist/cjs/components/Chart/ChartTooltip.js +1 -1
  36. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts +0 -1
  37. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  38. package/dist/cjs/components/Chart/ChartTooltipFrame.js +1 -1
  39. package/dist/cjs/components/Chart/ChartTooltipGroup.js +1 -1
  40. package/dist/cjs/components/Chart/ChartTooltipRow.js +1 -1
  41. package/dist/cjs/components/Chart/LineChart.d.ts +0 -1
  42. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  43. package/dist/cjs/components/Chart/LineChart.js +1 -1
  44. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  45. package/dist/cjs/components/Chart/PieChart.js +18 -9
  46. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +0 -1
  47. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  48. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  49. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +10 -2
  50. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  51. package/dist/cjs/components/Dashboard/DashboardFilter.js +9 -23
  52. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +0 -1
  53. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  54. package/dist/cjs/components/Dashboard/DashboardSection.js +1 -1
  55. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
  56. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  57. package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +1 -1
  58. package/dist/cjs/components/Dashboard/DashboardTemplate.js +1 -1
  59. package/dist/cjs/components/Dashboard/DataLoader.d.ts +9 -7
  60. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  61. package/dist/cjs/components/Dashboard/DataLoader.js +104 -61
  62. package/dist/cjs/components/Dashboard/MetricComponent.d.ts +0 -1
  63. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  64. package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
  65. package/dist/cjs/components/Dashboard/TableComponent.d.ts +0 -1
  66. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  67. package/dist/cjs/components/Dashboard/TableComponent.js +1 -1
  68. package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts +0 -1
  69. package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
  70. package/dist/cjs/components/Dashboard/TemplateChartComponent.js +1 -1
  71. package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
  72. package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
  73. package/dist/cjs/components/Dashboard/TemplateMetricComponent.js +1 -1
  74. package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts +0 -1
  75. package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
  76. package/dist/cjs/components/Dashboard/TemplateTableComponent.js +1 -1
  77. package/dist/cjs/components/Dashboard/util.js +2 -3
  78. package/dist/cjs/components/QuillCard.js +1 -2
  79. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  80. package/dist/cjs/components/QuillMultiSelect.js +21 -20
  81. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  82. package/dist/cjs/components/QuillMultiSelectWithCombo.js +172 -70
  83. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  84. package/dist/cjs/components/QuillSelect.js +9 -8
  85. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  86. package/dist/cjs/components/QuillSelectWithCombo.js +26 -12
  87. package/dist/cjs/components/QuillTable.d.ts +5 -1
  88. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  89. package/dist/cjs/components/QuillTable.js +5 -3
  90. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +1 -1
  91. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
  92. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  93. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +5 -6
  94. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  95. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +3 -4
  96. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  97. package/dist/cjs/components/ReportBuilder/FilterModal.js +45 -39
  98. package/dist/cjs/components/ReportBuilder/FilterStack.js +1 -1
  99. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  100. package/dist/cjs/components/ReportBuilder/ast.js +2 -2
  101. package/dist/cjs/components/ReportBuilder/convert.js +11 -12
  102. package/dist/cjs/components/ReportBuilder/postgres.js +4 -4
  103. package/dist/cjs/components/ReportBuilder/ui.d.ts +3 -3
  104. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  105. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  106. package/dist/cjs/components/ReportBuilder/util.js +21 -23
  107. package/dist/cjs/components/UiComponents.d.ts +14 -12
  108. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  109. package/dist/cjs/components/UiComponents.js +41 -17
  110. package/dist/cjs/components/selectUtils.js +3 -3
  111. package/dist/cjs/contexts/BaseColorContext.d.ts +0 -1
  112. package/dist/cjs/contexts/BaseColorContext.d.ts.map +1 -1
  113. package/dist/cjs/contexts/RootStylesContext.d.ts +0 -1
  114. package/dist/cjs/contexts/RootStylesContext.d.ts.map +1 -1
  115. package/dist/cjs/contexts/SelectedValueContext.d.ts +0 -1
  116. package/dist/cjs/contexts/SelectedValueContext.d.ts.map +1 -1
  117. package/dist/cjs/hooks/useAskQuill.d.ts +2 -2
  118. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  119. package/dist/cjs/hooks/useAskQuill.js +11 -11
  120. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  121. package/dist/cjs/hooks/useDashboard.d.ts +8 -7
  122. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  123. package/dist/cjs/hooks/useDashboard.js +47 -31
  124. package/dist/cjs/hooks/useExport.d.ts +3 -4
  125. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  126. package/dist/cjs/hooks/useExport.js +6 -2
  127. package/dist/cjs/hooks/useInternalState.d.ts +1 -2
  128. package/dist/cjs/hooks/useInternalState.d.ts.map +1 -1
  129. package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -1
  130. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  131. package/dist/cjs/hooks/useQuill.d.ts +0 -14
  132. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  133. package/dist/cjs/hooks/useQuill.js +17 -55
  134. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  135. package/dist/cjs/index.d.ts +2 -1
  136. package/dist/cjs/index.d.ts.map +1 -1
  137. package/dist/cjs/index.js +7 -2
  138. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +4 -1
  139. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  140. package/dist/cjs/internals/ReportBuilder/PivotForm.js +32 -7
  141. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +17 -13
  142. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  143. package/dist/cjs/internals/ReportBuilder/PivotModal.js +368 -162
  144. package/dist/cjs/lib/utils.d.ts +0 -1
  145. package/dist/cjs/lib/utils.d.ts.map +1 -1
  146. package/dist/cjs/lib/utils.js +2 -2
  147. package/dist/cjs/models/Filter.d.ts +49 -30
  148. package/dist/cjs/models/Filter.d.ts.map +1 -1
  149. package/dist/cjs/models/Filter.js +125 -52
  150. package/dist/cjs/models/Pivot.d.ts +3 -1
  151. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  152. package/dist/cjs/models/Report.d.ts +2 -2
  153. package/dist/cjs/models/Report.d.ts.map +1 -1
  154. package/dist/cjs/utils/astFilterProcessing.d.ts +4 -4
  155. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  156. package/dist/cjs/utils/astFilterProcessing.js +3839 -3427
  157. package/dist/cjs/utils/astProcessing.d.ts +12 -3
  158. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  159. package/dist/cjs/utils/astProcessing.js +76 -11
  160. package/dist/cjs/utils/client.js +2 -2
  161. package/dist/cjs/utils/color.js +5 -6
  162. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  163. package/dist/cjs/utils/columnProcessing.js +7 -7
  164. package/dist/cjs/utils/crypto.js +1 -2
  165. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  166. package/dist/cjs/utils/dashboard.js +34 -30
  167. package/dist/cjs/utils/dataFetcher.js +3 -4
  168. package/dist/cjs/utils/dataProcessing.js +2 -2
  169. package/dist/cjs/utils/dates.d.ts +4 -1
  170. package/dist/cjs/utils/dates.d.ts.map +1 -1
  171. package/dist/cjs/utils/dates.js +12 -10
  172. package/dist/cjs/utils/errorProcessing.js +1 -2
  173. package/dist/cjs/utils/filterProcessing.d.ts +3 -3
  174. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  175. package/dist/cjs/utils/filterProcessing.js +30 -27
  176. package/dist/cjs/utils/getDomain.js +1 -1
  177. package/dist/cjs/utils/logging.js +1 -2
  178. package/dist/cjs/utils/merge.d.ts +1 -1
  179. package/dist/cjs/utils/merge.d.ts.map +1 -1
  180. package/dist/cjs/utils/merge.js +15 -11
  181. package/dist/cjs/utils/monacoConfig.js +3 -3
  182. package/dist/cjs/utils/paginationProcessing.js +3 -3
  183. package/dist/cjs/utils/pivotConstructor.d.ts +4 -4
  184. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  185. package/dist/cjs/utils/pivotConstructor.js +104 -127
  186. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  187. package/dist/cjs/utils/pivotProcessing.js +14 -16
  188. package/dist/cjs/utils/queryConstructor.d.ts +2 -2
  189. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  190. package/dist/cjs/utils/queryConstructor.js +344 -78
  191. package/dist/cjs/utils/report.d.ts.map +1 -1
  192. package/dist/cjs/utils/report.js +22 -12
  193. package/dist/cjs/utils/schema.d.ts.map +1 -1
  194. package/dist/cjs/utils/styles.js +1 -2
  195. package/dist/cjs/utils/tableProcessing.d.ts +12 -12
  196. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  197. package/dist/cjs/utils/tableProcessing.js +69 -26
  198. package/dist/cjs/utils/textProcessing.js +5 -6
  199. package/dist/cjs/utils/validation.d.ts.map +1 -1
  200. package/dist/cjs/utils/validation.js +3 -1
  201. package/dist/cjs/utils/valueFormatter.d.ts +1 -0
  202. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  203. package/dist/cjs/utils/valueFormatter.js +2 -0
  204. package/dist/cjs/utils/width.d.ts.map +1 -1
  205. package/dist/esm/Chart.d.ts +5 -5
  206. package/dist/esm/Chart.d.ts.map +1 -1
  207. package/dist/esm/Chart.js +15 -4
  208. package/dist/esm/ChartBuilder.d.ts +1 -1
  209. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  210. package/dist/esm/ChartBuilder.js +52 -87
  211. package/dist/esm/Context.d.ts +9 -8
  212. package/dist/esm/Context.d.ts.map +1 -1
  213. package/dist/esm/Context.js +119 -34
  214. package/dist/esm/Dashboard.d.ts +20 -8
  215. package/dist/esm/Dashboard.d.ts.map +1 -1
  216. package/dist/esm/Dashboard.js +68 -58
  217. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
  218. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  219. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
  220. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  221. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +64 -52
  222. package/dist/esm/ReportBuilder.d.ts +2 -1
  223. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  224. package/dist/esm/ReportBuilder.js +343 -343
  225. package/dist/esm/SQLEditor.d.ts +1 -1
  226. package/dist/esm/SQLEditor.d.ts.map +1 -1
  227. package/dist/esm/SQLEditor.js +29 -17
  228. package/dist/esm/components/Banner/index.d.ts +0 -1
  229. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  230. package/dist/esm/components/Chart/BarChart.d.ts +0 -1
  231. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  232. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +0 -1
  233. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  234. package/dist/esm/components/Chart/LineChart.d.ts +0 -1
  235. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  236. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  237. package/dist/esm/components/Chart/PieChart.js +18 -9
  238. package/dist/esm/components/Dashboard/ChartComponent.d.ts +0 -1
  239. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  240. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +10 -2
  241. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  242. package/dist/esm/components/Dashboard/DashboardFilter.js +8 -21
  243. package/dist/esm/components/Dashboard/DashboardSection.d.ts +0 -1
  244. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  245. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
  246. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  247. package/dist/esm/components/Dashboard/DataLoader.d.ts +9 -7
  248. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  249. package/dist/esm/components/Dashboard/DataLoader.js +102 -62
  250. package/dist/esm/components/Dashboard/MetricComponent.d.ts +0 -1
  251. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  252. package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
  253. package/dist/esm/components/Dashboard/TableComponent.d.ts +0 -1
  254. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  255. package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts +0 -1
  256. package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
  257. package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
  258. package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
  259. package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts +0 -1
  260. package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
  261. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  262. package/dist/esm/components/QuillMultiSelect.js +19 -18
  263. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  264. package/dist/esm/components/QuillMultiSelectWithCombo.js +171 -69
  265. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  266. package/dist/esm/components/QuillSelect.js +8 -6
  267. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  268. package/dist/esm/components/QuillSelectWithCombo.js +25 -10
  269. package/dist/esm/components/QuillTable.d.ts +5 -1
  270. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  271. package/dist/esm/components/QuillTable.js +4 -2
  272. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
  273. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  274. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +5 -6
  275. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  276. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +3 -4
  277. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  278. package/dist/esm/components/ReportBuilder/FilterModal.js +46 -40
  279. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  280. package/dist/esm/components/ReportBuilder/ui.d.ts +3 -3
  281. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  282. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  283. package/dist/esm/components/ReportBuilder/util.js +0 -2
  284. package/dist/esm/components/UiComponents.d.ts +14 -12
  285. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  286. package/dist/esm/components/UiComponents.js +37 -14
  287. package/dist/esm/contexts/BaseColorContext.d.ts +0 -1
  288. package/dist/esm/contexts/BaseColorContext.d.ts.map +1 -1
  289. package/dist/esm/contexts/RootStylesContext.d.ts +0 -1
  290. package/dist/esm/contexts/RootStylesContext.d.ts.map +1 -1
  291. package/dist/esm/contexts/SelectedValueContext.d.ts +0 -1
  292. package/dist/esm/contexts/SelectedValueContext.d.ts.map +1 -1
  293. package/dist/esm/hooks/useAskQuill.d.ts +2 -2
  294. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  295. package/dist/esm/hooks/useAskQuill.js +12 -12
  296. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  297. package/dist/esm/hooks/useDashboard.d.ts +8 -7
  298. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  299. package/dist/esm/hooks/useDashboard.js +48 -32
  300. package/dist/esm/hooks/useExport.d.ts +3 -4
  301. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  302. package/dist/esm/hooks/useExport.js +6 -2
  303. package/dist/esm/hooks/useInternalState.d.ts +1 -2
  304. package/dist/esm/hooks/useInternalState.d.ts.map +1 -1
  305. package/dist/esm/hooks/useOnClickOutside.d.ts +3 -1
  306. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  307. package/dist/esm/hooks/useQuill.d.ts +0 -14
  308. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  309. package/dist/esm/hooks/useQuill.js +16 -53
  310. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  311. package/dist/esm/index.d.ts +2 -1
  312. package/dist/esm/index.d.ts.map +1 -1
  313. package/dist/esm/index.js +2 -1
  314. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +4 -1
  315. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  316. package/dist/esm/internals/ReportBuilder/PivotForm.js +32 -7
  317. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +17 -13
  318. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  319. package/dist/esm/internals/ReportBuilder/PivotModal.js +364 -158
  320. package/dist/esm/lib/utils.d.ts +0 -1
  321. package/dist/esm/lib/utils.d.ts.map +1 -1
  322. package/dist/esm/models/Filter.d.ts +49 -30
  323. package/dist/esm/models/Filter.d.ts.map +1 -1
  324. package/dist/esm/models/Filter.js +123 -50
  325. package/dist/esm/models/Pivot.d.ts +3 -1
  326. package/dist/esm/models/Pivot.d.ts.map +1 -1
  327. package/dist/esm/models/Report.d.ts +2 -2
  328. package/dist/esm/models/Report.d.ts.map +1 -1
  329. package/dist/esm/utils/astFilterProcessing.d.ts +4 -4
  330. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  331. package/dist/esm/utils/astFilterProcessing.js +3835 -3423
  332. package/dist/esm/utils/astProcessing.d.ts +12 -3
  333. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  334. package/dist/esm/utils/astProcessing.js +64 -0
  335. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  336. package/dist/esm/utils/columnProcessing.js +1 -1
  337. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  338. package/dist/esm/utils/dashboard.js +31 -26
  339. package/dist/esm/utils/dates.d.ts +4 -1
  340. package/dist/esm/utils/dates.d.ts.map +1 -1
  341. package/dist/esm/utils/dates.js +6 -3
  342. package/dist/esm/utils/filterProcessing.d.ts +3 -3
  343. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  344. package/dist/esm/utils/filterProcessing.js +22 -19
  345. package/dist/esm/utils/merge.d.ts +1 -1
  346. package/dist/esm/utils/merge.d.ts.map +1 -1
  347. package/dist/esm/utils/merge.js +14 -9
  348. package/dist/esm/utils/pivotConstructor.d.ts +4 -4
  349. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  350. package/dist/esm/utils/pivotConstructor.js +103 -125
  351. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  352. package/dist/esm/utils/pivotProcessing.js +9 -11
  353. package/dist/esm/utils/queryConstructor.d.ts +2 -2
  354. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  355. package/dist/esm/utils/queryConstructor.js +338 -71
  356. package/dist/esm/utils/report.d.ts.map +1 -1
  357. package/dist/esm/utils/report.js +18 -8
  358. package/dist/esm/utils/schema.d.ts.map +1 -1
  359. package/dist/esm/utils/tableProcessing.d.ts +12 -12
  360. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  361. package/dist/esm/utils/tableProcessing.js +69 -26
  362. package/dist/esm/utils/validation.d.ts.map +1 -1
  363. package/dist/esm/utils/validation.js +3 -1
  364. package/dist/esm/utils/valueFormatter.d.ts +1 -0
  365. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  366. package/dist/esm/utils/valueFormatter.js +2 -1
  367. package/dist/esm/utils/width.d.ts.map +1 -1
  368. package/package.json +4 -4
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = ReportBuilder;
6
7
  const jsx_runtime_1 = require("react/jsx-runtime");
7
8
  const react_1 = require("react");
8
9
  const UiComponents_1 = require("./components/UiComponents");
@@ -72,7 +73,7 @@ const constants_2 = require("./utils/constants");
72
73
  * ### Report Builder API
73
74
  * @see https://docs.quillsql.com/components/report-builder
74
75
  */
75
- function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, onDiscardChanges = undefined, onSaveChanges = undefined, onCloseChartBuilder = undefined, 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,
76
+ function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, onDiscardChanges = undefined, onSaveChanges = undefined, onCloseChartBuilder = undefined, 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.QuillTableReportBuilderComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs,
76
77
  // CheckboxComponent = MemoizedCheckbox,
77
78
  SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, ChartBuilderModalComponent = UiComponents_1.MemoizedModal, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, hideCopySQL = true, isChartBuilderHorizontalView = true, onClickChartElement, }) {
78
79
  const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
@@ -100,10 +101,11 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
100
101
  const [openPopover, setOpenPopover] = (0, react_1.useState)(null);
101
102
  const [loading, setLoading] = (0, react_1.useState)(!!initialTableName);
102
103
  const [isChartBuilderOpen, setIsChartBuilderOpen] = (0, react_1.useState)(false);
103
- const [isAddLoading, setIsAddLoading] = (0, react_1.useState)(false);
104
104
  const [isCopying, setIsCopying] = (0, react_1.useState)(false);
105
105
  const [dataDisplayed, setDataDisplayed] = (0, react_1.useState)(false);
106
106
  const [rows, setRows] = (0, react_1.useState)([]);
107
+ const [filteredRows, setFilteredRows] = (0, react_1.useState)([]);
108
+ const [chartBuilderInFilteredPreview, setChartBuilderInFilteredPreview] = (0, react_1.useState)(true);
107
109
  const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
108
110
  const [columns, setColumns] = (0, react_1.useState)([]);
109
111
  const [tempReport, setTempReport] = (0, react_1.useState)(report_1.EMPTY_INTERNAL_REPORT);
@@ -116,8 +118,8 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
116
118
  const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
117
119
  const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
118
120
  const [isEditingPivot, setIsEditingPivot] = (0, react_1.useState)(false);
119
- const [initialChartLoad, setInitialChartLoad] = (0, react_1.useState)(false);
120
121
  const [askedAQuestion, setAskedAQuestion] = (0, react_1.useState)(false);
122
+ const [askAILoading, setAskAILoading] = (0, react_1.useState)(false);
121
123
  const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
122
124
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!reportId);
123
125
  const [currentTable, setCurrentTable] = (0, react_1.useState)(initialTableName || '');
@@ -130,9 +132,14 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
130
132
  const [pivotRowField, setPivotRowField] = (0, react_1.useState)(undefined);
131
133
  const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(undefined);
132
134
  const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
135
+ const [pivotValueField2, setPivotValueField2] = (0, react_1.useState)(undefined);
133
136
  const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
137
+ const [pivotHint, setPivotHint] = (0, react_1.useState)('');
138
+ /* eslint-disable-next-line */
139
+ const [pivotError, setPivotError] = (0, react_1.useState)(undefined);
134
140
  const [dateRanges, setDateRanges] = (0, react_1.useState)(null);
135
141
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
142
+ const [currentOrganizationId, setCurrentOrganizationId] = (0, react_1.useState)(client.organizationId);
136
143
  const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
137
144
  const [globalUniqueValues, setGlobalUniqueValues] = (0, react_1.useState)({});
138
145
  const [globalUniqueValuesIsLoading, setGlobalUniqueValuesIsLoading] = (0, react_1.useState)(false);
@@ -144,6 +151,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
144
151
  rowsPerPage: 20,
145
152
  rowsPerRequest: 1000,
146
153
  };
154
+ const [unresolvedReportMessage, setUnresolvedReportMessage] = (0, react_1.useState)('');
147
155
  (0, react_1.useEffect)(() => {
148
156
  if (!client) {
149
157
  return;
@@ -217,6 +225,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
217
225
  }
218
226
  let distinctValuesForQuery = {};
219
227
  setPivot(newPivot);
228
+ setPivotHint('');
220
229
  if (newPivot.columnField) {
221
230
  distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
222
231
  {
@@ -226,11 +235,25 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
226
235
  },
227
236
  ], activeQuery, [], client, schemaData.customFields ?? []);
228
237
  }
229
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(newPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
230
- setPivotData(pivotedData || []);
231
- const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
232
- setFormattedRows(formattedRows);
233
- setTableLoading(false);
238
+ try {
239
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)({
240
+ pivot: newPivot,
241
+ dateBucket,
242
+ report: tempReport,
243
+ client,
244
+ uniqueValues: distinctValuesForQuery,
245
+ });
246
+ setPivotData(pivotedData || []);
247
+ const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
248
+ setFormattedRows(formattedRows);
249
+ }
250
+ catch (e) {
251
+ if (e instanceof Error)
252
+ setPivotError(e.message);
253
+ }
254
+ finally {
255
+ setTableLoading(false);
256
+ }
234
257
  };
235
258
  const enforceOrderOnColumns = (columnNames) => {
236
259
  if (pivot) {
@@ -262,11 +285,13 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
262
285
  setLoading(false);
263
286
  setDataDisplayed(false);
264
287
  setRows([]);
288
+ setFilteredRows([]);
265
289
  setColumns([]);
266
290
  setErrorMessage('');
267
291
  setFormattedRows([]);
268
292
  // setUniqueValues({});
269
293
  setPivot(null);
294
+ setPivotHint('');
270
295
  setPivotData(null);
271
296
  setRecommendedPivots([]);
272
297
  }, 0);
@@ -286,7 +311,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
286
311
  uniqueValuesDependenciesRef.current = { client, columns, currentTable };
287
312
  }
288
313
  }, [client, columns, currentTable, memoizedFetchGlobalUniqueValues]);
289
- const formatRows = (rows, columns, pivot, aggregationType) => {
314
+ const formatRows = (rows, columns, pivot, aggregationType, dateBucket) => {
290
315
  const copiedRows = (0, util_1.deepCopy)(rows);
291
316
  if (pivot) {
292
317
  const formattedRows = copiedRows.map((row) => {
@@ -302,7 +327,9 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
302
327
  }
303
328
  else {
304
329
  format = valueFormatter_1.DATE_FORMAT_TYPES.includes(column.format)
305
- ? 'MMM_yyyy'
330
+ ? dateBucket
331
+ ? (0, dates_1.getDateFormatFromBucket)(dateBucket)
332
+ : 'MMM_yyyy'
306
333
  : 'string';
307
334
  }
308
335
  const formattedValue = (0, valueFormatter_1.quillFormat)({
@@ -374,6 +401,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
374
401
  });
375
402
  const data = await response.json();
376
403
  setActiveQuery(data.query);
404
+ fetchFilteredRows(data.query);
377
405
  if (fetchData) {
378
406
  fetchReportFromASTHelper(ast, formData);
379
407
  }
@@ -394,7 +422,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
394
422
  const dateColumnNames = dateColumns.map((column) => {
395
423
  return column.field;
396
424
  });
397
- const dateRanges = await (0, tableProcessing_1.getDateRangeByColumns)(dateColumns, `Select ${dateColumnNames.join(', ')} from ${tableName}`, client, schemaData.customFields ?? []);
425
+ const dateRanges = await (0, tableProcessing_1.getQueryDateRangeByColumns)(dateColumns, `Select ${dateColumnNames.join(', ')} from ${tableName}`, client, schemaData.customFields ?? []);
398
426
  return dateRanges;
399
427
  };
400
428
  // It's just like getColumnsInPivot but we expand the columnField
@@ -502,10 +530,13 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
502
530
  setActiveQuery(query);
503
531
  }
504
532
  catch (err) {
505
- setInitialChartLoad(false);
533
+ console.error(err);
534
+ setErrorMessage('Error when loading chart');
506
535
  }
507
536
  };
508
- loadChart();
537
+ if (reportId) {
538
+ loadChart();
539
+ }
509
540
  }, [dashboard[reportId || '']]);
510
541
  (0, react_1.useEffect)(() => {
511
542
  onSchemaChange();
@@ -737,7 +768,8 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
737
768
  setPreviousPage(0);
738
769
  };
739
770
  const onFilterPreviewChange = (preview) => {
740
- handleRunQuery(currentProcessing, true, preview);
771
+ setChartBuilderInFilteredPreview(preview);
772
+ // handleRunQuery(currentProcessing, true, preview);
741
773
  };
742
774
  const fetchRowCount = async (processing, includeFilters) => {
743
775
  if (!client || !activeQuery) {
@@ -749,6 +781,11 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
749
781
  : undefined, false, true);
750
782
  if (tableInfo.rowCount) {
751
783
  setNumberOfRows(tableInfo.rowCount);
784
+ // @ts-ignore
785
+ setTempReport((tempReport) => ({
786
+ ...tempReport,
787
+ rowCount: tableInfo.rowCount,
788
+ }));
752
789
  }
753
790
  setRowCountIsLoading(false);
754
791
  };
@@ -757,33 +794,52 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
757
794
  const tableData = await (0, tableProcessing_1.fetchTableByAST)({ ...ast, where }, client, { page: REPORT_BUILDER_PAGINATION }, undefined, false, true);
758
795
  if (tableData.rowCount) {
759
796
  setNumberOfRows(tableData.rowCount);
797
+ // @ts-ignore
798
+ setTempReport((tempReport) => ({
799
+ ...tempReport,
800
+ rowCount: tableData.rowCount,
801
+ }));
760
802
  }
761
803
  setRowCountIsLoading(false);
762
804
  };
805
+ const fetchFilteredRows = async (query) => {
806
+ const filteredTableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, currentProcessing, schemaData.customFields, specificDashboardFilters, tempReport.dateField, true);
807
+ if (filteredTableInfo.error) {
808
+ throw new Error(filteredTableInfo.error);
809
+ }
810
+ setFilteredRows([...filteredRows, ...filteredTableInfo.rows]);
811
+ };
763
812
  const handleRunQuery = async (processing, resetRows = false, includeFilters = false) => {
764
813
  try {
765
814
  setErrorMessage('');
766
815
  setTableLoading(true);
767
- const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(activeQuery, client, processing, schemaData.customFields, includeFilters ? specificDashboardFilters : undefined, includeFilters ? tempReport.dateField : undefined, true);
816
+ const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(activeQuery, client, processing, schemaData.customFields, undefined, undefined, true);
817
+ const filteredTableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(activeQuery, client, processing, schemaData.customFields, specificDashboardFilters, tempReport.dateField, true);
768
818
  if (tableInfo.error) {
769
819
  throw new Error(tableInfo.error);
770
820
  }
821
+ else if (filteredTableInfo.error) {
822
+ throw new Error(filteredTableInfo.error);
823
+ }
771
824
  else if (tableInfo.rows.length === 0) {
772
825
  throw new Error('No data found');
773
826
  }
774
827
  fetchRowCount(processing, includeFilters);
775
828
  setCurrentProcessing(processing);
776
829
  let tempRows = [...rows, ...tableInfo.rows];
830
+ let tempFilteredRows = [...filteredRows, ...filteredTableInfo.rows];
777
831
  if (resetRows) {
778
832
  tempRows = tableInfo.rows;
833
+ tempFilteredRows = filteredTableInfo.rows;
779
834
  }
780
835
  setRows(tempRows);
836
+ setFilteredRows(tempFilteredRows);
781
837
  setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
782
- setTempReport({
838
+ setTempReport((tempReport) => ({
783
839
  ...tempReport,
784
840
  rows: tempRows,
785
841
  rowCount: tableInfo.rowCount ?? tempReport.rowCount,
786
- });
842
+ }));
787
843
  setColumns(tableInfo.columns);
788
844
  setTableLoading(false);
789
845
  }
@@ -791,6 +847,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
791
847
  setTableLoading(false);
792
848
  setErrorMessage('Failed to run SQL query: ' + e.message);
793
849
  setRows([]);
850
+ setFilteredRows([]);
794
851
  setColumns([]);
795
852
  return;
796
853
  }
@@ -819,12 +876,13 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
819
876
  as: null,
820
877
  });
821
878
  const updateUniqueValue = (uniqueStrings, table) => {
822
- const uniqueStringsObj = {};
879
+ const uniqueStringsObj = uniqueValues ?? {};
823
880
  uniqueStringsObj[table] = uniqueStrings ?? {};
824
881
  setUniqueValues(uniqueStringsObj);
825
882
  updateFieldValuesMap(uniqueStringsObj, table);
883
+ return uniqueStringsObj;
826
884
  };
827
- const fetchReportFromASTHelper = async (baseAst, newFormData, curPivot, curSchema, previousReport) => {
885
+ const fetchReportFromASTHelper = async (baseAst, newFormData, curPivot, curSchema, previousReport, keepPivotHint = false) => {
828
886
  const curFormData = newFormData !== undefined ? newFormData : formData;
829
887
  let reportBuilderInfo = undefined;
830
888
  try {
@@ -848,6 +906,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
848
906
  setErrorMessage('Failed to fetch');
849
907
  return;
850
908
  }
909
+ setTempReport(reportBuilderInfo.report);
851
910
  fetchRowCountFromAST(baseAst, curFormData);
852
911
  const reportTable = reportBuilderInfo.table;
853
912
  const reportBuilderInfoColumns = reportBuilderInfo.columns.map((column) => {
@@ -855,39 +914,105 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
855
914
  });
856
915
  const prevFormData = formData;
857
916
  const prevTable = currentTable;
917
+ const prevOrganization = currentOrganizationId;
858
918
  setRows(reportBuilderInfo.rows);
859
- setColumns(reportBuilderInfo.columns);
860
- // setNumberOfRows(reportBuilderInfo.rowCount);
919
+ setFilteredRows(reportBuilderInfo.rows);
920
+ if (!(client.databaseType.toLowerCase() === 'bigquery') ||
921
+ (reportBuilderInfo.rows && reportBuilderInfo.rows.length > 0)) {
922
+ setColumns(reportBuilderInfo.columns);
923
+ setSelectedColumns(reportBuilderInfoColumns);
924
+ }
925
+ setNumberOfRows(reportBuilderInfo.rowCount);
861
926
  setPivot(reportBuilderInfo.pivot);
927
+ if (!keepPivotHint) {
928
+ setPivotHint('');
929
+ }
862
930
  setPivotData(reportBuilderInfo.pivotData);
863
931
  setDateRanges(reportBuilderInfo.dateRanges);
864
932
  setFormattedRows(reportBuilderInfo.formattedRows);
865
- setTempReport(reportBuilderInfo.report);
866
- setSelectedColumns(reportBuilderInfoColumns);
867
- setLoading(false);
868
933
  setDataDisplayed(true);
869
934
  setCurrentTable(reportBuilderInfo.table);
935
+ setCurrentOrganizationId(client.organizationId);
870
936
  setFormData(curFormData);
871
937
  if (reportBuilderInfo.pivot) {
872
938
  setPivotRowField(reportBuilderInfo.pivot.rowField);
873
939
  setPivotAggregation(reportBuilderInfo.pivot.aggregationType);
874
940
  setPivotColumnField(reportBuilderInfo.pivot.columnField);
875
941
  setPivotValueField(reportBuilderInfo.pivot.valueField);
942
+ setPivotValueField2(reportBuilderInfo.pivot.valueField2);
943
+ }
944
+ else {
945
+ setLoading(false);
876
946
  }
877
947
  setReportInfo(reportBuilderInfo.report);
878
948
  // fetch unique values after everything else since it is the most expensive
879
949
  if (prevTable !== reportBuilderInfo.table ||
880
- !(0, fast_deep_equal_1.default)(prevFormData, curFormData)) {
950
+ !(0, fast_deep_equal_1.default)(prevFormData, curFormData) ||
951
+ prevOrganization !== client.organizationId) {
881
952
  try {
882
953
  setUniqueValuesIsLoading(true);
954
+ if (reportBuilderInfo.pivot) {
955
+ setUnresolvedReportMessage('Processing pivot selection options...');
956
+ }
883
957
  const schema = curSchema ?? schemaData.schema;
884
958
  const tableInfo = schema.find((tableInfo) => tableInfo.name === reportBuilderInfo?.table);
885
959
  if (!reportBuilderInfo.table || !tableInfo) {
886
960
  throw new Error('No table found;');
887
961
  }
888
- const uniqueStrings = await (0, tableProcessing_1.getUniqueStringValues)(tableInfo.columns, reportBuilderInfo.table, client, schemaData.customFields, undefined, true, reportBuilderInfo.query);
889
- updateUniqueValue(uniqueStrings, reportBuilderInfo.table);
962
+ let query = reportBuilderInfo.query;
963
+ if (!query) {
964
+ const queryResult = await fetchSqlQuery({
965
+ ...(0, astProcessing_1.createBasicSelectASTFromColumns)(tableInfo.columns, reportBuilderInfo.table),
966
+ where: curFormData,
967
+ }, curFormData, false);
968
+ if (queryResult.error) {
969
+ console.error(queryResult.error);
970
+ }
971
+ else {
972
+ query = queryResult.query;
973
+ }
974
+ }
975
+ const uniqueStrings = await (0, tableProcessing_1.getUniqueStringValues)(tableInfo.columns, reportBuilderInfo.table, client, schemaData.customFields, undefined, true, query);
976
+ const newUnique = updateUniqueValue(uniqueStrings, reportBuilderInfo.table);
977
+ let pivotChanged = false;
978
+ let newPivot;
979
+ if (reportBuilderInfo.pivot &&
980
+ !isValidPivotForReport(reportBuilderInfo.pivot, newUnique)) {
981
+ // try flipping row and column field
982
+ newPivot = {
983
+ ...reportBuilderInfo.pivot,
984
+ rowField: reportBuilderInfo.pivot.columnField,
985
+ columnField: reportBuilderInfo.pivot.rowField,
986
+ };
987
+ if (isValidPivotForReport(newPivot, newUnique)) {
988
+ setPivot(newPivot);
989
+ pivotChanged = true;
990
+ setPivotHint('Flipped pivot row and column fields to maintain validity');
991
+ }
992
+ else if (isValidPivotForReport({ ...reportBuilderInfo.pivot, columnField: undefined }, newUnique)) {
993
+ // try removing column field
994
+ newPivot = {
995
+ ...reportBuilderInfo.pivot,
996
+ columnField: undefined,
997
+ };
998
+ setPivot(newPivot);
999
+ pivotChanged = true;
1000
+ setPivotHint('Removed column field to maintain validity');
1001
+ }
1002
+ else {
1003
+ setUnresolvedReportMessage('Not a valid pivot');
1004
+ }
1005
+ }
1006
+ else {
1007
+ setUnresolvedReportMessage('');
1008
+ }
890
1009
  setUniqueValuesIsLoading(false);
1010
+ if (pivotChanged) {
1011
+ fetchReportFromASTHelper(baseAst, curFormData, newPivot, curSchema, previousReport, true);
1012
+ }
1013
+ else {
1014
+ setLoading(false);
1015
+ }
891
1016
  }
892
1017
  catch (err) {
893
1018
  if (err instanceof Error) {
@@ -910,6 +1035,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
910
1035
  }
911
1036
  try {
912
1037
  setLoading(true);
1038
+ setAskAILoading(true);
913
1039
  astInfo = await (0, astProcessing_1.fetchAndProcessASTFromPrompt)(prompt, schemaData.schema, client, pivot, activeQuery);
914
1040
  if (astInfo.error) {
915
1041
  throw new Error(astInfo.error);
@@ -918,10 +1044,16 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
918
1044
  catch (err) {
919
1045
  if (err instanceof Error) {
920
1046
  setErrorMessage(err.message);
921
- setLoading(false);
922
1047
  }
1048
+ setLoading(false);
1049
+ setAskAILoading(false);
923
1050
  return;
924
1051
  }
1052
+ // check if pivot works with ReportBuilder constraints
1053
+ if (astInfo.pivot && !isValidPivotForReport(astInfo.pivot)) {
1054
+ astInfo.pivot = null;
1055
+ astInfo.ast.groupby = null;
1056
+ }
925
1057
  // parse the whereAst first
926
1058
  const filterTree = (0, astFilterProcessing_1.astToFilterTree)(astInfo.whereAST, client.databaseType?.toLowerCase());
927
1059
  const cleanAst = filterTree
@@ -931,8 +1063,34 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
931
1063
  astInfo.ast.where = cleanAst;
932
1064
  setBaseAst(astInfo.ast);
933
1065
  fetchSqlQuery(astInfo.ast, cleanAst, false);
1066
+ setAskAILoading(false);
934
1067
  await fetchReportFromASTHelper(astInfo.ast, cleanAst, astInfo.pivot);
935
1068
  };
1069
+ const isValidPivotForReport = (pivot, uniqueValuesForPivot) => {
1070
+ if (!pivotProcessing_1.isValidPivot) {
1071
+ return false;
1072
+ }
1073
+ const uniqueValuesToCheck = uniqueValuesForPivot ?? uniqueValues;
1074
+ // check that pivot rows and columns
1075
+ const possibleOptions = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, uniqueValuesToCheck[currentTable] ?? {});
1076
+ if (pivot.rowField &&
1077
+ pivot.columnField &&
1078
+ pivot.rowField === pivot.columnField) {
1079
+ return false;
1080
+ }
1081
+ if (pivot.rowField && !possibleOptions.rowFields.includes(pivot.rowField)) {
1082
+ return false;
1083
+ }
1084
+ if (pivot.columnField &&
1085
+ !possibleOptions.columnFields.includes(pivot.columnField)) {
1086
+ return false;
1087
+ }
1088
+ if (pivot.valueField &&
1089
+ !possibleOptions.valueFields.includes(pivot.valueField)) {
1090
+ return false;
1091
+ }
1092
+ return true;
1093
+ };
936
1094
  const handleDeleteColumn = (name) => {
937
1095
  if (!baseAst || !baseAst.columns.length || selectedColumns.length === 1) {
938
1096
  clearAllState();
@@ -965,7 +1123,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
965
1123
  };
966
1124
  return ((0, jsx_runtime_1.jsx)("div", { style: { ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(DraggableColumnComponent, { label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(label), onDelete: onDelete, DragHandle: (props) => ((0, jsx_runtime_1.jsx)("div", { style: {
967
1125
  cursor: 'grab',
968
- }, ...attributes, ...listeners, children: (0, jsx_runtime_1.jsx)(props.dragIcon, {}) })), deleteDisabled: loading }) }));
1126
+ }, ...attributes, ...listeners, children: (0, jsx_runtime_1.jsx)(props.dragIcon, {}) })), deleteDisabled: loading || tableLoading }) }));
969
1127
  };
970
1128
  function DraggableColumns() {
971
1129
  const sensors = (0, core_1.useSensors)((0, core_1.useSensor)(core_1.PointerSensor), (0, core_1.useSensor)(core_1.KeyboardSensor, {
@@ -1042,240 +1200,6 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1042
1200
  gap: 8,
1043
1201
  }, children: [columnNamesInAst.map((name) => ((0, jsx_runtime_1.jsx)(DraggableItem, { id: name, label: name, onDelete: () => !loading && handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && (0, jsx_runtime_1.jsx)("div", { style: { height: 6 } })] }) }) }));
1044
1202
  }
1045
- // TODO: Refactor this part
1046
- if (loading || initialChartLoad) {
1047
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
1048
- display: 'flex',
1049
- flexDirection: 'row',
1050
- height: '100%',
1051
- ...containerStyle,
1052
- }, 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: () => {
1053
- if (!openPopover) {
1054
- setOpenPopover('AddColumnModal');
1055
- }
1056
- }, label: 'Select columns', disabled: true }), (0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
1057
- if (!isOpen) {
1058
- // delay onClose callback so onClick no-ops
1059
- setTimeout(() => {
1060
- setActiveEditItem(null);
1061
- setActivePath(null);
1062
- setOpenPopover(null);
1063
- }, 100);
1064
- }
1065
- }, title: "Select columns", children: (0, jsx_runtime_1.jsx)(AddColumnModal_1.default, { onSave: () => {
1066
- setActiveEditItem(null);
1067
- setActivePath(null);
1068
- setOpenPopover(null);
1069
- }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
1070
- setBaseAst(ast);
1071
- fetchSqlQuery(ast);
1072
- }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInputComponent: 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: {
1073
- display: 'flex',
1074
- flexDirection: 'column',
1075
- gap: 8,
1076
- marginBottom: 12,
1077
- }, children: (0, jsx_runtime_1.jsx)(FilterStack_1.default, { client: client, filterStack: filterStack, filterTree: filterTree, defaultAST: constants_1.defaultAST, baseAst: baseAst, setBaseAst: setBaseAst, setFormData: setFormData, fetchSqlQuery: fetchSqlQuery, schemaData: schemaData, defaultColumn: constants_1.defaultColumn, defaultTable: constants_1.defaultTable, currentTable: currentTable, initialTableName: initialTableName, globalUniqueValues: globalUniqueValues, globalUniqueValuesIsLoading: globalUniqueValuesIsLoading, columns: columns, removingFilter: removingFilter, setRemovingFilter: setRemovingFilter, TabsComponent: TabsComponent, FilterPopoverComponent: FilterPopoverComponent, FilterModal: FilterModal_1.default, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, actionsEnabled: false }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
1078
- display: 'flex',
1079
- flexDirection: 'column',
1080
- alignItems: 'flex-start',
1081
- }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1082
- if (!selectedColumns ||
1083
- selectedColumns.length === 0 ||
1084
- loading) {
1085
- return;
1086
- }
1087
- if (!openPopover) {
1088
- const value = orderedColumnNames[0];
1089
- const column = value.split('.')[1];
1090
- const columnType = getColumnTypeByName(column);
1091
- if ((0, ast_1.isNumericColumnType)(columnType)) {
1092
- const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
1093
- newSubtree.left.column = column;
1094
- setActiveEditItem(newSubtree);
1095
- }
1096
- else {
1097
- const newSubtree = (0, util_1.deepCopy)(constants_1.defaultEntry);
1098
- newSubtree.left.args.value[0].column = column;
1099
- setActiveEditItem(newSubtree);
1100
- }
1101
- setOpenPopover('AddFilterPopover');
1102
- setActivePath('');
1103
- }
1104
- }, label: 'Add filter', disabled: true }), (0, jsx_runtime_1.jsx)("div", { style: {
1105
- position: 'relative',
1106
- ...(openPopover === 'AddFilterPopover' && { top: 12 }),
1107
- }, children: (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: openPopover === 'AddFilterPopover', setIsOpen: (isOpen) => {
1108
- if (!isOpen) {
1109
- setActivePath(null);
1110
- setOpenPopover(null);
1111
- setTimeout(() => {
1112
- clearCheckboxes();
1113
- setActiveEditItem(null);
1114
- }, 300);
1115
- }
1116
- }, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schemaData.schema.find((s) => s.name === currentTable ||
1117
- s.displayName === currentTable) ?? schemaData.schema[0], fieldValuesMap: uniqueValues[(0, ast_1.getTableNames)(baseAst).length === 1
1118
- ? (0, ast_1.getTableNames)(baseAst)[0]
1119
- : initialTableName], fieldValuesMapIsLoading: uniqueValuesIsLoading, onSubmitFilter: (filter) => {
1120
- setOpenPopover(null);
1121
- const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
1122
- handleInsertion(item, 'AND', false);
1123
- }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) })] })] }), (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: () => {
1124
- setPivot(null);
1125
- setPivotData(null);
1126
- const formattedRows = formatRows(rows, columns, false);
1127
- setFormattedRows(formattedRows);
1128
- },
1129
- // TODOs
1130
- selectPivot: () => {
1131
- return;
1132
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: true, pivotRecommendationsEnabled: pivotRecommendationsEnabledState, report: tempReport ?? reportInfo }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, setPivotRowField: (value) => {
1133
- setPivotRowField(value);
1134
- }, setPivotColumnField: setPivotColumnField, setPivotValueField: setPivotValueField, setPivotAggregation: setPivotAggregation, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, onDelete: () => {
1135
- setPivot(null);
1136
- setPivotData([]);
1137
- const formattedRows = formatRows(rows, columns, false);
1138
- setFormattedRows(formattedRows);
1139
- }, isLoading: tableLoading, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
1140
- display: 'flex',
1141
- flexDirection: 'column',
1142
- gap: 8,
1143
- marginBottom: 12,
1144
- }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
1145
- type: pivot.sortDirection,
1146
- expr: { type: 'column_ref', column: pivot.sortField },
1147
- }, columns: selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
1148
- setPivot({ ...pivot, sort: false });
1149
- setBaseAst((0, util_1.deepCopy)(baseAst));
1150
- if (!pivot) {
1151
- fetchSqlQuery(baseAst);
1152
- }
1153
- }, onSave: (column, direction) => {
1154
- const sortFieldType = column === (pivot.valueField || 'count')
1155
- ? 'number'
1156
- : pivot.rowFieldType;
1157
- setPivot({
1158
- ...pivot,
1159
- sort: true,
1160
- sortDirection: direction,
1161
- sortField: column,
1162
- sortFieldType: sortFieldType,
1163
- });
1164
- setOpenPopover(null);
1165
- setBaseAst((0, util_1.deepCopy)(baseAst));
1166
- if (!pivot) {
1167
- fetchSqlQuery(baseAst);
1168
- }
1169
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }, `sort-sentence-pivot`) })), baseAst && baseAst.orderby && ((0, jsx_runtime_1.jsx)("div", { style: {
1170
- display: 'flex',
1171
- flexDirection: 'column',
1172
- gap: 8,
1173
- marginBottom: 12,
1174
- }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, onSave: (column, direction) => {
1175
- setActiveEditItem(null);
1176
- setOpenPopover(null);
1177
- if (column === '')
1178
- return;
1179
- const newAst = { ...baseAst };
1180
- newAst.orderby[id] = {
1181
- expr: {
1182
- type: 'column_ref',
1183
- table: null,
1184
- column: column,
1185
- },
1186
- type: direction,
1187
- };
1188
- // look through the columns
1189
- setActivePath(null);
1190
- setOpenPopover(null);
1191
- setBaseAst((0, util_1.deepCopy)(newAst));
1192
- if (!pivot) {
1193
- fetchSqlQuery(newAst);
1194
- }
1195
- }, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
1196
- const newAst = { ...baseAst };
1197
- newAst.orderby.splice(id, 1);
1198
- setBaseAst((0, util_1.deepCopy)(newAst));
1199
- if (!pivot) {
1200
- fetchSqlQuery(newAst);
1201
- }
1202
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: true }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1203
- if (!selectedColumns ||
1204
- selectedColumns.length === 0 ||
1205
- loading) {
1206
- return;
1207
- }
1208
- if (!openPopover) {
1209
- setOpenPopover('AddSortPopover');
1210
- }
1211
- }, label: "Add sort", disabled: true }), (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: openPopover === 'AddSortPopover', setIsOpen: (isOpen) => {
1212
- if (!isOpen) {
1213
- setActiveEditItem(null);
1214
- setActivePath(null);
1215
- setOpenPopover(null);
1216
- }
1217
- }, 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: {
1218
- display: 'flex',
1219
- flexDirection: 'column',
1220
- gap: 8,
1221
- marginBottom: 12,
1222
- }, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.LimitSentence, { limit: baseAst.limit, setOpenPopover: setOpenPopover, LimitPopover: LimitPopoverComponent, EditPopover: AddLimitPopover_1.AddLimitPopover, handleDelete: () => {
1223
- const newAst = { ...baseAst };
1224
- newAst.limit = null;
1225
- setBaseAst((0, util_1.deepCopy)(newAst));
1226
- fetchSqlQuery(newAst);
1227
- }, onSave: (limit) => {
1228
- const newAst = { ...baseAst };
1229
- newAst.limit = {
1230
- seperator: '',
1231
- value: [
1232
- {
1233
- type: 'number',
1234
- value: limit,
1235
- },
1236
- ],
1237
- };
1238
- setOpenPopover(null);
1239
- setBaseAst((0, util_1.deepCopy)(newAst));
1240
- fetchSqlQuery(newAst);
1241
- }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: true }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1242
- if (!selectedColumns ||
1243
- selectedColumns.length === 0 ||
1244
- loading) {
1245
- return;
1246
- }
1247
- if (!openPopover) {
1248
- setOpenPopover('AddLimitPopover');
1249
- }
1250
- }, label: 'Add limit', disabled: true }), (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: (isOpen) => {
1251
- if (!isOpen) {
1252
- setActiveEditItem(null);
1253
- setActivePath(null);
1254
- setOpenPopover(null);
1255
- }
1256
- }, popoverTitle: "Add limit", popoverChildren: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.AddLimitPopover, { TextInputComponent: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: () => { } }) })] }))] })] }), (0, jsx_runtime_1.jsxs)(ContainerComponent, { children: [isAIEnabled && ((0, jsx_runtime_1.jsx)("form", { ref: askAILoadingContainerRef, onSubmit: (event) => {
1257
- event.preventDefault();
1258
- }, style: {
1259
- display: 'flex',
1260
- flexDirection: 'row',
1261
- gap: 12,
1262
- visibility: askAIInputWidth === -1 && askAILoadingContainerWidth === -1
1263
- ? 'hidden'
1264
- : 'visible',
1265
- }, children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: "ask_ai_loading_bar", placeholder: askedAQuestion
1266
- ? 'Ask a follow-up question...'
1267
- : 'Ask a question...', width: askAIInputWidth !== -1
1268
- ? askAIInputWidth
1269
- : askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
1270
- initialLoad ||
1271
- initialChartLoad) &&
1272
- !reportId && ((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: {
1273
- display: 'flex',
1274
- flexDirection: 'row',
1275
- gap: '12px',
1276
- marginTop: 'auto',
1277
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } }), onDiscardChanges && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => copySQLToClipboard(), label: isCopying ? 'Copied' : 'Copy SQL' })), (0, jsx_runtime_1.jsx)(ButtonComponent, { label: reportInfo ? 'Save changes' : 'Add to dashboard', onClick: () => { } })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] }));
1278
- }
1279
1203
  return ((0, jsx_runtime_1.jsxs)("div", { style: { backgroundColor: theme?.backgroundColor, ...containerStyle }, className: className, children: [(!isChartBuilderHorizontalView ||
1280
1204
  (isChartBuilderHorizontalView && !isChartBuilderOpen)) && ((0, jsx_runtime_1.jsxs)("div", { ref: parentRef, style: {
1281
1205
  display: 'flex',
@@ -1291,7 +1215,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1291
1215
  if (!openPopover) {
1292
1216
  setOpenPopover('AddColumnModal');
1293
1217
  }
1294
- }, label: "Select columns" }), (0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
1218
+ }, label: "Select columns", disabled: tableLoading || loading }), (0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
1295
1219
  if (!isOpen) {
1296
1220
  // delay onClose callback so onClick no-ops
1297
1221
  setTimeout(() => {
@@ -1305,18 +1229,32 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1305
1229
  setActivePath(null);
1306
1230
  setOpenPopover(null);
1307
1231
  }, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
1308
- setBaseAst(ast);
1309
- fetchSqlQuery(ast);
1232
+ if (baseAst &&
1233
+ ast?.from?.[0]?.table !== baseAst?.from?.[0]?.table) {
1234
+ // table changed, past presets no longer valid
1235
+ setFormData(null);
1236
+ setRecommendedPivots([]);
1237
+ setCreatedPivots([]);
1238
+ ast.where = null;
1239
+ ast.orderby = null;
1240
+ ast.limit = null;
1241
+ setBaseAst(ast);
1242
+ fetchSqlQuery(ast, null);
1243
+ }
1244
+ else {
1245
+ setBaseAst(ast);
1246
+ fetchSqlQuery(ast);
1247
+ }
1310
1248
  }, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, schemaLoading: schemaData.isSchemaLoading, setPivot: setPivot, TextInputComponent: 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: {
1311
1249
  display: 'flex',
1312
1250
  flexDirection: 'column',
1313
1251
  gap: 8,
1314
1252
  marginBottom: 12,
1315
- }, children: (0, jsx_runtime_1.jsx)(FilterStack_1.default, { client: client, filterStack: filterStack, filterTree: filterTree, defaultAST: constants_1.defaultAST, baseAst: baseAst, setBaseAst: setBaseAst, setFormData: setFormData, fetchSqlQuery: fetchSqlQuery, schemaData: schemaData, defaultColumn: constants_1.defaultColumn, defaultTable: constants_1.defaultTable, currentTable: currentTable, initialTableName: initialTableName, globalUniqueValues: globalUniqueValues, globalUniqueValuesIsLoading: globalUniqueValuesIsLoading, columns: columns, removingFilter: removingFilter, setRemovingFilter: setRemovingFilter, TabsComponent: TabsComponent, FilterPopoverComponent: FilterPopoverComponent, FilterModal: FilterModal_1.default, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, actionsEnabled: true }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
1253
+ }, children: (0, jsx_runtime_1.jsx)(FilterStack_1.default, { client: client, filterStack: filterStack, filterTree: filterTree, defaultAST: constants_1.defaultAST, baseAst: baseAst, setBaseAst: setBaseAst, setFormData: setFormData, fetchSqlQuery: fetchSqlQuery, schemaData: schemaData, defaultColumn: constants_1.defaultColumn, defaultTable: constants_1.defaultTable, currentTable: currentTable, initialTableName: initialTableName, globalUniqueValues: globalUniqueValues, globalUniqueValuesIsLoading: globalUniqueValuesIsLoading, columns: columns, removingFilter: removingFilter, setRemovingFilter: setRemovingFilter, TabsComponent: TabsComponent, FilterPopoverComponent: FilterPopoverComponent, FilterModal: FilterModal_1.default, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, actionsEnabled: !tableLoading && !loading }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
1316
1254
  display: 'flex',
1317
1255
  flexDirection: 'column',
1318
1256
  alignItems: 'flex-start',
1319
- }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed, onClick: () => {
1257
+ }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed || loading || tableLoading, onClick: () => {
1320
1258
  if (!selectedColumns ||
1321
1259
  selectedColumns.length === 0 ||
1322
1260
  loading) {
@@ -1357,8 +1295,9 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1357
1295
  setOpenPopover(null);
1358
1296
  const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
1359
1297
  handleInsertion(item, 'AND', false);
1360
- }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) })] })] }), (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: () => {
1298
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) })] })] }), (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, pivotValueField2: pivotValueField2, setPivotValueField: setPivotValueField, setPivotValueField2: setPivotValueField2, 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: () => {
1361
1299
  setPivot(null);
1300
+ setPivotHint('');
1362
1301
  setPivotData(null);
1363
1302
  const formattedRows = formatRows(rows, columns, false);
1364
1303
  setFormattedRows(formattedRows);
@@ -1377,17 +1316,32 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1377
1316
  dateBucket = (0, dates_1.getDateBucketFromRange)(dateRange);
1378
1317
  }
1379
1318
  setPivot(selectedPivot);
1380
- if (!pivotTable) {
1381
- setTableLoading(true);
1382
- pivotTable = await (0, PivotModal_1.generatePivotTable)(selectedPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues);
1319
+ setPivotHint('');
1320
+ try {
1321
+ if (!pivotTable) {
1322
+ setTableLoading(true);
1323
+ pivotTable = await (0, PivotModal_1.generatePivotTable)({
1324
+ pivot: selectedPivot,
1325
+ dateBucket,
1326
+ report: tempReport,
1327
+ client,
1328
+ uniqueValues,
1329
+ });
1330
+ }
1331
+ setPivotData(pivotTable || []);
1332
+ const formattedRows = formatRows(pivotTable.rows, columns, true, selectedPivot.aggregationType, dateBucket);
1333
+ setFormattedRows(formattedRows);
1334
+ setErrorMessage('');
1335
+ setPivotError(undefined);
1383
1336
  }
1384
- // no other calls made
1385
- setPivotData(pivotTable || []);
1386
- const formattedRows = formatRows(pivotTable.rows, columns, true, selectedPivot.aggregationType);
1387
- setFormattedRows(formattedRows);
1388
- setErrorMessage('');
1389
- setTableLoading(false); // only set to false if this was the final call
1390
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, disabled: !baseAst || !dataDisplayed || tableLoading, pivotRecommendationsEnabled: pivotRecommendationsEnabledState, report: tempReport }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, setPivotRowField: (value) => {
1337
+ catch (e) {
1338
+ if (e instanceof Error)
1339
+ setPivotError(e.message);
1340
+ }
1341
+ finally {
1342
+ setTableLoading(false);
1343
+ }
1344
+ }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, disabled: !baseAst || !dataDisplayed || tableLoading || loading, pivotRecommendationsEnabled: pivotRecommendationsEnabledState, report: tempReport }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, setPivotRowField: (value) => {
1391
1345
  setPivotRowField(value);
1392
1346
  updatePivot(value, 'rowField');
1393
1347
  }, setPivotColumnField: (value) => {
@@ -1396,15 +1350,19 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1396
1350
  }, setPivotValueField: (value) => {
1397
1351
  setPivotValueField(value);
1398
1352
  updatePivot(value, 'valueField');
1353
+ }, setPivotValueField2: (value) => {
1354
+ setPivotValueField2(value);
1355
+ updatePivot(value, 'valueField2');
1399
1356
  }, setPivotAggregation: (value) => {
1400
1357
  setPivotAggregation(value);
1401
1358
  updatePivot(value, 'aggregationType');
1402
1359
  }, onDelete: () => {
1403
1360
  setPivot(null);
1361
+ setPivotHint('');
1404
1362
  setPivotData([]);
1405
1363
  const formattedRows = formatRows(rows, columns, false);
1406
1364
  setFormattedRows(formattedRows);
1407
- }, isLoading: tableLoading, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
1365
+ }, isLoading: tableLoading || loading, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotValueField2: pivotValueField2, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer, pivotHint: pivotHint }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
1408
1366
  display: 'flex',
1409
1367
  flexDirection: 'column',
1410
1368
  gap: 8,
@@ -1420,56 +1378,87 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1420
1378
  `.${pivot.valueField || 'count'}`,
1421
1379
  ]
1422
1380
  : selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
1423
- if (pivot) {
1424
- const tempPivot = { ...pivot, sort: false };
1425
- let dateBucket = undefined;
1426
- const tempDateRange = dateRanges &&
1427
- pivot.rowField &&
1428
- dateRanges[pivot.rowField];
1429
- if (tempDateRange) {
1430
- dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1431
- }
1432
- setPivot(tempPivot);
1433
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
1381
+ if (!pivot) {
1382
+ setBaseAst((0, util_1.deepCopy)(baseAst));
1383
+ fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1384
+ return;
1385
+ }
1386
+ const tempPivot = { ...pivot, sort: false };
1387
+ let dateBucket = undefined;
1388
+ const tempDateRange = dateRanges &&
1389
+ pivot.rowField &&
1390
+ dateRanges[pivot.rowField];
1391
+ if (tempDateRange) {
1392
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1393
+ }
1394
+ setPivot(tempPivot);
1395
+ setPivotHint('');
1396
+ try {
1397
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)({
1398
+ pivot: tempPivot,
1399
+ rowLimit: -1,
1400
+ dateBucket,
1401
+ report: tempReport,
1402
+ client,
1403
+ uniqueValues: uniqueValues[currentTable],
1404
+ });
1434
1405
  setPivotData(pivotedData || []);
1435
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
1406
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
1436
1407
  setFormattedRows(formattedRows);
1437
1408
  setErrorMessage('');
1438
- return;
1439
1409
  }
1440
- setBaseAst((0, util_1.deepCopy)(baseAst));
1441
- fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1410
+ catch (e) {
1411
+ if (e instanceof Error)
1412
+ setPivotError(e.message);
1413
+ }
1414
+ finally {
1415
+ setTableLoading(false);
1416
+ }
1442
1417
  }, onSave: async (column, direction) => {
1443
- if (pivot) {
1444
- const sortFieldType = column === (pivot.valueField || 'count')
1445
- ? 'number'
1446
- : pivot.rowFieldType;
1447
- const tempPivot = {
1448
- ...pivot,
1449
- sort: true,
1450
- sortDirection: direction,
1451
- sortField: column,
1452
- sortFieldType: sortFieldType,
1453
- };
1454
- setPivot(tempPivot);
1455
- let dateBucket = undefined;
1456
- const tempDateRange = dateRanges &&
1457
- pivot.rowField &&
1458
- dateRanges[pivot.rowField];
1459
- if (tempDateRange) {
1460
- dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1461
- }
1462
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
1418
+ if (!pivot) {
1419
+ setOpenPopover(null);
1420
+ setBaseAst((0, util_1.deepCopy)(baseAst));
1421
+ fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1422
+ return;
1423
+ }
1424
+ const sortFieldType = column === (pivot.valueField || 'count')
1425
+ ? 'number'
1426
+ : pivot.rowFieldType;
1427
+ const tempPivot = {
1428
+ ...pivot,
1429
+ sort: true,
1430
+ sortDirection: direction,
1431
+ sortField: column,
1432
+ sortFieldType: sortFieldType,
1433
+ };
1434
+ setPivot(tempPivot);
1435
+ setPivotHint('');
1436
+ let dateBucket = undefined;
1437
+ const tempDateRange = dateRanges &&
1438
+ pivot.rowField &&
1439
+ dateRanges[pivot.rowField];
1440
+ if (tempDateRange) {
1441
+ dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1442
+ }
1443
+ try {
1444
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)({
1445
+ pivot: tempPivot,
1446
+ rowLimit: -1,
1447
+ dateBucket,
1448
+ report: tempReport,
1449
+ client,
1450
+ uniqueValues: uniqueValues[currentTable],
1451
+ });
1463
1452
  setPivotData(pivotedData || []);
1464
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
1453
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
1465
1454
  setFormattedRows(formattedRows);
1466
1455
  setErrorMessage('');
1467
- return;
1468
1456
  }
1469
- setOpenPopover(null);
1470
- setBaseAst((0, util_1.deepCopy)(baseAst));
1471
- fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1472
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }, `sort-sentence-pivot`) })), baseAst && baseAst.orderby && ((0, jsx_runtime_1.jsx)("div", { style: {
1457
+ catch (e) {
1458
+ if (e instanceof Error)
1459
+ setPivotError(e.message);
1460
+ }
1461
+ }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }, `sort-sentence-pivot`) })), baseAst && baseAst.orderby && ((0, jsx_runtime_1.jsx)("div", { style: {
1473
1462
  display: 'flex',
1474
1463
  flexDirection: 'column',
1475
1464
  gap: 8,
@@ -1477,6 +1466,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1477
1466
  }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
1478
1467
  if (pivot) {
1479
1468
  setPivot({ ...pivot, sort: false });
1469
+ setPivotHint('');
1480
1470
  return;
1481
1471
  }
1482
1472
  const newAst = { ...baseAst };
@@ -1495,6 +1485,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1495
1485
  sortField: column,
1496
1486
  sortFieldType: sortFieldType,
1497
1487
  });
1488
+ setPivotHint('');
1498
1489
  return;
1499
1490
  }
1500
1491
  setActiveEditItem(null);
@@ -1515,7 +1506,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1515
1506
  setOpenPopover(null);
1516
1507
  setBaseAst((0, util_1.deepCopy)(newAst));
1517
1508
  fetchSqlQuery((0, util_1.deepCopy)(newAst));
1518
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed, onClick: () => {
1509
+ }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed || loading || tableLoading, onClick: () => {
1519
1510
  if (!selectedColumns || selectedColumns.length === 0) {
1520
1511
  return;
1521
1512
  }
@@ -1553,6 +1544,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1553
1544
  sortFieldType: sortFieldType,
1554
1545
  };
1555
1546
  setPivot(tempPivot);
1547
+ setPivotHint('');
1556
1548
  let dateBucket = undefined;
1557
1549
  const tempDateRange = dateRanges &&
1558
1550
  pivot.rowField &&
@@ -1560,11 +1552,23 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1560
1552
  if (tempDateRange) {
1561
1553
  dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1562
1554
  }
1563
- const pivotedData = await (0, PivotModal_1.generatePivotTable)(tempPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues[currentTable]);
1564
- setErrorMessage('');
1565
- setPivotData(pivotedData || []);
1566
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType);
1567
- setFormattedRows(formattedRows);
1555
+ try {
1556
+ const pivotedData = await (0, PivotModal_1.generatePivotTable)({
1557
+ pivot: tempPivot,
1558
+ dateBucket,
1559
+ report: tempReport,
1560
+ client,
1561
+ uniqueValues: uniqueValues[currentTable],
1562
+ });
1563
+ setErrorMessage('');
1564
+ setPivotData(pivotedData || []);
1565
+ const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
1566
+ setFormattedRows(formattedRows);
1567
+ }
1568
+ catch (e) {
1569
+ if (e instanceof Error)
1570
+ setPivotError(e.message);
1571
+ }
1568
1572
  setActivePath(null);
1569
1573
  setOpenPopover(null);
1570
1574
  setBaseAst((0, util_1.deepCopy)(baseAst));
@@ -1606,7 +1610,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1606
1610
  setOpenPopover(null);
1607
1611
  setBaseAst((0, util_1.deepCopy)(newAst));
1608
1612
  fetchSqlQuery((0, util_1.deepCopy)(newAst));
1609
- }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed, onClick: () => {
1613
+ }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed || loading || tableLoading, onClick: () => {
1610
1614
  if (!selectedColumns || selectedColumns.length === 0) {
1611
1615
  return;
1612
1616
  }
@@ -1654,10 +1658,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1654
1658
  ? 'Ask a follow-up question...'
1655
1659
  : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
1656
1660
  fetchAstFromPromptHelper();
1657
- }, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: !isAddLoading &&
1658
- (tableLoading ||
1659
- (loading && errorMessage.length === 0) ||
1660
- initialChartLoad), rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1661
+ }, isLoading: askAILoading && !baseAst, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: tableLoading || (loading && errorMessage.length === 0), rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1661
1662
  ? pivotData?.columns || emptyPivotColumns()
1662
1663
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
1663
1664
  return {
@@ -1681,13 +1682,13 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1681
1682
  alignItems: 'center',
1682
1683
  }, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1683
1684
  fetchAstFromPromptHelper();
1684
- }, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initialChartLoad && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [onDiscardChanges && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: async () => {
1685
- setIsAddLoading(true);
1686
- await handleRunQuery(currentProcessing, true);
1687
- setIsAddLoading(false);
1685
+ }, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [onDiscardChanges && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: async () => {
1688
1686
  onSaveChanges && onSaveChanges();
1689
1687
  setIsChartBuilderOpen(true);
1690
- }, disabled: !!errorMessage, label: reportId ? 'Save changes' : 'Add to dashboard', isLoading: isAddLoading })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: reportInfo
1688
+ }, disabled: !!errorMessage ||
1689
+ tableLoading ||
1690
+ loading ||
1691
+ unresolvedReportMessage, label: reportId ? 'Save changes' : 'Add to dashboard', tooltipText: unresolvedReportMessage })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: reportInfo
1691
1692
  ? {
1692
1693
  ...reportInfo,
1693
1694
  ...tempReport,
@@ -1705,6 +1706,5 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1705
1706
  : {
1706
1707
  ...tempReport,
1707
1708
  filtersApplied: specificDashboardFilters,
1708
- }, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, isAdmin: isAdminEnabled, title: reportId ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: reportId ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], initialUniqueValuesIsLoading: uniqueValuesIsLoading, pivotRecommendationsEnabled: pivotRecommendationsEnabledState, 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: !!reportId ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement, rowCount: numberOfRows, onPageChange: onPageChange, onSortChange: onSortChange, onFilterPreviewChange: onFilterPreviewChange, isLoading: tableLoading || isAddLoading, isEditingMode: true }))] }));
1709
+ }, rows: chartBuilderInFilteredPreview ? filteredRows : rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, isAdmin: isAdminEnabled, title: reportId ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: reportId ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], initialUniqueValuesIsLoading: uniqueValuesIsLoading, pivotRecommendationsEnabled: pivotRecommendationsEnabledState, 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: !!reportId ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement, rowCount: numberOfRows, onPageChange: onPageChange, onSortChange: onSortChange, onFilterPreviewChange: onFilterPreviewChange, isLoading: tableLoading, isEditingMode: true }))] }));
1709
1710
  }
1710
- exports.default = ReportBuilder;