@quillsql/react 2.13.40 → 2.13.42

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 (267) hide show
  1. package/dist/cjs/Chart.d.ts +5 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +51 -28
  4. package/dist/cjs/ChartBuilder.d.ts +30 -3
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +483 -182
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +11 -1
  9. package/dist/cjs/Context.d.ts +16 -4
  10. package/dist/cjs/Context.d.ts.map +1 -1
  11. package/dist/cjs/Context.js +95 -46
  12. package/dist/cjs/Dashboard.d.ts +6 -3
  13. package/dist/cjs/Dashboard.d.ts.map +1 -1
  14. package/dist/cjs/Dashboard.js +69 -28
  15. package/dist/cjs/QuillProvider.d.ts +4 -8
  16. package/dist/cjs/QuillProvider.d.ts.map +1 -1
  17. package/dist/cjs/ReportBuilder.d.ts +2 -1
  18. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  19. package/dist/cjs/ReportBuilder.js +190 -48
  20. package/dist/cjs/SQLEditor.d.ts +8 -1
  21. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  22. package/dist/cjs/SQLEditor.js +94 -10
  23. package/dist/cjs/Table.d.ts +21 -1
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +30 -192
  26. package/dist/cjs/components/Chart/BarChart.d.ts +5 -1
  27. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  28. package/dist/cjs/components/Chart/BarChart.js +4 -3
  29. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +2 -0
  30. package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -0
  31. package/dist/cjs/components/Chart/CustomReferenceLine.js +26 -0
  32. package/dist/cjs/components/Chart/GaugeChart.d.ts +11 -0
  33. package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -0
  34. package/dist/cjs/components/Chart/GaugeChart.js +198 -0
  35. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  36. package/dist/cjs/components/Chart/InternalChart.js +14 -11
  37. package/dist/cjs/components/Chart/LineChart.d.ts +5 -1
  38. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  39. package/dist/cjs/components/Chart/LineChart.js +4 -3
  40. package/dist/cjs/components/Chart/MapChart.d.ts +36 -0
  41. package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -0
  42. package/dist/cjs/components/Chart/MapChart.js +548 -0
  43. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  44. package/dist/cjs/components/Dashboard/DataLoader.js +114 -42
  45. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  46. package/dist/cjs/components/Dashboard/MetricComponent.js +57 -54
  47. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  48. package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
  49. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  50. package/dist/cjs/components/QuillMultiSelectWithCombo.js +5 -4
  51. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  52. package/dist/cjs/components/QuillSelectWithCombo.js +12 -11
  53. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  54. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +2 -1
  55. package/dist/cjs/components/ReportBuilder/FilterModal.js +13 -13
  56. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
  57. package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  58. package/dist/cjs/components/ReportBuilder/FilterStack.js +4 -4
  59. package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -0
  60. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  61. package/dist/cjs/components/ReportBuilder/convert.js +28 -7
  62. package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
  63. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  64. package/dist/cjs/components/ReportBuilder/util.js +15 -2
  65. package/dist/cjs/components/UiComponents.d.ts +5 -2
  66. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  67. package/dist/cjs/components/UiComponents.js +34 -7
  68. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  69. package/dist/cjs/hooks/useDashboard.js +11 -9
  70. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useExport.js +18 -4
  72. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  73. package/dist/cjs/hooks/useQuill.js +16 -3
  74. package/dist/cjs/hooks/useReport.d.ts.map +1 -1
  75. package/dist/cjs/hooks/useReport.js +1 -7
  76. package/dist/cjs/hooks/useVirtualTables.d.ts +6 -2
  77. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  78. package/dist/cjs/hooks/useVirtualTables.js +5 -2
  79. package/dist/cjs/index.d.ts +1 -1
  80. package/dist/cjs/index.d.ts.map +1 -1
  81. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  82. package/dist/cjs/internals/ReportBuilder/PivotModal.js +7 -8
  83. package/dist/cjs/models/Columns.d.ts +1 -0
  84. package/dist/cjs/models/Columns.d.ts.map +1 -1
  85. package/dist/cjs/models/Filter.d.ts +20 -13
  86. package/dist/cjs/models/Filter.d.ts.map +1 -1
  87. package/dist/cjs/models/Filter.js +161 -87
  88. package/dist/cjs/models/Report.d.ts +12 -1
  89. package/dist/cjs/models/Report.d.ts.map +1 -1
  90. package/dist/cjs/models/Schema.d.ts +12 -1
  91. package/dist/cjs/models/Schema.d.ts.map +1 -1
  92. package/dist/cjs/utils/astFilterProcessing.js +22 -22
  93. package/dist/cjs/utils/astProcessing.d.ts +2 -2
  94. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  95. package/dist/cjs/utils/astProcessing.js +25 -6
  96. package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
  97. package/dist/cjs/utils/axisFormatter.js +25 -0
  98. package/dist/cjs/utils/color.d.ts +159 -0
  99. package/dist/cjs/utils/color.d.ts.map +1 -1
  100. package/dist/cjs/utils/color.js +14 -5
  101. package/dist/cjs/utils/columnProcessing.js +3 -3
  102. package/dist/cjs/utils/constants.d.ts +1 -0
  103. package/dist/cjs/utils/constants.d.ts.map +1 -1
  104. package/dist/cjs/utils/constants.js +2 -1
  105. package/dist/cjs/utils/dashboard.d.ts +14 -3
  106. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  107. package/dist/cjs/utils/dashboard.js +79 -16
  108. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  109. package/dist/cjs/utils/dataFetcher.js +3 -1
  110. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  111. package/dist/cjs/utils/filterProcessing.js +9 -9
  112. package/dist/cjs/utils/getDomain.d.ts +4 -1
  113. package/dist/cjs/utils/getDomain.d.ts.map +1 -1
  114. package/dist/cjs/utils/getDomain.js +11 -1
  115. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  116. package/dist/cjs/utils/pivotConstructor.js +9 -6
  117. package/dist/cjs/utils/queryConstructor.d.ts +1 -1
  118. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  119. package/dist/cjs/utils/queryConstructor.js +83 -49
  120. package/dist/cjs/utils/report.d.ts +23 -5
  121. package/dist/cjs/utils/report.d.ts.map +1 -1
  122. package/dist/cjs/utils/report.js +36 -14
  123. package/dist/cjs/utils/schema.d.ts +28 -3
  124. package/dist/cjs/utils/schema.d.ts.map +1 -1
  125. package/dist/cjs/utils/schema.js +79 -43
  126. package/dist/cjs/utils/tableProcessing.d.ts +12 -3
  127. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  128. package/dist/cjs/utils/tableProcessing.js +36 -8
  129. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  130. package/dist/cjs/utils/textProcessing.js +0 -1
  131. package/dist/cjs/utils/valueFormatter.d.ts +1 -0
  132. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  133. package/dist/cjs/utils/valueFormatter.js +55 -1
  134. package/dist/esm/Chart.d.ts +5 -1
  135. package/dist/esm/Chart.d.ts.map +1 -1
  136. package/dist/esm/Chart.js +52 -29
  137. package/dist/esm/ChartBuilder.d.ts +30 -3
  138. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  139. package/dist/esm/ChartBuilder.js +487 -187
  140. package/dist/esm/ChartEditor.d.ts.map +1 -1
  141. package/dist/esm/ChartEditor.js +11 -1
  142. package/dist/esm/Context.d.ts +16 -4
  143. package/dist/esm/Context.d.ts.map +1 -1
  144. package/dist/esm/Context.js +97 -48
  145. package/dist/esm/Dashboard.d.ts +6 -3
  146. package/dist/esm/Dashboard.d.ts.map +1 -1
  147. package/dist/esm/Dashboard.js +70 -29
  148. package/dist/esm/QuillProvider.d.ts +4 -8
  149. package/dist/esm/QuillProvider.d.ts.map +1 -1
  150. package/dist/esm/ReportBuilder.d.ts +2 -1
  151. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  152. package/dist/esm/ReportBuilder.js +192 -50
  153. package/dist/esm/SQLEditor.d.ts +8 -1
  154. package/dist/esm/SQLEditor.d.ts.map +1 -1
  155. package/dist/esm/SQLEditor.js +95 -11
  156. package/dist/esm/Table.d.ts +21 -1
  157. package/dist/esm/Table.d.ts.map +1 -1
  158. package/dist/esm/Table.js +34 -196
  159. package/dist/esm/components/Chart/BarChart.d.ts +5 -1
  160. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  161. package/dist/esm/components/Chart/BarChart.js +5 -4
  162. package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
  163. package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
  164. package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
  165. package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
  166. package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
  167. package/dist/esm/components/Chart/GaugeChart.js +195 -0
  168. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  169. package/dist/esm/components/Chart/InternalChart.js +14 -11
  170. package/dist/esm/components/Chart/LineChart.d.ts +5 -1
  171. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  172. package/dist/esm/components/Chart/LineChart.js +5 -4
  173. package/dist/esm/components/Chart/MapChart.d.ts +36 -0
  174. package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
  175. package/dist/esm/components/Chart/MapChart.js +541 -0
  176. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  177. package/dist/esm/components/Dashboard/DataLoader.js +114 -42
  178. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  179. package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
  180. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  181. package/dist/esm/components/Dashboard/TableComponent.js +5 -1
  182. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  183. package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
  184. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  185. package/dist/esm/components/QuillSelectWithCombo.js +12 -11
  186. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  187. package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
  188. package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
  189. package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
  190. package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
  191. package/dist/esm/components/ReportBuilder/FilterStack.js +4 -4
  192. package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
  193. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  194. package/dist/esm/components/ReportBuilder/convert.js +26 -7
  195. package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
  196. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  197. package/dist/esm/components/ReportBuilder/util.js +15 -2
  198. package/dist/esm/components/UiComponents.d.ts +5 -2
  199. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  200. package/dist/esm/components/UiComponents.js +32 -6
  201. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  202. package/dist/esm/hooks/useDashboard.js +11 -9
  203. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  204. package/dist/esm/hooks/useExport.js +19 -5
  205. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  206. package/dist/esm/hooks/useQuill.js +16 -3
  207. package/dist/esm/hooks/useReport.d.ts.map +1 -1
  208. package/dist/esm/hooks/useReport.js +1 -7
  209. package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
  210. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  211. package/dist/esm/hooks/useVirtualTables.js +6 -3
  212. package/dist/esm/index.d.ts +1 -1
  213. package/dist/esm/index.d.ts.map +1 -1
  214. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  215. package/dist/esm/internals/ReportBuilder/PivotModal.js +7 -8
  216. package/dist/esm/models/Columns.d.ts +1 -0
  217. package/dist/esm/models/Columns.d.ts.map +1 -1
  218. package/dist/esm/models/Filter.d.ts +20 -13
  219. package/dist/esm/models/Filter.d.ts.map +1 -1
  220. package/dist/esm/models/Filter.js +160 -86
  221. package/dist/esm/models/Report.d.ts +12 -1
  222. package/dist/esm/models/Report.d.ts.map +1 -1
  223. package/dist/esm/models/Schema.d.ts +12 -1
  224. package/dist/esm/models/Schema.d.ts.map +1 -1
  225. package/dist/esm/utils/astFilterProcessing.js +23 -23
  226. package/dist/esm/utils/astProcessing.d.ts +2 -2
  227. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  228. package/dist/esm/utils/astProcessing.js +25 -6
  229. package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
  230. package/dist/esm/utils/axisFormatter.js +25 -0
  231. package/dist/esm/utils/color.d.ts +159 -0
  232. package/dist/esm/utils/color.d.ts.map +1 -1
  233. package/dist/esm/utils/color.js +8 -2
  234. package/dist/esm/utils/columnProcessing.js +3 -3
  235. package/dist/esm/utils/constants.d.ts +1 -0
  236. package/dist/esm/utils/constants.d.ts.map +1 -1
  237. package/dist/esm/utils/constants.js +1 -0
  238. package/dist/esm/utils/dashboard.d.ts +14 -3
  239. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  240. package/dist/esm/utils/dashboard.js +80 -17
  241. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  242. package/dist/esm/utils/dataFetcher.js +3 -1
  243. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  244. package/dist/esm/utils/filterProcessing.js +10 -10
  245. package/dist/esm/utils/getDomain.d.ts +4 -1
  246. package/dist/esm/utils/getDomain.d.ts.map +1 -1
  247. package/dist/esm/utils/getDomain.js +11 -1
  248. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  249. package/dist/esm/utils/pivotConstructor.js +9 -6
  250. package/dist/esm/utils/queryConstructor.d.ts +1 -1
  251. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  252. package/dist/esm/utils/queryConstructor.js +83 -49
  253. package/dist/esm/utils/report.d.ts +23 -5
  254. package/dist/esm/utils/report.d.ts.map +1 -1
  255. package/dist/esm/utils/report.js +38 -16
  256. package/dist/esm/utils/schema.d.ts +28 -3
  257. package/dist/esm/utils/schema.d.ts.map +1 -1
  258. package/dist/esm/utils/schema.js +78 -43
  259. package/dist/esm/utils/tableProcessing.d.ts +12 -3
  260. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  261. package/dist/esm/utils/tableProcessing.js +36 -8
  262. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  263. package/dist/esm/utils/textProcessing.js +0 -1
  264. package/dist/esm/utils/valueFormatter.d.ts +1 -0
  265. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  266. package/dist/esm/utils/valueFormatter.js +53 -0
  267. package/package.json +10 -3
@@ -1,6 +1,7 @@
1
1
  import { getTableNames } from '../components/ReportBuilder/ast';
2
2
  import { convertBigQuery, convertGroupBy, convertOrderBy, convertRemoveSimpleParentheses, convertStringComparison, convertUnaryToBinary, convertWildcardColumns, } from '../components/ReportBuilder/convert';
3
3
  import { deepCopy, removeNonSelectedTableReferences, removeTableNameAlias, } from '../components/ReportBuilder/util';
4
+ import { getFieldFromExpression } from './astFilterProcessing';
4
5
  import { QUILL_SERVER } from './constants';
5
6
  import { getUniqueStringValues } from './tableProcessing';
6
7
  export function getSelectFromAST(ast) {
@@ -169,9 +170,10 @@ export function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
169
170
  }
170
171
  return { tableName, columnName };
171
172
  }
172
- export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
173
+ export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap, skipStar = false) {
173
174
  const referencedColumns = {};
174
- if (ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*') {
175
+ if (!skipStar &&
176
+ (ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*')) {
175
177
  // Be sure to select everything from stars
176
178
  const tableList = ast.from.map((table) => recursiveSearchByKey(table, 'table'));
177
179
  tableList.forEach((table) => {
@@ -251,6 +253,23 @@ export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
251
253
  }
252
254
  });
253
255
  }
256
+ // Look through the orderby's
257
+ if (ast.orderby) {
258
+ const allColumnReferencesInOrderBy = ast.orderby.map((orderby) => ({
259
+ field: getFieldFromExpression(orderby.expr ?? orderby),
260
+ table: orderby.expr?.table,
261
+ }));
262
+ allColumnReferencesInOrderBy.forEach((column) => {
263
+ const table = column.table || ast.from?.length === 1 ? ast.from[0].table : '';
264
+ if (!table) {
265
+ return;
266
+ }
267
+ if (!referencedColumns[table]) {
268
+ referencedColumns[table] = [];
269
+ }
270
+ referencedColumns[table].push(column.field);
271
+ });
272
+ }
254
273
  for (const table in referencedColumns) {
255
274
  referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
256
275
  }
@@ -377,7 +396,7 @@ export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, pre
377
396
  }
378
397
  ast = ast.length ? ast[0] : ast;
379
398
  newAst = convertBigQuery(ast);
380
- newAst = removeTableNameAlias(newAst);
399
+ newAst = removeTableNameAlias(newAst, schema);
381
400
  newAst = convertWildcardColumns(newAst, schema); // must go before groupby
382
401
  ({ ast: newAst, pivot } = convertGroupBy(newAst, schema, prevPivot, prevTable));
383
402
  newAst = convertOrderBy(newAst, schema);
@@ -471,7 +490,7 @@ const POSTGRES_DATE_TYPES = [
471
490
  'time',
472
491
  'timetz',
473
492
  ];
474
- export function getTablesHelper(ast, allTables) {
493
+ export function getTablesHelper(ast, allTables, skipStar) {
475
494
  const tableAliasMap = createTableNameToTableAliasMap(ast);
476
495
  const tablesInQuery = Object.values(tableAliasMap);
477
496
  // Remove all aliased tables (with statements and subqueries)
@@ -479,7 +498,7 @@ export function getTablesHelper(ast, allTables) {
479
498
  .filter((table) => tablesInQuery.includes(table.displayName))
480
499
  .map((table) => table.displayName);
481
500
  // Get non with statement column references
482
- let referencedColumns = getColumnsByTableFromASTAndSchema(ast, allTables, tableAliasMap);
501
+ let referencedColumns = getColumnsByTableFromASTAndSchema(ast, allTables, tableAliasMap, skipStar);
483
502
  referencedColumns = Object.keys(referencedColumns)
484
503
  .filter((table) => onlyReferenceTables.includes(table))
485
504
  .reduce((obj, key) => {
@@ -491,7 +510,7 @@ export function getTablesHelper(ast, allTables) {
491
510
  for (const withStmt of ast.with) {
492
511
  const astFrom = withStmt.stmt.from ?? withStmt.stmt.ast.from;
493
512
  if (astFrom) {
494
- const withReferencedColumns = getColumnsByTableFromASTAndSchema(withStmt.stmt.ast ?? withStmt.stmt, allTables, tableAliasMap);
513
+ const withReferencedColumns = getColumnsByTableFromASTAndSchema(withStmt.stmt.ast ?? withStmt.stmt, allTables, tableAliasMap, skipStar);
495
514
  // @ts-ignore
496
515
  Object.keys(withReferencedColumns).forEach((tableName) => {
497
516
  if (referencedColumns[tableName]) {
@@ -1 +1 @@
1
- {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,6BAA8B,KAAK,KAAG,MAwC/D,CAAC"}
1
+ {"version":3,"file":"axisFormatter.d.ts","sourceRoot":"","sources":["../../../src/utils/axisFormatter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,6BAA8B,KAAK,KAAG,MA4C/D,CAAC"}
@@ -23,6 +23,10 @@ export const axisFormatter = ({ value, field, fields }) => {
23
23
  return formatDollarAmount(value);
24
24
  case 'whole_number':
25
25
  return formatWholeNumber(value);
26
+ case 'two_decimal_places':
27
+ return formatDecimal2(value);
28
+ case 'one_decimal_place':
29
+ return formatDecimal1(value);
26
30
  case 'string':
27
31
  return formatString(value);
28
32
  case 'yyyy':
@@ -60,6 +64,26 @@ const formatString = (value) => {
60
64
  }
61
65
  return value.toString();
62
66
  };
67
+ const formatterDecimal2 = new Intl.NumberFormat('en-US', {
68
+ style: 'decimal',
69
+ maximumFractionDigits: 2,
70
+ });
71
+ /**
72
+ * Formats the value as a number with two decimal places.
73
+ */
74
+ const formatDecimal2 = (value) => {
75
+ return formatterDecimal2.format(Number(value));
76
+ };
77
+ const formatterDecimal1 = new Intl.NumberFormat('en-US', {
78
+ style: 'decimal',
79
+ maximumFractionDigits: 1,
80
+ });
81
+ /**
82
+ * Formats the value as a number with one decimal place.
83
+ */
84
+ const formatDecimal1 = (value) => {
85
+ return formatterDecimal1.format(Number(value));
86
+ };
63
87
  // Formats large numbers like 12345.67 -> $12K
64
88
  const formatterBigDollars = new Intl.NumberFormat('en-US', {
65
89
  style: 'currency',
@@ -99,6 +123,7 @@ const formatDollarAmount = (value) => {
99
123
  const formatterBigWholeNumber = new Intl.NumberFormat('en-US', {
100
124
  minimumSignificantDigits: 1,
101
125
  maximumSignificantDigits: 2,
126
+ maximumFractionDigits: 0,
102
127
  notation: 'compact',
103
128
  compactDisplay: 'short',
104
129
  });
@@ -15,7 +15,166 @@ export type Color = (typeof colorValues)[number];
15
15
  * @param index the index of this element in colors
16
16
  */
17
17
  export declare function selectColor(element: any, colors: string[], index: number): string;
18
+ /**
19
+ * Transform a hex string to an RGB array.
20
+ *
21
+ * Examples:
22
+ * - #8661f2 -> [134, 97, 242]
23
+ * - #1661ea2e -> [22, 97, 234, 46]
24
+ *
25
+ * TODO: Add support for triplet-style hex codes like this:
26
+ * - #123 -> #112233 -> [17, 34, 51]
27
+ */
28
+ export declare function hexToRGB(hex: string): number[];
29
+ export declare function RGBToHex(rgb: number[]): string;
18
30
  export declare function namedColorToHex(color: string): string;
31
+ /**
32
+ * A comprehensive map of all the CSS named-colors that modern browsers will
33
+ * recognize, and converts them into their hex values.
34
+ */
35
+ export declare const COLOR_TO_HEX: {
36
+ aliceblue: string;
37
+ antiquewhite: string;
38
+ aqua: string;
39
+ aquamarine: string;
40
+ azure: string;
41
+ beige: string;
42
+ bisque: string;
43
+ black: string;
44
+ blanchedalmond: string;
45
+ blue: string;
46
+ blueviolet: string;
47
+ brown: string;
48
+ burlywood: string;
49
+ cadetblue: string;
50
+ chartreuse: string;
51
+ chocolate: string;
52
+ coral: string;
53
+ cornflowerblue: string;
54
+ cornsilk: string;
55
+ crimson: string;
56
+ cyan: string;
57
+ darkblue: string;
58
+ darkcyan: string;
59
+ darkgoldenrod: string;
60
+ darkgray: string;
61
+ darkgreen: string;
62
+ darkkhaki: string;
63
+ darkmagenta: string;
64
+ darkolivegreen: string;
65
+ darkorange: string;
66
+ darkorchid: string;
67
+ darkred: string;
68
+ darksalmon: string;
69
+ darkseagreen: string;
70
+ darkslateblue: string;
71
+ darkslategray: string;
72
+ darkturquoise: string;
73
+ darkviolet: string;
74
+ deeppink: string;
75
+ deepskyblue: string;
76
+ dimgray: string;
77
+ dodgerblue: string;
78
+ firebrick: string;
79
+ floralwhite: string;
80
+ forestgreen: string;
81
+ fuchsia: string;
82
+ gainsboro: string;
83
+ ghostwhite: string;
84
+ gold: string;
85
+ goldenrod: string;
86
+ gray: string;
87
+ green: string;
88
+ greenyellow: string;
89
+ honeydew: string;
90
+ hotpink: string;
91
+ indianred: string;
92
+ indigo: string;
93
+ ivory: string;
94
+ khaki: string;
95
+ lavender: string;
96
+ lavenderblush: string;
97
+ lawngreen: string;
98
+ lemonchiffon: string;
99
+ lightblue: string;
100
+ lightcoral: string;
101
+ lightcyan: string;
102
+ lightgoldenrodyellow: string;
103
+ lightgrey: string;
104
+ lightgreen: string;
105
+ lightpink: string;
106
+ lightsalmon: string;
107
+ lightseagreen: string;
108
+ lightskyblue: string;
109
+ lightslategray: string;
110
+ lightsteelblue: string;
111
+ lightyellow: string;
112
+ lime: string;
113
+ limegreen: string;
114
+ linen: string;
115
+ magenta: string;
116
+ maroon: string;
117
+ mediumaquamarine: string;
118
+ mediumblue: string;
119
+ mediumorchid: string;
120
+ mediumpurple: string;
121
+ mediumseagreen: string;
122
+ mediumslateblue: string;
123
+ mediumspringgreen: string;
124
+ mediumturquoise: string;
125
+ mediumvioletred: string;
126
+ midnightblue: string;
127
+ mintcream: string;
128
+ mistyrose: string;
129
+ moccasin: string;
130
+ navajowhite: string;
131
+ navy: string;
132
+ oldlace: string;
133
+ olive: string;
134
+ olivedrab: string;
135
+ orange: string;
136
+ orangered: string;
137
+ orchid: string;
138
+ palegoldenrod: string;
139
+ palegreen: string;
140
+ paleturquoise: string;
141
+ palevioletred: string;
142
+ papayawhip: string;
143
+ peachpuff: string;
144
+ peru: string;
145
+ pink: string;
146
+ plum: string;
147
+ powderblue: string;
148
+ purple: string;
149
+ rebeccapurple: string;
150
+ red: string;
151
+ rosybrown: string;
152
+ royalblue: string;
153
+ saddlebrown: string;
154
+ salmon: string;
155
+ sandybrown: string;
156
+ seagreen: string;
157
+ seashell: string;
158
+ sienna: string;
159
+ silver: string;
160
+ skyblue: string;
161
+ slateblue: string;
162
+ slategray: string;
163
+ snow: string;
164
+ springgreen: string;
165
+ steelblue: string;
166
+ tan: string;
167
+ teal: string;
168
+ thistle: string;
169
+ tomato: string;
170
+ turquoise: string;
171
+ violet: string;
172
+ wheat: string;
173
+ white: string;
174
+ whitesmoke: string;
175
+ yellow: string;
176
+ yellowgreen: string;
177
+ };
19
178
  /**
20
179
  * Converts an RGB color value to HSL. Conversion formula
21
180
  * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/utils/color.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAwBV;AA6ED,QAAA,MAAM,WAAW,mKAkBP,CAAC;AAEX,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,UAuBxE;AAyDD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,UAK5C;AAwJD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,YA4B9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,YAuB9C"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/utils/color.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAwBV;AA6ED,QAAA,MAAM,WAAW,mKAkBP,CAAC;AAEX,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,UAuBxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB9C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAK9C;AAoBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,UAK5C;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8IxB,CAAC;AAIF;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,YA4B9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,YAuB9C"}
@@ -152,7 +152,7 @@ export function selectColor(element, colors, index) {
152
152
  * TODO: Add support for triplet-style hex codes like this:
153
153
  * - #123 -> #112233 -> [17, 34, 51]
154
154
  */
155
- function hexToRGB(hex) {
155
+ export function hexToRGB(hex) {
156
156
  // Matches 3-4 pairs of hex digits with an optional leading `#` character
157
157
  const regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i;
158
158
  const result = regex.exec(hex);
@@ -176,6 +176,12 @@ function hexToRGB(hex) {
176
176
  }
177
177
  return [128, 128, 128]; // unknown color, return 'gray'
178
178
  }
179
+ export function RGBToHex(rgb) {
180
+ return `#${rgb
181
+ .map((c) => Math.round(c).toString(16).padStart(2, '0'))
182
+ .join('')
183
+ .toUpperCase()}`;
184
+ }
179
185
  /**
180
186
  * Converts an RGB object to grayscale.
181
187
  *
@@ -204,7 +210,7 @@ export function namedColorToHex(color) {
204
210
  * A comprehensive map of all the CSS named-colors that modern browsers will
205
211
  * recognize, and converts them into their hex values.
206
212
  */
207
- const COLOR_TO_HEX = {
213
+ export const COLOR_TO_HEX = {
208
214
  aliceblue: '#f0f8ff',
209
215
  antiquewhite: '#faebd7',
210
216
  aqua: '#00ffff',
@@ -294,7 +294,7 @@ export function processColumnName(columnName) {
294
294
  return removeBigQuerySpecialChars(columnName);
295
295
  }
296
296
  export function isStringType(fieldType) {
297
- return ['string', 'varchar', 'text', 'char', 'bpchar', 'citext'].includes(fieldType);
297
+ return ['string', 'varchar', 'text', 'char', 'bpchar', 'citext'].includes(fieldType?.toLowerCase());
298
298
  }
299
299
  export function isDateType(fieldType) {
300
300
  return [
@@ -304,7 +304,7 @@ export function isDateType(fieldType) {
304
304
  'timestamptz',
305
305
  'timestamp',
306
306
  'interval',
307
- ].includes(fieldType);
307
+ ].includes(fieldType?.toLowerCase());
308
308
  }
309
309
  export function isNumberType(fieldType) {
310
310
  return [
@@ -318,7 +318,7 @@ export function isNumberType(fieldType) {
318
318
  'smallint',
319
319
  'float2',
320
320
  'float16',
321
- ].includes(fieldType);
321
+ ].includes(fieldType?.toLowerCase());
322
322
  }
323
323
  export function isBoolType(fieldType) {
324
324
  return ['bool', 'boolean'].includes(fieldType);
@@ -4,4 +4,5 @@ export declare const QUILL_SERVER: string;
4
4
  export declare const QUILL_QUERY_ENDPOINT: string;
5
5
  export declare const ALL_TENANTS = "QUILL_ALL_TENANTS";
6
6
  export declare const SINGLE_TENANT = "QUILL_SINGLE_TENANT";
7
+ export declare const REFERENCE_LINE = "QUILL_REFERENCE_LINE";
7
8
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,YAAY,QAGoB,CAAC;AAC9C,eAAO,MAAM,oBAAoB,QAGnB,CAAC;AACf,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,aAAa,wBAAwB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,YAAY,QAGoB,CAAC;AAC9C,eAAO,MAAM,oBAAoB,QAGnB,CAAC;AACf,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,aAAa,wBAAwB,CAAC;AACnD,eAAO,MAAM,cAAc,yBAAyB,CAAC"}
@@ -8,3 +8,4 @@ export const QUILL_QUERY_ENDPOINT = typeof process !== 'undefined' && process.en
8
8
  : '/cloud';
9
9
  export const ALL_TENANTS = 'QUILL_ALL_TENANTS';
10
10
  export const SINGLE_TENANT = 'QUILL_SINGLE_TENANT';
11
+ export const REFERENCE_LINE = 'QUILL_REFERENCE_LINE';
@@ -1,6 +1,7 @@
1
1
  import { QuillReportInternal } from '../models/Report';
2
2
  import { QuillProviderClient } from '../models/Client';
3
3
  import { AdditionalProcessing } from './tableProcessing';
4
+ import { CustomField } from '../models/Schema';
4
5
  /**
5
6
  * Returns a cleaned version of the dashboard item we store in state. We clean
6
7
  * the dashboard item so that we aren't exposing unnecessary details to the
@@ -8,9 +9,19 @@ import { AdditionalProcessing } from './tableProcessing';
8
9
  * interface to build amazing dashboards on top of.
9
10
  * @param item
10
11
  */
11
- export declare function cleanDashboardItem(item: {
12
- [key: string]: any;
13
- } | undefined, dashboardFilters: any, client: QuillProviderClient, dateBucket?: string, additionalProcessing?: AdditionalProcessing): Promise<QuillReportInternal>;
12
+ export declare function cleanDashboardItem({ item, dashboardFilters, client, dateBucket, additionalProcessing, customFields, skipPivotFetch, }: {
13
+ item: {
14
+ [key: string]: any;
15
+ } | undefined;
16
+ dashboardFilters: any;
17
+ client: QuillProviderClient;
18
+ dateBucket?: string;
19
+ additionalProcessing?: AdditionalProcessing;
20
+ customFields?: {
21
+ [tableName: string]: CustomField[];
22
+ } | null;
23
+ skipPivotFetch?: boolean;
24
+ }): Promise<QuillReportInternal>;
14
25
  export declare function getDashboard(dashboardName: string, client: QuillProviderClient, tenants?: {
15
26
  tenantField: string;
16
27
  tenantIds: (string | number)[];
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CA+F9B;AA0ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAOzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB/C;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,EAAE;IACD,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,GAAG,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,YAAY,CAAC,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqK/B;AA2ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
@@ -3,7 +3,7 @@ import { snakeAndCamelCaseToTitleCase, snakeCaseToTitleCase, } from './textProce
3
3
  import { getData } from './dataFetcher';
4
4
  import { getDateBucketFromRange } from './dates';
5
5
  import { generatePivotWithSQL } from './pivotConstructor';
6
- import { convertFieldTypeToJSType, fieldTypeToDataTypeID, processColumnName, } from './columnProcessing';
6
+ import { convertFieldTypeToJSType, convertPostgresColumn, fieldTypeToDataTypeID, processColumnName, } from './columnProcessing';
7
7
  const defaultDashboardItem = {
8
8
  id: '',
9
9
  name: '',
@@ -30,7 +30,7 @@ const defaultDashboardItem = {
30
30
  * interface to build amazing dashboards on top of.
31
31
  * @param item
32
32
  */
33
- export async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, additionalProcessing) {
33
+ export async function cleanDashboardItem({ item, dashboardFilters, client, dateBucket, additionalProcessing, customFields, skipPivotFetch, }) {
34
34
  if (!item)
35
35
  return defaultDashboardItem;
36
36
  if (!item.rows) {
@@ -40,24 +40,56 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
40
40
  name: item.name,
41
41
  };
42
42
  }
43
+ const fields = item.fields || [];
44
+ const columnsWithCustomFields = [...(item.columns ?? [])];
45
+ if (item.includeCustomFields && item.rows?.length > 0) {
46
+ const tables = item.referencedTables ?? [];
47
+ tables.forEach((table) => {
48
+ const _customFields = customFields?.[table] ?? [];
49
+ _customFields.forEach((field) => {
50
+ const isJsonCustomField = !!field.refColumn;
51
+ if (item.rows[0][field.field] !== undefined &&
52
+ !item.columns.some((col) => col.field === field.field)) {
53
+ const result_field = fields.find((f) => f.name === field.field);
54
+ const converted_field = convertPostgresColumn(result_field ?? {});
55
+ columnsWithCustomFields.push({
56
+ field: field.field,
57
+ format: converted_field.format,
58
+ label: snakeAndCamelCaseToTitleCase(field.field),
59
+ fieldType: converted_field.fieldType,
60
+ dataTypeID: converted_field.dataTypeID,
61
+ jsType: converted_field.jsType,
62
+ inferFormat: isJsonCustomField,
63
+ });
64
+ }
65
+ });
66
+ });
67
+ }
43
68
  const processedColumns = item.columns.map((col) => {
44
69
  return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
45
70
  });
71
+ const columnInternal = (item.includeCustomFields ? columnsWithCustomFields : item.columns).map((col) => {
72
+ return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
73
+ });
46
74
  let pivotTable;
47
75
  let pivotError;
48
76
  try {
49
77
  pivotTable = await getPivotTable({
50
78
  ...item,
51
- pivot: item.pivot ? {
52
- ...item.pivot,
53
- aggregations: item.pivot.aggregations ?? [{
54
- valueField: item.pivot.valueField,
55
- valueFieldType: item.pivot.valueFieldType,
56
- valueField2: item.pivot.valueField2,
57
- valueField2Type: item.pivot.valueField2Type,
58
- aggregationType: item.pivot.aggregationType,
59
- }]
60
- } : undefined,
79
+ pivot: item.pivot && !skipPivotFetch
80
+ ? {
81
+ ...item.pivot,
82
+ aggregations: item.pivot.aggregations ?? [
83
+ {
84
+ valueField: item.pivot.valueField,
85
+ valueFieldType: item.pivot.valueFieldType,
86
+ valueField2: item.pivot.valueField2,
87
+ valueField2Type: item.pivot.valueField2Type,
88
+ aggregationType: item.pivot.aggregationType,
89
+ },
90
+ ],
91
+ }
92
+ : undefined,
61
93
  }, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
62
94
  }
63
95
  catch (e) {
@@ -65,6 +97,29 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
65
97
  console.error('Error fetching pivot table', e);
66
98
  pivotError = 'Error fetching pivot table';
67
99
  }
100
+ // For each key on item that starts with "referenceLine_{field}", we want to
101
+ // add it to referenceLineYValues as [field]: [value, value] (we only support horizontal lines)
102
+ // Then for each number value in the referenceLines map, we also want to add [key]: [value, value]
103
+ const referenceLineYValues = [];
104
+ for (const key in item) {
105
+ if (key.startsWith('referenceLine_')) {
106
+ const field = key.slice(14);
107
+ if (!item[key] || !item[key][0])
108
+ continue;
109
+ const value = Object.values(item[key][0])[0];
110
+ referenceLineYValues.push({ label: field, query: [value, value] });
111
+ }
112
+ }
113
+ if (item.referenceLines) {
114
+ for (const referenceLine of item.referenceLines) {
115
+ if (Array.isArray(referenceLine.query)) {
116
+ referenceLineYValues.push({ label: referenceLine.label, query: referenceLine.query });
117
+ }
118
+ else if (referenceLine.query === '') {
119
+ referenceLineYValues.push({ label: referenceLine.label, query: (pivotTable?.rows ? pivotTable.rows : item.rows).map((row) => Number(row[referenceLine.label]) || 0) });
120
+ }
121
+ }
122
+ }
68
123
  return {
69
124
  id: item._id ?? item.id,
70
125
  name: item.name,
@@ -78,9 +133,12 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
78
133
  field: column.field,
79
134
  format: column.format,
80
135
  label: column.label,
136
+ inferFormat: column.inferFormat,
81
137
  };
82
138
  }),
83
- columnInternal: processedColumns,
139
+ includeCustomFields: item.includeCustomFields,
140
+ columnInternal,
141
+ columnsWithCustomFields,
84
142
  chartType: item.chartType,
85
143
  dateField: item.dateField,
86
144
  pivot: pivotError
@@ -88,14 +146,16 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
88
146
  : item.pivot
89
147
  ? {
90
148
  ...item.pivot,
91
- aggregations: item.pivot.aggregations ?? [{
149
+ aggregations: item.pivot.aggregations ?? [
150
+ {
92
151
  valueField: item.pivot.valueField,
93
152
  valueFieldType: item.pivot.valueFieldType,
94
153
  valueField2: item.pivot.valueField2,
95
154
  valueField2Type: item.pivot.valueField2Type,
96
155
  aggregationType: item.pivot.aggregationType,
97
- }],
98
- columnValues: item.distinctStrings
156
+ },
157
+ ],
158
+ columnValues: item.distinctStrings,
99
159
  }
100
160
  : undefined,
101
161
  yAxisFields: pivotTable
@@ -119,6 +179,8 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
119
179
  referencedTables: item?.referencedTables || [],
120
180
  referencedColumns: item?.referencedColumns || {},
121
181
  error: item.error ?? pivotError,
182
+ referenceLineYValues: referenceLineYValues,
183
+ referenceLines: item.referenceLines,
122
184
  };
123
185
  }
124
186
  /**
@@ -153,7 +215,8 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
153
215
  field: agg.valueField,
154
216
  label: snakeCaseToTitleCase(processColumnName(agg.valueField)),
155
217
  //FIXME: valueFieldType is not always the same as the format
156
- format: agg.valueFieldType ?? 'whole_number',
218
+ format: agg.valueFieldType ??
219
+ 'whole_number',
157
220
  jsType: agg.valueFieldType ?? 'number',
158
221
  fieldType: agg.valueFieldType ?? 'number',
159
222
  dataTypeID: fieldTypeToDataTypeID(agg.valueFieldType ?? 'number'),
@@ -1 +1 @@
1
- {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgFvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBA0K1B;AAED,wBAAgB,aAAa;+BAGjB,mBAAmB,sBACP,MAAM,oBACR,GAAG,iCAEP,WAAW;EAoC5B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
1
+ {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgFvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBA4K1B;AAED,wBAAgB,aAAa;+BAGjB,mBAAmB,sBACP,MAAM,oBACR,GAAG,iCAEP,WAAW;EAoC5B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
@@ -90,7 +90,9 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
90
90
  let errorMessage = 'Failed to fetch report: ' + responseJson.error;
91
91
  if (hostedRequestBody.metadata.task === 'query' ||
92
92
  hostedRequestBody.metadata.task === 'patterns') {
93
- errorPrefix = 'SQL Error: ';
93
+ errorPrefix = responseJson.error?.includes('Query Parsing Error')
94
+ ? ''
95
+ : 'SQL Error: ';
94
96
  errorMessage = errorPrefix + responseJson.error;
95
97
  }
96
98
  else if (responseJson.error?.includes('Virtual Table Error')) {
@@ -1 +1 @@
1
- {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE;IACpD,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAChD,GAAG;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB,CASA;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}
1
+ {"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE;IACpD,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAChD,GAAG;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB,CASA;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}