@quillsql/react 2.13.1 → 2.13.3

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 (147) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +7 -15
  3. package/dist/cjs/ChartBuilder.d.ts +4 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +7 -7
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +40 -19
  8. package/dist/cjs/Context.d.ts +52 -16
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +34 -47
  11. package/dist/cjs/Dashboard.d.ts +5 -2
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +73 -83
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -1
  15. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  16. package/dist/cjs/ReportBuilder.js +179 -114
  17. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  18. package/dist/cjs/SQLEditor.js +18 -11
  19. package/dist/cjs/Table.d.ts.map +1 -1
  20. package/dist/cjs/Table.js +6 -3
  21. package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
  22. package/dist/cjs/components/Dashboard/DataLoader.d.ts +6 -4
  23. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  24. package/dist/cjs/components/Dashboard/DataLoader.js +76 -68
  25. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  26. package/dist/cjs/components/Dashboard/MetricComponent.js +14 -3
  27. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  28. package/dist/cjs/components/Dashboard/TableComponent.js +8 -1
  29. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +1 -1
  30. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  31. package/dist/cjs/components/QuillMultiSelectWithCombo.js +6 -2
  32. package/dist/cjs/components/QuillSelect.js +3 -3
  33. package/dist/cjs/components/QuillSelectWithCombo.d.ts +1 -1
  34. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  35. package/dist/cjs/components/QuillSelectWithCombo.js +13 -3
  36. package/dist/cjs/components/QuillTable.d.ts +1 -1
  37. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  38. package/dist/cjs/components/QuillTable.js +17 -14
  39. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +33 -0
  40. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -0
  41. package/dist/cjs/components/ReportBuilder/FilterStack.js +121 -0
  42. package/dist/cjs/components/ReportBuilder/ui.d.ts +0 -1
  43. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  44. package/dist/cjs/components/ReportBuilder/ui.js +1 -13
  45. package/dist/cjs/components/UiComponents.d.ts +2 -1
  46. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  47. package/dist/cjs/components/UiComponents.js +3 -3
  48. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  49. package/dist/cjs/hooks/useDashboard.js +41 -50
  50. package/dist/cjs/hooks/useExport.d.ts +14 -1
  51. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  52. package/dist/cjs/hooks/useExport.js +120 -38
  53. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  54. package/dist/cjs/hooks/useQuill.js +3 -1
  55. package/dist/cjs/models/Client.d.ts +2 -0
  56. package/dist/cjs/models/Client.d.ts.map +1 -1
  57. package/dist/cjs/models/Dashboard.d.ts +1 -1
  58. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  59. package/dist/cjs/models/Filter.d.ts +1 -1
  60. package/dist/cjs/models/Filter.d.ts.map +1 -1
  61. package/dist/cjs/utils/client.d.ts.map +1 -1
  62. package/dist/cjs/utils/client.js +1 -0
  63. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  64. package/dist/cjs/utils/dashboard.js +6 -3
  65. package/dist/cjs/utils/filterProcessing.d.ts +1 -1
  66. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  67. package/dist/cjs/utils/filterProcessing.js +3 -3
  68. package/dist/cjs/utils/report.d.ts +2 -2
  69. package/dist/cjs/utils/report.d.ts.map +1 -1
  70. package/dist/cjs/utils/report.js +5 -4
  71. package/dist/cjs/utils/tableProcessing.d.ts +2 -2
  72. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  73. package/dist/cjs/utils/tableProcessing.js +3 -1
  74. package/dist/esm/Chart.d.ts.map +1 -1
  75. package/dist/esm/Chart.js +7 -15
  76. package/dist/esm/ChartBuilder.d.ts +4 -1
  77. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  78. package/dist/esm/ChartBuilder.js +7 -7
  79. package/dist/esm/ChartEditor.d.ts.map +1 -1
  80. package/dist/esm/ChartEditor.js +41 -20
  81. package/dist/esm/Context.d.ts +52 -16
  82. package/dist/esm/Context.d.ts.map +1 -1
  83. package/dist/esm/Context.js +33 -46
  84. package/dist/esm/Dashboard.d.ts +5 -2
  85. package/dist/esm/Dashboard.d.ts.map +1 -1
  86. package/dist/esm/Dashboard.js +75 -85
  87. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +1 -1
  88. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  89. package/dist/esm/ReportBuilder.js +182 -117
  90. package/dist/esm/SQLEditor.d.ts.map +1 -1
  91. package/dist/esm/SQLEditor.js +18 -11
  92. package/dist/esm/Table.d.ts.map +1 -1
  93. package/dist/esm/Table.js +6 -3
  94. package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
  95. package/dist/esm/components/Dashboard/DataLoader.d.ts +6 -4
  96. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  97. package/dist/esm/components/Dashboard/DataLoader.js +77 -69
  98. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  99. package/dist/esm/components/Dashboard/MetricComponent.js +14 -3
  100. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  101. package/dist/esm/components/Dashboard/TableComponent.js +8 -1
  102. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +1 -1
  103. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  104. package/dist/esm/components/QuillMultiSelectWithCombo.js +6 -2
  105. package/dist/esm/components/QuillSelect.js +3 -3
  106. package/dist/esm/components/QuillSelectWithCombo.d.ts +1 -1
  107. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  108. package/dist/esm/components/QuillSelectWithCombo.js +13 -3
  109. package/dist/esm/components/QuillTable.d.ts +1 -1
  110. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  111. package/dist/esm/components/QuillTable.js +17 -14
  112. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +33 -0
  113. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -0
  114. package/dist/esm/components/ReportBuilder/FilterStack.js +118 -0
  115. package/dist/esm/components/ReportBuilder/ui.d.ts +0 -1
  116. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  117. package/dist/esm/components/ReportBuilder/ui.js +0 -8
  118. package/dist/esm/components/UiComponents.d.ts +2 -1
  119. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  120. package/dist/esm/components/UiComponents.js +3 -3
  121. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  122. package/dist/esm/hooks/useDashboard.js +41 -50
  123. package/dist/esm/hooks/useExport.d.ts +14 -1
  124. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  125. package/dist/esm/hooks/useExport.js +122 -40
  126. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  127. package/dist/esm/hooks/useQuill.js +3 -1
  128. package/dist/esm/models/Client.d.ts +2 -0
  129. package/dist/esm/models/Client.d.ts.map +1 -1
  130. package/dist/esm/models/Dashboard.d.ts +1 -1
  131. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  132. package/dist/esm/models/Filter.d.ts +1 -1
  133. package/dist/esm/models/Filter.d.ts.map +1 -1
  134. package/dist/esm/utils/client.d.ts.map +1 -1
  135. package/dist/esm/utils/client.js +1 -0
  136. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  137. package/dist/esm/utils/dashboard.js +6 -3
  138. package/dist/esm/utils/filterProcessing.d.ts +1 -1
  139. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  140. package/dist/esm/utils/filterProcessing.js +3 -3
  141. package/dist/esm/utils/report.d.ts +2 -2
  142. package/dist/esm/utils/report.d.ts.map +1 -1
  143. package/dist/esm/utils/report.js +5 -4
  144. package/dist/esm/utils/tableProcessing.d.ts +2 -2
  145. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  146. package/dist/esm/utils/tableProcessing.js +3 -1
  147. package/package.json +3 -3
@@ -28,38 +28,69 @@ const constructReportFromItem = (item) => {
28
28
  filtersApplied: item.filtersApplied,
29
29
  };
30
30
  };
31
- function DataLoader({ item, children, filters, }) {
31
+ function filterValuesEquivalent(filters1, filters2) {
32
+ if (filters1.length !== filters2.length) {
33
+ return false;
34
+ }
35
+ // The two filters arrays aren't necessarily in the same order
36
+ // we can build two dictionaries of [label, filter] and compare them
37
+ const mappedFilters1 = filters1.reduce((acc, filter) => {
38
+ acc[filter.label] = filter;
39
+ return acc;
40
+ }, {});
41
+ const mappedFilters2 = filters2.reduce((acc, filter) => {
42
+ acc[filter.label] = filter;
43
+ return acc;
44
+ }, {});
45
+ for (const key in mappedFilters1) {
46
+ if (mappedFilters1[key].selectedValue !==
47
+ mappedFilters2[key]?.selectedValue ||
48
+ mappedFilters1[key].values !== mappedFilters2[key]?.values ||
49
+ mappedFilters1[key].field !== mappedFilters2[key]?.field ||
50
+ mappedFilters1[key].label !== mappedFilters2[key]?.label ||
51
+ mappedFilters1[key].table !== mappedFilters2[key]?.table ||
52
+ mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
53
+ mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
54
+ mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate ||
55
+ mappedFilters1[key].comparisonRange !==
56
+ mappedFilters2[key]?.comparisonRange) {
57
+ return false;
58
+ }
59
+ }
60
+ return true;
61
+ }
62
+ function DataLoader({ item, children, filters, additionalProcessing: defaultAdditionalProcessing, }) {
32
63
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
33
64
  const [dashboard, dispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
34
65
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
35
66
  const [loading, setLoading] = (0, react_1.useState)(false);
36
67
  const [error, setError] = (0, react_1.useState)(undefined);
37
68
  const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
38
- const [report, setReport] = (0, react_1.useState)(dashboard[item._id] ?? constructReportFromItem(item));
39
- const [additionalProcessing, setAdditionProcessing] = (0, react_1.useState)({
40
- page: paginationProcessing_1.DEFAULT_PAGINATION,
41
- });
69
+ const [report, setReport] = (0, react_1.useState)(dashboard[item.id] ?? constructReportFromItem(item));
70
+ const [additionalProcessing, setAdditionProcessing] = (0, react_1.useState)(defaultAdditionalProcessing);
42
71
  const previousFilters = (0, react_1.useRef)(null);
43
- const [rowCount, setRowCount] = (0, react_1.useState)(dashboard[item._id]?.rowCount ?? 0);
72
+ const [rowCount, setRowCount] = (0, react_1.useState)(dashboard[item.id]?.rowCount ?? 0);
44
73
  const [rowCountIsLoading, setRowCountIsLoading] = (0, react_1.useState)(false);
45
74
  const fetchRowCount = async (processing) => {
46
75
  if (!client || !filters) {
47
76
  return;
48
77
  }
49
78
  setRowCountIsLoading(true);
50
- const rowCount = await (0, report_1.fetchReportRowCount)(item._id, client, true, filters, processing, schemaData.customFields);
51
- dispatch({
52
- type: 'UPDATE_DASHBOARD_ITEM',
53
- id: item._id,
54
- data: { rowCount },
55
- });
56
- setRowCount(rowCount);
79
+ const rowCount = await (0, report_1.fetchReportRowCount)(item.id, client, true, filters, processing, schemaData.customFields);
80
+ if (rowCount) {
81
+ dispatch({
82
+ type: 'UPDATE_DASHBOARD_ITEM',
83
+ id: item.id,
84
+ data: { rowCount },
85
+ });
86
+ setRowCount(rowCount);
87
+ }
57
88
  setRowCountIsLoading(false);
58
89
  };
59
90
  const onPageChange = (page) => {
60
91
  if (additionalProcessing &&
61
92
  additionalProcessing.page &&
62
- (0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
93
+ (0, paginationProcessing_1.shouldFetchMore)(additionalProcessing.page, page, previousPage)) {
63
94
  const newPagination = { ...additionalProcessing.page, page };
64
95
  const updatedProcessing = {
65
96
  ...additionalProcessing,
@@ -89,7 +120,7 @@ function DataLoader({ item, children, filters, }) {
89
120
  setLoading(true);
90
121
  try {
91
122
  const updatedProcessing = { ...additionalProcessing, ...processing };
92
- const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(report.id, client, updatedProcessing, filters, schemaData.customFields);
123
+ const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(report.id, client, updatedProcessing, filters, schemaData.customFields, true);
93
124
  if (paginatedRows.error) {
94
125
  throw new Error('Error fetching chart');
95
126
  }
@@ -111,26 +142,26 @@ function DataLoader({ item, children, filters, }) {
111
142
  if (!client || !filters) {
112
143
  return;
113
144
  }
114
- if (dashboard[item._id] &&
115
- !(0, Chart_1.didFiltersChange)(dashboard[item._id], filters) &&
145
+ if (dashboard[item.id] &&
146
+ !(0, Chart_1.didFiltersChange)(dashboard[item.id], filters) &&
116
147
  !loading &&
117
148
  // @ts-ignore
118
- !dashboard[item._id].triggerReload) {
149
+ !dashboard[item.id].triggerReload) {
119
150
  setLoading(false);
120
151
  const convertedReport = (0, report_1.convertInternalReportToReport)(
121
152
  // @ts-ignore
122
- dashboard[item._id]);
153
+ dashboard[item.id]);
123
154
  setReport(convertedReport);
124
155
  return;
125
156
  }
126
157
  setLoading(true);
127
- const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item._id, client, true, filters, processing, undefined, schemaData.customFields);
128
- fetchRowCount(processing);
158
+ const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item.id, client, true, filters, processing, undefined, schemaData.customFields, true);
129
159
  dispatch({
130
160
  type: 'ADD_DASHBOARD_ITEM',
131
- id: item._id,
132
- data: { ...fetchedReport, triggerReload: false },
161
+ id: item.id,
162
+ data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
133
163
  });
164
+ fetchRowCount(processing);
134
165
  const convertedReport = (0, report_1.convertInternalReportToReport)(fetchedReport);
135
166
  setReport(convertedReport);
136
167
  setAdditionProcessing(processing);
@@ -146,50 +177,21 @@ function DataLoader({ item, children, filters, }) {
146
177
  return;
147
178
  }
148
179
  previousFilters.current = filters;
180
+ setPreviousPage(0);
149
181
  fetchReportHelper(additionalProcessing);
150
- }, [filters, item._id]);
151
- function filterValuesEquivalent(filters1, filters2) {
152
- if (filters1.length !== filters2.length) {
153
- return false;
154
- }
155
- // The two filters arrays aren't necessarily in the same order
156
- // we can build two dictionaries of [label, filter] and compare them
157
- const mappedFilters1 = filters1.reduce((acc, filter) => {
158
- acc[filter.label] = filter;
159
- return acc;
160
- }, {});
161
- const mappedFilters2 = filters2.reduce((acc, filter) => {
162
- acc[filter.label] = filter;
163
- return acc;
164
- }, {});
165
- for (const key in mappedFilters1) {
166
- if (mappedFilters1[key].selectedValue !==
167
- mappedFilters2[key]?.selectedValue ||
168
- mappedFilters1[key].values !== mappedFilters2[key]?.values ||
169
- mappedFilters1[key].field !== mappedFilters2[key]?.field ||
170
- mappedFilters1[key].label !== mappedFilters2[key]?.label ||
171
- mappedFilters1[key].table !== mappedFilters2[key]?.table ||
172
- mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
173
- mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
174
- mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate) {
175
- return false;
176
- }
177
- }
178
- return true;
179
- }
182
+ }, [filters, item.id]);
180
183
  (0, react_1.useEffect)(() => {
181
- // @ts-ignore
182
- if (dashboard[item._id] && dashboard[item._id].triggerReload) {
184
+ if (dashboard[item.id]?.triggerReload) {
183
185
  fetchReportHelper(additionalProcessing);
184
186
  }
185
- }, [dashboard[item._id]]);
187
+ }, [dashboard[item.id]]);
186
188
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({
187
189
  isLoading: loading,
188
190
  error,
189
191
  onPageChange,
190
192
  onSortChange,
191
193
  data: report,
192
- rowCount,
194
+ rowCount: report.pivot ? report.rowCount : rowCount,
193
195
  rowCountIsLoading,
194
196
  }) }));
195
197
  }
@@ -202,36 +204,37 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
202
204
  const [loading, setLoading] = (0, react_1.useState)(false);
203
205
  const [error, setError] = (0, react_1.useState)(undefined);
204
206
  const [localDateBucket, setLocalDateBucket] = (0, react_1.useState)(undefined);
205
- const [localAdditionalProcessing, setLocalAdditionalProcessing] = (0, react_1.useState)();
206
- const [report, setReport] = (0, react_1.useState)(dashboard[item._id] ?? constructReportFromItem(item));
207
+ const [report, setReport] = (0, react_1.useState)(dashboard[item.id] ?? constructReportFromItem(item));
207
208
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
208
209
  const [schemaData] = (0, react_1.useContext)(Context_1.SchemaDataContext);
210
+ const previousFilters = (0, react_1.useRef)(null);
209
211
  const fetchReportHelper = async (useReportTask = true) => {
210
212
  if (!client || !filters) {
211
213
  return;
212
214
  }
213
- const tempReport = dashboard[item._id];
215
+ const tempReport = dashboard[item.id];
214
216
  if (tempReport &&
215
217
  !(0, Chart_1.didFiltersChange)(tempReport, filters) &&
216
218
  !tempReport.triggerReload &&
217
- dateBucket === localDateBucket &&
218
- additionalProcessing?.last === localAdditionalProcessing?.last) {
219
+ dateBucket === localDateBucket) {
219
220
  setLoading(false);
220
221
  const convertedReport = (0, report_1.convertInternalReportToReport)(tempReport);
221
222
  setReport(convertedReport);
222
223
  return;
223
224
  }
224
225
  setLoading(true);
225
- const { report, error } = await (0, report_1.fetchReport)(item._id, client, useReportTask, filters, additionalProcessing, dateBucket, schemaData.customFields);
226
+ const { report, error } = await (0, report_1.fetchReport)(item.id, client, useReportTask, filters, {
227
+ ...additionalProcessing,
228
+ ...(item.pivot ? {} : { page: paginationProcessing_1.DEFAULT_PAGINATION }),
229
+ }, dateBucket, schemaData.customFields);
226
230
  dispatch({
227
231
  type: 'ADD_DASHBOARD_ITEM',
228
- id: item._id,
232
+ id: item.id,
229
233
  data: { ...report, triggerReload: false },
230
234
  });
231
235
  const convertedReport = (0, report_1.convertInternalReportToReport)(report);
232
236
  setReport(convertedReport);
233
237
  setLocalDateBucket(dateBucket);
234
- setLocalAdditionalProcessing(additionalProcessing);
235
238
  setError(error);
236
239
  setLoading(false);
237
240
  };
@@ -239,15 +242,20 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
239
242
  if (!filters) {
240
243
  return;
241
244
  }
245
+ if (previousFilters.current &&
246
+ filterValuesEquivalent(previousFilters.current, filters)) {
247
+ return;
248
+ }
249
+ previousFilters.current = filters;
242
250
  setInitialLoad(false);
243
251
  fetchReportHelper();
244
- }, [filters, item._id, dateBucket, additionalProcessing]);
252
+ }, [filters, item.id, dateBucket]);
245
253
  (0, react_1.useEffect)(() => {
246
- const tempReport = dashboard[item._id];
254
+ const tempReport = dashboard[item.id];
247
255
  if (tempReport && tempReport.triggerReload) {
248
256
  fetchReportHelper();
249
257
  }
250
- }, [dashboard[item._id]]);
258
+ }, [dashboard[item.id]]);
251
259
  return children({
252
260
  isLoading: loading || initialLoad,
253
261
  data: report,
@@ -1 +1 @@
1
- {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA+MhC"}
1
+ {"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CA2NhC"}
@@ -15,8 +15,8 @@ function QuillMetricComponent({ report, onClick, error, isLoading, }) {
15
15
  const primaryMetricLabel = report?.filtersApplied?.date_range?.preset?.label;
16
16
  const comparisonKey = report?.filtersApplied?.date_range?.comparisonRange?.value;
17
17
  const comparisonLabel = dateRangePickerUtils_1.COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
18
- return ((0, jsx_runtime_1.jsx)("div", { onClick: () => onClick && !error && onClick(report), style: {
19
- cursor: error || !onClick ? 'default' : 'pointer',
18
+ return ((0, jsx_runtime_1.jsx)("div", { onClick: () => onClick && onClick(report), style: {
19
+ cursor: !onClick ? 'default' : 'pointer',
20
20
  boxSizing: 'content-box',
21
21
  borderRadius: 8,
22
22
  paddingBottom: isLoading ? 0 : 30,
@@ -56,7 +56,18 @@ function QuillMetricComponent({ report, onClick, error, isLoading, }) {
56
56
  }, children: report?.name })) }), isLoading ? ((0, jsx_runtime_1.jsx)(ChartSkeleton_1.default, { containerStyle: {
57
57
  maxHeight: '78px',
58
58
  height: '100%',
59
- } })) : error ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(ChartError_1.default, { errorMessage: error }) })) : report.rows?.length === 0 ||
59
+ } })) : error ? ((0, jsx_runtime_1.jsx)(ChartError_1.default, { errorMessage: error, containerStyle: {
60
+ display: 'flex',
61
+ flex: '1 0 auto',
62
+ height: '80%',
63
+ margin: 'auto',
64
+ justifyContent: 'center',
65
+ alignItems: 'center',
66
+ fontSize: 13,
67
+ color: theme?.secondaryTextColor,
68
+ maxWidth: '100%',
69
+ width: '100%',
70
+ } })) : report.rows?.length === 0 ||
60
71
  report.rows[0][report.xAxisField] === null ? ((0, jsx_runtime_1.jsx)("div", { style: {
61
72
  display: 'flex',
62
73
  flex: '1 0 auto',
@@ -1 +1 @@
1
- {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE,GAAG,GAAG,CAAC,OAAO,CA0Fd"}
1
+ {"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE,GAAG,GAAG,CAAC,OAAO,CAkGd"}
@@ -15,11 +15,17 @@ function QuillTableComponent({ report, onClick, isLoading, error, rowCount, rowC
15
15
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
16
16
  const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
17
17
  const { downloadCSV } = (0, useExport_1.useExport)(report?.id);
18
+ const [page, setPage] = (0, react_1.useState)(0);
18
19
  (0, react_1.useEffect)(() => {
19
20
  if (!isLoading) {
20
21
  setInitialLoad(false);
21
22
  }
22
23
  }, [isLoading]);
24
+ (0, react_1.useEffect)(() => {
25
+ if (rowCountIsLoading) {
26
+ setPage(0);
27
+ }
28
+ }, [rowCountIsLoading]);
23
29
  return ((0, jsx_runtime_1.jsxs)("div", { style: { cursor: error || !onClick ? 'default' : 'pointer' }, onClick: () => onClick && onClick(report), children: [(0, jsx_runtime_1.jsx)("div", { style: {
24
30
  display: 'flex',
25
31
  flexDirection: 'row',
@@ -52,8 +58,9 @@ function QuillTableComponent({ report, onClick, isLoading, error, rowCount, rowC
52
58
  downloadCSV();
53
59
  }, onPageChange: (page) => {
54
60
  onPageChange && onPageChange(page);
61
+ setPage(page);
55
62
  }, onSortChange: (sort) => {
56
63
  onSortChange && onSortChange(sort);
57
- }, currentPage: report?.pagination?.page, sort: report?.sort }))] }, report?.name));
64
+ }, currentPage: report?.pagination?.page ?? page, sort: report?.sort }))] }, report?.name));
58
65
  }
59
66
  exports.default = QuillTableComponent;
@@ -2,7 +2,7 @@ import { MultiSelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, }: MultiSelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  export declare const ListboxTextInput: ({ value, onChange, placeholder, }: {
7
7
  value: string;
8
8
  onChange: (e: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,yBAAyB,2CA4U3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
1
+ {"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAQ,GACT,EAAE,yBAAyB,2CAiV3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
@@ -47,7 +47,7 @@ function displaySelectedOptionLabels({ options, value, }) {
47
47
  /**
48
48
  * A robust select component that implements the new minimal Select interface.
49
49
  */
50
- function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, }) {
50
+ function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, }) {
51
51
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
52
52
  const [selectedOptions, setSelectedOptions] = (0, react_1.useState)([]);
53
53
  const [showModal, setShowModal] = (0, react_1.useState)(false);
@@ -150,8 +150,12 @@ function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, v
150
150
  height: 40,
151
151
  minHeight: 40,
152
152
  maxHeight: 40,
153
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [(0, jsx_runtime_1.jsx)("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
153
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [(0, jsx_runtime_1.jsx)("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
154
154
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
155
+ .quill-select-button:disabled {
156
+ cursor: not-allowed;
157
+ background: ${theme?.hoverBackgroundColor};
158
+ }
155
159
  ` }), (0, jsx_runtime_1.jsx)("span", { style: {
156
160
  textOverflow: 'ellipsis',
157
161
  whiteSpace: 'nowrap',
@@ -66,8 +66,8 @@ function QuillSelectComponent({ options, value, width, onChange, label, isLoadin
66
66
  }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [(0, jsx_runtime_1.jsx)("style", { children: `
67
67
  .quill-select-button { background: ${theme?.backgroundColor}; }
68
68
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
69
- .quill-select-button:disabled {
70
- opacity: 0.5;
69
+ .quill-select-button:disabled, {
70
+ background: ${theme?.hoverBackgroundColor};
71
71
  cursor: not-allowed;
72
72
  }
73
73
  ` }), (0, jsx_runtime_1.jsx)("span", { style: {
@@ -94,7 +94,7 @@ function QuillSelectComponent({ options, value, width, onChange, label, isLoadin
94
94
  fontFamily: theme?.fontFamily,
95
95
  maxHeight: '50vh',
96
96
  overflow: 'scroll',
97
- }, children: [!isLoading && !hideEmptyOption && ((0, jsx_runtime_1.jsxs)("button", { style: {
97
+ }, children: [!isLoading && (!hideEmptyOption || !options.length) && ((0, jsx_runtime_1.jsxs)("button", { style: {
98
98
  display: 'flex',
99
99
  alignItems: 'center',
100
100
  justifyContent: 'space-between',
@@ -2,5 +2,5 @@ import { SelectComponentProps } from './UiComponents';
2
2
  /**
3
3
  * A robust select component that implements the new minimal Select interface.
4
4
  */
5
- export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, disabled, }: SelectComponentProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=QuillSelectWithCombo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,GAChB,EAAE,oBAAoB,2CA8QtB"}
1
+ {"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAWtE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE,oBAAoB,2CAyRtB"}
@@ -33,7 +33,7 @@ const QuillMultiSelectWithCombo_1 = require("./QuillMultiSelectWithCombo");
33
33
  /**
34
34
  * A robust select component that implements the new minimal Select interface.
35
35
  */
36
- function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }) {
36
+ function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, disabled, }) {
37
37
  const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
38
38
  const [showModal, setShowModal] = (0, react_1.useState)(false);
39
39
  const modalRef = (0, react_1.useRef)(null);
@@ -116,7 +116,15 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
116
116
  height: 40,
117
117
  minHeight: 40,
118
118
  maxHeight: 40,
119
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [(0, jsx_runtime_1.jsx)("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; } .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }` }), (0, jsx_runtime_1.jsx)("span", { style: {
119
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [(0, jsx_runtime_1.jsx)("style", { children: `
120
+ .quill-select-button { background: ${theme?.backgroundColor}; }
121
+ .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
122
+ .quill-select-button:disabled {
123
+ cursor: not-allowed;
124
+ background: ${theme?.hoverBackgroundColor};
125
+ }
126
+
127
+ ` }), (0, jsx_runtime_1.jsx)("span", { style: {
120
128
  textOverflow: 'ellipsis',
121
129
  whiteSpace: 'nowrap',
122
130
  overflow: 'hidden',
@@ -143,7 +151,9 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
143
151
  fontSize: 14,
144
152
  }, children: [options && options.length > 20 && !isLoading && ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
145
153
  setSearchQuery(value);
146
- } })), searchQuery === '' && !isLoading && !hideEmptyOption && ((0, jsx_runtime_1.jsxs)("button", { style: {
154
+ } })), searchQuery === '' &&
155
+ !isLoading &&
156
+ (!hideEmptyOption || !options.length) && ((0, jsx_runtime_1.jsxs)("button", { style: {
147
157
  display: 'flex',
148
158
  alignItems: 'center',
149
159
  justifyContent: 'space-between',
@@ -8,7 +8,7 @@ export interface TableComponentProps {
8
8
  label: string;
9
9
  field: string;
10
10
  }[];
11
- currentPage?: number;
11
+ currentPage: number;
12
12
  sort?: {
13
13
  field: string;
14
14
  direction: string;
@@ -1 +1 @@
1
- {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CAwdrB"}
1
+ {"version":3,"file":"QuillTable.d.ts","sourceRoot":"","sources":["../../../src/components/QuillTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,WAAW,EACX,IAAI,EACJ,qBAA4B,EAC5B,cAAc,EACd,SAAS,EACT,gBAAwC,EACxC,WAAgB,EAChB,eAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,YAAY,GACb,EAAE,mBAAmB,2CA+drB"}
@@ -7,7 +7,6 @@ const Context_1 = require("../Context");
7
7
  const UiComponents_1 = require("./UiComponents");
8
8
  function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = UiComponents_1.QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, }) {
9
9
  const [activeRows, setActiveRows] = (0, react_1.useState)([]);
10
- const [pageIndex, setPageIndex] = (0, react_1.useState)(currentPage || 0);
11
10
  const [maxPage, setMaxPage] = (0, react_1.useState)(1);
12
11
  const [sortColumn, setSortColumn] = (0, react_1.useState)(sort?.field || '');
13
12
  const [sortDirection, setSortDirection] = (0, react_1.useState)(sort?.direction || 'desc');
@@ -23,8 +22,8 @@ function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, cur
23
22
  return;
24
23
  }
25
24
  setIsPaginating(true);
26
- const start = pageIndex * rowsPerPage;
27
- const end = (pageIndex + 1) * rowsPerPage;
25
+ const start = currentPage * rowsPerPage;
26
+ const end = (currentPage + 1) * rowsPerPage;
28
27
  if (rowCount && onSortChange && rowCount !== rows.length) {
29
28
  setMaxPage(Math.ceil(rowCount / rowsPerPage));
30
29
  setActiveRows(rows.slice(start, end));
@@ -42,25 +41,29 @@ function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, cur
42
41
  }
43
42
  setIsPaginating(false);
44
43
  setInitialLoad(false);
45
- }, [pageIndex, rows, sortColumn, sortDirection, columns, rowCount]);
44
+ }, [currentPage, rows, sortColumn, sortDirection, columns, rowCount]);
45
+ (0, react_1.useEffect)(() => {
46
+ if (rows.length < (currentPage + 1) * rowsPerPage) {
47
+ onPageChange && onPageChange(0);
48
+ setMaxPage(1);
49
+ }
50
+ }, [rows]);
46
51
  const increasePage = () => {
47
- if (pageIndex + 1 === maxPage) {
52
+ if (!rowCountIsLoading && currentPage + 1 === maxPage) {
48
53
  return;
49
54
  }
50
- setPageIndex((pageIndex) => pageIndex + 1);
51
- onPageChange && onPageChange(pageIndex + 1);
55
+ onPageChange && onPageChange(currentPage + 1);
52
56
  };
53
57
  const decreasePage = () => {
54
- if (pageIndex === 0) {
58
+ if (currentPage === 0) {
55
59
  return;
56
60
  }
57
- setPageIndex((pageIndex) => pageIndex - 1);
58
- onPageChange && onPageChange(pageIndex - 1);
61
+ onPageChange && onPageChange(currentPage - 1);
59
62
  };
60
63
  const toggleSort = (column) => {
61
64
  if (sortColumn === column.field) {
62
65
  setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');
63
- setPageIndex(0);
66
+ onPageChange && onPageChange(0);
64
67
  if (onSortChange) {
65
68
  onSortChange({
66
69
  field: column.field,
@@ -71,7 +74,7 @@ function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, cur
71
74
  else {
72
75
  setSortColumn(column.field);
73
76
  setSortDirection('desc');
74
- setPageIndex(0);
77
+ onPageChange && onPageChange(0);
75
78
  if (onSortChange) {
76
79
  onSortChange({
77
80
  field: column.field,
@@ -169,7 +172,7 @@ function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, cur
169
172
  transform: sortDirection === 'desc'
170
173
  ? 'rotate(180deg)'
171
174
  : undefined,
172
- }, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M10 3a.75.75 0 01.75.75v10.638l3.96-4.158a.75.75 0 111.08 1.04l-5.25 5.5a.75.75 0 01-1.08 0l-5.25-5.5a.75.75 0 111.08-1.04l3.96 4.158V3.75A.75.75 0 0110 3z", clipRule: "evenodd" }) }))] }, 'sqlcol' + index))) }) }), (isPaginating || isLoading) && ((0, jsx_runtime_1.jsx)("div", { className: className, children: (0, jsx_runtime_1.jsx)(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
175
+ }, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M10 3a.75.75 0 01.75.75v10.638l3.96-4.158a.75.75 0 111.08 1.04l-5.25 5.5a.75.75 0 01-1.08 0l-5.25-5.5a.75.75 0 111.08-1.04l3.96 4.158V3.75A.75.75 0 0110 3z", clipRule: "evenodd" }) }))] }, 'sqlcol' + index))) }) }), (isPaginating || isLoading) && ((0, jsx_runtime_1.jsx)("div", { className: className, style: { position: 'absolute', width: '100%' }, children: (0, jsx_runtime_1.jsx)(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
173
176
  (columns && columns.length === 0) ? ((0, jsx_runtime_1.jsx)("div", { style: {
174
177
  padding: '30px 0',
175
178
  display: isPaginating || isLoading ? 'none' : 'flex',
@@ -265,7 +268,7 @@ function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, cur
265
268
  fontSize: 12,
266
269
  fontFamily: theme?.fontFamily,
267
270
  color: theme?.primaryTextColor,
268
- }, children: [pageIndex + 1, ' of ', rowCountIsLoading && maxPage >= 30 ? 'many' : maxPage] }), (0, jsx_runtime_1.jsx)("div", { style: { width: 8 } }), (0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
271
+ }, children: [currentPage + 1, ' of ', rowCountIsLoading && maxPage > 1 ? 'many' : maxPage] }), (0, jsx_runtime_1.jsx)("div", { style: { width: 8 } }), (0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
269
272
  decreasePage();
270
273
  e.stopPropagation();
271
274
  }, style: {
@@ -0,0 +1,33 @@
1
+ import { FilterTreeNode } from '../../utils/astFilterProcessing';
2
+ interface FilterStackProps {
3
+ client: any;
4
+ filterStack: FilterTreeNode[];
5
+ filterTree: FilterTreeNode | null;
6
+ defaultAST: any;
7
+ baseAst: any;
8
+ setBaseAst: any;
9
+ setFormData: any;
10
+ fetchSqlQuery: any;
11
+ schemaData: any;
12
+ defaultColumn: any;
13
+ defaultTable: any;
14
+ currentTable: any;
15
+ initialTableName: string;
16
+ globalUniqueValues: any;
17
+ globalUniqueValuesIsLoading: boolean;
18
+ columns: any;
19
+ removingFilter: any;
20
+ setRemovingFilter: any;
21
+ TabsComponent: any;
22
+ FilterPopoverComponent: any;
23
+ FilterModal: any;
24
+ ButtonComponent: any;
25
+ SecondaryButtonComponent: any;
26
+ SelectComponent: any;
27
+ TextInputComponent: any;
28
+ MultiSelectComponent: any;
29
+ actionsEnabled: boolean;
30
+ }
31
+ export default function FilterStack({ client, filterStack, filterTree, defaultAST, baseAst, setBaseAst, setFormData, fetchSqlQuery, schemaData, defaultColumn, defaultTable, currentTable, initialTableName, globalUniqueValues, globalUniqueValuesIsLoading, columns, removingFilter, setRemovingFilter, TabsComponent, FilterPopoverComponent, FilterModal, ButtonComponent, SecondaryButtonComponent, SelectComponent, TextInputComponent, MultiSelectComponent, actionsEnabled, }: FilterStackProps): import("react/jsx-runtime").JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=FilterStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterStack.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterStack.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EAEf,MAAM,iCAAiC,CAAC;AAUzC,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,GAAG,CAAC;IACxB,2BAA2B,EAAE,OAAO,CAAC;IACrC,OAAO,EAAE,GAAG,CAAC;IACb,cAAc,EAAE,GAAG,CAAC;IACpB,iBAAiB,EAAE,GAAG,CAAC;IACvB,aAAa,EAAE,GAAG,CAAC;IACnB,sBAAsB,EAAE,GAAG,CAAC;IAC5B,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,wBAAwB,EAAE,GAAG,CAAC;IAC9B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAqB,GACtB,EAAE,gBAAgB,2CAgLlB"}