@quillsql/react 2.13.43 → 2.13.45

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 (249) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +2 -2
  3. package/dist/cjs/ChartBuilder.d.ts +1 -0
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +48 -14
  6. package/dist/cjs/ChartEditor.d.ts +1 -1
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +2 -2
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +37 -26
  11. package/dist/cjs/Dashboard.d.ts +8 -2
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +117 -101
  14. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  15. package/dist/cjs/ReportBuilder.js +871 -1574
  16. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  17. package/dist/cjs/SQLEditor.js +23 -4
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/components/Chart/CustomReferenceLine.js +1 -1
  20. package/dist/cjs/components/Chart/GaugeChart.js +0 -6
  21. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  22. package/dist/cjs/components/Dashboard/DashboardFilter.js +3 -3
  23. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +1 -1
  24. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  25. package/dist/cjs/components/Dashboard/DashboardSection.js +20 -19
  26. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  27. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -0
  28. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  29. package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
  30. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  31. package/dist/cjs/components/QuillMultiSelectWithCombo.js +58 -8
  32. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  33. package/dist/cjs/components/QuillSelect.js +91 -14
  34. package/dist/cjs/components/QuillSelectWithCombo.js +6 -6
  35. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +6 -16
  36. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  37. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +172 -75
  38. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -5
  39. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  40. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -9
  41. package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts +17 -0
  42. package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
  43. package/dist/cjs/components/ReportBuilder/DraggableColumns.js +52 -0
  44. package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts +17 -0
  45. package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
  46. package/dist/cjs/components/ReportBuilder/DraggableItem.js +17 -0
  47. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +6 -12
  48. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  49. package/dist/cjs/components/ReportBuilder/FilterModal.js +29 -20
  50. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +8 -17
  51. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  52. package/dist/cjs/components/ReportBuilder/FilterStack.js +20 -86
  53. package/dist/cjs/components/ReportBuilder/convert.js +6 -6
  54. package/dist/cjs/components/ReportBuilder/ui.d.ts +8 -9
  55. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  56. package/dist/cjs/components/ReportBuilder/ui.js +30 -8
  57. package/dist/cjs/components/ReportBuilder/util.d.ts +2 -5
  58. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  59. package/dist/cjs/components/ReportBuilder/util.js +1 -1
  60. package/dist/cjs/components/UiComponents.d.ts +3 -2
  61. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  62. package/dist/cjs/components/UiComponents.js +13 -13
  63. package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
  64. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  65. package/dist/cjs/hooks/useAskQuill.js +14 -12
  66. package/dist/cjs/hooks/useDashboard.d.ts +5 -3
  67. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  68. package/dist/cjs/hooks/useDashboard.js +8 -6
  69. package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -0
  70. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useOnClickOutside.js +33 -0
  72. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +2 -1
  73. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  74. package/dist/cjs/internals/ReportBuilder/PivotForm.js +22 -15
  75. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +7 -5
  76. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  77. package/dist/cjs/internals/ReportBuilder/PivotModal.js +100 -48
  78. package/dist/cjs/models/Client.d.ts +4 -0
  79. package/dist/cjs/models/Client.d.ts.map +1 -1
  80. package/dist/cjs/models/Dashboard.d.ts +1 -0
  81. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  82. package/dist/cjs/models/Report.d.ts +2 -0
  83. package/dist/cjs/models/Report.d.ts.map +1 -1
  84. package/dist/cjs/models/ReportBuilder.d.ts +46 -0
  85. package/dist/cjs/models/ReportBuilder.d.ts.map +1 -0
  86. package/dist/cjs/models/ReportBuilder.js +19 -0
  87. package/dist/cjs/models/Tables.d.ts +5 -5
  88. package/dist/cjs/models/Tables.d.ts.map +1 -1
  89. package/dist/cjs/utils/astFilterProcessing.d.ts +4 -0
  90. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  91. package/dist/cjs/utils/astFilterProcessing.js +301 -97
  92. package/dist/cjs/utils/astProcessing.d.ts +14 -4
  93. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  94. package/dist/cjs/utils/astProcessing.js +38 -4
  95. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  96. package/dist/cjs/utils/dashboard.js +18 -3
  97. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  98. package/dist/cjs/utils/dataFetcher.js +4 -3
  99. package/dist/cjs/utils/filterProcessing.d.ts +2 -11
  100. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  101. package/dist/cjs/utils/filterProcessing.js +4 -16
  102. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  103. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  104. package/dist/cjs/utils/pivotConstructor.js +4 -2
  105. package/dist/cjs/utils/pivotProcessing.d.ts +17 -7
  106. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  107. package/dist/cjs/utils/pivotProcessing.js +60 -51
  108. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  109. package/dist/cjs/utils/queryConstructor.js +15 -2
  110. package/dist/cjs/utils/report.d.ts +12 -9
  111. package/dist/cjs/utils/report.d.ts.map +1 -1
  112. package/dist/cjs/utils/report.js +114 -47
  113. package/dist/cjs/utils/reportBuilder.d.ts +88 -0
  114. package/dist/cjs/utils/reportBuilder.d.ts.map +1 -0
  115. package/dist/cjs/utils/reportBuilder.js +395 -0
  116. package/dist/cjs/utils/schema.d.ts +7 -0
  117. package/dist/cjs/utils/schema.d.ts.map +1 -1
  118. package/dist/cjs/utils/schema.js +36 -2
  119. package/dist/cjs/utils/tableProcessing.d.ts +59 -29
  120. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  121. package/dist/cjs/utils/tableProcessing.js +75 -90
  122. package/dist/cjs/utils/ui.d.ts +2 -0
  123. package/dist/cjs/utils/ui.d.ts.map +1 -0
  124. package/dist/cjs/utils/ui.js +18 -0
  125. package/dist/esm/Chart.d.ts.map +1 -1
  126. package/dist/esm/Chart.js +2 -2
  127. package/dist/esm/ChartBuilder.d.ts +1 -0
  128. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  129. package/dist/esm/ChartBuilder.js +49 -15
  130. package/dist/esm/ChartEditor.d.ts +1 -1
  131. package/dist/esm/ChartEditor.d.ts.map +1 -1
  132. package/dist/esm/ChartEditor.js +2 -2
  133. package/dist/esm/Context.d.ts.map +1 -1
  134. package/dist/esm/Context.js +37 -26
  135. package/dist/esm/Dashboard.d.ts +8 -2
  136. package/dist/esm/Dashboard.d.ts.map +1 -1
  137. package/dist/esm/Dashboard.js +121 -105
  138. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  139. package/dist/esm/ReportBuilder.js +878 -1581
  140. package/dist/esm/SQLEditor.d.ts.map +1 -1
  141. package/dist/esm/SQLEditor.js +23 -4
  142. package/dist/esm/Table.d.ts.map +1 -1
  143. package/dist/esm/components/Chart/CustomReferenceLine.js +1 -1
  144. package/dist/esm/components/Chart/GaugeChart.js +0 -6
  145. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  146. package/dist/esm/components/Dashboard/DashboardFilter.js +3 -3
  147. package/dist/esm/components/Dashboard/DashboardSection.d.ts +1 -1
  148. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  149. package/dist/esm/components/Dashboard/DashboardSection.js +21 -20
  150. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  151. package/dist/esm/components/Dashboard/MetricComponent.js +1 -0
  152. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  153. package/dist/esm/components/Dashboard/TableComponent.js +5 -1
  154. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  155. package/dist/esm/components/QuillMultiSelectWithCombo.js +57 -7
  156. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  157. package/dist/esm/components/QuillSelect.js +58 -14
  158. package/dist/esm/components/QuillSelectWithCombo.js +6 -6
  159. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +6 -16
  160. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  161. package/dist/esm/components/ReportBuilder/AddColumnModal.js +173 -76
  162. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -5
  163. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  164. package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -9
  165. package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts +17 -0
  166. package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
  167. package/dist/esm/components/ReportBuilder/DraggableColumns.js +46 -0
  168. package/dist/esm/components/ReportBuilder/DraggableItem.d.ts +17 -0
  169. package/dist/esm/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
  170. package/dist/esm/components/ReportBuilder/DraggableItem.js +14 -0
  171. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +6 -12
  172. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  173. package/dist/esm/components/ReportBuilder/FilterModal.js +29 -20
  174. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +8 -17
  175. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  176. package/dist/esm/components/ReportBuilder/FilterStack.js +21 -87
  177. package/dist/esm/components/ReportBuilder/convert.js +6 -6
  178. package/dist/esm/components/ReportBuilder/ui.d.ts +8 -9
  179. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  180. package/dist/esm/components/ReportBuilder/ui.js +33 -11
  181. package/dist/esm/components/ReportBuilder/util.d.ts +2 -5
  182. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  183. package/dist/esm/components/ReportBuilder/util.js +1 -1
  184. package/dist/esm/components/UiComponents.d.ts +3 -2
  185. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  186. package/dist/esm/components/UiComponents.js +13 -13
  187. package/dist/esm/hooks/useAskQuill.d.ts +1 -1
  188. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  189. package/dist/esm/hooks/useAskQuill.js +14 -12
  190. package/dist/esm/hooks/useDashboard.d.ts +5 -3
  191. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  192. package/dist/esm/hooks/useDashboard.js +8 -6
  193. package/dist/esm/hooks/useOnClickOutside.d.ts +1 -0
  194. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  195. package/dist/esm/hooks/useOnClickOutside.js +31 -0
  196. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +2 -1
  197. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  198. package/dist/esm/internals/ReportBuilder/PivotForm.js +23 -16
  199. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +7 -5
  200. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  201. package/dist/esm/internals/ReportBuilder/PivotModal.js +101 -49
  202. package/dist/esm/models/Client.d.ts +4 -0
  203. package/dist/esm/models/Client.d.ts.map +1 -1
  204. package/dist/esm/models/Dashboard.d.ts +1 -0
  205. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  206. package/dist/esm/models/Report.d.ts +2 -0
  207. package/dist/esm/models/Report.d.ts.map +1 -1
  208. package/dist/esm/models/ReportBuilder.d.ts +46 -0
  209. package/dist/esm/models/ReportBuilder.d.ts.map +1 -0
  210. package/dist/esm/models/ReportBuilder.js +16 -0
  211. package/dist/esm/models/Tables.d.ts +5 -5
  212. package/dist/esm/models/Tables.d.ts.map +1 -1
  213. package/dist/esm/utils/astFilterProcessing.d.ts +4 -0
  214. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  215. package/dist/esm/utils/astFilterProcessing.js +300 -97
  216. package/dist/esm/utils/astProcessing.d.ts +14 -4
  217. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  218. package/dist/esm/utils/astProcessing.js +38 -5
  219. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  220. package/dist/esm/utils/dashboard.js +18 -3
  221. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  222. package/dist/esm/utils/dataFetcher.js +4 -3
  223. package/dist/esm/utils/filterProcessing.d.ts +2 -11
  224. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  225. package/dist/esm/utils/filterProcessing.js +4 -15
  226. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  227. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  228. package/dist/esm/utils/pivotConstructor.js +4 -2
  229. package/dist/esm/utils/pivotProcessing.d.ts +17 -7
  230. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  231. package/dist/esm/utils/pivotProcessing.js +58 -49
  232. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  233. package/dist/esm/utils/queryConstructor.js +15 -2
  234. package/dist/esm/utils/report.d.ts +12 -9
  235. package/dist/esm/utils/report.d.ts.map +1 -1
  236. package/dist/esm/utils/report.js +116 -46
  237. package/dist/esm/utils/reportBuilder.d.ts +88 -0
  238. package/dist/esm/utils/reportBuilder.d.ts.map +1 -0
  239. package/dist/esm/utils/reportBuilder.js +386 -0
  240. package/dist/esm/utils/schema.d.ts +7 -0
  241. package/dist/esm/utils/schema.d.ts.map +1 -1
  242. package/dist/esm/utils/schema.js +34 -1
  243. package/dist/esm/utils/tableProcessing.d.ts +59 -29
  244. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  245. package/dist/esm/utils/tableProcessing.js +71 -86
  246. package/dist/esm/utils/ui.d.ts +2 -0
  247. package/dist/esm/utils/ui.d.ts.map +1 -0
  248. package/dist/esm/utils/ui.js +14 -0
  249. package/package.json +1 -1
@@ -1,4 +1,3 @@
1
- import { deepCopy } from '../components/ReportBuilder/util';
2
1
  import { convertPostgresColumn, isStringType } from './columnProcessing';
3
2
  import { MAX_PIVOT_UNIQUE_VALUES, QUILL_QUERY_ENDPOINT, QUILL_SERVER, } from './constants';
4
3
  import { getData } from './dataFetcher';
@@ -19,61 +18,23 @@ export const hasColumnAlias = (columns, referencedColumns) => {
19
18
  }
20
19
  return false;
21
20
  };
22
- export const getUniqueValuesByColumns = async (columns, query, rows, client, tenants, customFields, filters, dashboardName) => {
21
+ export const getUniqueValuesByQuery = async ({ columns, query, client, tenants, customFields, filters, dashboardName, }) => {
23
22
  const stringNames = columns.map((column) => column.field);
24
23
  const uniqueValues = {};
25
- //TODO: this bigquery case is wack, we should be able to generate a distinct query for bigquery
26
- if (!client.databaseType ||
27
- client.databaseType.toLowerCase() === 'bigquery') {
28
- if (rows.length === 0) {
29
- const hostedBody = {
30
- metadata: {
31
- query: query,
32
- task: 'query',
33
- clientId: client.publicKey,
34
- databaseType: client?.databaseType,
35
- customFieldsByTable: customFields,
36
- useNewNodeSql: true,
37
- dateField: filters?.find((filter) => filter.filterType === 'date_range')?.dateField,
38
- filters,
39
- dashboardName: dashboardName && tenants ? dashboardName : undefined,
40
- tenants: dashboardName && tenants ? tenants : undefined,
41
- },
42
- };
43
- const cloudBody = { query };
44
- const data = await getData(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
45
- if (!data || data.errorMessage) {
46
- return null;
47
- }
48
- rows = data.rows;
49
- }
50
- for (const column of columns) {
51
- const values = Array.from(new Set(rows
52
- .map((row) => row[column.name || column.field])
53
- .filter((value) => value !== null && value !== undefined)));
54
- // @ts-ignore
55
- uniqueValues[column.name || column.field] = values.reduce((result, value) => {
56
- result[value] = false;
57
- return result;
58
- }, {});
59
- }
24
+ if (stringNames.length === 0) {
25
+ return {};
60
26
  }
61
- else {
62
- if (stringNames.length === 0) {
63
- return {};
64
- }
65
- const distinctValueQuery = generateDistinctQuery(stringNames, query, client.databaseType);
66
- const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, tenants, customFields, filters, dashboardName);
67
- if (!distinctStrings) {
68
- return {};
69
- }
70
- for (const column of distinctStrings) {
71
- uniqueValues[column.column] = column.values;
72
- }
27
+ const distinctValueQuery = generateDistinctQuery(stringNames, query, client.databaseType || 'postgresql');
28
+ const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, tenants, customFields, filters, dashboardName);
29
+ if (!distinctStrings) {
30
+ return {};
31
+ }
32
+ for (const column of distinctStrings) {
33
+ uniqueValues[column.column] = column.values;
73
34
  }
74
35
  return uniqueValues;
75
36
  };
76
- export const getUniqueStringValues = async (columns, tableName, client, tenants, customFields, previousUniqueValues, withExceededColumns, query, dashboardName) => {
37
+ export const getUniqueStringValuesByColumn = async ({ columns, tableName, client, tenants, customFields, withExceededColumns, query, dashboardName, }) => {
77
38
  const convertedStringColumns = columns.filter((column) => {
78
39
  return isStringType(column.fieldType);
79
40
  });
@@ -83,9 +44,15 @@ export const getUniqueStringValues = async (columns, tableName, client, tenants,
83
44
  : { filteredColumns: [], exceededColumns: undefined };
84
45
  const smallStringNames = smallStringColumns.map((column) => processColumnReference(column.field, client.databaseType, undefined, true));
85
46
  const newUniqueValues = query || smallStringColumns.length > 0
86
- ? await getUniqueValuesByColumns(
87
- // returns null if data error
88
- smallStringColumns, query || `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, tenants, customFields ?? [], undefined, dashboardName)
47
+ ? await getUniqueValuesByQuery({
48
+ // returns null if data error
49
+ columns: smallStringColumns,
50
+ query: query || `Select ${smallStringNames.join(', ')} from ${tableName}`,
51
+ client,
52
+ tenants,
53
+ customFields: customFields ?? [],
54
+ dashboardName,
55
+ })
89
56
  : null;
90
57
  if (!newUniqueValues) {
91
58
  return {};
@@ -93,35 +60,59 @@ export const getUniqueStringValues = async (columns, tableName, client, tenants,
93
60
  if (withExceededColumns) {
94
61
  exceededColumns?.forEach((column) => {
95
62
  if (newUniqueValues) {
96
- newUniqueValues[column.field] = { EXCEEDS_LIMIT: true };
63
+ newUniqueValues[column.field] = ['EXCEEDS_LIMIT'];
97
64
  }
98
65
  });
99
66
  }
100
- if (previousUniqueValues) {
101
- // This logic was used in ReportBuilder before this function was extracted
102
- // Not sure if it still accurate, but didn't want to remove in case
103
- const joinedUniqueValues = deepCopy(previousUniqueValues);
104
- joinedUniqueValues[tableName] = newUniqueValues;
105
- return joinedUniqueValues;
106
- }
107
- else {
108
- return newUniqueValues;
109
- }
67
+ return newUniqueValues;
68
+ };
69
+ export const getUniqueStringValuesByTable = async ({ tables, columns, client, tenants, dashboardName, customFields, withExceededColumns, queryTemplate, }) => {
70
+ const uniqueValues = {};
71
+ await Promise.all(tables.map(async (tableName) => {
72
+ const tableColumns = columns.filter((column) => {
73
+ return column.table === tableName;
74
+ });
75
+ const tableColumnString = tableColumns
76
+ .map((col) => `${col.table ? `${col.table}.` : ''}${col.field}`)
77
+ .join(', ');
78
+ const query = queryTemplate
79
+ ? queryTemplate.replace('*', tableColumnString)
80
+ : `SELECT ${tableColumnString} FROM ${tableName}`;
81
+ const newUniqueValues = await getUniqueStringValuesByColumn({
82
+ columns: tableColumns,
83
+ tableName,
84
+ client,
85
+ tenants,
86
+ dashboardName,
87
+ customFields,
88
+ withExceededColumns,
89
+ query,
90
+ });
91
+ uniqueValues[tableName] = newUniqueValues;
92
+ }));
93
+ return uniqueValues;
110
94
  };
111
- export const getRelevantInfoFromQuery = async (columns, client, tenants, query, customFields, dashboardName) => {
95
+ export const getRelevantInfoFromQuery = async ({ tables, columns, aliasedColumns, reportBuilderColumns, client, tenants, query, queryTemplate, customFields, dashboardName, }) => {
112
96
  let dateRanges = {};
113
- let uniqueStrings = {};
97
+ let uniqueStrings = null;
98
+ const columnUniqueValues = {};
114
99
  let error = undefined;
115
100
  try {
116
- const convertedStringColumns = columns.filter((column) => {
117
- return isStringType(column.fieldType);
101
+ uniqueStrings = await getUniqueStringValuesByTable({
102
+ tables,
103
+ columns,
104
+ client,
105
+ tenants,
106
+ dashboardName,
107
+ customFields,
108
+ withExceededColumns: true,
109
+ queryTemplate,
118
110
  });
119
- const stringNames = convertedStringColumns.map((column) => column.field);
120
- if (stringNames.length > 0) {
121
- const { filteredColumns: smallStringColumns } = await getCountsByColumns(convertedStringColumns, query, client, tenants, customFields, dashboardName);
122
- uniqueStrings = await getUniqueValuesByColumns(smallStringColumns, query, [], client, tenants, customFields, undefined, dashboardName);
123
- }
124
- const dateColumns = columns.filter((column) => {
111
+ reportBuilderColumns.forEach((column) => {
112
+ columnUniqueValues[column.alias || column.field] =
113
+ uniqueStrings?.[column.table || '']?.[column.field] ?? [];
114
+ });
115
+ const dateColumns = aliasedColumns.filter((column) => {
125
116
  return column.fieldType === 'date';
126
117
  });
127
118
  if (dateColumns.length > 0) {
@@ -136,6 +127,7 @@ export const getRelevantInfoFromQuery = async (columns, client, tenants, query,
136
127
  }
137
128
  return {
138
129
  uniqueStrings: uniqueStrings ?? undefined,
130
+ columnUniqueValues: columnUniqueValues,
139
131
  dateRanges: dateRanges ?? undefined,
140
132
  error,
141
133
  };
@@ -207,7 +199,7 @@ const fetchDistinctStrings = async (query, client, tenants, customFields, filter
207
199
  const results = data.rows.map((columnInfo) => {
208
200
  const column = columnInfo.field || columnInfo.FIELD;
209
201
  if (!columnInfo.string_values) {
210
- return { column, values: {} };
202
+ return { column, values: [] };
211
203
  }
212
204
  // This function is used in ReportBuilder and PivotModal to fetch distinct values. However, neither PivotModal or FilterModal
213
205
  // are currently built to handle null values (FilterModal uses SQL IN, which doesn't handle null values). For now, filtering
@@ -219,17 +211,17 @@ const fetchDistinctStrings = async (query, client, tenants, customFields, filter
219
211
  .reduce((result, value) => {
220
212
  if (value !== null && value !== undefined) {
221
213
  // TODO: handle null values rather than filtering out
222
- result[value] = false;
214
+ result.push(value);
223
215
  }
224
216
  return result;
225
- }, {})
217
+ }, [])
226
218
  : columnInfo.string_values.reduce((result, value) => {
227
219
  if (value !== null && value !== undefined) {
228
220
  // TODO: handle null values rather than filtering out
229
- result[value] = false;
221
+ result.push(value);
230
222
  }
231
223
  return result;
232
- }, {});
224
+ }, []);
233
225
  return { column, values };
234
226
  });
235
227
  return results;
@@ -574,10 +566,3 @@ export const fetchTableByAST = async (ast, client, tenants, processing, customFi
574
566
  }
575
567
  return { rows, columns, rowCount, error, itemQuery, referencedTables };
576
568
  };
577
- export const convertUniqueValuesByColumnToUniqueValueStrings = (uniqueValuesByColumns) => {
578
- return Object.keys(uniqueValuesByColumns).reduce((acc, column) => {
579
- const uniqueValues = uniqueValuesByColumns[column] ?? [];
580
- acc[column] = Object.keys(uniqueValues);
581
- return acc;
582
- }, {});
583
- };
@@ -0,0 +1,2 @@
1
+ export declare const getScrollableParent: (element: HTMLElement | null) => HTMLElement | (Window & typeof globalThis);
2
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/utils/ui.ts"],"names":[],"mappings":"AACC,eAAO,MAAM,mBAAmB,YAAa,WAAW,GAAG,IAAI,+CAU/D,CAAC"}
@@ -0,0 +1,14 @@
1
+ // Utility to find the nearest scrollable ancestor
2
+ export const getScrollableParent = (element) => {
3
+ if (!element)
4
+ return document.body;
5
+ let parent = element.parentElement;
6
+ while (parent) {
7
+ const style = getComputedStyle(parent);
8
+ const isScrollable = /(auto|scroll)/.test(style.overflowY + style.overflowX);
9
+ if (isScrollable)
10
+ return parent;
11
+ parent = parent.parentElement;
12
+ }
13
+ return window;
14
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.13.43",
3
+ "version": "2.13.45",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",