@quillsql/react 2.12.52 → 2.13.0

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 (263) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +5 -3
  3. package/dist/cjs/ChartBuilder.d.ts +10 -3
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +62 -26
  6. package/dist/cjs/ChartEditor.d.ts +3 -1
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +74 -16
  9. package/dist/cjs/Context.d.ts +17 -6
  10. package/dist/cjs/Context.d.ts.map +1 -1
  11. package/dist/cjs/Context.js +138 -73
  12. package/dist/cjs/Dashboard.d.ts +8 -4
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +146 -367
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +20 -14
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -0
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -1
  20. package/dist/cjs/QuillProvider.js +1 -1
  21. package/dist/cjs/ReportBuilder.d.ts +8 -12
  22. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  23. package/dist/cjs/ReportBuilder.js +163 -83
  24. package/dist/cjs/SQLEditor.d.ts +8 -1
  25. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  26. package/dist/cjs/SQLEditor.js +81 -28
  27. package/dist/cjs/Table.d.ts.map +1 -1
  28. package/dist/cjs/Table.js +6 -3
  29. package/dist/cjs/assets/AdjustmentsIcon.d.ts +5 -0
  30. package/dist/cjs/assets/AdjustmentsIcon.d.ts.map +1 -0
  31. package/dist/cjs/assets/AdjustmentsIcon.js +5 -0
  32. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  33. package/dist/cjs/components/Chart/ChartError.js +2 -2
  34. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +4 -3
  35. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  36. package/dist/cjs/components/Dashboard/DashboardFilter.js +12 -12
  37. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts +2 -2
  38. package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  39. package/dist/cjs/components/Dashboard/DataLoader.d.ts +11 -5
  40. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  41. package/dist/cjs/components/Dashboard/DataLoader.js +91 -32
  42. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
  43. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  44. package/dist/cjs/components/Dashboard/TableComponent.js +10 -3
  45. package/dist/cjs/components/Dashboard/util.d.ts +2 -2
  46. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  47. package/dist/cjs/components/Dashboard/util.js +2 -2
  48. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  49. package/dist/cjs/components/QuillMultiSelect.js +18 -13
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  51. package/dist/cjs/components/QuillMultiSelectWithCombo.js +67 -45
  52. package/dist/cjs/components/QuillSelect.d.ts +1 -1
  53. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  54. package/dist/cjs/components/QuillSelect.js +29 -7
  55. package/dist/cjs/components/QuillSelectWithCombo.d.ts +1 -1
  56. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  57. package/dist/cjs/components/QuillSelectWithCombo.js +47 -26
  58. package/dist/cjs/components/QuillTable.d.ts +3 -2
  59. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  60. package/dist/cjs/components/QuillTable.js +32 -19
  61. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +2 -1
  62. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  63. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +2 -2
  64. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +2 -1
  65. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  66. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -2
  67. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +2 -1
  68. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  69. package/dist/cjs/components/ReportBuilder/FilterModal.js +17 -4
  70. package/dist/cjs/components/ReportBuilder/ui.d.ts +13 -8
  71. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  72. package/dist/cjs/components/ReportBuilder/ui.js +15 -24
  73. package/dist/cjs/components/UiComponents.d.ts +17 -9
  74. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  75. package/dist/cjs/components/UiComponents.js +30 -24
  76. package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -2
  77. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useDashboard.d.ts +13 -5
  79. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  80. package/dist/cjs/hooks/useDashboard.js +158 -70
  81. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  82. package/dist/cjs/hooks/useExport.js +9 -3
  83. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  84. package/dist/cjs/hooks/useQuill.js +15 -15
  85. package/dist/cjs/hooks/useVirtualTables.d.ts +12 -3
  86. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  87. package/dist/cjs/hooks/useVirtualTables.js +105 -1
  88. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +3 -1
  89. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  90. package/dist/cjs/internals/ReportBuilder/PivotForm.js +9 -9
  91. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  92. package/dist/cjs/internals/ReportBuilder/PivotList.js +21 -15
  93. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +3 -2
  94. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  95. package/dist/cjs/internals/ReportBuilder/PivotModal.js +9 -9
  96. package/dist/cjs/models/Client.d.ts +16 -2
  97. package/dist/cjs/models/Client.d.ts.map +1 -1
  98. package/dist/cjs/models/Dashboard.d.ts +1 -1
  99. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  100. package/dist/cjs/models/Filter.d.ts +4 -3
  101. package/dist/cjs/models/Filter.d.ts.map +1 -1
  102. package/dist/cjs/models/Filter.js +38 -1
  103. package/dist/cjs/utils/astProcessing.d.ts +3 -3
  104. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  105. package/dist/cjs/utils/client.d.ts.map +1 -1
  106. package/dist/cjs/utils/client.js +2 -7
  107. package/dist/cjs/utils/dashboard.d.ts +5 -5
  108. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  109. package/dist/cjs/utils/dashboard.js +90 -9
  110. package/dist/cjs/utils/dataFetcher.d.ts +4 -4
  111. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  112. package/dist/cjs/utils/dataFetcher.js +1 -1
  113. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  114. package/dist/cjs/utils/filterProcessing.js +2 -8
  115. package/dist/cjs/utils/paginationProcessing.js +1 -1
  116. package/dist/cjs/utils/pivotConstructor.d.ts +2 -2
  117. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  118. package/dist/cjs/utils/pivotConstructor.js +1 -1
  119. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  120. package/dist/cjs/utils/pivotProcessing.js +6 -2
  121. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  122. package/dist/cjs/utils/queryConstructor.js +12 -9
  123. package/dist/cjs/utils/report.d.ts +6 -5
  124. package/dist/cjs/utils/report.d.ts.map +1 -1
  125. package/dist/cjs/utils/report.js +71 -25
  126. package/dist/cjs/utils/schema.d.ts +3 -3
  127. package/dist/cjs/utils/schema.d.ts.map +1 -1
  128. package/dist/cjs/utils/schema.js +39 -35
  129. package/dist/cjs/utils/tableProcessing.d.ts +18 -11
  130. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  131. package/dist/cjs/utils/tableProcessing.js +44 -23
  132. package/dist/esm/Chart.d.ts.map +1 -1
  133. package/dist/esm/Chart.js +6 -4
  134. package/dist/esm/ChartBuilder.d.ts +10 -3
  135. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  136. package/dist/esm/ChartBuilder.js +59 -26
  137. package/dist/esm/ChartEditor.d.ts +3 -1
  138. package/dist/esm/ChartEditor.d.ts.map +1 -1
  139. package/dist/esm/ChartEditor.js +76 -18
  140. package/dist/esm/Context.d.ts +17 -6
  141. package/dist/esm/Context.d.ts.map +1 -1
  142. package/dist/esm/Context.js +139 -74
  143. package/dist/esm/Dashboard.d.ts +8 -4
  144. package/dist/esm/Dashboard.d.ts.map +1 -1
  145. package/dist/esm/Dashboard.js +146 -367
  146. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  147. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +21 -15
  148. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -0
  149. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  150. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -1
  151. package/dist/esm/QuillProvider.js +1 -1
  152. package/dist/esm/ReportBuilder.d.ts +8 -12
  153. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  154. package/dist/esm/ReportBuilder.js +167 -87
  155. package/dist/esm/SQLEditor.d.ts +8 -1
  156. package/dist/esm/SQLEditor.d.ts.map +1 -1
  157. package/dist/esm/SQLEditor.js +84 -31
  158. package/dist/esm/Table.d.ts.map +1 -1
  159. package/dist/esm/Table.js +7 -4
  160. package/dist/esm/assets/AdjustmentsIcon.d.ts +5 -0
  161. package/dist/esm/assets/AdjustmentsIcon.d.ts.map +1 -0
  162. package/dist/esm/assets/AdjustmentsIcon.js +3 -0
  163. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  164. package/dist/esm/components/Chart/ChartError.js +2 -2
  165. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +4 -3
  166. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  167. package/dist/esm/components/Dashboard/DashboardFilter.js +12 -12
  168. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts +2 -2
  169. package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -1
  170. package/dist/esm/components/Dashboard/DataLoader.d.ts +11 -5
  171. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  172. package/dist/esm/components/Dashboard/DataLoader.js +94 -35
  173. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
  174. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  175. package/dist/esm/components/Dashboard/TableComponent.js +10 -3
  176. package/dist/esm/components/Dashboard/util.d.ts +2 -2
  177. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  178. package/dist/esm/components/Dashboard/util.js +2 -2
  179. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  180. package/dist/esm/components/QuillMultiSelect.js +19 -14
  181. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  182. package/dist/esm/components/QuillMultiSelectWithCombo.js +68 -46
  183. package/dist/esm/components/QuillSelect.d.ts +1 -1
  184. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  185. package/dist/esm/components/QuillSelect.js +30 -8
  186. package/dist/esm/components/QuillSelectWithCombo.d.ts +1 -1
  187. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  188. package/dist/esm/components/QuillSelectWithCombo.js +48 -27
  189. package/dist/esm/components/QuillTable.d.ts +3 -2
  190. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  191. package/dist/esm/components/QuillTable.js +32 -19
  192. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +2 -1
  193. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  194. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -2
  195. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +2 -1
  196. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  197. package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -2
  198. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +2 -1
  199. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  200. package/dist/esm/components/ReportBuilder/FilterModal.js +17 -4
  201. package/dist/esm/components/ReportBuilder/ui.d.ts +13 -8
  202. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  203. package/dist/esm/components/ReportBuilder/ui.js +14 -19
  204. package/dist/esm/components/UiComponents.d.ts +17 -9
  205. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  206. package/dist/esm/components/UiComponents.js +30 -24
  207. package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -2
  208. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  209. package/dist/esm/hooks/useDashboard.d.ts +13 -5
  210. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  211. package/dist/esm/hooks/useDashboard.js +158 -73
  212. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  213. package/dist/esm/hooks/useExport.js +10 -4
  214. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  215. package/dist/esm/hooks/useQuill.js +17 -17
  216. package/dist/esm/hooks/useVirtualTables.d.ts +12 -3
  217. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  218. package/dist/esm/hooks/useVirtualTables.js +106 -2
  219. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +3 -1
  220. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  221. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -9
  222. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  223. package/dist/esm/internals/ReportBuilder/PivotList.js +21 -15
  224. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +3 -2
  225. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  226. package/dist/esm/internals/ReportBuilder/PivotModal.js +9 -9
  227. package/dist/esm/models/Client.d.ts +16 -2
  228. package/dist/esm/models/Client.d.ts.map +1 -1
  229. package/dist/esm/models/Dashboard.d.ts +1 -1
  230. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  231. package/dist/esm/models/Filter.d.ts +4 -3
  232. package/dist/esm/models/Filter.d.ts.map +1 -1
  233. package/dist/esm/models/Filter.js +36 -0
  234. package/dist/esm/utils/astProcessing.d.ts +3 -3
  235. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  236. package/dist/esm/utils/client.d.ts.map +1 -1
  237. package/dist/esm/utils/client.js +2 -7
  238. package/dist/esm/utils/dashboard.d.ts +5 -5
  239. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  240. package/dist/esm/utils/dashboard.js +90 -9
  241. package/dist/esm/utils/dataFetcher.d.ts +4 -4
  242. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  243. package/dist/esm/utils/dataFetcher.js +1 -1
  244. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  245. package/dist/esm/utils/filterProcessing.js +2 -8
  246. package/dist/esm/utils/paginationProcessing.js +1 -1
  247. package/dist/esm/utils/pivotConstructor.d.ts +2 -2
  248. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  249. package/dist/esm/utils/pivotConstructor.js +1 -1
  250. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  251. package/dist/esm/utils/pivotProcessing.js +6 -2
  252. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  253. package/dist/esm/utils/queryConstructor.js +12 -9
  254. package/dist/esm/utils/report.d.ts +6 -5
  255. package/dist/esm/utils/report.d.ts.map +1 -1
  256. package/dist/esm/utils/report.js +70 -25
  257. package/dist/esm/utils/schema.d.ts +3 -3
  258. package/dist/esm/utils/schema.d.ts.map +1 -1
  259. package/dist/esm/utils/schema.js +39 -35
  260. package/dist/esm/utils/tableProcessing.d.ts +18 -11
  261. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  262. package/dist/esm/utils/tableProcessing.js +41 -20
  263. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useCallback, useContext, useEffect, useRef, useState, } from 'react';
2
+ import { useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
3
3
  import { DEFAULT_TAB_OPTIONS, MemoizedButton, MemoizedDeleteButton, MemoizedHeader, MemoizedLabel, MemoizedSecondaryButton, MemoizedText, MemoizedPopover, QuillTabs, MemoizedModal, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillColumnSearchEmptyState, QuillChartBuilderFormContainer, QuillLoadingComponent, QuillTableSQLEditorComponent, } from './components/UiComponents';
4
4
  import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
5
5
  import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy, useSortable, } from '@dnd-kit/sortable';
6
6
  import { CSS as DND_CSS } from '@dnd-kit/utilities';
7
- import { ClientContext, DashboardContext, SchemaDataContext, ThemeContext, } from './Context';
7
+ import { ClientContext, DashboardContext, DashboardFiltersContext, SchemaDataContext, ThemeContext, } from './Context';
8
8
  import { getTableNames, isNumericColumnType, } from './components/ReportBuilder/ast';
9
9
  import { ChartBuilderWithModal } from './ChartBuilder';
10
10
  import { QuillTextInput } from './components/UiComponents';
@@ -22,7 +22,7 @@ import { QuillSelectComponent } from './components/QuillSelect';
22
22
  import { QuillCard } from './components/QuillCard';
23
23
  import { DATE_FORMAT_TYPES, quillFormat } from './utils/valueFormatter';
24
24
  import { pivotToSql } from './utils/pivotProcessing';
25
- import { getUniqueValuesByColumns, getDateRangeByColumns, fetchTableByQuery, getUniqueStringValues, } from './utils/tableProcessing';
25
+ import { getUniqueValuesByColumns, getDateRangeByColumns, fetchResultsByQuery, getUniqueStringValues, fetchTableByAST, } from './utils/tableProcessing';
26
26
  import { fetchAndProcessASTFromPrompt, fetchASTFromQuillReport, getAllPossibleColumns, } from './utils/astProcessing';
27
27
  import PivotForm from './internals/ReportBuilder/PivotForm';
28
28
  import { getDateBucketFromRange } from './utils/dates';
@@ -31,7 +31,7 @@ import { astToFilterTree, filterToAst, filterTreeToAst, } from './utils/astFilte
31
31
  import useAstToFilterTree from './hooks/useAstToFilterTree';
32
32
  import { filterSentence, filterStackToFilterTree, uniqueValuesToStringMap, } from './utils/filterProcessing';
33
33
  import { QuillMultiSelectComponentWithCombo } from './components/QuillMultiSelectWithCombo';
34
- import { shouldFetchMore, DEFAULT_PAGINATION, shouldSortInMemory, } from './utils/paginationProcessing';
34
+ import { shouldFetchMore, shouldSortInMemory, } from './utils/paginationProcessing';
35
35
  import { EMPTY_INTERNAL_REPORT, fetchReportBuilderDataFromAST, formatRowsFromReport, } from './utils/report';
36
36
  import equal from 'fast-deep-equal';
37
37
  export const QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SERVER_HOST) ||
@@ -67,11 +67,20 @@ export const QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUI
67
67
  * ### Report Builder API
68
68
  * @see https://docs.quillsql.com/components/report-builder
69
69
  */
70
- export default function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, onDiscardChanges = undefined, onSaveChanges = undefined, destinationDashboard = undefined, organizationName = '', ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, DeleteButtonComponent = MemoizedDeleteButton, ModalComponent = MemoizedModal, TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, MultiSelectComponent = QuillMultiSelectComponentWithCombo, TableComponent = QuillTableSQLEditorComponent, PopoverComponent = MemoizedPopover, TabsComponent = QuillTabs,
70
+ export default function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, onDiscardChanges = undefined, onSaveChanges = undefined, onCloseChartBuilder = undefined, destinationDashboard = undefined, organizationName = '', ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, DeleteButtonComponent = MemoizedDeleteButton, ModalComponent = MemoizedModal, TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, MultiSelectComponent = QuillMultiSelectComponentWithCombo, TableComponent = QuillTableSQLEditorComponent, PopoverComponent = MemoizedPopover, TabsComponent = QuillTabs,
71
71
  // CheckboxComponent = MemoizedCheckbox,
72
72
  SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectColumnComponent = QuillSelectColumn, DraggableColumnComponent = QuillDraggableColumn, SidebarHeadingComponent = QuillSidebarHeading, FilterPopoverComponent = QuillFilterPopover, SortPopoverComponent = QuillSortPopover, LimitPopoverComponent = QuillLimitPopover, CardComponent = QuillCard, LabelComponent = MemoizedLabel, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, TextComponent = MemoizedText, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, LoadingComponent = QuillLoadingComponent, ColumnSearchEmptyState = QuillColumnSearchEmptyState, ChartBuilderFormContainer = QuillChartBuilderFormContainer, ChartBuilderModalComponent = MemoizedModal, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, hideCopySQL = true, isChartBuilderHorizontalView = true, onClickChartElement, }) {
73
73
  const [dashboard] = useContext(DashboardContext);
74
74
  const [schemaData] = useContext(SchemaDataContext);
75
+ const { dashboardFilters } = useContext(DashboardFiltersContext);
76
+ const specificDashboardFilters = useMemo(() => {
77
+ if (!reportId)
78
+ return [];
79
+ const dashboardName = dashboard[reportId]?.dashboardName;
80
+ if (!dashboardName)
81
+ return [];
82
+ return Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter);
83
+ }, [dashboardFilters, reportId, dashboard]);
75
84
  const [reportInfo, setReportInfo] = useState(null);
76
85
  const [aiPrompt, setAiPrompt] = useState('');
77
86
  const [errorMessage, setErrorMessage] = useState('');
@@ -86,7 +95,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
86
95
  const [openPopover, setOpenPopover] = useState(null);
87
96
  const [loading, setLoading] = useState(!!initialTableName);
88
97
  const [isChartBuilderOpen, setIsChartBuilderOpen] = useState(false);
89
- const [, setIsPending] = useState(false);
98
+ const [isAddLoading, setIsAddLoading] = useState(false);
90
99
  const [isCopying, setIsCopying] = useState(false);
91
100
  const [dataDisplayed, setDataDisplayed] = useState(false);
92
101
  const [rows, setRows] = useState([]);
@@ -94,6 +103,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
94
103
  const [columns, setColumns] = useState([]);
95
104
  const [tempReport, setTempReport] = useState(EMPTY_INTERNAL_REPORT);
96
105
  const [uniqueValues, setUniqueValues] = useState({});
106
+ const [uniqueValuesIsLoading, setUniqueValuesIsLoading] = useState(false);
97
107
  const [pivot, setPivot] = useState(null);
98
108
  const [pivotData, setPivotData] = useState(null);
99
109
  const [createdPivots, setCreatedPivots] = useState([]);
@@ -118,18 +128,23 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
118
128
  const [pivotAggregation, setPivotAggregation] = useState(undefined);
119
129
  const [dateRanges, setDateRanges] = useState(null);
120
130
  const [client] = useContext(ClientContext);
121
- // JANK: This is temp and stupid
122
- const [overrideRecommendations, setOverrideRecommendations] = useState(true);
123
131
  const [fieldValuesMap, setFieldValuesMap] = useState({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
124
132
  const [globalUniqueValues, setGlobalUniqueValues] = useState({});
133
+ const [globalUniqueValuesIsLoading, setGlobalUniqueValuesIsLoading] = useState(false);
125
134
  const { filterTree, filterStack } = useAstToFilterTree(formData, client); // Stores the state of filters
126
135
  const [removingFilter, setRemovingFilter] = useState(false);
136
+ const [pivotRecommendationsEnabledState, setPivotRecommendationsEnabledState,] = useState(pivotRecommendationsEnabled);
137
+ const REPORT_BUILDER_PAGINATION = {
138
+ page: 0,
139
+ rowsPerPage: 20,
140
+ rowsPerRequest: 1000,
141
+ };
127
142
  useEffect(() => {
128
143
  if (!client) {
129
144
  return;
130
145
  }
131
- if (client.publicKey === '663416663aa9bc716e59a89d') {
132
- setOverrideRecommendations(false);
146
+ if (client.recommendedPivotsDisabled !== undefined) {
147
+ setPivotRecommendationsEnabledState(!client.recommendedPivotsDisabled);
133
148
  }
134
149
  if (!initialLoad && client.publicKey) {
135
150
  clearAllState();
@@ -139,13 +154,18 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
139
154
  updateFirstChildWidth(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
140
155
  updateFirstChildWidth(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
141
156
  }, [dataDisplayed]);
157
+ useEffect(() => {
158
+ if (isChartBuilderOpen === false) {
159
+ onCloseChartBuilder && onCloseChartBuilder();
160
+ }
161
+ }, [isChartBuilderOpen]);
142
162
  // Whenever unique values changes, update the fieldValuesMap, used in FilterModals
143
- const updateFieldValuesMap = (curUnqiueValues, tableName) => {
163
+ const updateFieldValuesMap = (curUniqueValues, tableName) => {
144
164
  const newFieldValues = {};
145
- if (curUnqiueValues[tableName]) {
146
- for (const field of Object.keys(curUnqiueValues[tableName])) {
165
+ if (curUniqueValues[tableName]) {
166
+ for (const field of Object.keys(curUniqueValues[tableName])) {
147
167
  newFieldValues[field] = [];
148
- for (const value of Object.keys(curUnqiueValues[tableName][field])) {
168
+ for (const value of Object.keys(curUniqueValues[tableName][field])) {
149
169
  newFieldValues[field]?.push(value);
150
170
  }
151
171
  }
@@ -166,7 +186,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
166
186
  };
167
187
  }, []);
168
188
  const updatePivot = async (changeField, fieldKey) => {
169
- const newPivot = pivot;
189
+ const newPivot = deepCopy(pivot);
170
190
  setTableLoading(true);
171
191
  // @ts-ignore
172
192
  newPivot[fieldKey] = changeField;
@@ -191,19 +211,19 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
191
211
  dateBucket = getDateBucketFromRange(tempDateRange.dateRange);
192
212
  }
193
213
  let distinctValuesForQuery = {};
194
- if (pivot.columnField) {
214
+ setPivot(newPivot);
215
+ if (newPivot.columnField) {
195
216
  distinctValuesForQuery = await getUniqueValuesByColumns([
196
217
  {
197
- field: pivot.columnField,
198
- label: pivot.columnField,
218
+ field: newPivot.columnField,
219
+ label: newPivot.columnField,
199
220
  format: 'string',
200
221
  },
201
222
  ], activeQuery, [], client, schemaData.customFields ?? []);
202
223
  }
203
- const pivotedData = await generatePivotTable(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
224
+ const pivotedData = await generatePivotTable(newPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
204
225
  setPivotData(pivotedData || []);
205
226
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
206
- setPivot(newPivot);
207
227
  setFormattedRows(formattedRows);
208
228
  setTableLoading(false);
209
229
  };
@@ -235,7 +255,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
235
255
  setActivePath(null);
236
256
  setOpenPopover(null);
237
257
  setLoading(false);
238
- setIsPending(false);
239
258
  setDataDisplayed(false);
240
259
  setRows([]);
241
260
  setColumns([]);
@@ -248,8 +267,10 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
248
267
  }, 0);
249
268
  };
250
269
  const fetchGlobalUniqueValues = async (columns, currentTable, client) => {
251
- const global = await getUniqueStringValues(columns, currentTable, client);
270
+ setGlobalUniqueValuesIsLoading(true);
271
+ const global = await getUniqueStringValues(columns, currentTable, client, schemaData.customFields, undefined, true);
252
272
  setGlobalUniqueValues(uniqueValuesToStringMap(global));
273
+ setGlobalUniqueValuesIsLoading(false);
253
274
  };
254
275
  const uniqueValuesDependenciesRef = useRef({ client, columns, currentTable });
255
276
  const memoizedFetchGlobalUniqueValues = useCallback(fetchGlobalUniqueValues, []);
@@ -397,11 +418,13 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
397
418
  setLoading(true);
398
419
  const tableInfo = tables.find((tableInfo) => tableInfo.name === initialTableName);
399
420
  if (tableInfo) {
400
- const newUniqueValues = await getUniqueStringValues(tableInfo.columns, initialTableName, client, schemaData.customFields, uniqueValues);
421
+ setUniqueValuesIsLoading(true);
422
+ const newUniqueValues = await getUniqueStringValues(tableInfo.columns, initialTableName, client, schemaData.customFields, uniqueValues, true);
401
423
  if (hashCode(uniqueValues) !== hashCode(newUniqueValues)) {
402
424
  setUniqueValues(newUniqueValues);
403
425
  updateFieldValuesMap(newUniqueValues, initialTableName);
404
426
  }
427
+ setUniqueValuesIsLoading(false);
405
428
  const dateRangesTemp = await getDateRanges(tableInfo.columns, initialTableName);
406
429
  setDateRanges(dateRangesTemp);
407
430
  }
@@ -682,13 +705,14 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
682
705
  };
683
706
  const [previousPage, setPreviousPage] = useState(0);
684
707
  const [currentProcessing, setCurrentProcessing] = useState({
685
- page: DEFAULT_PAGINATION,
708
+ page: REPORT_BUILDER_PAGINATION,
686
709
  });
687
710
  const [numberOfRows, setNumberOfRows] = useState(0);
711
+ const [rowCountIsLoading, setRowCountIsLoading] = useState(false);
688
712
  const [tableLoading, setTableLoading] = useState(false);
689
713
  const onPageChange = (page) => {
690
714
  if (currentProcessing.page &&
691
- shouldFetchMore(DEFAULT_PAGINATION, page, previousPage)) {
715
+ shouldFetchMore(REPORT_BUILDER_PAGINATION, page, previousPage)) {
692
716
  const newPagination = { ...currentProcessing.page, page };
693
717
  const updatedProcessing = { ...currentProcessing, page: newPagination };
694
718
  setCurrentProcessing(updatedProcessing);
@@ -699,28 +723,50 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
699
723
  }
700
724
  };
701
725
  const onSortChange = (sort) => {
702
- if (shouldSortInMemory(DEFAULT_PAGINATION, numberOfRows, !!pivot)) {
726
+ if (shouldSortInMemory(REPORT_BUILDER_PAGINATION, numberOfRows, !!pivot)) {
703
727
  return;
704
728
  }
705
- const updatedProcessing = { page: DEFAULT_PAGINATION, sort };
729
+ const updatedProcessing = { page: REPORT_BUILDER_PAGINATION, sort };
706
730
  handleRunQuery(updatedProcessing, true);
707
731
  setCurrentProcessing(updatedProcessing);
708
732
  setPreviousPage(0);
709
733
  };
710
- const handleRunQuery = async (processing, resetRows = false) => {
734
+ const onFilterPreviewChange = (preview) => {
735
+ handleRunQuery(currentProcessing, true, preview);
736
+ };
737
+ const fetchRowCount = async (processing, includeFilters) => {
738
+ if (!client || !activeQuery) {
739
+ return;
740
+ }
741
+ setRowCountIsLoading(true);
742
+ const tableInfo = await fetchResultsByQuery(activeQuery, client, processing, schemaData.customFields, includeFilters ? specificDashboardFilters : undefined, includeFilters
743
+ ? tempReport.dateField ?? reportInfo?.dateField
744
+ : undefined, false, true);
745
+ if (tableInfo.rowCount) {
746
+ setNumberOfRows(tableInfo.rowCount);
747
+ }
748
+ setRowCountIsLoading(false);
749
+ };
750
+ const fetchRowCountFromAST = async (ast, where) => {
751
+ setRowCountIsLoading(true);
752
+ const tableData = await fetchTableByAST({ ...ast, where }, client, { page: REPORT_BUILDER_PAGINATION }, undefined, false, true);
753
+ if (tableData.rowCount) {
754
+ setNumberOfRows(tableData.rowCount);
755
+ }
756
+ setRowCountIsLoading(false);
757
+ };
758
+ const handleRunQuery = async (processing, resetRows = false, includeFilters = false) => {
711
759
  try {
712
760
  setErrorMessage('');
713
761
  setTableLoading(true);
714
- const tableInfo = await fetchTableByQuery(activeQuery, client, processing, schemaData.customFields);
762
+ const tableInfo = await fetchResultsByQuery(activeQuery, client, processing, schemaData.customFields, includeFilters ? specificDashboardFilters : undefined, includeFilters ? tempReport.dateField : undefined, true);
715
763
  if (tableInfo.error) {
716
764
  throw new Error(tableInfo.error);
717
765
  }
718
766
  else if (tableInfo.rows.length === 0) {
719
767
  throw new Error('No data found');
720
768
  }
721
- if (tableInfo.rowCount) {
722
- setNumberOfRows(tableInfo.rowCount);
723
- }
769
+ fetchRowCount(processing, includeFilters);
724
770
  setCurrentProcessing(processing);
725
771
  let tempRows = [...rows, ...tableInfo.rows];
726
772
  if (resetRows) {
@@ -728,6 +774,11 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
728
774
  }
729
775
  setRows(tempRows);
730
776
  setFormattedRows(formatRowsFromReport({ rows: tempRows, columns: tableInfo.columns }));
777
+ setTempReport({
778
+ ...tempReport,
779
+ rows: tempRows,
780
+ rowCount: tableInfo.rowCount ?? tempReport.rowCount,
781
+ });
731
782
  setColumns(tableInfo.columns);
732
783
  setTableLoading(false);
733
784
  }
@@ -739,7 +790,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
739
790
  return;
740
791
  }
741
792
  };
742
- const renderFilters = () => {
793
+ const renderFilters = (actionsEnabled = true) => {
743
794
  // Render filterStack
744
795
  return (_jsx("div", { style: {
745
796
  display: 'flex',
@@ -783,7 +834,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
783
834
  } }) }, index));
784
835
  }
785
836
  else if (item.value) {
786
- return (_jsx(FilterPopoverWrapper, { schema: schemaData.schema.find((s) => s.name === currentTable || s.displayName === currentTable) ?? schemaData.schema[0], filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal, fieldValuesMap: globalUniqueValues, priorFilters: filterStack.slice(0, index > 0 ? index - 1 : 0), columns: columns, client: client, customFields: schemaData.customFields, baseAst: baseAst, endpoint: QUILL_SERVER, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
837
+ return (_jsx(FilterPopoverWrapper, { schema: schemaData.schema.find((s) => s.name === currentTable || s.displayName === currentTable) ?? schemaData.schema[0], filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal, fieldValuesMap: globalUniqueValues, fieldValuesMapIsLoading: globalUniqueValuesIsLoading, priorFilters: filterStack.slice(0, index > 0 ? index - 1 : 0), columns: columns, client: client, customFields: schemaData.customFields, baseAst: baseAst, endpoint: QUILL_SERVER, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
787
838
  item.value = filter;
788
839
  let newFormData = null;
789
840
  if (filterTree) {
@@ -847,7 +898,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
847
898
  fetchSqlQuery(newAst, newFormData);
848
899
  setRemovingFilter(false);
849
900
  }
850
- } }, `filter_${index}_${item.value ? filterSentence(item.value) : ''}`));
901
+ }, disabled: !actionsEnabled }, `filter_${index}_${item.value ? filterSentence(item.value) : ''}`));
851
902
  }
852
903
  }) }));
853
904
  };
@@ -874,12 +925,18 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
874
925
  },
875
926
  as: null,
876
927
  });
928
+ const updateUniqueValue = (uniqueStrings, table) => {
929
+ const uniqueStringsObj = {};
930
+ uniqueStringsObj[table] = uniqueStrings ?? {};
931
+ setUniqueValues(uniqueStringsObj);
932
+ updateFieldValuesMap(uniqueStringsObj, table);
933
+ };
877
934
  const fetchReportFromASTHelper = async (baseAst, newFormData, curPivot, curSchema, previousReport) => {
878
935
  const curFormData = newFormData !== undefined ? newFormData : formData;
879
936
  let reportBuilderInfo = undefined;
880
937
  try {
881
938
  setLoading(true);
882
- reportBuilderInfo = await fetchReportBuilderDataFromAST(baseAst, curFormData, curSchema ?? schemaData.schema, client, curPivot ?? pivot, formData, currentTable, { uniqueStrings: uniqueValues, dateRanges: dateRanges ?? {} }, previousReport ?? reportInfo ?? undefined, schemaData.customFields);
939
+ reportBuilderInfo = await fetchReportBuilderDataFromAST(baseAst, curFormData, curSchema ?? schemaData.schema, client, curPivot ?? pivot, formData, currentTable, { uniqueStrings: uniqueValues, dateRanges: dateRanges ?? {} }, previousReport ?? reportInfo ?? undefined, schemaData.customFields, true, true, { page: REPORT_BUILDER_PAGINATION });
883
940
  if (reportBuilderInfo.error) {
884
941
  throw new Error(reportBuilderInfo.error);
885
942
  }
@@ -898,21 +955,22 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
898
955
  setErrorMessage('Failed to fetch');
899
956
  return;
900
957
  }
958
+ fetchRowCountFromAST(baseAst, curFormData);
901
959
  const reportTable = reportBuilderInfo.table;
902
960
  const reportBuilderInfoColumns = reportBuilderInfo.columns.map((column) => {
903
961
  return `${reportTable}.${column.field}`;
904
962
  });
963
+ const prevFormData = formData;
964
+ const prevTable = currentTable;
905
965
  setRows(reportBuilderInfo.rows);
906
966
  setColumns(reportBuilderInfo.columns);
907
- setNumberOfRows(reportBuilderInfo.rowCount);
967
+ // setNumberOfRows(reportBuilderInfo.rowCount);
908
968
  setPivot(reportBuilderInfo.pivot);
909
969
  setPivotData(reportBuilderInfo.pivotData);
970
+ setDateRanges(reportBuilderInfo.dateRanges);
910
971
  setFormattedRows(reportBuilderInfo.formattedRows);
911
972
  setTempReport(reportBuilderInfo.report);
912
973
  setSelectedColumns(reportBuilderInfoColumns);
913
- setUniqueValues(reportBuilderInfo.uniqueValues);
914
- updateFieldValuesMap(reportBuilderInfo.uniqueValues, reportBuilderInfo.table);
915
- setDateRanges(reportBuilderInfo.dateRanges);
916
974
  setLoading(false);
917
975
  setDataDisplayed(true);
918
976
  setCurrentTable(reportBuilderInfo.table);
@@ -924,6 +982,31 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
924
982
  setPivotValueField(reportBuilderInfo.pivot.valueField);
925
983
  }
926
984
  setReportInfo(reportBuilderInfo.report);
985
+ // fetch unique values after everything else since it is the most expensive
986
+ if (prevTable !== reportBuilderInfo.table ||
987
+ !equal(prevFormData, curFormData)) {
988
+ try {
989
+ setUniqueValuesIsLoading(true);
990
+ const schema = curSchema ?? schemaData.schema;
991
+ const tableInfo = schema.find((tableInfo) => tableInfo.name === reportBuilderInfo?.table);
992
+ if (!reportBuilderInfo.table || !tableInfo) {
993
+ throw new Error('No table found;');
994
+ }
995
+ const uniqueStrings = await getUniqueStringValues(tableInfo.columns, reportBuilderInfo.table, client, schemaData.customFields, undefined, true, reportBuilderInfo.query);
996
+ updateUniqueValue(uniqueStrings, reportBuilderInfo.table);
997
+ setUniqueValuesIsLoading(false);
998
+ }
999
+ catch (err) {
1000
+ if (err instanceof Error) {
1001
+ setErrorMessage(err.message);
1002
+ setLoading(false);
1003
+ return { error: true, message: err.message, rows: [] };
1004
+ }
1005
+ setLoading(false);
1006
+ setErrorMessage('Failed to fetch');
1007
+ return { error: true, message: 'Failed to fetch', rows: [] };
1008
+ }
1009
+ }
927
1010
  };
928
1011
  const fetchAstFromPromptHelper = async (overridePrompt) => {
929
1012
  let astInfo = {};
@@ -989,7 +1072,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
989
1072
  };
990
1073
  return (_jsx("div", { style: { ...style }, ref: setNodeRef, children: _jsx(DraggableColumnComponent, { label: snakeAndCamelCaseToTitleCase(label), onDelete: onDelete, DragHandle: (props) => (_jsx("div", { style: {
991
1074
  cursor: 'grab',
992
- }, ...attributes, ...listeners, children: _jsx(props.dragIcon, {}) })) }) }));
1075
+ }, ...attributes, ...listeners, children: _jsx(props.dragIcon, {}) })), deleteDisabled: loading }) }));
993
1076
  };
994
1077
  function DraggableColumns() {
995
1078
  const sensors = useSensors(useSensor(PointerSensor), useSensor(KeyboardSensor, {
@@ -1064,7 +1147,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1064
1147
  display: 'flex',
1065
1148
  flexDirection: 'column',
1066
1149
  gap: 8,
1067
- }, children: [columnNamesInAst.map((name) => (_jsx(DraggableItem, { id: name, label: name, onDelete: () => handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && _jsx("div", { style: { height: 6 } })] }) }) }));
1150
+ }, children: [columnNamesInAst.map((name) => (_jsx(DraggableItem, { id: name, label: name, onDelete: () => !loading && handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && _jsx("div", { style: { height: 6 } })] }) }) }));
1068
1151
  }
1069
1152
  // TODO: Refactor this part
1070
1153
  if (loading || initialChartLoad) {
@@ -1077,11 +1160,10 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1077
1160
  if (!openPopover) {
1078
1161
  setOpenPopover('AddColumnModal');
1079
1162
  }
1080
- }, label: 'Select columns' }), _jsx(ModalComponent, { isOpen: openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
1163
+ }, label: 'Select columns', disabled: true }), _jsx(ModalComponent, { isOpen: openPopover === 'AddColumnModal', setIsOpen: (isOpen) => {
1081
1164
  if (!isOpen) {
1082
1165
  // delay onClose callback so onClick no-ops
1083
1166
  setTimeout(() => {
1084
- setIsPending(false);
1085
1167
  setActiveEditItem(null);
1086
1168
  setActivePath(null);
1087
1169
  setOpenPopover(null);
@@ -1099,7 +1181,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1099
1181
  flexDirection: 'column',
1100
1182
  gap: 8,
1101
1183
  marginBottom: 12,
1102
- }, children: renderFilters() })), _jsxs("div", { style: {
1184
+ }, children: renderFilters(false) })), _jsxs("div", { style: {
1103
1185
  display: 'flex',
1104
1186
  flexDirection: 'column',
1105
1187
  alignItems: 'flex-start',
@@ -1125,14 +1207,12 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1125
1207
  }
1126
1208
  setOpenPopover('AddFilterPopover');
1127
1209
  setActivePath('');
1128
- setIsPending(true);
1129
1210
  }
1130
- }, label: 'Add filter' }), _jsx("div", { style: {
1211
+ }, label: 'Add filter', disabled: true }), _jsx("div", { style: {
1131
1212
  position: 'relative',
1132
1213
  ...(openPopover === 'AddFilterPopover' && { top: 12 }),
1133
1214
  }, children: _jsx(PopoverComponent, { isOpen: openPopover === 'AddFilterPopover', setIsOpen: (isOpen) => {
1134
1215
  if (!isOpen) {
1135
- setIsPending(false);
1136
1216
  setActivePath(null);
1137
1217
  setOpenPopover(null);
1138
1218
  setTimeout(() => {
@@ -1143,9 +1223,8 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1143
1223
  }, popoverTitle: 'Add filter', popoverChildren: _jsx(FilterModal, { schema: schemaData.schema.find((s) => s.name === currentTable ||
1144
1224
  s.displayName === currentTable) ?? schemaData.schema[0], fieldValuesMap: uniqueValues[getTableNames(baseAst).length === 1
1145
1225
  ? getTableNames(baseAst)[0]
1146
- : initialTableName], onSubmitFilter: (filter) => {
1226
+ : initialTableName], fieldValuesMapIsLoading: uniqueValuesIsLoading, onSubmitFilter: (filter) => {
1147
1227
  setOpenPopover(null);
1148
- setIsPending(false);
1149
1228
  const item = filterToAst(filter, client.databaseType.toLowerCase());
1150
1229
  handleInsertion(item, 'AND', false);
1151
1230
  }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) })] })] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Pivot" }), _jsx(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: () => {
@@ -1157,14 +1236,14 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1157
1236
  // TODOs
1158
1237
  selectPivot: () => {
1159
1238
  return;
1160
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, report: tempReport ?? reportInfo }), pivot && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
1239
+ }, 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 && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, setPivotRowField: (value) => {
1161
1240
  setPivotRowField(value);
1162
1241
  }, setPivotColumnField: setPivotColumnField, setPivotValueField: setPivotValueField, setPivotAggregation: setPivotAggregation, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, onDelete: () => {
1163
1242
  setPivot(null);
1164
1243
  setPivotData([]);
1165
1244
  const formattedRows = formatRows(rows, columns, false);
1166
1245
  setFormattedRows(formattedRows);
1167
- }, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && (_jsx("div", { style: {
1246
+ }, isLoading: tableLoading, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && (_jsx("div", { style: {
1168
1247
  display: 'flex',
1169
1248
  flexDirection: 'column',
1170
1249
  gap: 8,
@@ -1172,7 +1251,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1172
1251
  }, children: _jsx(SortSentence, { sortData: {
1173
1252
  type: pivot.sortDirection,
1174
1253
  expr: { type: 'column_ref', column: pivot.sortField },
1175
- }, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1254
+ }, columns: selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1176
1255
  setPivot({ ...pivot, sort: false });
1177
1256
  setBaseAst(deepCopy(baseAst));
1178
1257
  if (!pivot) {
@@ -1200,7 +1279,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1200
1279
  gap: 8,
1201
1280
  marginBottom: 12,
1202
1281
  }, children: baseAst.orderby.map((sortData, id) => (_jsx(SortSentence, { sortData: sortData, columns: selectedColumns, onSave: (column, direction) => {
1203
- setIsPending(false);
1204
1282
  setActiveEditItem(null);
1205
1283
  setOpenPopover(null);
1206
1284
  if (column === '')
@@ -1221,14 +1299,14 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1221
1299
  if (!pivot) {
1222
1300
  fetchSqlQuery(newAst);
1223
1301
  }
1224
- }, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1302
+ }, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1225
1303
  const newAst = { ...baseAst };
1226
1304
  newAst.orderby.splice(id, 1);
1227
1305
  setBaseAst(deepCopy(newAst));
1228
1306
  if (!pivot) {
1229
1307
  fetchSqlQuery(newAst);
1230
1308
  }
1231
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }, `sort-sentence-${id}`))) })), _jsx(SecondaryButtonComponent, { onClick: () => {
1309
+ }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: true }, `sort-sentence-${id}`))) })), _jsx(SecondaryButtonComponent, { onClick: () => {
1232
1310
  if (!selectedColumns ||
1233
1311
  selectedColumns.length === 0 ||
1234
1312
  loading) {
@@ -1237,9 +1315,8 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1237
1315
  if (!openPopover) {
1238
1316
  setOpenPopover('AddSortPopover');
1239
1317
  }
1240
- }, label: "Add sort" }), _jsx(PopoverComponent, { isOpen: openPopover === 'AddSortPopover', setIsOpen: (isOpen) => {
1318
+ }, label: "Add sort", disabled: true }), _jsx(PopoverComponent, { isOpen: openPopover === 'AddSortPopover', setIsOpen: (isOpen) => {
1241
1319
  if (!isOpen) {
1242
- setIsPending(false);
1243
1320
  setActiveEditItem(null);
1244
1321
  setActivePath(null);
1245
1322
  setOpenPopover(null);
@@ -1268,7 +1345,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1268
1345
  setOpenPopover(null);
1269
1346
  setBaseAst(deepCopy(newAst));
1270
1347
  fetchSqlQuery(newAst);
1271
- }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent }) })) : (_jsxs(_Fragment, { children: [_jsx(SecondaryButtonComponent, { onClick: () => {
1348
+ }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: true }) })) : (_jsxs(_Fragment, { children: [_jsx(SecondaryButtonComponent, { onClick: () => {
1272
1349
  if (!selectedColumns ||
1273
1350
  selectedColumns.length === 0 ||
1274
1351
  loading) {
@@ -1277,9 +1354,8 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1277
1354
  if (!openPopover) {
1278
1355
  setOpenPopover('AddLimitPopover');
1279
1356
  }
1280
- }, label: 'Add limit' }), _jsx(PopoverComponent, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: (isOpen) => {
1357
+ }, label: 'Add limit', disabled: true }), _jsx(PopoverComponent, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: (isOpen) => {
1281
1358
  if (!isOpen) {
1282
- setIsPending(false);
1283
1359
  setActiveEditItem(null);
1284
1360
  setActivePath(null);
1285
1361
  setOpenPopover(null);
@@ -1326,7 +1402,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1326
1402
  if (!isOpen) {
1327
1403
  // delay onClose callback so onClick no-ops
1328
1404
  setTimeout(() => {
1329
- setIsPending(false);
1330
1405
  setActiveEditItem(null);
1331
1406
  setActivePath(null);
1332
1407
  setOpenPopover(null);
@@ -1370,7 +1445,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1370
1445
  }
1371
1446
  setOpenPopover('AddFilterPopover');
1372
1447
  setActivePath('');
1373
- setIsPending(true);
1374
1448
  }
1375
1449
  }, label: 'Add filter' }), _jsx("div", { style: {
1376
1450
  position: 'relative',
@@ -1380,16 +1454,14 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1380
1454
  // delay onClose callback so onClick no-ops
1381
1455
  setOpenPopover(null);
1382
1456
  setTimeout(() => {
1383
- setIsPending(false);
1384
1457
  setActivePath(null);
1385
1458
  clearCheckboxes();
1386
1459
  setActiveEditItem(null);
1387
1460
  }, 300);
1388
1461
  }
1389
1462
  }, popoverTitle: "Add filter", popoverChildren: _jsx(FilterModal, { schema: schemaData.schema.find((s) => s.name === currentTable ||
1390
- s.displayName === currentTable) ?? schemaData.schema[0], fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
1463
+ s.displayName === currentTable) ?? schemaData.schema[0], fieldValuesMap: fieldValuesMap, fieldValuesMapIsLoading: uniqueValuesIsLoading, onSubmitFilter: (filter) => {
1391
1464
  setOpenPopover(null);
1392
- setIsPending(false);
1393
1465
  const item = filterToAst(filter, client.databaseType.toLowerCase());
1394
1466
  handleInsertion(item, 'AND', false);
1395
1467
  }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) })] })] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Pivot" }), _jsx(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: () => {
@@ -1397,29 +1469,32 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1397
1469
  setPivotData(null);
1398
1470
  const formattedRows = formatRows(rows, columns, false);
1399
1471
  setFormattedRows(formattedRows);
1400
- }, selectPivot: async (pivot, uniqueValues, dateRange, pivotTable) => {
1401
- if (!pivot)
1472
+ }, selectPivot: async (selectedPivot, uniqueValues, dateRange, pivotTable) => {
1473
+ if (!selectedPivot)
1402
1474
  return;
1403
1475
  const newAst = { ...baseAst };
1404
1476
  newAst.orderby = null;
1405
- if (pivot.rowFieldType === 'date') {
1406
- pivot['sort'] = true;
1407
- pivot['sortDirection'] = 'ASC';
1477
+ if (selectedPivot.rowFieldType === 'date') {
1478
+ selectedPivot['sort'] = true;
1479
+ selectedPivot['sortDirection'] = 'ASC';
1408
1480
  }
1409
1481
  setBaseAst(newAst); // trigger refetch
1410
1482
  let dateBucket = undefined;
1411
1483
  if (dateRange) {
1412
1484
  dateBucket = getDateBucketFromRange(dateRange);
1413
1485
  }
1486
+ setPivot(selectedPivot);
1414
1487
  if (!pivotTable) {
1415
- pivotTable = await generatePivotTable(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues);
1488
+ setTableLoading(true);
1489
+ pivotTable = await generatePivotTable(selectedPivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, uniqueValues);
1416
1490
  }
1491
+ // no other calls made
1417
1492
  setPivotData(pivotTable || []);
1418
- setPivot(pivot);
1419
- const formattedRows = formatRows(pivotTable.rows, columns, true, pivot.aggregationType);
1493
+ const formattedRows = formatRows(pivotTable.rows, columns, true, selectedPivot.aggregationType);
1420
1494
  setFormattedRows(formattedRows);
1421
1495
  setErrorMessage('');
1422
- }, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !baseAst || !dataDisplayed, pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, report: tempReport }), pivot && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
1496
+ setTableLoading(false); // only set to false if this was the final call
1497
+ }, 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 && (_jsx(PivotForm, { columns: columns, uniqueValues: uniqueValues[currentTable], uniqueValuesIsLoading: uniqueValuesIsLoading, setPivotRowField: (value) => {
1423
1498
  setPivotRowField(value);
1424
1499
  updatePivot(value, 'rowField');
1425
1500
  }, setPivotColumnField: (value) => {
@@ -1436,7 +1511,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1436
1511
  setPivotData([]);
1437
1512
  const formattedRows = formatRows(rows, columns, false);
1438
1513
  setFormattedRows(formattedRows);
1439
- }, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && (_jsx("div", { style: {
1514
+ }, isLoading: tableLoading, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer }))] }), _jsxs("div", { style: { width: '100%' }, children: [_jsx(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && (_jsx("div", { style: {
1440
1515
  display: 'flex',
1441
1516
  flexDirection: 'column',
1442
1517
  gap: 8,
@@ -1451,7 +1526,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1451
1526
  `.${pivot.rowField}`,
1452
1527
  `.${pivot.valueField || 'count'}`,
1453
1528
  ]
1454
- : selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: async () => {
1529
+ : selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: async () => {
1455
1530
  if (pivot) {
1456
1531
  const tempPivot = { ...pivot, sort: false };
1457
1532
  let dateBucket = undefined;
@@ -1506,7 +1581,7 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1506
1581
  flexDirection: 'column',
1507
1582
  gap: 8,
1508
1583
  marginBottom: 12,
1509
- }, children: baseAst.orderby.map((sortData, id) => (_jsx(SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1584
+ }, children: baseAst.orderby.map((sortData, id) => (_jsx(SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover, handleDelete: () => {
1510
1585
  if (pivot) {
1511
1586
  setPivot({ ...pivot, sort: false });
1512
1587
  return;
@@ -1529,7 +1604,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1529
1604
  });
1530
1605
  return;
1531
1606
  }
1532
- setIsPending(false);
1533
1607
  setActiveEditItem(null);
1534
1608
  setOpenPopover(null);
1535
1609
  if (column === '')
@@ -1560,7 +1634,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1560
1634
  ...(openPopover === 'AddSortPopover' && { top: 12 }),
1561
1635
  }, children: _jsx(PopoverComponent, { isOpen: openPopover === 'AddSortPopover', setIsOpen: (isOpen) => {
1562
1636
  if (!isOpen) {
1563
- setIsPending(false);
1564
1637
  setActiveEditItem(null);
1565
1638
  setActivePath(null);
1566
1639
  setOpenPopover(null);
@@ -1655,7 +1728,6 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1655
1728
  ...(openPopover === 'AddLimitPopover' && { top: 12 }),
1656
1729
  }, children: _jsx(PopoverComponent, { isOpen: openPopover === 'AddLimitPopover', setIsOpen: (isOpen) => {
1657
1730
  if (!isOpen) {
1658
- setIsPending(false);
1659
1731
  setActiveEditItem(null);
1660
1732
  setActivePath(null);
1661
1733
  setOpenPopover(null);
@@ -1689,9 +1761,10 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1689
1761
  ? 'Ask a follow-up question...'
1690
1762
  : 'Ask a question...' }), _jsx(ButtonComponent, { onClick: () => {
1691
1763
  fetchAstFromPromptHelper();
1692
- }, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && (_jsx(TableComponent, { isLoading: tableLoading ||
1693
- (loading && errorMessage.length === 0) ||
1694
- initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, rowsPerPage: 20, columns: pivot
1764
+ }, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && (_jsx(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && (_jsx(TableComponent, { isLoading: !isAddLoading &&
1765
+ (tableLoading ||
1766
+ (loading && errorMessage.length === 0) ||
1767
+ initialChartLoad), rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1695
1768
  ? pivotData?.columns || emptyPivotColumns()
1696
1769
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
1697
1770
  return {
@@ -1715,13 +1788,17 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1715
1788
  alignItems: 'center',
1716
1789
  }, children: [_jsx(ErrorMessageComponent, { errorMessage: errorMessage }), _jsx(SecondaryButtonComponent, { onClick: () => {
1717
1790
  fetchAstFromPromptHelper();
1718
- }, label: 'Retry' })] })) : (_jsx("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initialChartLoad && (_jsxs(_Fragment, { children: [onDiscardChanges && (_jsx(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && (_jsx(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), _jsx(ButtonComponent, { onClick: () => {
1791
+ }, label: 'Retry' })] })) : (_jsx("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initialChartLoad && (_jsxs(_Fragment, { children: [onDiscardChanges && (_jsx(SecondaryButtonComponent, { onClick: onDiscardChanges, label: "Discard changes" })), !hideCopySQL && (_jsx(SecondaryButtonComponent, { label: isCopying ? 'Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), _jsx(ButtonComponent, { onClick: async () => {
1792
+ setIsAddLoading(true);
1793
+ await handleRunQuery(currentProcessing, true);
1794
+ setIsAddLoading(false);
1719
1795
  onSaveChanges && onSaveChanges();
1720
1796
  setIsChartBuilderOpen(true);
1721
- }, disabled: !!errorMessage, label: reportId ? 'Save changes' : 'Add to dashboard' })] }))] })] }), _jsx("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && (_jsx(ChartBuilderWithModal, { report: reportInfo
1797
+ }, disabled: !!errorMessage, label: reportId ? 'Save changes' : 'Add to dashboard', isLoading: isAddLoading })] }))] })] }), _jsx("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && (_jsx(ChartBuilderWithModal, { report: reportInfo
1722
1798
  ? {
1723
1799
  ...reportInfo,
1724
1800
  ...tempReport,
1801
+ filtersApplied: specificDashboardFilters,
1725
1802
  pivot: pivot,
1726
1803
  yAxisFields: reportInfo.pivot && !pivot ? [] : reportInfo.yAxisFields,
1727
1804
  columns: reportInfo.columns.filter((col) => {
@@ -1732,5 +1809,8 @@ SidebarComponent = QuillSidebar, ContainerComponent = CustomContainer, SelectCol
1732
1809
  queryString: activeQuery,
1733
1810
  rows: rows,
1734
1811
  }
1735
- : tempReport, 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], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: !!reportId ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement, rowCount: numberOfRows, onPageChange: onPageChange, onSortChange: onSortChange, isLoading: tableLoading, isEditingMode: true }))] }));
1812
+ : {
1813
+ ...tempReport,
1814
+ filtersApplied: specificDashboardFilters,
1815
+ }, 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 }))] }));
1736
1816
  }