@quillsql/react 2.13.26 → 2.13.28

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 (243) 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 +20 -2
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +130 -36
  6. package/dist/cjs/ChartEditor.d.ts +5 -3
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +4 -5
  9. package/dist/cjs/Context.d.ts +15 -4
  10. package/dist/cjs/Context.d.ts.map +1 -1
  11. package/dist/cjs/Context.js +37 -60
  12. package/dist/cjs/Dashboard.d.ts +4 -0
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +78 -23
  15. package/dist/cjs/QuillProvider.d.ts +12 -9
  16. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  17. package/dist/cjs/QuillProvider.js +2 -2
  18. package/dist/cjs/ReportBuilder.d.ts +9 -1
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +198 -80
  21. package/dist/cjs/SQLEditor.d.ts +5 -1
  22. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  23. package/dist/cjs/SQLEditor.js +81 -18
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +5 -4
  26. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/InternalChart.js +106 -27
  28. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  29. package/dist/cjs/components/Chart/PieChart.js +10 -7
  30. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +3 -2
  31. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  32. package/dist/cjs/components/Dashboard/DashboardFilter.js +65 -65
  33. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  34. package/dist/cjs/components/Dashboard/DataLoader.js +81 -34
  35. package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
  36. package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
  37. package/dist/cjs/components/Dashboard/util.js +6 -2
  38. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +1 -1
  39. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  40. package/dist/cjs/components/QuillMultiSelectWithCombo.js +17 -18
  41. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  42. package/dist/cjs/components/QuillTable.js +9 -1
  43. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  44. package/dist/cjs/components/ReportBuilder/FilterModal.js +25 -3
  45. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  46. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  47. package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
  48. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
  49. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  50. package/dist/cjs/components/ReportBuilder/convert.js +54 -4
  51. package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -1
  52. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  53. package/dist/cjs/components/ReportBuilder/ui.js +3 -2
  54. package/dist/cjs/components/UiComponents.d.ts +1 -0
  55. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  56. package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
  57. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  58. package/dist/cjs/hooks/useAskQuill.js +6 -5
  59. package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -1
  60. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  61. package/dist/cjs/hooks/useAstToFilterTree.js +3 -3
  62. package/dist/cjs/hooks/useDashboard.d.ts +5 -2
  63. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  64. package/dist/cjs/hooks/useDashboard.js +21 -7
  65. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  66. package/dist/cjs/hooks/useExport.js +6 -4
  67. package/dist/cjs/index.d.ts +1 -1
  68. package/dist/cjs/index.d.ts.map +1 -1
  69. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +8 -2
  70. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  71. package/dist/cjs/internals/ReportBuilder/PivotModal.js +59 -30
  72. package/dist/cjs/models/Client.d.ts +22 -3
  73. package/dist/cjs/models/Client.d.ts.map +1 -1
  74. package/dist/cjs/models/Dashboard.d.ts +1 -0
  75. package/dist/cjs/models/Dashboard.d.ts.map +1 -1
  76. package/dist/cjs/models/Report.d.ts +4 -0
  77. package/dist/cjs/models/Report.d.ts.map +1 -1
  78. package/dist/cjs/utils/astFilterProcessing.d.ts +3 -2
  79. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  80. package/dist/cjs/utils/astFilterProcessing.js +3323 -977
  81. package/dist/cjs/utils/astProcessing.d.ts +1 -1
  82. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  83. package/dist/cjs/utils/astProcessing.js +3 -2
  84. package/dist/cjs/utils/client.d.ts +4 -2
  85. package/dist/cjs/utils/client.d.ts.map +1 -1
  86. package/dist/cjs/utils/client.js +47 -1
  87. package/dist/cjs/utils/columnProcessing.d.ts +3 -0
  88. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  89. package/dist/cjs/utils/columnProcessing.js +34 -1
  90. package/dist/cjs/utils/dashboard.d.ts +4 -3
  91. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  92. package/dist/cjs/utils/dashboard.js +10 -91
  93. package/dist/cjs/utils/dataFetcher.d.ts +3 -1
  94. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  95. package/dist/cjs/utils/dataFetcher.js +66 -30
  96. package/dist/cjs/utils/filterProcessing.d.ts +1 -1
  97. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  98. package/dist/cjs/utils/filterProcessing.js +2 -0
  99. package/dist/cjs/utils/pivotConstructor.d.ts +4 -1
  100. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  101. package/dist/cjs/utils/pivotConstructor.js +7 -7
  102. package/dist/cjs/utils/pivotProcessing.d.ts +4 -1
  103. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  104. package/dist/cjs/utils/pivotProcessing.js +27 -20
  105. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  106. package/dist/cjs/utils/queryConstructor.js +101 -85
  107. package/dist/cjs/utils/report.d.ts +17 -5
  108. package/dist/cjs/utils/report.d.ts.map +1 -1
  109. package/dist/cjs/utils/report.js +23 -23
  110. package/dist/cjs/utils/schema.d.ts.map +1 -1
  111. package/dist/cjs/utils/schema.js +21 -21
  112. package/dist/cjs/utils/tableProcessing.d.ts +37 -10
  113. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  114. package/dist/cjs/utils/tableProcessing.js +45 -38
  115. package/dist/cjs/utils/tenants.d.ts +11 -0
  116. package/dist/cjs/utils/tenants.d.ts.map +1 -0
  117. package/dist/cjs/utils/tenants.js +13 -0
  118. package/dist/cjs/utils/textProcessing.d.ts +1 -0
  119. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  120. package/dist/cjs/utils/textProcessing.js +49 -0
  121. package/dist/cjs/utils/validation.js +1 -1
  122. package/dist/esm/Chart.d.ts.map +1 -1
  123. package/dist/esm/Chart.js +2 -2
  124. package/dist/esm/ChartBuilder.d.ts +20 -2
  125. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  126. package/dist/esm/ChartBuilder.js +131 -40
  127. package/dist/esm/ChartEditor.d.ts +5 -3
  128. package/dist/esm/ChartEditor.d.ts.map +1 -1
  129. package/dist/esm/ChartEditor.js +5 -6
  130. package/dist/esm/Context.d.ts +15 -4
  131. package/dist/esm/Context.d.ts.map +1 -1
  132. package/dist/esm/Context.js +36 -59
  133. package/dist/esm/Dashboard.d.ts +4 -0
  134. package/dist/esm/Dashboard.d.ts.map +1 -1
  135. package/dist/esm/Dashboard.js +79 -24
  136. package/dist/esm/QuillProvider.d.ts +12 -9
  137. package/dist/esm/QuillProvider.d.ts.map +1 -1
  138. package/dist/esm/QuillProvider.js +2 -2
  139. package/dist/esm/ReportBuilder.d.ts +9 -1
  140. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  141. package/dist/esm/ReportBuilder.js +200 -84
  142. package/dist/esm/SQLEditor.d.ts +5 -1
  143. package/dist/esm/SQLEditor.d.ts.map +1 -1
  144. package/dist/esm/SQLEditor.js +80 -17
  145. package/dist/esm/Table.d.ts.map +1 -1
  146. package/dist/esm/Table.js +6 -5
  147. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  148. package/dist/esm/components/Chart/InternalChart.js +107 -28
  149. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  150. package/dist/esm/components/Chart/PieChart.js +10 -7
  151. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +3 -2
  152. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  153. package/dist/esm/components/Dashboard/DashboardFilter.js +65 -65
  154. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  155. package/dist/esm/components/Dashboard/DataLoader.js +82 -35
  156. package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
  157. package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
  158. package/dist/esm/components/Dashboard/util.js +6 -2
  159. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +1 -1
  160. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  161. package/dist/esm/components/QuillMultiSelectWithCombo.js +17 -18
  162. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  163. package/dist/esm/components/QuillTable.js +9 -1
  164. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  165. package/dist/esm/components/ReportBuilder/FilterModal.js +26 -4
  166. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  167. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  168. package/dist/esm/components/ReportBuilder/FilterStack.js +2 -2
  169. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
  170. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  171. package/dist/esm/components/ReportBuilder/convert.js +54 -5
  172. package/dist/esm/components/ReportBuilder/ui.d.ts +2 -1
  173. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  174. package/dist/esm/components/ReportBuilder/ui.js +4 -3
  175. package/dist/esm/components/UiComponents.d.ts +1 -0
  176. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  177. package/dist/esm/hooks/useAskQuill.d.ts +1 -1
  178. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  179. package/dist/esm/hooks/useAskQuill.js +7 -6
  180. package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -1
  181. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  182. package/dist/esm/hooks/useAstToFilterTree.js +3 -3
  183. package/dist/esm/hooks/useDashboard.d.ts +5 -2
  184. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  185. package/dist/esm/hooks/useDashboard.js +21 -7
  186. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  187. package/dist/esm/hooks/useExport.js +7 -5
  188. package/dist/esm/index.d.ts +1 -1
  189. package/dist/esm/index.d.ts.map +1 -1
  190. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +8 -2
  191. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  192. package/dist/esm/internals/ReportBuilder/PivotModal.js +59 -30
  193. package/dist/esm/models/Client.d.ts +22 -3
  194. package/dist/esm/models/Client.d.ts.map +1 -1
  195. package/dist/esm/models/Dashboard.d.ts +1 -0
  196. package/dist/esm/models/Dashboard.d.ts.map +1 -1
  197. package/dist/esm/models/Report.d.ts +4 -0
  198. package/dist/esm/models/Report.d.ts.map +1 -1
  199. package/dist/esm/utils/astFilterProcessing.d.ts +3 -2
  200. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  201. package/dist/esm/utils/astFilterProcessing.js +3323 -977
  202. package/dist/esm/utils/astProcessing.d.ts +1 -1
  203. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  204. package/dist/esm/utils/astProcessing.js +4 -3
  205. package/dist/esm/utils/client.d.ts +4 -2
  206. package/dist/esm/utils/client.d.ts.map +1 -1
  207. package/dist/esm/utils/client.js +47 -1
  208. package/dist/esm/utils/columnProcessing.d.ts +3 -0
  209. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  210. package/dist/esm/utils/columnProcessing.js +31 -1
  211. package/dist/esm/utils/dashboard.d.ts +4 -3
  212. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  213. package/dist/esm/utils/dashboard.js +10 -90
  214. package/dist/esm/utils/dataFetcher.d.ts +3 -1
  215. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  216. package/dist/esm/utils/dataFetcher.js +65 -29
  217. package/dist/esm/utils/filterProcessing.d.ts +1 -1
  218. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  219. package/dist/esm/utils/filterProcessing.js +2 -0
  220. package/dist/esm/utils/pivotConstructor.d.ts +4 -1
  221. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  222. package/dist/esm/utils/pivotConstructor.js +8 -8
  223. package/dist/esm/utils/pivotProcessing.d.ts +4 -1
  224. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  225. package/dist/esm/utils/pivotProcessing.js +27 -20
  226. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  227. package/dist/esm/utils/queryConstructor.js +101 -85
  228. package/dist/esm/utils/report.d.ts +17 -5
  229. package/dist/esm/utils/report.d.ts.map +1 -1
  230. package/dist/esm/utils/report.js +20 -23
  231. package/dist/esm/utils/schema.d.ts.map +1 -1
  232. package/dist/esm/utils/schema.js +21 -21
  233. package/dist/esm/utils/tableProcessing.d.ts +37 -10
  234. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  235. package/dist/esm/utils/tableProcessing.js +46 -39
  236. package/dist/esm/utils/tenants.d.ts +11 -0
  237. package/dist/esm/utils/tenants.d.ts.map +1 -0
  238. package/dist/esm/utils/tenants.js +9 -0
  239. package/dist/esm/utils/textProcessing.d.ts +1 -0
  240. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  241. package/dist/esm/utils/textProcessing.js +48 -0
  242. package/dist/esm/utils/validation.js +1 -1
  243. 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,16 @@ 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
+ export const fetchResultsByQuery = async (query, client, tenants, processing, customFields, filters, dateField, rowsOnly, rowCountOnly, filterMap, dashboardName) => {
268
275
  let rows = [];
269
276
  let columns = [];
270
277
  let error = undefined;
@@ -276,12 +283,9 @@ export const fetchResultsByQuery = async (query, client, processing, customField
276
283
  query,
277
284
  task: 'query',
278
285
  filterMap,
279
- orgId: client.organizationId || '*',
280
286
  clientId: client.publicKey,
281
287
  databaseType: client?.databaseType,
282
- getCustomFields: !client.organizationId || client.organizationId === '*'
283
- ? false
284
- : true,
288
+ getCustomFields: !!tenants?.length,
285
289
  customFieldsByTable: customFields,
286
290
  additionalProcessing: processing,
287
291
  useUpdatedDataGathering: processing ? true : false,
@@ -290,6 +294,8 @@ export const fetchResultsByQuery = async (query, client, processing, customField
290
294
  dateField: dateField ?? undefined,
291
295
  rowsOnly,
292
296
  rowCountOnly,
297
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
298
+ tenants: dashboardName && tenants ? tenants : undefined,
293
299
  },
294
300
  };
295
301
  const cloudBody = { query };
@@ -318,7 +324,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
318
324
  if (resp && resp.errorMessage) {
319
325
  throw new Error(resp.errorMessage);
320
326
  }
321
- if (resp.rowCount) {
327
+ if (resp.rowCount !== undefined) {
322
328
  rowCount = resp.rowCount;
323
329
  }
324
330
  if (!resp.error && !parsedSuccessfully) {
@@ -352,7 +358,7 @@ export const fetchResultsByQuery = async (query, client, processing, customField
352
358
  }
353
359
  return { rows, columns, rowCount, error, itemQuery };
354
360
  };
355
- export const fetchResultsByReport = async (reportId, client, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
361
+ export const fetchResultsByReport = async (reportId, client, tenants, processing, filters, customFields, rowsOnly, rowCountOnly, abortSignal) => {
356
362
  const updatedProcessing = { ...processing };
357
363
  let rows = [];
358
364
  let columns = [];
@@ -378,7 +384,6 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
378
384
  const hostedBody = {
379
385
  metadata: {
380
386
  dashboardItemId: reportId,
381
- orgId: client?.organizationId || '*',
382
387
  task: 'item',
383
388
  filters: minimalFilters,
384
389
  clientId: client?.publicKey,
@@ -389,6 +394,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
389
394
  useNewNodeSql: true,
390
395
  rowsOnly,
391
396
  rowCountOnly,
397
+ tenants,
392
398
  },
393
399
  };
394
400
  const cloudBody = {
@@ -401,7 +407,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
401
407
  throw new Error(resp.errorMessage);
402
408
  }
403
409
  processFilterErrorList(resp);
404
- if (resp.rowCount) {
410
+ if (resp.rowCount !== undefined) {
405
411
  rowCount = resp.rowCount;
406
412
  }
407
413
  const gatheredRows = resp.rows && resp.rows.length ? resp.rows : [];
@@ -425,7 +431,7 @@ export const fetchResultsByReport = async (reportId, client, processing, filters
425
431
  }
426
432
  return { rows, columns, rowCount, error };
427
433
  };
428
- export const fetchTableByAST = async (ast, client, processing, customFields, rowsOnly, rowCountOnly) => {
434
+ export const fetchTableByAST = async (ast, client, tenants, processing, customFields, rowsOnly, rowCountOnly, dashboardName) => {
429
435
  let rows = [];
430
436
  let columns = [];
431
437
  let rowCount;
@@ -437,7 +443,6 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
437
443
  clientId: client.publicKey,
438
444
  ast,
439
445
  publicKey: client.publicKey,
440
- orgId: client.organizationId || '*',
441
446
  task: 'patterns',
442
447
  getCustomFields: false,
443
448
  customFields,
@@ -446,6 +451,8 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
446
451
  useNewNodeSql: true,
447
452
  rowsOnly,
448
453
  rowCountOnly,
454
+ dashboardName: dashboardName && tenants ? dashboardName : undefined,
455
+ tenants: dashboardName && tenants ? tenants : undefined,
449
456
  },
450
457
  };
451
458
  const cloudBody = {};
@@ -454,7 +461,7 @@ export const fetchTableByAST = async (ast, client, processing, customFields, row
454
461
  throw new Error(resp.errorMessage);
455
462
  }
456
463
  processFilterErrorList(resp);
457
- if (resp.rowCount) {
464
+ if (resp.rowCount !== undefined) {
458
465
  rowCount = resp.rowCount;
459
466
  }
460
467
  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.26",
3
+ "version": "2.13.28",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": "./dist/esm/index.js",