@quillsql/react 2.13.27 → 2.13.29

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 (261) hide show
  1. package/dist/cjs/Chart.d.ts +2 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +2 -2
  4. package/dist/cjs/ChartBuilder.d.ts +20 -2
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +140 -45
  7. package/dist/cjs/ChartEditor.d.ts +5 -3
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +4 -5
  10. package/dist/cjs/Context.d.ts +15 -4
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +43 -61
  13. package/dist/cjs/Dashboard.d.ts +4 -0
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +49 -9
  16. package/dist/cjs/QuillProvider.d.ts +7 -46
  17. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  18. package/dist/cjs/QuillProvider.js +2 -4
  19. package/dist/cjs/ReportBuilder.d.ts +9 -1
  20. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  21. package/dist/cjs/ReportBuilder.js +198 -80
  22. package/dist/cjs/SQLEditor.d.ts +5 -1
  23. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  24. package/dist/cjs/SQLEditor.js +81 -18
  25. package/dist/cjs/Table.d.ts.map +1 -1
  26. package/dist/cjs/Table.js +3 -2
  27. package/dist/cjs/components/Chart/InternalChart.d.ts +2 -1
  28. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  29. package/dist/cjs/components/Chart/InternalChart.js +110 -28
  30. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/PieChart.js +10 -7
  32. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +3 -2
  33. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  34. package/dist/cjs/components/Dashboard/DashboardFilter.js +66 -65
  35. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  36. package/dist/cjs/components/Dashboard/DataLoader.js +81 -34
  37. package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
  38. package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
  39. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  40. package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
  41. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  42. package/dist/cjs/components/Dashboard/util.js +6 -2
  43. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +3 -1
  44. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  45. package/dist/cjs/components/QuillMultiSelectWithCombo.js +29 -20
  46. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  47. package/dist/cjs/components/QuillTable.js +9 -1
  48. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  49. package/dist/cjs/components/ReportBuilder/FilterModal.js +25 -3
  50. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  51. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  52. package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
  53. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
  54. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  55. package/dist/cjs/components/ReportBuilder/convert.js +54 -4
  56. package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -1
  57. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  58. package/dist/cjs/components/ReportBuilder/ui.js +3 -2
  59. package/dist/cjs/components/UiComponents.d.ts +1 -0
  60. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  61. package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
  62. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  63. package/dist/cjs/hooks/useAskQuill.js +6 -5
  64. package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -1
  65. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  66. package/dist/cjs/hooks/useAstToFilterTree.js +3 -3
  67. package/dist/cjs/hooks/useDashboard.d.ts +6 -2
  68. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useDashboard.js +34 -10
  70. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useExport.js +6 -4
  72. package/dist/cjs/index.d.ts +2 -1
  73. package/dist/cjs/index.d.ts.map +1 -1
  74. package/dist/cjs/index.js +4 -1
  75. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +8 -2
  76. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  77. package/dist/cjs/internals/ReportBuilder/PivotModal.js +59 -30
  78. package/dist/cjs/models/Client.d.ts +22 -3
  79. package/dist/cjs/models/Client.d.ts.map +1 -1
  80. package/dist/cjs/models/Dashboard.d.ts +2 -0
  81. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  82. package/dist/cjs/models/Report.d.ts +4 -0
  83. package/dist/cjs/models/Report.d.ts.map +1 -1
  84. package/dist/cjs/utils/astFilterProcessing.d.ts +3 -2
  85. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  86. package/dist/cjs/utils/astFilterProcessing.js +3323 -977
  87. package/dist/cjs/utils/astProcessing.d.ts +1 -1
  88. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  89. package/dist/cjs/utils/astProcessing.js +4 -2
  90. package/dist/cjs/utils/client.d.ts +4 -2
  91. package/dist/cjs/utils/client.d.ts.map +1 -1
  92. package/dist/cjs/utils/client.js +48 -1
  93. package/dist/cjs/utils/columnProcessing.d.ts +3 -0
  94. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  95. package/dist/cjs/utils/columnProcessing.js +34 -1
  96. package/dist/cjs/utils/constants.d.ts +2 -0
  97. package/dist/cjs/utils/constants.d.ts.map +1 -1
  98. package/dist/cjs/utils/constants.js +3 -1
  99. package/dist/cjs/utils/dashboard.d.ts +4 -3
  100. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  101. package/dist/cjs/utils/dashboard.js +13 -91
  102. package/dist/cjs/utils/dataFetcher.d.ts +3 -1
  103. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  104. package/dist/cjs/utils/dataFetcher.js +66 -30
  105. package/dist/cjs/utils/filterProcessing.d.ts +1 -1
  106. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  107. package/dist/cjs/utils/filterProcessing.js +3 -0
  108. package/dist/cjs/utils/pivotConstructor.d.ts +4 -1
  109. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  110. package/dist/cjs/utils/pivotConstructor.js +7 -7
  111. package/dist/cjs/utils/pivotProcessing.d.ts +4 -1
  112. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  113. package/dist/cjs/utils/pivotProcessing.js +27 -20
  114. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  115. package/dist/cjs/utils/queryConstructor.js +104 -88
  116. package/dist/cjs/utils/report.d.ts +17 -5
  117. package/dist/cjs/utils/report.d.ts.map +1 -1
  118. package/dist/cjs/utils/report.js +23 -23
  119. package/dist/cjs/utils/schema.d.ts.map +1 -1
  120. package/dist/cjs/utils/schema.js +21 -21
  121. package/dist/cjs/utils/tableProcessing.d.ts +37 -10
  122. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  123. package/dist/cjs/utils/tableProcessing.js +46 -38
  124. package/dist/cjs/utils/tenants.d.ts +11 -0
  125. package/dist/cjs/utils/tenants.d.ts.map +1 -0
  126. package/dist/cjs/utils/tenants.js +13 -0
  127. package/dist/cjs/utils/textProcessing.d.ts +1 -0
  128. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  129. package/dist/cjs/utils/textProcessing.js +49 -0
  130. package/dist/cjs/utils/validation.js +1 -1
  131. package/dist/esm/Chart.d.ts +2 -1
  132. package/dist/esm/Chart.d.ts.map +1 -1
  133. package/dist/esm/Chart.js +2 -2
  134. package/dist/esm/ChartBuilder.d.ts +20 -2
  135. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  136. package/dist/esm/ChartBuilder.js +144 -50
  137. package/dist/esm/ChartEditor.d.ts +5 -3
  138. package/dist/esm/ChartEditor.d.ts.map +1 -1
  139. package/dist/esm/ChartEditor.js +5 -6
  140. package/dist/esm/Context.d.ts +15 -4
  141. package/dist/esm/Context.d.ts.map +1 -1
  142. package/dist/esm/Context.js +42 -60
  143. package/dist/esm/Dashboard.d.ts +4 -0
  144. package/dist/esm/Dashboard.d.ts.map +1 -1
  145. package/dist/esm/Dashboard.js +50 -10
  146. package/dist/esm/QuillProvider.d.ts +7 -46
  147. package/dist/esm/QuillProvider.d.ts.map +1 -1
  148. package/dist/esm/QuillProvider.js +2 -4
  149. package/dist/esm/ReportBuilder.d.ts +9 -1
  150. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  151. package/dist/esm/ReportBuilder.js +200 -84
  152. package/dist/esm/SQLEditor.d.ts +5 -1
  153. package/dist/esm/SQLEditor.d.ts.map +1 -1
  154. package/dist/esm/SQLEditor.js +80 -17
  155. package/dist/esm/Table.d.ts.map +1 -1
  156. package/dist/esm/Table.js +4 -3
  157. package/dist/esm/components/Chart/InternalChart.d.ts +2 -1
  158. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  159. package/dist/esm/components/Chart/InternalChart.js +111 -29
  160. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  161. package/dist/esm/components/Chart/PieChart.js +10 -7
  162. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +3 -2
  163. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  164. package/dist/esm/components/Dashboard/DashboardFilter.js +66 -65
  165. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  166. package/dist/esm/components/Dashboard/DataLoader.js +82 -35
  167. package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
  168. package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
  169. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  170. package/dist/esm/components/Dashboard/TableComponent.js +3 -3
  171. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  172. package/dist/esm/components/Dashboard/util.js +6 -2
  173. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +3 -1
  174. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  175. package/dist/esm/components/QuillMultiSelectWithCombo.js +29 -20
  176. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  177. package/dist/esm/components/QuillTable.js +9 -1
  178. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  179. package/dist/esm/components/ReportBuilder/FilterModal.js +26 -4
  180. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  181. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  182. package/dist/esm/components/ReportBuilder/FilterStack.js +2 -2
  183. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
  184. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  185. package/dist/esm/components/ReportBuilder/convert.js +54 -5
  186. package/dist/esm/components/ReportBuilder/ui.d.ts +2 -1
  187. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  188. package/dist/esm/components/ReportBuilder/ui.js +4 -3
  189. package/dist/esm/components/UiComponents.d.ts +1 -0
  190. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  191. package/dist/esm/hooks/useAskQuill.d.ts +1 -1
  192. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  193. package/dist/esm/hooks/useAskQuill.js +7 -6
  194. package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -1
  195. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  196. package/dist/esm/hooks/useAstToFilterTree.js +3 -3
  197. package/dist/esm/hooks/useDashboard.d.ts +6 -2
  198. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  199. package/dist/esm/hooks/useDashboard.js +34 -10
  200. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  201. package/dist/esm/hooks/useExport.js +7 -5
  202. package/dist/esm/index.d.ts +2 -1
  203. package/dist/esm/index.d.ts.map +1 -1
  204. package/dist/esm/index.js +1 -0
  205. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +8 -2
  206. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  207. package/dist/esm/internals/ReportBuilder/PivotModal.js +59 -30
  208. package/dist/esm/models/Client.d.ts +22 -3
  209. package/dist/esm/models/Client.d.ts.map +1 -1
  210. package/dist/esm/models/Dashboard.d.ts +2 -0
  211. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  212. package/dist/esm/models/Report.d.ts +4 -0
  213. package/dist/esm/models/Report.d.ts.map +1 -1
  214. package/dist/esm/utils/astFilterProcessing.d.ts +3 -2
  215. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  216. package/dist/esm/utils/astFilterProcessing.js +3323 -977
  217. package/dist/esm/utils/astProcessing.d.ts +1 -1
  218. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  219. package/dist/esm/utils/astProcessing.js +5 -3
  220. package/dist/esm/utils/client.d.ts +4 -2
  221. package/dist/esm/utils/client.d.ts.map +1 -1
  222. package/dist/esm/utils/client.js +48 -1
  223. package/dist/esm/utils/columnProcessing.d.ts +3 -0
  224. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  225. package/dist/esm/utils/columnProcessing.js +31 -1
  226. package/dist/esm/utils/constants.d.ts +2 -0
  227. package/dist/esm/utils/constants.d.ts.map +1 -1
  228. package/dist/esm/utils/constants.js +2 -0
  229. package/dist/esm/utils/dashboard.d.ts +4 -3
  230. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  231. package/dist/esm/utils/dashboard.js +13 -90
  232. package/dist/esm/utils/dataFetcher.d.ts +3 -1
  233. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  234. package/dist/esm/utils/dataFetcher.js +65 -29
  235. package/dist/esm/utils/filterProcessing.d.ts +1 -1
  236. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  237. package/dist/esm/utils/filterProcessing.js +3 -0
  238. package/dist/esm/utils/pivotConstructor.d.ts +4 -1
  239. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  240. package/dist/esm/utils/pivotConstructor.js +8 -8
  241. package/dist/esm/utils/pivotProcessing.d.ts +4 -1
  242. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  243. package/dist/esm/utils/pivotProcessing.js +27 -20
  244. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  245. package/dist/esm/utils/queryConstructor.js +104 -88
  246. package/dist/esm/utils/report.d.ts +17 -5
  247. package/dist/esm/utils/report.d.ts.map +1 -1
  248. package/dist/esm/utils/report.js +20 -23
  249. package/dist/esm/utils/schema.d.ts.map +1 -1
  250. package/dist/esm/utils/schema.js +21 -21
  251. package/dist/esm/utils/tableProcessing.d.ts +37 -10
  252. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  253. package/dist/esm/utils/tableProcessing.js +47 -39
  254. package/dist/esm/utils/tenants.d.ts +11 -0
  255. package/dist/esm/utils/tenants.d.ts.map +1 -0
  256. package/dist/esm/utils/tenants.js +9 -0
  257. package/dist/esm/utils/textProcessing.d.ts +1 -0
  258. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  259. package/dist/esm/utils/textProcessing.js +48 -0
  260. package/dist/esm/utils/validation.js +1 -1
  261. package/package.json +1 -1
@@ -1,6 +1,5 @@
1
- import { isTextColumnType, } from '../components/ReportBuilder/ast';
2
1
  import { deepCopy } from '../components/ReportBuilder/util';
3
- import { convertPostgresColumn } from './columnProcessing';
2
+ import { convertPostgresColumn, isStringType } from './columnProcessing';
4
3
  import { MAX_PIVOT_UNIQUE_VALUES, QUILL_QUERY_ENDPOINT, QUILL_SERVER, } from './constants';
5
4
  import { getData } from './dataFetcher';
6
5
  import { parseValueFromBigQueryDates } from './dataProcessing';
@@ -19,7 +18,7 @@ export const hasColumnAlias = (columns, referencedColumns) => {
19
18
  }
20
19
  return false;
21
20
  };
22
- export const getUniqueValuesByColumns = async (columns, query, rows, client, customFields, filters) => {
21
+ export const getUniqueValuesByColumns = async (columns, query, rows, client, tenants, customFields, filters, dashboardName) => {
23
22
  const stringNames = columns.map((column) => column.field);
24
23
  const uniqueValues = {};
25
24
  //TODO: this bigquery case is wack, we should be able to generate a distinct query for bigquery
@@ -30,13 +29,14 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
30
29
  metadata: {
31
30
  query: query,
32
31
  task: 'query',
33
- orgId: client.organizationId || '*',
34
32
  clientId: client.publicKey,
35
33
  databaseType: client?.databaseType,
36
34
  customFieldsByTable: customFields,
37
35
  useNewNodeSql: true,
38
36
  dateField: filters?.find((filter) => filter.filterType === 'date_range')?.dateField,
39
37
  filters,
38
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
39
+ tenants: dashboardName && tenants ? tenants : undefined,
40
40
  },
41
41
  };
42
42
  const cloudBody = { query };
@@ -59,7 +59,7 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
59
59
  }
60
60
  else {
61
61
  const distinctValueQuery = generateDistinctQuery(stringNames, query, client.databaseType);
62
- const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, customFields, filters);
62
+ const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client, tenants, customFields, filters, dashboardName);
63
63
  if (!distinctStrings) {
64
64
  return {};
65
65
  }
@@ -69,16 +69,20 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client, cus
69
69
  }
70
70
  return uniqueValues;
71
71
  };
72
- export const getUniqueStringValues = async (columns, tableName, client, customFields, previousUniqueValues, withExceededColumns, query) => {
72
+ export const getUniqueStringValues = async (columns, tableName, client, tenants, customFields, previousUniqueValues, withExceededColumns, query, dashboardName) => {
73
73
  const convertedStringColumns = columns.filter((column) => {
74
- return isTextColumnType(column.fieldType);
74
+ return isStringType(column.fieldType);
75
75
  });
76
76
  const stringNames = convertedStringColumns.map((column) => processColumnReference(column.field, client.databaseType));
77
- const { filteredColumns: smallStringColumns, exceededColumns } = await getCountsByColumns(convertedStringColumns, query ?? `Select ${stringNames.join(', ')} from ${tableName}`, client, customFields ?? []);
77
+ const { filteredColumns: smallStringColumns, exceededColumns } = query || stringNames.length > 0
78
+ ? await getCountsByColumns(convertedStringColumns, query || `Select ${stringNames.join(', ')} from ${tableName}`, client, tenants, customFields ?? [], dashboardName)
79
+ : { filteredColumns: [], exceededColumns: undefined };
78
80
  const smallStringNames = smallStringColumns.map((column) => processColumnReference(column.field, client.databaseType));
79
- const newUniqueValues = await getUniqueValuesByColumns(
80
- // returns null if data error
81
- smallStringColumns, query ?? `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, customFields ?? []);
81
+ const newUniqueValues = query || smallStringColumns.length > 0
82
+ ? await getUniqueValuesByColumns(
83
+ // returns null if data error
84
+ smallStringColumns, query || `Select ${smallStringNames.join(', ')} from ${tableName}`, [], client, tenants, customFields ?? [], undefined, dashboardName)
85
+ : null;
82
86
  if (!newUniqueValues) {
83
87
  return {};
84
88
  }
@@ -100,24 +104,24 @@ export const getUniqueStringValues = async (columns, tableName, client, customFi
100
104
  return newUniqueValues;
101
105
  }
102
106
  };
103
- export const getRelevantInfoFromQuery = async (columns, client, query, customFields) => {
107
+ export const getRelevantInfoFromQuery = async (columns, client, tenants, query, customFields, dashboardName) => {
104
108
  let dateRanges = {};
105
109
  let uniqueStrings = {};
106
110
  let error = undefined;
107
111
  try {
108
112
  const convertedStringColumns = columns.filter((column) => {
109
- return isTextColumnType(column.fieldType);
113
+ return isStringType(column.fieldType);
110
114
  });
111
115
  const stringNames = convertedStringColumns.map((column) => column.field);
112
116
  if (stringNames.length > 0) {
113
- const { filteredColumns: smallStringColumns } = await getCountsByColumns(convertedStringColumns, query, client, customFields);
114
- uniqueStrings = await getUniqueValuesByColumns(smallStringColumns, query, [], client, customFields);
117
+ const { filteredColumns: smallStringColumns } = await getCountsByColumns(convertedStringColumns, query, client, tenants, customFields, dashboardName);
118
+ uniqueStrings = await getUniqueValuesByColumns(smallStringColumns, query, [], client, tenants, customFields, undefined, dashboardName);
115
119
  }
116
120
  const dateColumns = columns.filter((column) => {
117
121
  return column.fieldType === 'date';
118
122
  });
119
123
  if (dateColumns.length > 0) {
120
- dateRanges = await getQueryDateRangeByColumns(dateColumns, query, client, customFields);
124
+ dateRanges = await getQueryDateRangeByColumns(dateColumns, query, client, tenants, customFields, dashboardName);
121
125
  if (dateRanges === null) {
122
126
  throw new Error("Couldn't fetch date ranges");
123
127
  }
@@ -132,7 +136,7 @@ export const getRelevantInfoFromQuery = async (columns, client, query, customFie
132
136
  error,
133
137
  };
134
138
  };
135
- export const getCountsByColumns = async (columns, query, client, customFields) => {
139
+ export const getCountsByColumns = async (columns, query, client, tenants, customFields, dashboardName) => {
136
140
  const stringNames = columns.map((column) => column.field);
137
141
  const countQuery = generateCountQuery(stringNames, query, client.databaseType || 'postgresql');
138
142
  try {
@@ -140,11 +144,12 @@ export const getCountsByColumns = async (columns, query, client, customFields) =
140
144
  metadata: {
141
145
  query: countQuery,
142
146
  task: 'query',
143
- orgId: client.organizationId || '*',
144
147
  clientId: client.publicKey,
145
148
  databaseType: client?.databaseType,
146
149
  customFieldsByTable: customFields,
147
150
  useNewNodeSql: true,
151
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
152
+ tenants: dashboardName && tenants ? tenants : undefined,
148
153
  },
149
154
  };
150
155
  const cloudBody = { countQuery };
@@ -173,13 +178,12 @@ export const getCountsByColumns = async (columns, query, client, customFields) =
173
178
  return { filteredColumns: columns, exceededColumns: undefined };
174
179
  }
175
180
  };
176
- const fetchDistinctStrings = async (query, client, customFields, filters) => {
181
+ const fetchDistinctStrings = async (query, client, tenants, customFields, filters, dashboardName) => {
177
182
  try {
178
183
  const hostedBody = {
179
184
  metadata: {
180
185
  query,
181
186
  task: 'query',
182
- orgId: client.organizationId || '*',
183
187
  clientId: client.publicKey,
184
188
  databaseType: client?.databaseType,
185
189
  customFieldsByTable: customFields,
@@ -187,6 +191,8 @@ const fetchDistinctStrings = async (query, client, customFields, filters) => {
187
191
  filters,
188
192
  // @ts-ignore
189
193
  dateField: filters?.find((filter) => filter.filterType === 'date_range')?.dateField,
194
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
195
+ tenants: dashboardName && tenants ? tenants : undefined,
190
196
  },
191
197
  };
192
198
  const cloudBody = { query };
@@ -217,25 +223,26 @@ const fetchDistinctStrings = async (query, client, customFields, filters) => {
217
223
  return null;
218
224
  }
219
225
  };
220
- export const getQueryDateRangeByColumns = async (columns, query, client, customFields) => {
226
+ export const getQueryDateRangeByColumns = async (columns, query, client, tenants, customFields, dashboardName) => {
221
227
  const columnNames = columns.map(
222
228
  // @ts-ignore
223
229
  (column) => column.field || column.name);
224
230
  const distinctValueQuery = generateMinMaxDateRangeQueries(columnNames, query, client.databaseType || 'postgresql');
225
- const dateRanges = await fetchQueryDateRanges(distinctValueQuery, client, customFields);
231
+ const dateRanges = await fetchQueryDateRanges(distinctValueQuery, client, tenants, customFields, dashboardName);
226
232
  return dateRanges;
227
233
  };
228
- const fetchQueryDateRanges = async (query, client, customFields) => {
234
+ const fetchQueryDateRanges = async (query, client, tenants, customFields, dashboardName) => {
229
235
  try {
230
236
  const hostedBody = {
231
237
  metadata: {
232
238
  query,
233
239
  task: 'query',
234
- orgId: client.organizationId || '*',
235
240
  clientId: client.publicKey,
236
241
  databaseType: client?.databaseType,
237
242
  customFieldsByTable: customFields,
238
243
  useNewNodeSql: true,
244
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
245
+ tenants: dashboardName && tenants ? tenants : undefined,
239
246
  },
240
247
  };
241
248
  const cloudBody = { query };
@@ -255,16 +262,17 @@ const fetchQueryDateRanges = async (query, client, customFields) => {
255
262
  return null;
256
263
  }
257
264
  };
258
- export const getPaginatedRows = async (client, query, reportId, processing, filters, customFields) => {
265
+ export const getPaginatedRows = async (client, tenants, query, reportId, processing, filters, customFields, dashboardName) => {
259
266
  if (query) {
260
- return await fetchResultsByQuery(query, client, processing, customFields);
267
+ return await fetchResultsByQuery(query, client, tenants, processing, customFields, filters, undefined, undefined, undefined, undefined, dashboardName);
261
268
  }
262
269
  else if (reportId) {
263
- return await fetchResultsByReport(reportId, client, processing, filters, customFields);
270
+ return await fetchResultsByReport(reportId, client, tenants, processing, filters, customFields);
264
271
  }
265
272
  return { rows: [], columns: [] };
266
273
  };
267
- export const fetchResultsByQuery = async (query, client, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap) => {
274
+ // TODO: Move these to call through the sdk
275
+ export const fetchResultsByQuery = async (query, client, tenants, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap, dashboardName) => {
268
276
  let rows = [];
269
277
  let columns = [];
270
278
  let error = undefined;
@@ -276,12 +284,9 @@ export const fetchResultsByQuery = async (query, client, processing, customField
276
284
  query,
277
285
  task: 'query',
278
286
  filterMap,
279
- orgId: client.organizationId || '*',
280
287
  clientId: client.publicKey,
281
288
  databaseType: client?.databaseType,
282
- getCustomFields: !client.organizationId || client.organizationId === '*'
283
- ? false
284
- : true,
289
+ getCustomFields: !!tenants?.length,
285
290
  customFieldsByTable: customFields,
286
291
  additionalProcessing: processing,
287
292
  useUpdatedDataGathering: processing ? true : false,
@@ -290,6 +295,8 @@ export const fetchResultsByQuery = async (query, client, processing, customField
290
295
  dateField: dateField ?? undefined,
291
296
  rowsOnly,
292
297
  rowCountOnly,
298
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
299
+ tenants: dashboardName && tenants ? tenants : undefined,
293
300
  },
294
301
  };
295
302
  const cloudBody = { query };
@@ -318,7 +325,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
318
325
  if (resp && resp.errorMessage) {
319
326
  throw new Error(resp.errorMessage);
320
327
  }
321
- if (resp.rowCount) {
328
+ if (resp.rowCount !== undefined) {
322
329
  rowCount = resp.rowCount;
323
330
  }
324
331
  if (!resp.error && !parsedSuccessfully) {
@@ -352,7 +359,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
352
359
  }
353
360
  return { rows, columns, rowCount, error, itemQuery };
354
361
  };
355
- export const fetchResultsByReport = async (reportId, client, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
362
+ export const fetchResultsByReport = async (reportId, client, tenants, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
356
363
  const updatedProcessing = { ...processing };
357
364
  let rows = [];
358
365
  let columns = [];
@@ -378,7 +385,6 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
378
385
  const hostedBody = {
379
386
  metadata: {
380
387
  dashboardItemId: reportId,
381
- orgId: client?.organizationId || '*',
382
388
  task: 'item',
383
389
  filters: minimalFilters,
384
390
  clientId: client?.publicKey,
@@ -389,6 +395,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
389
395
  useNewNodeSql: true,
390
396
  rowsOnly,
391
397
  rowCountOnly,
398
+ tenants,
392
399
  },
393
400
  };
394
401
  const cloudBody = {
@@ -401,7 +408,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
401
408
  throw new Error(resp.errorMessage);
402
409
  }
403
410
  processFilterErrorList(resp);
404
- if (resp.rowCount) {
411
+ if (resp.rowCount !== undefined) {
405
412
  rowCount = resp.rowCount;
406
413
  }
407
414
  const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
@@ -425,7 +432,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
425
432
  }
426
433
  return { rows, columns, rowCount, error };
427
434
  };
428
- export const fetchTableByAST = async (ast, client, processing, customFields, rowsOnly, rowCountOnly) => {
435
+ export const fetchTableByAST = async (ast, client, tenants, processing, customFields, rowsOnly, rowCountOnly, dashboardName) => {
429
436
  let rows = [];
430
437
  let columns = [];
431
438
  let rowCount;
@@ -437,7 +444,6 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
437
444
  clientId: client.publicKey,
438
445
  ast,
439
446
  publicKey: client.publicKey,
440
- orgId: client.organizationId || '*',
441
447
  task: 'patterns',
442
448
  getCustomFields: false,
443
449
  customFields,
@@ -446,6 +452,8 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
446
452
  useNewNodeSql: true,
447
453
  rowsOnly,
448
454
  rowCountOnly,
455
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
456
+ tenants: dashboardName && tenants ? tenants : undefined,
449
457
  },
450
458
  };
451
459
  const cloudBody = {};
@@ -454,7 +462,7 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
454
462
  throw new Error(resp.errorMessage);
455
463
  }
456
464
  processFilterErrorList(resp);
457
- if (resp.rowCount) {
465
+ if (resp.rowCount !== undefined) {
458
466
  rowCount = resp.rowCount;
459
467
  }
460
468
  const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
@@ -0,0 +1,11 @@
1
+ import { QuillDatabaseTenant, QuillProviderClient } from '../models/Client';
2
+ export type TenantValue = {
3
+ label: string;
4
+ value: string | number;
5
+ };
6
+ export type Tenant = {
7
+ name: string;
8
+ tenantField: string;
9
+ };
10
+ export declare const asSingleDatabaseTenant: (client: QuillProviderClient | undefined) => QuillDatabaseTenant | undefined;
11
+ //# sourceMappingURL=tenants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../../src/utils/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,mBAAmB,GAAG,SAAS,KACtC,mBAAmB,GAAG,SASxB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const asSingleDatabaseTenant = (client) => {
2
+ if (client?.allTenantTypes?.length &&
3
+ client.allTenantTypes?.[0]?.scope === 'database') {
4
+ return client.allTenantTypes?.[0];
5
+ }
6
+ else {
7
+ return undefined;
8
+ }
9
+ };
@@ -1,5 +1,6 @@
1
1
  export declare function capitalize(text: string): string;
2
2
  export declare function depluralize(text: string): string;
3
+ export declare function matchCasing(text: string, template: string): string;
3
4
  export declare function snakeCaseToTitleCase(str: string): string;
4
5
  export declare function snakeAndCamelCaseToTitleCase(str: string): string;
5
6
  export declare function removeDoubleQuotes(str: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,UAiBvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
1
+ {"version":3,"file":"textProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/textProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyDlE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAa/C;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,UAiBvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAK7C"}
@@ -10,6 +10,54 @@ export function depluralize(text) {
10
10
  }
11
11
  return text;
12
12
  }
13
+ export function matchCasing(text, template) {
14
+ // Detect TitleCase
15
+ const isTitleCase = (str) => /^[A-Z][a-z]*([A-Z][a-z]*)*$/.test(str);
16
+ // Detect camelCase
17
+ const isCamelCase = (str) => /^[a-z]+([A-Z][a-z]*)*$/.test(str);
18
+ // Detect snake_case
19
+ const isSnakeCase = (str) => /^[a-z0-9]+(_[a-z0-9]+)*$/.test(str);
20
+ // Detect all lowercase
21
+ const isAllLowerCase = (str) => /^[a-z]+$/.test(str);
22
+ // Detect all uppercase
23
+ const isAllUpperCase = (str) => /^[A-Z]+$/.test(str);
24
+ // Detect capitalized (first letter uppercase, rest lowercase)
25
+ const isCapitalized = (str) => /^[A-Z][a-z]*$/.test(str);
26
+ // Function to convert to TitleCase
27
+ const toTitleCase = (str) => str.toLowerCase().replace(/\b\w/g, (char) => char.toUpperCase());
28
+ // Function to convert to camelCase
29
+ const toCamelCase = (str) => str.replace(/_./g, (match) => match.charAt(1).toUpperCase()).toLowerCase();
30
+ // Function to convert to snake_case
31
+ const toSnakeCase = (str) => str.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);
32
+ // Function to convert to all lowercase
33
+ const toLowerCase = (str) => str.toLowerCase();
34
+ // Function to convert to all uppercase
35
+ const toUpperCase = (str) => str.toUpperCase();
36
+ // Function to convert to capitalized (first letter uppercase, rest lowercase)
37
+ const toCapitalized = (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
38
+ // Match casing of the template and apply to the text
39
+ if (isTitleCase(template)) {
40
+ return toTitleCase(text);
41
+ }
42
+ else if (isCamelCase(template)) {
43
+ return toCamelCase(text);
44
+ }
45
+ else if (isSnakeCase(template)) {
46
+ return toSnakeCase(text);
47
+ }
48
+ else if (isAllLowerCase(template)) {
49
+ return toLowerCase(text);
50
+ }
51
+ else if (isAllUpperCase(template)) {
52
+ return toUpperCase(text);
53
+ }
54
+ else if (isCapitalized(template)) {
55
+ return toCapitalized(text);
56
+ }
57
+ else {
58
+ return text; // Default case if no specific pattern is detected
59
+ }
60
+ }
13
61
  export function snakeCaseToTitleCase(str) {
14
62
  if (!str) {
15
63
  return str;
@@ -19,7 +19,7 @@ export const validateReport = (formData, dashboardData, defaultDateFilter, allTa
19
19
  issues.push(`Delete the "${filter.label}" filter on "${formData.dashboardName}" or add to another dashboard.`);
20
20
  }
21
21
  });
22
- if (formData.pivot && !isValidPivot(formData.pivot)) {
22
+ if (formData.pivot && !isValidPivot(formData.pivot).valid) {
23
23
  issues.push(`Pivot is invalid.`);
24
24
  }
25
25
  return issues;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "2.13.27",
3
+ "version": "2.13.29",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",