@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
@@ -55,7 +55,7 @@ const TemplateMetricComponent_1 = __importDefault(require("./components/Dashboar
55
55
  const TemplateTableComponent_1 = __importDefault(require("./components/Dashboard/TemplateTableComponent"));
56
56
  const DashboardTemplate_1 = __importDefault(require("./components/Dashboard/DashboardTemplate"));
57
57
  const Filter_2 = require("./models/Filter");
58
- const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
58
+ const paginationProcessing_1 = require("./utils/paginationProcessing");
59
59
  const defaultChartContainerStyles = {
60
60
  display: 'flex',
61
61
  width: '100%',
@@ -71,6 +71,15 @@ const charts = (sections, section, sortByOrdering) => sections[section]
71
71
  const tables = (sections, section, sortByOrdering) => sections[section]
72
72
  .filter(({ chartType }) => chartType === 'table')
73
73
  .sort(sortByOrdering);
74
+ const sortByOrdering = (a, b) => {
75
+ if (a.order === undefined && b.order === undefined)
76
+ return 0;
77
+ if (a.order === undefined)
78
+ return 1;
79
+ if (b.order === undefined)
80
+ return -1;
81
+ return a.order - b.order;
82
+ };
74
83
  /**
75
84
  * ### Quill Dashboard
76
85
  *
@@ -102,35 +111,52 @@ const tables = (sections, section, sortByOrdering) => sections[section]
102
111
  * ### API Reference
103
112
  * @see https://docs.quillsql.com/components/dashboard
104
113
  */
105
- function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithCombo_1.QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, ModalComponent = UiComponents_1.QuillModalComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, FilterTagComponent = ui_1.QuillFilterPopover, PopoverComponent = UiComponents_1.MemoizedPopover, TextInputComponent = UiComponents_1.QuillTextInput, EmptyDashboardComponent = UiComponents_1.QuillEmptyDashboardComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, MetricComponent = MetricComponent_1.default, ChartComponent = ChartComponent_1.default, TableComponent = TableComponent_1.default, TemplateMetricComponent = TemplateMetricComponent_1.default, TemplateChartComponent = TemplateChartComponent_1.default, TemplateTableComponent = TemplateTableComponent_1.default, DashboardSectionComponent = DashboardSection_1.default, DashboardSectionContainerComponent = DashboardSectionContainer_1.default, FilterContainerComponent = UiComponents_1.QuillFilterContainerComponent, DashboardLoadingComponent = UiComponents_1.QuillLoadingDashboardComponent, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickReport, hoverActions, onChangeLoading, hideFilters, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', containerStyle, className, chartContainerStyle = defaultChartContainerStyles, filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors = true, templateDashboardName, }) {
106
- const { isLoading, data, reload, isDashboardFiltersLoading, dashboardFilters: populatedDashboardFilters, } = (0, useDashboard_1.useDashboard)(name);
107
- const [isDashboardOptionsLoading, setisDashboardOptionsLoading] = (0, react_1.useState)(isDashboardFiltersLoading);
108
- const [presetFilters, setPresetFilters] = (0, react_1.useState)(null);
114
+ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithCombo_1.QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, ModalComponent = UiComponents_1.QuillModalComponent, ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, FilterTagComponent = ui_1.QuillFilterPopover, PopoverComponent = UiComponents_1.MemoizedPopover, TextInputComponent = UiComponents_1.QuillTextInput, EmptyDashboardComponent = UiComponents_1.QuillEmptyDashboardComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, MetricComponent = MetricComponent_1.default, ChartComponent = ChartComponent_1.default, TableComponent = TableComponent_1.default, TemplateMetricComponent = TemplateMetricComponent_1.default, TemplateChartComponent = TemplateChartComponent_1.default, TemplateTableComponent = TemplateTableComponent_1.default, DashboardSectionComponent = DashboardSection_1.default, DashboardSectionContainerComponent = DashboardSectionContainer_1.default, FilterContainerComponent = UiComponents_1.QuillFilterContainerComponent, DashboardLoadingComponent = UiComponents_1.QuillLoadingDashboardComponent, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickReport, hoverActions, onChangeLoading, hideFilters, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', containerStyle, className, chartContainerStyle = defaultChartContainerStyles,
115
+ // TODO: do something with these custom filters
116
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
117
+ filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors = true, templateDashboardName, pagination = { rowsPerPage: 10, rowsPerRequest: 50 }, }) {
118
+ const { isLoading, data, isDashboardFilterLoading, dashboardFilters: populatedDashboardFilters, reload, } = (0, useDashboard_1.useDashboard)(name);
109
119
  const [client, isClientLoading] = (0, react_1.useContext)(Context_1.ClientContext);
110
120
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
111
- const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
112
- const [appliedFilters, setAppliedFilters] = (0, react_1.useState)(null);
113
- const { dashboardFilters, dashboardFiltersDispatch } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
121
+ const { dispatch: dashboardFiltersDispatch } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
114
122
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
115
- const [filterSchemaIsLoaded, setFilterSchemaIsLoaded] = (0, react_1.useState)(false);
116
- const [filterSchema, setFilterSchema] = (0, react_1.useState)({ columns: [] }); // Schema to be passed into FilterModal
117
123
  const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
118
124
  const [referencedTables, setReferencedTables] = (0, react_1.useState)([]); // Intersection of tables referenced in the dashboard
119
125
  const [fieldValuesIsLoaded, setFieldValuesIsLoaded] = (0, react_1.useState)(false);
120
126
  const [addFilterPopoverIsOpen, setAddFilterPopoverIsOpen] = (0, react_1.useState)(false);
121
127
  const [filterListIsOpen, setFilterListIsOpen] = (0, react_1.useState)(false);
122
128
  const [filterListAddFilterPopoverIsOpen, setFilterListAddFilterPopoverIsOpen,] = (0, react_1.useState)(false);
123
- const [uniqueCounter, setUniqueCounter] = (0, react_1.useState)(0);
124
- const userFilters = (0, react_1.useMemo)(() => {
125
- return (appliedFilters
126
- ?.map((filter, index) => {
127
- return { filter, index };
128
- })
129
- .filter((filter) => filter.filter.isUserFilter) ?? []);
130
- }, [appliedFilters]);
131
- const adminFilters = (0, react_1.useMemo)(() => {
132
- return appliedFilters?.filter((filter) => !filter.isUserFilter) ?? [];
133
- }, [appliedFilters]);
129
+ const presetOptions = (0, react_1.useMemo)(() => {
130
+ return populatedDashboardFilters?.[0]?.filterType === 'date_range'
131
+ ? populatedDashboardFilters[0].presetRanges?.map((elem) => {
132
+ if (!elem.isStatic) {
133
+ return {
134
+ label: elem.label,
135
+ value: elem.value,
136
+ startDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].start,
137
+ endDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].end,
138
+ };
139
+ }
140
+ return {
141
+ label: elem.label,
142
+ value: elem.value,
143
+ startDate: new Date(elem.startDate),
144
+ endDate: new Date(elem.endDate),
145
+ };
146
+ }) ?? dateRangePickerUtils_1.defaultOptionsV2
147
+ : dateRangePickerUtils_1.defaultOptionsV2;
148
+ }, [populatedDashboardFilters]);
149
+ const [userFilters, setUserFilters] = (0, react_1.useState)({});
150
+ // A filter value can either be a string, an array of strings for a multiselect, or a date range (that could have a comparison range)
151
+ const [filterValues, setFilterValues] = (0, react_1.useState)({});
152
+ (0, react_1.useEffect)(() => {
153
+ setFilterValues({});
154
+ reload(name, true);
155
+ }, [client?.organizationId]);
156
+ (0, react_1.useEffect)(() => {
157
+ setFilterValues({});
158
+ reload(name, false);
159
+ }, [name]);
134
160
  const customOperatorOptions = {
135
161
  [Filter_1.FieldTypes.Number]: [
136
162
  Filter_1.NumberOperator.EqualTo,
@@ -158,32 +184,6 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
158
184
  Filter_1.NullOperator.IsNull,
159
185
  ],
160
186
  };
161
- (0, react_1.useEffect)(() => {
162
- if (!data)
163
- return;
164
- onDashboardDataChange(data, schemaData.schema);
165
- }, [data, filters, schemaData.schema]);
166
- (0, react_1.useEffect)(() => {
167
- if (isDashboardFiltersLoading)
168
- return;
169
- if (populatedDashboardFilters) {
170
- const newApplied = appliedFilters?.map((filter) => {
171
- if ((filter.options && filter.options.length) ||
172
- filter.isUserFilter) {
173
- return filter;
174
- }
175
- const equivalent = populatedDashboardFilters.find((populatedFilter) => populatedFilter._id === filter._id);
176
- return { ...filter, options: equivalent?.options ?? filter.options };
177
- }) ?? populatedDashboardFilters;
178
- if (!(0, fast_deep_equal_1.default)(appliedFilters, newApplied)) {
179
- setAppliedFilters(newApplied);
180
- }
181
- }
182
- setisDashboardOptionsLoading(false);
183
- }, [isDashboardFiltersLoading, populatedDashboardFilters]);
184
- (0, react_1.useEffect)(() => {
185
- reload(name);
186
- }, [name, client]);
187
187
  // Go through all columns in the referenced tables and get the unique values to use in fieldValuesMap
188
188
  (0, react_1.useEffect)(() => {
189
189
  const fetchData = async () => {
@@ -204,24 +204,22 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
204
204
  setFieldValuesMap(newFieldValues);
205
205
  setFieldValuesIsLoaded(true);
206
206
  };
207
- fetchData();
207
+ if (data?.customFiltersEnabled) {
208
+ fetchData();
209
+ }
208
210
  }, [referencedTables]);
209
- // Get the relevant information from the dashboard and schema to pass to FilterModal
210
- const updateFilterSchema = (sections, schema) => {
211
- if (!sections || !schema || schema.length === 0) {
212
- return;
211
+ const filterSchema = (0, react_1.useMemo)(() => {
212
+ if (!data?.sections ||
213
+ !schemaData.schema ||
214
+ schemaData.schema.length === 0) {
215
+ return { columns: [] };
213
216
  }
214
- setFilterSchemaIsLoaded(false);
217
+ const sections = data?.sections;
218
+ const schema = schemaData.schema;
215
219
  // find intersection of all referenced tables
216
- const tables = Object.keys(sections)
217
- .map((section) => {
218
- return sections[section].map((chart) => {
219
- return chart.referencedTables;
220
- });
221
- })
222
- .reduce((accumulator, currentArray) => {
223
- return accumulator.concat(currentArray);
224
- }, []);
220
+ const tables = Object.values(sections)
221
+ .flatMap((section) => section.map((chart) => chart.referencedTables))
222
+ .flat();
225
223
  if (tables && tables.length > 0) {
226
224
  let intersection = new Set(tables[0]);
227
225
  for (let i = 1; i < tables.length; ++i) {
@@ -245,289 +243,94 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
245
243
  .reduce((accumulator, currentArray) => {
246
244
  return accumulator.concat(currentArray);
247
245
  }, []);
248
- setFilterSchema({ columns });
249
- }
250
- else {
251
- setFilterSchema({ columns: [] });
252
- }
253
- setFilterSchemaIsLoaded(true);
254
- };
255
- const onDashboardDataChange = (resp, schema) => {
256
- // setDashboardSections(resp.sections ?? {});
257
- updateFilterSchema(resp.sections, schema);
258
- const filterArray = [];
259
- if (resp.dateFilter && Object.keys(resp.dateFilter).length) {
260
- let presetsOptions = dateRangePickerUtils_1.defaultOptionsV2;
261
- if (resp.dateFilter.presetRanges) {
262
- presetsOptions = resp.dateFilter.presetRanges.map((elem) => {
263
- if (!elem.isStatic) {
264
- return {
265
- label: elem.label,
266
- value: elem.value,
267
- startDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].start,
268
- endDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].end,
269
- };
270
- }
271
- return {
272
- label: elem.label,
273
- value: elem.value,
274
- startDate: new Date(elem.startDate),
275
- endDate: new Date(elem.endDate),
276
- };
277
- });
278
- }
279
- setPresetFilters(presetsOptions);
280
- const key = resp.dateFilter?.primaryRange?.value || 'LAST_6_MONTHS';
281
- const primaryPreset = presetsOptions.find((option) => {
282
- return option.value === key;
283
- });
284
- const filter = {
285
- startDate: primaryPreset.startDate,
286
- endDate: primaryPreset.endDate,
287
- filterType: 'date_range',
288
- options: presetsOptions.map((elem) => {
289
- return {
290
- label: elem.label,
291
- value: elem.value,
292
- };
293
- }),
294
- field: 'date_range',
295
- label: resp.dateFilter.label,
296
- preset: {
297
- label: primaryPreset.label,
298
- },
299
- dashboardName: name,
300
- };
301
- if (resp.dateFilter.comparison) {
302
- filter.comparison = true;
303
- const compKey = resp.dateFilter.defaultComparisonRange ?? 'PREV_PERIOD';
304
- const range = { start: filter.startDate, end: filter.endDate };
305
- filter.comparisonRange = {
306
- startDate: dateRangePickerUtils_1.COMPARISON_RANGE[compKey](range)?.start,
307
- endDate: dateRangePickerUtils_1.COMPARISON_RANGE[compKey](range)?.end,
308
- value: compKey,
309
- };
310
- }
311
- else {
312
- filter.comparison = false;
313
- }
314
- filterArray.push(filter);
315
- }
316
- // Add string filters to filterArray
317
- if (resp.filters && resp.filters.length) {
318
- Object.values(resp.filters)
319
- .filter((filter) => filter.filterType !== 'date_range')
320
- .forEach((filter) => {
321
- let processedFilter = processFilter(filter);
322
- if (populatedDashboardFilters) {
323
- const equivalent = populatedDashboardFilters.find((populatedFilter) => populatedFilter._id === filter._id);
324
- processedFilter = {
325
- ...processedFilter,
326
- options: equivalent?.options ?? filter.options,
327
- };
328
- }
329
- filterArray.push(processedFilter);
330
- });
331
- }
332
- // Add custom filter to filterArray
333
- if (filters) {
334
- filters.forEach((filter) => {
335
- filterArray.push({
336
- ...filter,
337
- dashboardName: name,
338
- isUserFilter: true,
339
- });
340
- });
341
- }
342
- // remove all that are already present in dashboardSpecificFilters
343
- const dashboardSpecificFilters = dashboardFilters.filter((f) => f.dashboardName === name);
344
- if (!(0, fast_deep_equal_1.default)(dashboardSpecificFilters, filterArray)) {
345
- dashboardFiltersDispatch({
346
- type: 'CLEAR_AND_ADD_DASHBOARD_FILTERS',
347
- data: filterArray,
348
- dashboardName: name,
349
- });
350
- }
351
- if (!(0, fast_deep_equal_1.default)(appliedFilters, filterArray)) {
352
- setAppliedFilters(filterArray);
353
- }
354
- setInitialLoad(false);
355
- };
356
- const handleOnClickDashboardItem = (elem) => {
357
- if (onClickReport) {
358
- onClickReport({ ...elem, _id: elem.id });
359
- }
360
- };
361
- function removeQuotes(str) {
362
- if (str.startsWith('"') && str.endsWith('"')) {
363
- return str.slice(1, -1);
246
+ return { columns };
364
247
  }
365
248
  else {
366
- return str;
249
+ return { columns: [] };
367
250
  }
368
- }
369
- const processFilter = (filter, value = null) => {
370
- //for dateObjects only, since values are arrays for dateObjects
371
- const { ...filterWithoutSelectedValue } = filter; // _ is a throwaway variable
372
- let selectedValue;
373
- let selectedElem;
374
- if (filter.filterType === 'string') {
375
- if (filter.options) {
376
- selectedElem = filter.options.find((elem) => elem[removeQuotes(filter.field)] === value);
377
- }
378
- if (selectedElem) {
379
- selectedValue = selectedElem[removeQuotes(filter.field)];
380
- }
381
- return {
382
- ...filterWithoutSelectedValue,
383
- ...(selectedValue ? { selectedValue } : {}),
384
- dashboardName: name,
385
- };
386
- }
387
- if (filter.filterType === 'date' || filter.filterType === 'date_range') {
388
- return {
389
- startDate: value ? value[0] : filter.startDate,
390
- endDate: value ? value[1] : filter.endDate,
391
- filterType: 'date_range',
392
- label: 'Date',
393
- field: 'date_range',
394
- options: filter.options,
395
- dashboardName: name,
396
- };
397
- }
398
- };
251
+ }, [data?.sections, schemaData.schema]);
252
+ const handleOnClickDashboardItem = (elem) => onClickReport && onClickReport({ ...elem, _id: elem.id });
399
253
  const updateFilter = (filter, value = null, comparison = null) => {
400
- if (!appliedFilters) {
254
+ if (!populatedDashboardFilters)
401
255
  return;
402
- }
403
- //for dateObjects only, since values are arrays for dateObjects
404
- const { ...filterWithoutSelectedValue } = filter; // _ is a throwaway variable
256
+ let filterValue = {};
405
257
  if (filter.filterType === 'string') {
406
- let selectedValue = {};
407
- if (value || value === '') {
408
- if (filter.stringFilterType === 'multiselect') {
409
- if (value.length === 0) {
410
- selectedValue = { values: [] };
411
- }
412
- else {
413
- selectedValue = { values: value, operator: 'IN' };
414
- }
258
+ if (filter.stringFilterType === 'multiselect') {
259
+ if ((value?.length ?? 0) === 0) {
260
+ filterValue = { values: undefined, operator: undefined };
415
261
  }
416
262
  else {
417
- selectedValue = { selectedValue: value };
263
+ filterValue = { values: value, operator: 'IN' };
418
264
  }
419
265
  }
420
- const newFilter = {
421
- ...filterWithoutSelectedValue,
422
- ...selectedValue,
423
- dashboardName: name,
424
- stringFilterType: filter.stringFilterType,
425
- table: filter.table,
426
- labelField: filter.labelField,
427
- label: filter.label,
428
- field: filter.field,
429
- filterType: Filter_2.DashboardFilterType.String,
430
- };
431
- dashboardFiltersDispatch({
432
- type: 'UPDATE_DASHBOARD_FILTER',
433
- id: filter.field,
434
- data: newFilter,
435
- });
436
- const index = appliedFilters.findIndex((filter) => filter.field === newFilter.field &&
437
- filter.dashboardName === newFilter.dashboardName);
438
- if (index !== -1) {
439
- setAppliedFilters([
440
- ...appliedFilters.slice(0, index),
441
- newFilter,
442
- ...appliedFilters.slice(index + 1),
443
- ]);
266
+ else {
267
+ filterValue = { selectedValue: value };
444
268
  }
445
- return;
269
+ setFilterValues((filterValues) => ({
270
+ ...filterValues,
271
+ [filter.label]: filterValue,
272
+ }));
446
273
  }
447
- if (filter.filterType === Filter_2.DashboardFilterType.Date) {
274
+ else if (filter.filterType === Filter_2.DashboardFilterType.Date) {
448
275
  if (comparison ||
449
- (filter.comparison && filter.comparisonRange.value !== 'NO_COMPARISON')) {
276
+ (filter.comparison &&
277
+ (filter.comparisonRange?.value ?? 'NO_COMPARISON') !==
278
+ 'NO_COMPARISON')) {
450
279
  let preset = '';
451
280
  if (comparison) {
452
- preset = filter.preset.label;
281
+ preset = filter.preset.value;
453
282
  }
454
- const key = comparison?.value || filter.comparisonRange.value;
283
+ const key = comparison?.value ||
284
+ (filter.comparisonRange?.value ?? 'NO_COMPARISON');
455
285
  let primaryRange = {
456
286
  start: value ? value.startDate : filter.startDate,
457
287
  end: value ? value.endDate : filter.endDate,
458
288
  };
459
289
  if (value && value.preset) {
460
290
  preset = value.preset;
461
- primaryRange = (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetFilters);
291
+ primaryRange = (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetOptions);
462
292
  }
463
- const newFilter = {
293
+ filterValue = {
464
294
  startDate: primaryRange.start,
465
295
  endDate: primaryRange.end,
466
- filterType: Filter_2.DashboardFilterType.Date,
467
- label: filter.label,
468
- field: 'date_range',
469
- preset: { label: preset, value: preset },
470
- options: filter.options,
471
- comparison: true,
296
+ preset: {
297
+ label: presetOptions.find((o) => o.value === preset)?.label ?? preset,
298
+ value: preset,
299
+ },
472
300
  comparisonRange: {
473
301
  startDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)?.start,
474
302
  endDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)?.end,
475
303
  value: key,
476
304
  },
477
- defaultComparisonRange: filter.defaultComparisonRange,
478
- primaryRange: filter.primaryRange,
479
- dashboardName: name,
480
305
  };
481
- dashboardFiltersDispatch({
482
- type: 'UPDATE_DASHBOARD_FILTER',
483
- id: 'date_range',
484
- data: newFilter,
485
- });
486
- const index = appliedFilters.findIndex((filter) => filter.field === newFilter.field &&
487
- filter.dashboardName === newFilter.dashboardName);
488
- if (index !== -1) {
489
- setAppliedFilters([
490
- ...appliedFilters.slice(0, index),
491
- newFilter,
492
- ...appliedFilters.slice(index + 1),
493
- ]);
494
- }
306
+ setFilterValues((filterValues) => ({
307
+ ...filterValues,
308
+ [filter.label]: filterValue,
309
+ }));
495
310
  }
496
311
  else {
497
312
  const primaryRange = value && value.preset
498
- ? (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetFilters)
313
+ ? (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetOptions)
499
314
  : {
500
315
  start: value?.startDate || filter.startDate,
501
316
  end: value?.endDate || filter.endDate,
502
317
  };
503
318
  const preset = value?.preset ? value.preset : '';
504
- const newFilter = {
505
- ...filter,
506
- preset: { label: preset, value: preset },
319
+ filterValue = {
507
320
  startDate: primaryRange.start,
508
321
  endDate: primaryRange.end,
509
- filterType: Filter_2.DashboardFilterType.Date,
510
- field: 'date_range',
511
- options: filter.options,
512
- label: 'Date',
513
- dashboardName: name,
322
+ preset: { label: preset, value: preset },
514
323
  };
515
- dashboardFiltersDispatch({
516
- type: 'UPDATE_DASHBOARD_FILTER',
517
- id: 'date_range',
518
- data: newFilter,
519
- });
520
- const index = appliedFilters.findIndex((filter) => filter.field === newFilter.field &&
521
- filter.dashboardName === newFilter.dashboardName);
522
- if (index !== -1) {
523
- setAppliedFilters([
524
- ...appliedFilters.slice(0, index),
525
- newFilter,
526
- ...appliedFilters.slice(index + 1),
527
- ]);
528
- }
324
+ setFilterValues((filterValues) => ({
325
+ ...filterValues,
326
+ [filter.label]: filterValue,
327
+ }));
529
328
  }
530
329
  }
330
+ reload(name, false, undefined, {
331
+ filters: populatedDashboardFilters.map((f) => filter.label === f.label ? { ...f, ...filterValue } : f),
332
+ editedFilterLabel: filter.label,
333
+ });
531
334
  };
532
335
  // generate the correct filter structure
533
336
  const getUserFilter = (filter, id, existingFilter) => {
@@ -552,43 +355,20 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
552
355
  return userFilter;
553
356
  };
554
357
  // new update filter function for user added filters
555
- const updateUserFilter = (filter, id) => {
556
- if (!appliedFilters) {
557
- return;
558
- }
559
- const newFilter = getUserFilter(filter, id);
560
- dashboardFiltersDispatch({
561
- type: 'ADD_DASHBOARD_FILTER',
562
- data: newFilter,
563
- });
564
- setAppliedFilters([...appliedFilters, newFilter]);
358
+ const updateUserFilter = (filter) => {
359
+ setUserFilters((userFilters) => ({
360
+ ...userFilters,
361
+ [filter.field]: filter,
362
+ }));
565
363
  };
566
- // useEffect(() => {
567
- // if (dashboardSections && dashboard) {
568
- // const totalNumberOfItems = Object.values(dashboardSections).reduce(
569
- // (count: number, arr: any) => count + arr.length,
570
- // 0,
571
- // );
572
- // const itemsLoaded = Object.keys(dashboard).length;
573
- // }
574
- // }, [dashboard, dashboardSections]);
575
364
  (0, react_1.useEffect)(() => {
576
- if (onChangeLoading) {
577
- onChangeLoading(isLoading || initialLoad);
365
+ if (onChangeLoading && isLoading) {
366
+ onChangeLoading(isLoading);
578
367
  }
579
- }, [isLoading, initialLoad, onChangeLoading]);
580
- const sortByOrdering = (a, b) => {
581
- if (a.order === undefined && b.order === undefined)
582
- return 0;
583
- if (a.order === undefined)
584
- return 1;
585
- if (b.order === undefined)
586
- return -1;
587
- return a.order - b.order;
588
- };
368
+ }, [isLoading, onChangeLoading]);
589
369
  if (!isLoading &&
590
370
  (Object.keys(data?.sections ?? {}).length === 0 ||
591
- data?.sections?.['']?.length === 0)) {
371
+ Object.values(data?.sections ?? {})[0]?.length === 0)) {
592
372
  return (0, jsx_runtime_1.jsx)(EmptyDashboardComponent, {});
593
373
  }
594
374
  if (hidden || isLoading || isClientLoading || !data?.sections) {
@@ -596,13 +376,18 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
596
376
  }
597
377
  return ((0, jsx_runtime_1.jsxs)("div", { className: className, ...(0, styles_1.styleToProps)(containerStyle), children: [data &&
598
378
  data.customFiltersEnabled &&
599
- filterSchemaIsLoaded &&
600
379
  !hideAdminErrors &&
601
380
  !hideFilters &&
602
381
  data &&
603
382
  data.customFiltersEnabled &&
604
383
  filterSchema &&
605
- filterSchema.columns.length === 0 && ((0, jsx_runtime_1.jsx)("div", { style: { marginBottom: 10 }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.QuillErrorMessageComponent, { errorMessage: "Warning: No custom filter options because there are no common views among the charts in the dashboard" }) })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center' }, children: [!hideFilters && ((0, jsx_runtime_1.jsxs)(FilterContainerComponent, { children: [adminFilters.map((filter, index) => ((0, jsx_runtime_1.jsx)(DashboardFilter_1.DashboardFilter, { filter: filter, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent, isLoading: isDashboardOptionsLoading }, filter._id ?? index))), (0, jsx_runtime_1.jsxs)("div", { style: {
384
+ filterSchema.columns.length === 0 && ((0, jsx_runtime_1.jsx)("div", { style: { marginBottom: 10 }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.QuillErrorMessageComponent, { errorMessage: "Warning: No custom filter options because there are no common views among the charts in the dashboard" }) })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center' }, children: [!hideFilters && ((0, jsx_runtime_1.jsxs)(FilterContainerComponent, { children: [(populatedDashboardFilters ?? []).map((filter) => ((0, jsx_runtime_1.jsx)(DashboardFilter_1.DashboardFilter, { filter: {
385
+ ...filter,
386
+ ...(filter.filterType === 'date_range' && {
387
+ options: presetOptions,
388
+ }),
389
+ ...filterValues[filter.label],
390
+ }, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent, isLoading: isDashboardFilterLoading(filter.label) }, filter.label + name))), (0, jsx_runtime_1.jsxs)("div", { style: {
606
391
  display: 'flex',
607
392
  flexDirection: 'column',
608
393
  }, children: [data && data.customFiltersEnabled && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
@@ -612,14 +397,12 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
612
397
  }
613
398
  }, label: `Add Filter` })), (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: addFilterPopoverIsOpen, setIsOpen: setAddFilterPopoverIsOpen, popoverTitle: "Add Filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: filterSchema, fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
614
399
  setAddFilterPopoverIsOpen(false);
615
- if (appliedFilters) {
616
- updateUserFilter(filter, appliedFilters.length);
617
- }
618
- }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] }), userFilters.length > 0 && ((0, jsx_runtime_1.jsx)(ModalComponent, { triggerLabel: `Filters${userFilters.length > 0 ? ` (${userFilters.length})` : ''}`, isOpen: filterListIsOpen, setIsOpen: setFilterListIsOpen, title: "Filters", children: (0, jsx_runtime_1.jsxs)("div", { style: {
400
+ updateUserFilter(filter);
401
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] }), Object.values(userFilters).length > 0 && ((0, jsx_runtime_1.jsx)(ModalComponent, { triggerLabel: `Filters${Object.values(userFilters).length > 0 ? ` (${Object.values(userFilters).length})` : ''}`, isOpen: filterListIsOpen, setIsOpen: setFilterListIsOpen, title: "Filters", children: (0, jsx_runtime_1.jsxs)("div", { style: {
619
402
  display: 'flex',
620
403
  flexDirection: 'column',
621
404
  alignItems: 'start',
622
- }, children: [userFilters.map(({ filter, index }) => ((0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: filterSchema, filter: {
405
+ }, children: [Object.values(userFilters).map((filter, index) => ((0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: filterSchema, filter: {
623
406
  filterType: filter.filterType,
624
407
  fieldType: filter.fieldType,
625
408
  field: filter.field,
@@ -627,31 +410,17 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
627
410
  value: filter.value,
628
411
  }, filterLabel: filter ? (0, filterProcessing_1.filterSentence)(filter) : '', index: index, fieldValuesMap: fieldValuesMap, customOperatorOptions: customOperatorOptions, FilterTagComponent: FilterTagComponent, FilterModal: FilterModal_1.default, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (newFilter) => {
629
412
  const updatedFilter = getUserFilter(newFilter, filter._id, filter);
630
- if (!appliedFilters) {
631
- return;
632
- }
633
413
  dashboardFiltersDispatch({
634
414
  type: 'UPDATE_DASHBOARD_FILTER',
635
415
  id: updatedFilter._id,
636
416
  data: updateFilter,
637
417
  });
638
- setAppliedFilters([
639
- ...appliedFilters.slice(0, index),
640
- updatedFilter,
641
- ...appliedFilters.slice(index + 1),
642
- ]);
643
418
  }, handleFilterDelete: () => {
644
- if (!appliedFilters) {
645
- return;
646
- }
647
- dashboardFiltersDispatch({
648
- type: 'DELETE_DASHBOARD_FILTER',
649
- id: appliedFilters[index]._id,
419
+ setUserFilters((userFilters) => {
420
+ const updatedFilters = { ...userFilters };
421
+ delete updatedFilters[filter.field];
422
+ return updatedFilters;
650
423
  });
651
- setAppliedFilters([
652
- ...appliedFilters.slice(0, index),
653
- ...appliedFilters.slice(index + 1),
654
- ]);
655
424
  }, containerStyle: { width: 300, marginBottom: 10 } }, `userFilter_${index}_${filter ? (0, filterProcessing_1.filterSentence)(filter) : ''}`))), (0, jsx_runtime_1.jsxs)("div", { style: {
656
425
  display: 'flex',
657
426
  flexDirection: 'column',
@@ -662,10 +431,8 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
662
431
  }, label: `Add Filter` }), (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: filterListAddFilterPopoverIsOpen, setIsOpen: setFilterListAddFilterPopoverIsOpen, popoverTitle: "Add Filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: filterSchema, fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
663
432
  setFilterListAddFilterPopoverIsOpen(false);
664
433
  setFilterListIsOpen(false);
665
- const id = uniqueCounter;
666
- setUniqueCounter(uniqueCounter + 1);
667
- updateUserFilter(filter, id);
668
- }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] })] }) }))] })), templateDashboardName && ((0, jsx_runtime_1.jsx)(DashboardTemplate_1.default, { name: templateDashboardName, originDashboard: name, client: client, appliedFilters: appliedFilters, ModalComponent: ModalComponent, TemplateChartComponent: TemplateChartComponent, TemplateMetricComponent: TemplateMetricComponent, TemplateTableComponent: TemplateTableComponent, ButtonComponent: SecondaryButtonComponent }))] }), Object.keys(data.sections)
434
+ updateUserFilter(filter);
435
+ }, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] })] }) }))] })), templateDashboardName && ((0, jsx_runtime_1.jsx)(DashboardTemplate_1.default, { name: templateDashboardName, originDashboard: name, client: client, appliedFilters: populatedDashboardFilters, ModalComponent: ModalComponent, TemplateChartComponent: TemplateChartComponent, TemplateMetricComponent: TemplateMetricComponent, TemplateTableComponent: TemplateTableComponent, ButtonComponent: SecondaryButtonComponent }))] }), Object.keys(data.sections)
669
436
  .sort(function (a, b) {
670
437
  return a.length - b.length;
671
438
  })
@@ -679,13 +446,19 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
679
446
  textAlign: 'left',
680
447
  marginTop: 12,
681
448
  }, children: section })] })), metrics(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "metrics", children: metrics(data.sections, section, sortByOrdering).map((item, index) => {
682
- return ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: appliedFilters, children: ({ isLoading, error, data, }) => ((0, jsx_runtime_1.jsx)(MetricComponent, { error: error, isLoading: isLoading, report: data, onClick: !isLoading && onClickReport
449
+ return ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, additionalProcessing: {
450
+ page: paginationProcessing_1.DEFAULT_PAGINATION,
451
+ last: additionalProcessing?.last,
452
+ }, children: ({ isLoading, error, data, }) => ((0, jsx_runtime_1.jsx)(MetricComponent, { error: error, isLoading: isLoading, report: data, onClick: !isLoading && onClickReport
683
453
  ? () => handleOnClickDashboardItem({
684
454
  ...item,
685
455
  ...data,
686
456
  })
687
- : () => { }, hoverActions: hoverActions }, item.name + '' + index)) }, `${item._id}${index}`));
688
- }) })), charts(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "charts", children: charts(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.ChartDataLoader, { item: item, dateBucket: dateBucket, additionalProcessing: additionalProcessing, filters: appliedFilters, children: ({ isLoading, data, error, dateBucket, }) => ((0, jsx_runtime_1.jsx)(ChartComponent, { report: data, error: error, onClick: () => {
457
+ : () => { }, hoverActions: hoverActions }, item.name + '' + index)) }, `metric${index}`));
458
+ }) })), charts(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "charts", children: charts(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.ChartDataLoader, { item: item, dateBucket: dateBucket, additionalProcessing: {
459
+ page: pagination,
460
+ last: additionalProcessing?.last,
461
+ }, filters: populatedDashboardFilters, children: ({ isLoading, data, error, dateBucket, }) => ((0, jsx_runtime_1.jsx)(ChartComponent, { report: data, error: error, onClick: () => {
689
462
  if (!isLoading && onClickReport) {
690
463
  handleOnClickDashboardItem({
691
464
  ...item,
@@ -697,12 +470,18 @@ function Dashboard({ name, hidden = false, SelectComponent = QuillSelectWithComb
697
470
  height: 300,
698
471
  } })) : ((0, jsx_runtime_1.jsx)(Chart_1.ChartDisplay, { reportId: data.id, config: data, loading: isLoading, containerStyle: chartContainerStyle, colors: theme.chartColors?.length
699
472
  ? theme.chartColors
700
- : undefined, scrollable: false, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, onClickChartElement: onClickChartElement })) }, item.name + '' + index)) }, `${item._id}${index}`))) })), tables(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "tables", children: tables(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: appliedFilters, children: ({ isLoading, error, onPageChange, onSortChange, data, }) => ((0, jsx_runtime_1.jsx)(TableComponent, { report: data, isLoading: isLoading, error: error, onClick: !isLoading && onClickReport
473
+ : undefined, scrollable: false, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, comparisonLineStyle: comparisonLineStyle, onClickChartElement: onClickChartElement })) }, item.name + '' + index)) }, `chart${index}`))) })), tables(data.sections, section, sortByOrdering).length > 0 && ((0, jsx_runtime_1.jsx)(DashboardSectionComponent, { section: "tables", children: tables(data.sections, section, sortByOrdering).map((item, index) => ((0, jsx_runtime_1.jsx)(DataLoader_1.default, { item: item, filters: populatedDashboardFilters, additionalProcessing: {
474
+ page: pagination,
475
+ last: additionalProcessing?.last,
476
+ }, children: ({ isLoading, error, onPageChange, onSortChange, data, rowCount, rowCountIsLoading, }) => ((0, jsx_runtime_1.jsx)(TableComponent, { report: data, isLoading: isLoading, error: error, onClick: !isLoading && onClickReport
701
477
  ? () => handleOnClickDashboardItem({
702
478
  ...item,
703
479
  ...data,
704
480
  })
705
- : undefined, hoverActions: hoverActions, rowCount: data?.rowCount ?? data?.rows?.length ?? 0, onPageChange: (page) => onPageChange(page), onSortChange: (sort) => onSortChange(sort) })) }, `${item._id}${index}`))) }))] }, section + '' + sectionIndex));
481
+ : undefined, hoverActions: hoverActions, rowCount: rowCount ??
482
+ data?.rowCount ??
483
+ data?.rows?.length ??
484
+ 0, rowCountIsLoading: rowCountIsLoading, onPageChange: (page) => onPageChange(page), onSortChange: (sort) => onSortChange(sort) })) }, `${name}${index}`))) }))] }, section + '' + sectionIndex));
706
485
  })] }));
707
486
  }
708
487
  exports.default = Dashboard;