@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
@@ -4,7 +4,7 @@ import { didFiltersChange } from '../../Chart';
4
4
  import { ClientContext, DashboardContext, SchemaDataContext, } from '../../Context';
5
5
  import { convertInternalReportToReport, EMPTY_INTERNAL_REPORT, fetchReport, fetchReportRowCount, } from '../../utils/report';
6
6
  import { shouldFetchMore, DEFAULT_PAGINATION, shouldSortInMemory, } from '../../utils/paginationProcessing';
7
- import { fetchResultsByReport } from '../../utils/tableProcessing';
7
+ import { fetchResultsByReport, } from '../../utils/tableProcessing';
8
8
  const constructReportFromItem = (item) => {
9
9
  return {
10
10
  ...EMPTY_INTERNAL_REPORT,
@@ -25,38 +25,69 @@ const constructReportFromItem = (item) => {
25
25
  filtersApplied: item.filtersApplied,
26
26
  };
27
27
  };
28
- export default function DataLoader({ item, children, filters, }) {
28
+ function filterValuesEquivalent(filters1, filters2) {
29
+ if (filters1.length !== filters2.length) {
30
+ return false;
31
+ }
32
+ // The two filters arrays aren't necessarily in the same order
33
+ // we can build two dictionaries of [label, filter] and compare them
34
+ const mappedFilters1 = filters1.reduce((acc, filter) => {
35
+ acc[filter.label] = filter;
36
+ return acc;
37
+ }, {});
38
+ const mappedFilters2 = filters2.reduce((acc, filter) => {
39
+ acc[filter.label] = filter;
40
+ return acc;
41
+ }, {});
42
+ for (const key in mappedFilters1) {
43
+ if (mappedFilters1[key].selectedValue !==
44
+ mappedFilters2[key]?.selectedValue ||
45
+ mappedFilters1[key].values !== mappedFilters2[key]?.values ||
46
+ mappedFilters1[key].field !== mappedFilters2[key]?.field ||
47
+ mappedFilters1[key].label !== mappedFilters2[key]?.label ||
48
+ mappedFilters1[key].table !== mappedFilters2[key]?.table ||
49
+ mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
50
+ mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
51
+ mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate ||
52
+ mappedFilters1[key].comparisonRange !==
53
+ mappedFilters2[key]?.comparisonRange) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ }
59
+ export default function DataLoader({ item, children, filters, additionalProcessing: defaultAdditionalProcessing, }) {
29
60
  const [client] = useContext(ClientContext);
30
61
  const [dashboard, dispatch] = useContext(DashboardContext);
31
62
  const [schemaData] = useContext(SchemaDataContext);
32
63
  const [loading, setLoading] = useState(false);
33
64
  const [error, setError] = useState(undefined);
34
65
  const [previousPage, setPreviousPage] = useState(0);
35
- const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
36
- const [additionalProcessing, setAdditionProcessing] = useState({
37
- page: DEFAULT_PAGINATION,
38
- });
66
+ const [report, setReport] = useState(dashboard[item.id] ?? constructReportFromItem(item));
67
+ const [additionalProcessing, setAdditionProcessing] = useState(defaultAdditionalProcessing);
39
68
  const previousFilters = useRef(null);
40
- const [rowCount, setRowCount] = useState(dashboard[item._id]?.rowCount ?? 0);
69
+ const [rowCount, setRowCount] = useState(dashboard[item.id]?.rowCount ?? 0);
41
70
  const [rowCountIsLoading, setRowCountIsLoading] = useState(false);
42
71
  const fetchRowCount = async (processing) => {
43
72
  if (!client || !filters) {
44
73
  return;
45
74
  }
46
75
  setRowCountIsLoading(true);
47
- const rowCount = await fetchReportRowCount(item._id, client, true, filters, processing, schemaData.customFields);
48
- dispatch({
49
- type: 'UPDATE_DASHBOARD_ITEM',
50
- id: item._id,
51
- data: { rowCount },
52
- });
53
- setRowCount(rowCount);
76
+ const rowCount = await fetchReportRowCount(item.id, client, true, filters, processing, schemaData.customFields);
77
+ if (rowCount) {
78
+ dispatch({
79
+ type: 'UPDATE_DASHBOARD_ITEM',
80
+ id: item.id,
81
+ data: { rowCount },
82
+ });
83
+ setRowCount(rowCount);
84
+ }
54
85
  setRowCountIsLoading(false);
55
86
  };
56
87
  const onPageChange = (page) => {
57
88
  if (additionalProcessing &&
58
89
  additionalProcessing.page &&
59
- shouldFetchMore(DEFAULT_PAGINATION, page, previousPage)) {
90
+ shouldFetchMore(additionalProcessing.page, page, previousPage)) {
60
91
  const newPagination = { ...additionalProcessing.page, page };
61
92
  const updatedProcessing = {
62
93
  ...additionalProcessing,
@@ -86,7 +117,7 @@ export default function DataLoader({ item, children, filters, }) {
86
117
  setLoading(true);
87
118
  try {
88
119
  const updatedProcessing = { ...additionalProcessing, ...processing };
89
- const paginatedRows = await fetchResultsByReport(report.id, client, updatedProcessing, filters, schemaData.customFields);
120
+ const paginatedRows = await fetchResultsByReport(report.id, client, updatedProcessing, filters, schemaData.customFields, true);
90
121
  if (paginatedRows.error) {
91
122
  throw new Error('Error fetching chart');
92
123
  }
@@ -108,26 +139,26 @@ export default function DataLoader({ item, children, filters, }) {
108
139
  if (!client || !filters) {
109
140
  return;
110
141
  }
111
- if (dashboard[item._id] &&
112
- !didFiltersChange(dashboard[item._id], filters) &&
142
+ if (dashboard[item.id] &&
143
+ !didFiltersChange(dashboard[item.id], filters) &&
113
144
  !loading &&
114
145
  // @ts-ignore
115
- !dashboard[item._id].triggerReload) {
146
+ !dashboard[item.id].triggerReload) {
116
147
  setLoading(false);
117
148
  const convertedReport = convertInternalReportToReport(
118
149
  // @ts-ignore
119
- dashboard[item._id]);
150
+ dashboard[item.id]);
120
151
  setReport(convertedReport);
121
152
  return;
122
153
  }
123
154
  setLoading(true);
124
- const { report: fetchedReport, error } = await fetchReport(item._id, client, true, filters, processing, undefined, schemaData.customFields);
125
- fetchRowCount(processing);
155
+ const { report: fetchedReport, error } = await fetchReport(item.id, client, true, filters, processing, undefined, schemaData.customFields, true);
126
156
  dispatch({
127
157
  type: 'ADD_DASHBOARD_ITEM',
128
- id: item._id,
129
- data: { ...fetchedReport, triggerReload: false },
158
+ id: item.id,
159
+ data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
130
160
  });
161
+ fetchRowCount(processing);
131
162
  const convertedReport = convertInternalReportToReport(fetchedReport);
132
163
  setReport(convertedReport);
133
164
  setAdditionProcessing(processing);
@@ -143,50 +174,21 @@ export default function DataLoader({ item, children, filters, }) {
143
174
  return;
144
175
  }
145
176
  previousFilters.current = filters;
177
+ setPreviousPage(0);
146
178
  fetchReportHelper(additionalProcessing);
147
- }, [filters, item._id]);
148
- function filterValuesEquivalent(filters1, filters2) {
149
- if (filters1.length !== filters2.length) {
150
- return false;
151
- }
152
- // The two filters arrays aren't necessarily in the same order
153
- // we can build two dictionaries of [label, filter] and compare them
154
- const mappedFilters1 = filters1.reduce((acc, filter) => {
155
- acc[filter.label] = filter;
156
- return acc;
157
- }, {});
158
- const mappedFilters2 = filters2.reduce((acc, filter) => {
159
- acc[filter.label] = filter;
160
- return acc;
161
- }, {});
162
- for (const key in mappedFilters1) {
163
- if (mappedFilters1[key].selectedValue !==
164
- mappedFilters2[key]?.selectedValue ||
165
- mappedFilters1[key].values !== mappedFilters2[key]?.values ||
166
- mappedFilters1[key].field !== mappedFilters2[key]?.field ||
167
- mappedFilters1[key].label !== mappedFilters2[key]?.label ||
168
- mappedFilters1[key].table !== mappedFilters2[key]?.table ||
169
- mappedFilters1[key].filterType !== mappedFilters2[key]?.filterType ||
170
- mappedFilters1[key].startDate !== mappedFilters2[key]?.startDate ||
171
- mappedFilters1[key].endDate !== mappedFilters2[key]?.endDate) {
172
- return false;
173
- }
174
- }
175
- return true;
176
- }
179
+ }, [filters, item.id]);
177
180
  useEffect(() => {
178
- // @ts-ignore
179
- if (dashboard[item._id] && dashboard[item._id].triggerReload) {
181
+ if (dashboard[item.id]?.triggerReload) {
180
182
  fetchReportHelper(additionalProcessing);
181
183
  }
182
- }, [dashboard[item._id]]);
184
+ }, [dashboard[item.id]]);
183
185
  return (_jsx(_Fragment, { children: children({
184
186
  isLoading: loading,
185
187
  error,
186
188
  onPageChange,
187
189
  onSortChange,
188
190
  data: report,
189
- rowCount,
191
+ rowCount: report.pivot ? report.rowCount : rowCount,
190
192
  rowCountIsLoading,
191
193
  }) }));
192
194
  }
@@ -198,36 +200,37 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
198
200
  const [loading, setLoading] = useState(false);
199
201
  const [error, setError] = useState(undefined);
200
202
  const [localDateBucket, setLocalDateBucket] = useState(undefined);
201
- const [localAdditionalProcessing, setLocalAdditionalProcessing] = useState();
202
- const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
203
+ const [report, setReport] = useState(dashboard[item.id] ?? constructReportFromItem(item));
203
204
  const [client] = useContext(ClientContext);
204
205
  const [schemaData] = useContext(SchemaDataContext);
206
+ const previousFilters = useRef(null);
205
207
  const fetchReportHelper = async (useReportTask = true) => {
206
208
  if (!client || !filters) {
207
209
  return;
208
210
  }
209
- const tempReport = dashboard[item._id];
211
+ const tempReport = dashboard[item.id];
210
212
  if (tempReport &&
211
213
  !didFiltersChange(tempReport, filters) &&
212
214
  !tempReport.triggerReload &&
213
- dateBucket === localDateBucket &&
214
- additionalProcessing?.last === localAdditionalProcessing?.last) {
215
+ dateBucket === localDateBucket) {
215
216
  setLoading(false);
216
217
  const convertedReport = convertInternalReportToReport(tempReport);
217
218
  setReport(convertedReport);
218
219
  return;
219
220
  }
220
221
  setLoading(true);
221
- const { report, error } = await fetchReport(item._id, client, useReportTask, filters, additionalProcessing, dateBucket, schemaData.customFields);
222
+ const { report, error } = await fetchReport(item.id, client, useReportTask, filters, {
223
+ ...additionalProcessing,
224
+ ...(item.pivot ? {} : { page: DEFAULT_PAGINATION }),
225
+ }, dateBucket, schemaData.customFields);
222
226
  dispatch({
223
227
  type: 'ADD_DASHBOARD_ITEM',
224
- id: item._id,
228
+ id: item.id,
225
229
  data: { ...report, triggerReload: false },
226
230
  });
227
231
  const convertedReport = convertInternalReportToReport(report);
228
232
  setReport(convertedReport);
229
233
  setLocalDateBucket(dateBucket);
230
- setLocalAdditionalProcessing(additionalProcessing);
231
234
  setError(error);
232
235
  setLoading(false);
233
236
  };
@@ -235,15 +238,20 @@ export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessi
235
238
  if (!filters) {
236
239
  return;
237
240
  }
241
+ if (previousFilters.current &&
242
+ filterValuesEquivalent(previousFilters.current, filters)) {
243
+ return;
244
+ }
245
+ previousFilters.current = filters;
238
246
  setInitialLoad(false);
239
247
  fetchReportHelper();
240
- }, [filters, item._id, dateBucket, additionalProcessing]);
248
+ }, [filters, item.id, dateBucket]);
241
249
  useEffect(() => {
242
- const tempReport = dashboard[item._id];
250
+ const tempReport = dashboard[item.id];
243
251
  if (tempReport && tempReport.triggerReload) {
244
252
  fetchReportHelper();
245
253
  }
246
- }, [dashboard[item._id]]);
254
+ }, [dashboard[item.id]]);
247
255
  return children({
248
256
  isLoading: loading || initialLoad,
249
257
  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"}
@@ -10,8 +10,8 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
10
10
  const primaryMetricLabel = report?.filtersApplied?.date_range?.preset?.label;
11
11
  const comparisonKey = report?.filtersApplied?.date_range?.comparisonRange?.value;
12
12
  const comparisonLabel = COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
13
- return (_jsx("div", { onClick: () => onClick && !error && onClick(report), style: {
14
- cursor: error || !onClick ? 'default' : 'pointer',
13
+ return (_jsx("div", { onClick: () => onClick && onClick(report), style: {
14
+ cursor: !onClick ? 'default' : 'pointer',
15
15
  boxSizing: 'content-box',
16
16
  borderRadius: 8,
17
17
  paddingBottom: isLoading ? 0 : 30,
@@ -51,7 +51,18 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
51
51
  }, children: report?.name })) }), isLoading ? (_jsx(ChartSkeleton, { containerStyle: {
52
52
  maxHeight: '78px',
53
53
  height: '100%',
54
- } })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : report.rows?.length === 0 ||
54
+ } })) : error ? (_jsx(ChartError, { errorMessage: error, containerStyle: {
55
+ display: 'flex',
56
+ flex: '1 0 auto',
57
+ height: '80%',
58
+ margin: 'auto',
59
+ justifyContent: 'center',
60
+ alignItems: 'center',
61
+ fontSize: 13,
62
+ color: theme?.secondaryTextColor,
63
+ maxWidth: '100%',
64
+ width: '100%',
65
+ } })) : report.rows?.length === 0 ||
55
66
  report.rows[0][report.xAxisField] === null ? (_jsx("div", { style: {
56
67
  display: 'flex',
57
68
  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"}
@@ -10,11 +10,17 @@ export default function QuillTableComponent({ report, onClick, isLoading, error,
10
10
  const [theme] = useContext(ThemeContext);
11
11
  const [initialLoad, setInitialLoad] = useState(true);
12
12
  const { downloadCSV } = useExport(report?.id);
13
+ const [page, setPage] = useState(0);
13
14
  useEffect(() => {
14
15
  if (!isLoading) {
15
16
  setInitialLoad(false);
16
17
  }
17
18
  }, [isLoading]);
19
+ useEffect(() => {
20
+ if (rowCountIsLoading) {
21
+ setPage(0);
22
+ }
23
+ }, [rowCountIsLoading]);
18
24
  return (_jsxs("div", { style: { cursor: error || !onClick ? 'default' : 'pointer' }, onClick: () => onClick && onClick(report), children: [_jsx("div", { style: {
19
25
  display: 'flex',
20
26
  flexDirection: 'row',
@@ -47,7 +53,8 @@ export default function QuillTableComponent({ report, onClick, isLoading, error,
47
53
  downloadCSV();
48
54
  }, onPageChange: (page) => {
49
55
  onPageChange && onPageChange(page);
56
+ setPage(page);
50
57
  }, onSortChange: (sort) => {
51
58
  onSortChange && onSortChange(sort);
52
- }, currentPage: report?.pagination?.page, sort: report?.sort }))] }, report?.name));
59
+ }, currentPage: report?.pagination?.page ?? page, sort: report?.sort }))] }, report?.name));
53
60
  }
@@ -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"}
@@ -21,7 +21,7 @@ function displaySelectedOptionLabels({ options, value, }) {
21
21
  /**
22
22
  * A robust select component that implements the new minimal Select interface.
23
23
  */
24
- export function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, }) {
24
+ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, label, value, isLoading, disabled, }) {
25
25
  const [theme] = useContext(ThemeContext);
26
26
  const [selectedOptions, setSelectedOptions] = useState([]);
27
27
  const [showModal, setShowModal] = useState(false);
@@ -124,8 +124,12 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
124
124
  height: 40,
125
125
  minHeight: 40,
126
126
  maxHeight: 40,
127
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
127
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; }
128
128
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
129
+ .quill-select-button:disabled {
130
+ cursor: not-allowed;
131
+ background: ${theme?.hoverBackgroundColor};
132
+ }
129
133
  ` }), _jsx("span", { style: {
130
134
  textOverflow: 'ellipsis',
131
135
  whiteSpace: 'nowrap',
@@ -63,8 +63,8 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
63
63
  }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: `
64
64
  .quill-select-button { background: ${theme?.backgroundColor}; }
65
65
  .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
66
- .quill-select-button:disabled {
67
- opacity: 0.5;
66
+ .quill-select-button:disabled, {
67
+ background: ${theme?.hoverBackgroundColor};
68
68
  cursor: not-allowed;
69
69
  }
70
70
  ` }), _jsx("span", { style: {
@@ -91,7 +91,7 @@ export function QuillSelectComponent({ options, value, width, onChange, label, i
91
91
  fontFamily: theme?.fontFamily,
92
92
  maxHeight: '50vh',
93
93
  overflow: 'scroll',
94
- }, children: [!isLoading && !hideEmptyOption && (_jsxs("button", { style: {
94
+ }, children: [!isLoading && (!hideEmptyOption || !options.length) && (_jsxs("button", { style: {
95
95
  display: 'flex',
96
96
  alignItems: 'center',
97
97
  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"}
@@ -7,7 +7,7 @@ import { ListboxTextInput } from './QuillMultiSelectWithCombo';
7
7
  /**
8
8
  * A robust select component that implements the new minimal Select interface.
9
9
  */
10
- export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, }) {
10
+ export function QuillSelectComponentWithCombo({ options, value, width, onChange, label, isLoading, hideEmptyOption, disabled, }) {
11
11
  const [theme] = useContext(ThemeContext);
12
12
  const [showModal, setShowModal] = useState(false);
13
13
  const modalRef = useRef(null);
@@ -90,7 +90,15 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
90
90
  height: 40,
91
91
  minHeight: 40,
92
92
  maxHeight: 40,
93
- }, className: "quill-select-button", onClick: () => setShowModal((showModal) => !showModal), children: [_jsx("style", { children: ` .quill-select-button { background: ${theme?.backgroundColor}; } .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }` }), _jsx("span", { style: {
93
+ }, className: 'quill-select-button', onClick: () => setShowModal((showModal) => !showModal), disabled: disabled, children: [_jsx("style", { children: `
94
+ .quill-select-button { background: ${theme?.backgroundColor}; }
95
+ .quill-select-button:hover { background: ${theme?.hoverBackgroundColor}; }
96
+ .quill-select-button:disabled {
97
+ cursor: not-allowed;
98
+ background: ${theme?.hoverBackgroundColor};
99
+ }
100
+
101
+ ` }), _jsx("span", { style: {
94
102
  textOverflow: 'ellipsis',
95
103
  whiteSpace: 'nowrap',
96
104
  overflow: 'hidden',
@@ -117,7 +125,9 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
117
125
  fontSize: 14,
118
126
  }, children: [options && options.length > 20 && !isLoading && (_jsx(ListboxTextInput, { value: searchQuery, placeholder: "Search", onChange: (value) => {
119
127
  setSearchQuery(value);
120
- } })), searchQuery === '' && !isLoading && !hideEmptyOption && (_jsxs("button", { style: {
128
+ } })), searchQuery === '' &&
129
+ !isLoading &&
130
+ (!hideEmptyOption || !options.length) && (_jsxs("button", { style: {
121
131
  display: 'flex',
122
132
  alignItems: 'center',
123
133
  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"}
@@ -5,7 +5,6 @@ import { ThemeContext } from '../Context';
5
5
  import { QuillLoadingComponent } from './UiComponents';
6
6
  export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns, isLoading, currentPage, sort, hideCSVDownloadButton = true, containerStyle, className, LoadingComponent = QuillLoadingComponent, rowsPerPage = 10, emptyStateLabel = 'No results', downloadCSV, onPageChange, onSortChange, }) {
7
7
  const [activeRows, setActiveRows] = useState([]);
8
- const [pageIndex, setPageIndex] = useState(currentPage || 0);
9
8
  const [maxPage, setMaxPage] = useState(1);
10
9
  const [sortColumn, setSortColumn] = useState(sort?.field || '');
11
10
  const [sortDirection, setSortDirection] = useState(sort?.direction || 'desc');
@@ -21,8 +20,8 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
21
20
  return;
22
21
  }
23
22
  setIsPaginating(true);
24
- const start = pageIndex * rowsPerPage;
25
- const end = (pageIndex + 1) * rowsPerPage;
23
+ const start = currentPage * rowsPerPage;
24
+ const end = (currentPage + 1) * rowsPerPage;
26
25
  if (rowCount && onSortChange && rowCount !== rows.length) {
27
26
  setMaxPage(Math.ceil(rowCount / rowsPerPage));
28
27
  setActiveRows(rows.slice(start, end));
@@ -40,25 +39,29 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
40
39
  }
41
40
  setIsPaginating(false);
42
41
  setInitialLoad(false);
43
- }, [pageIndex, rows, sortColumn, sortDirection, columns, rowCount]);
42
+ }, [currentPage, rows, sortColumn, sortDirection, columns, rowCount]);
43
+ useEffect(() => {
44
+ if (rows.length < (currentPage + 1) * rowsPerPage) {
45
+ onPageChange && onPageChange(0);
46
+ setMaxPage(1);
47
+ }
48
+ }, [rows]);
44
49
  const increasePage = () => {
45
- if (pageIndex + 1 === maxPage) {
50
+ if (!rowCountIsLoading && currentPage + 1 === maxPage) {
46
51
  return;
47
52
  }
48
- setPageIndex((pageIndex) => pageIndex + 1);
49
- onPageChange && onPageChange(pageIndex + 1);
53
+ onPageChange && onPageChange(currentPage + 1);
50
54
  };
51
55
  const decreasePage = () => {
52
- if (pageIndex === 0) {
56
+ if (currentPage === 0) {
53
57
  return;
54
58
  }
55
- setPageIndex((pageIndex) => pageIndex - 1);
56
- onPageChange && onPageChange(pageIndex - 1);
59
+ onPageChange && onPageChange(currentPage - 1);
57
60
  };
58
61
  const toggleSort = (column) => {
59
62
  if (sortColumn === column.field) {
60
63
  setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');
61
- setPageIndex(0);
64
+ onPageChange && onPageChange(0);
62
65
  if (onSortChange) {
63
66
  onSortChange({
64
67
  field: column.field,
@@ -69,7 +72,7 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
69
72
  else {
70
73
  setSortColumn(column.field);
71
74
  setSortDirection('desc');
72
- setPageIndex(0);
75
+ onPageChange && onPageChange(0);
73
76
  if (onSortChange) {
74
77
  onSortChange({
75
78
  field: column.field,
@@ -167,7 +170,7 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
167
170
  transform: sortDirection === 'desc'
168
171
  ? 'rotate(180deg)'
169
172
  : undefined,
170
- }, children: _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) && (_jsx("div", { className: className, children: _jsx(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
173
+ }, children: _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) && (_jsx("div", { className: className, style: { position: 'absolute', width: '100%' }, children: _jsx(LoadingComponent, {}) })), (activeRows && activeRows.length === 0) ||
171
174
  (columns && columns.length === 0) ? (_jsx("div", { style: {
172
175
  padding: '30px 0',
173
176
  display: isPaginating || isLoading ? 'none' : 'flex',
@@ -263,7 +266,7 @@ export default function QuillTable({ rows, rowCount, rowCountIsLoading, columns,
263
266
  fontSize: 12,
264
267
  fontFamily: theme?.fontFamily,
265
268
  color: theme?.primaryTextColor,
266
- }, children: [pageIndex + 1, ' of ', rowCountIsLoading && maxPage >= 30 ? 'many' : maxPage] }), _jsx("div", { style: { width: 8 } }), _jsx("button", { onClick: (e) => {
269
+ }, children: [currentPage + 1, ' of ', rowCountIsLoading && maxPage > 1 ? 'many' : maxPage] }), _jsx("div", { style: { width: 8 } }), _jsx("button", { onClick: (e) => {
267
270
  decreasePage();
268
271
  e.stopPropagation();
269
272
  }, 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"}