@quillsql/react 2.12.30 → 2.12.31

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 (201) hide show
  1. package/dist/cjs/Chart.d.ts +6 -37
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +86 -327
  4. package/dist/cjs/ChartBuilder.d.ts +12 -49
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +68 -36
  7. package/dist/cjs/ChartEditor.d.ts +1 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +11 -7
  10. package/dist/cjs/Context.d.ts +4 -1
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +10 -4
  13. package/dist/cjs/Dashboard.d.ts +61 -114
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +261 -30
  16. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/DateRangePicker.js +0 -26
  18. package/dist/cjs/ReportBuilder.d.ts +1 -1
  19. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  20. package/dist/cjs/ReportBuilder.js +62 -97
  21. package/dist/cjs/SQLEditor.d.ts +2 -2
  22. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  23. package/dist/cjs/SQLEditor.js +10 -5
  24. package/dist/cjs/Table.d.ts.map +1 -1
  25. package/dist/cjs/Table.js +41 -43
  26. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  27. package/dist/cjs/components/Chart/BarChart.js +12 -1
  28. package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
  29. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  30. package/dist/cjs/components/Chart/LineChart.js +25 -1
  31. package/dist/cjs/components/Dashboard/DataLoader.d.ts +7 -7
  32. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  33. package/dist/cjs/components/Dashboard/DataLoader.js +64 -28
  34. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  35. package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
  36. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
  37. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  38. package/dist/cjs/components/Dashboard/TableComponent.js +1 -30
  39. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  40. package/dist/cjs/components/QuillMultiSelectWithCombo.js +16 -1
  41. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  42. package/dist/cjs/components/QuillSelectWithCombo.js +4 -1
  43. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +10 -2
  44. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  45. package/dist/cjs/components/ReportBuilder/FilterModal.js +94 -70
  46. package/dist/cjs/components/ReportBuilder/convert.d.ts +7 -2
  47. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  48. package/dist/cjs/components/ReportBuilder/convert.js +53 -1
  49. package/dist/cjs/components/ReportBuilder/ui.d.ts +6 -6
  50. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  51. package/dist/cjs/components/ReportBuilder/ui.js +6 -22
  52. package/dist/cjs/components/UiComponents.d.ts +26 -1
  53. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  54. package/dist/cjs/components/UiComponents.js +97 -4
  55. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  56. package/dist/cjs/hooks/useQuill.js +19 -3
  57. package/dist/cjs/index.d.ts +2 -1
  58. package/dist/cjs/index.d.ts.map +1 -1
  59. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -0
  60. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  61. package/dist/cjs/models/Columns.d.ts +2 -1
  62. package/dist/cjs/models/Columns.d.ts.map +1 -1
  63. package/dist/cjs/models/Filter.d.ts +15 -4
  64. package/dist/cjs/models/Filter.d.ts.map +1 -1
  65. package/dist/cjs/models/Filter.js +9 -1
  66. package/dist/cjs/models/Report.d.ts +10 -23
  67. package/dist/cjs/models/Report.d.ts.map +1 -1
  68. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  69. package/dist/cjs/utils/astFilterProcessing.js +37 -2
  70. package/dist/cjs/utils/columnProcessing.d.ts +2 -0
  71. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  72. package/dist/cjs/utils/columnProcessing.js +54 -1
  73. package/dist/cjs/utils/dashboard.d.ts +1 -1
  74. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  75. package/dist/cjs/utils/dashboard.js +3 -56
  76. package/dist/cjs/utils/dataProcessing.d.ts +4 -2
  77. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
  78. package/dist/cjs/utils/dataProcessing.js +18 -1
  79. package/dist/cjs/utils/dates.d.ts +2 -1
  80. package/dist/cjs/utils/dates.d.ts.map +1 -1
  81. package/dist/cjs/utils/dates.js +23 -1
  82. package/dist/cjs/utils/filterProcessing.d.ts +7 -1
  83. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  84. package/dist/cjs/utils/filterProcessing.js +100 -13
  85. package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
  86. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  87. package/dist/cjs/utils/pivotConstructor.js +7 -1
  88. package/dist/cjs/utils/report.d.ts +4 -1
  89. package/dist/cjs/utils/report.d.ts.map +1 -1
  90. package/dist/cjs/utils/report.js +94 -7
  91. package/dist/cjs/utils/tableProcessing.d.ts +1 -1
  92. package/dist/esm/Chart.d.ts +6 -37
  93. package/dist/esm/Chart.d.ts.map +1 -1
  94. package/dist/esm/Chart.js +87 -329
  95. package/dist/esm/ChartBuilder.d.ts +12 -49
  96. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  97. package/dist/esm/ChartBuilder.js +68 -33
  98. package/dist/esm/ChartEditor.d.ts +1 -1
  99. package/dist/esm/ChartEditor.d.ts.map +1 -1
  100. package/dist/esm/ChartEditor.js +11 -7
  101. package/dist/esm/Context.d.ts +4 -1
  102. package/dist/esm/Context.d.ts.map +1 -1
  103. package/dist/esm/Context.js +9 -3
  104. package/dist/esm/Dashboard.d.ts +61 -114
  105. package/dist/esm/Dashboard.d.ts.map +1 -1
  106. package/dist/esm/Dashboard.js +263 -32
  107. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  108. package/dist/esm/DateRangePicker/DateRangePicker.js +0 -26
  109. package/dist/esm/ReportBuilder.d.ts +1 -1
  110. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  111. package/dist/esm/ReportBuilder.js +64 -99
  112. package/dist/esm/SQLEditor.d.ts +2 -2
  113. package/dist/esm/SQLEditor.d.ts.map +1 -1
  114. package/dist/esm/SQLEditor.js +11 -6
  115. package/dist/esm/Table.d.ts.map +1 -1
  116. package/dist/esm/Table.js +42 -44
  117. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  118. package/dist/esm/components/Chart/BarChart.js +13 -2
  119. package/dist/esm/components/Chart/LineChart.d.ts +2 -1
  120. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  121. package/dist/esm/components/Chart/LineChart.js +26 -2
  122. package/dist/esm/components/Dashboard/DataLoader.d.ts +7 -7
  123. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  124. package/dist/esm/components/Dashboard/DataLoader.js +65 -29
  125. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  126. package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
  127. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
  128. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  129. package/dist/esm/components/Dashboard/TableComponent.js +1 -30
  130. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  131. package/dist/esm/components/QuillMultiSelectWithCombo.js +16 -1
  132. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  133. package/dist/esm/components/QuillSelectWithCombo.js +5 -2
  134. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +10 -2
  135. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  136. package/dist/esm/components/ReportBuilder/FilterModal.js +94 -70
  137. package/dist/esm/components/ReportBuilder/convert.d.ts +7 -2
  138. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  139. package/dist/esm/components/ReportBuilder/convert.js +51 -0
  140. package/dist/esm/components/ReportBuilder/convert.uspec.js +280 -13
  141. package/dist/esm/components/ReportBuilder/ui.d.ts +6 -6
  142. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  143. package/dist/esm/components/ReportBuilder/ui.js +6 -22
  144. package/dist/esm/components/UiComponents.d.ts +26 -1
  145. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  146. package/dist/esm/components/UiComponents.js +95 -3
  147. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  148. package/dist/esm/hooks/useQuill.js +19 -3
  149. package/dist/esm/index.d.ts +2 -1
  150. package/dist/esm/index.d.ts.map +1 -1
  151. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -0
  152. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  153. package/dist/esm/models/Columns.d.ts +2 -1
  154. package/dist/esm/models/Columns.d.ts.map +1 -1
  155. package/dist/esm/models/Filter.d.ts +15 -4
  156. package/dist/esm/models/Filter.d.ts.map +1 -1
  157. package/dist/esm/models/Filter.js +8 -0
  158. package/dist/esm/models/Report.d.ts +10 -23
  159. package/dist/esm/models/Report.d.ts.map +1 -1
  160. package/dist/esm/test-utils/constants.d.ts +56 -0
  161. package/dist/esm/test-utils/constants.d.ts.map +1 -0
  162. package/dist/esm/test-utils/constants.js +271 -0
  163. package/dist/esm/test-utils/generators.d.ts +4 -0
  164. package/dist/esm/test-utils/generators.d.ts.map +1 -0
  165. package/dist/esm/test-utils/generators.js +37 -0
  166. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  167. package/dist/esm/utils/astFilterProcessing.js +38 -3
  168. package/dist/esm/utils/astFilterProcessing.uspec.js +153 -5
  169. package/dist/esm/utils/columnProcessing.d.ts +2 -0
  170. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  171. package/dist/esm/utils/columnProcessing.js +52 -0
  172. package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
  173. package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
  174. package/dist/esm/utils/columnProcessing.uspec.js +65 -0
  175. package/dist/esm/utils/dashboard.d.ts +1 -1
  176. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  177. package/dist/esm/utils/dashboard.js +3 -56
  178. package/dist/esm/utils/dataProcessing.d.ts +4 -2
  179. package/dist/esm/utils/dataProcessing.d.ts.map +1 -1
  180. package/dist/esm/utils/dataProcessing.js +16 -0
  181. package/dist/esm/utils/dataProcessing.uspec.js +1 -0
  182. package/dist/esm/utils/dates.d.ts +2 -1
  183. package/dist/esm/utils/dates.d.ts.map +1 -1
  184. package/dist/esm/utils/dates.js +21 -0
  185. package/dist/esm/utils/filterProcessing.d.ts +7 -1
  186. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  187. package/dist/esm/utils/filterProcessing.js +97 -12
  188. package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
  189. package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
  190. package/dist/esm/utils/filterProcessing.uspec.js +245 -0
  191. package/dist/esm/utils/pivotConstructor.d.ts +2 -1
  192. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  193. package/dist/esm/utils/pivotConstructor.js +7 -1
  194. package/dist/esm/utils/report.d.ts +4 -1
  195. package/dist/esm/utils/report.d.ts.map +1 -1
  196. package/dist/esm/utils/report.js +92 -6
  197. package/dist/esm/utils/report.uspec.d.ts +2 -0
  198. package/dist/esm/utils/report.uspec.d.ts.map +1 -0
  199. package/dist/esm/utils/report.uspec.js +66 -0
  200. package/dist/esm/utils/tableProcessing.d.ts +1 -1
  201. package/package.json +1 -1
@@ -0,0 +1,37 @@
1
+ function createRandomDate() {
2
+ const start = new Date(2020, 0, 1);
3
+ const end = new Date();
4
+ return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
5
+ }
6
+ function createRandomString() {
7
+ return Math.random().toString(36).substring(7);
8
+ }
9
+ function createRandomNumber() {
10
+ return Math.floor(Math.random() * 1000);
11
+ }
12
+ export function createRows(columns, rowCount) {
13
+ const rows = [];
14
+ for (let i = 0; i < rowCount; i++) {
15
+ rows.push(columns.reduce((row, column) => {
16
+ if (column.format === 'MMM_dd_yyyy') {
17
+ row[column.field] = createRandomDate().toDateString();
18
+ }
19
+ else if (column.format === 'whole_number') {
20
+ row[column.field] = createRandomNumber().toString();
21
+ }
22
+ else {
23
+ row[column.field] = createRandomString();
24
+ }
25
+ return row;
26
+ }, {}));
27
+ }
28
+ return rows;
29
+ }
30
+ export function createComparisonColumnsFromColumns(columns) {
31
+ const comparisons = columns.map((column) => ({
32
+ ...column,
33
+ field: `comparison_${column.field}`,
34
+ label: `comparison ${column.label}`,
35
+ }));
36
+ return [...columns, ...comparisons];
37
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"astFilterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astFilterProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,MAAM,EAOP,MAAM,kBAAkB,CAAC;AAqyI1B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,QACrB,GAAG,MACJ,MAAM,KACT,cAAc,GAAG,IAuGnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAAS,GAAG,MAAM,MAAM,KAAG,MAAM,GAAG,IAoV3D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,eAAgB,cAAc,MAAM,MAAM,QAuBrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,WAAY,MAAM,MAAM,MAAM,KAAG,GA4mHxD,CAAC"}
1
+ {"version":3,"file":"astFilterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astFilterProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,MAAM,EAOP,MAAM,kBAAkB,CAAC;AAozI1B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,QACrB,GAAG,MACJ,MAAM,KACT,cAAc,GAAG,IAuGnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAAS,GAAG,MAAM,MAAM,KAAG,MAAM,GAAG,IA+V3D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,eAAgB,cAAc,MAAM,MAAM,QAuBrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,WAAY,MAAM,MAAM,MAAM,KAAG,GA2nHxD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  /* eslint-disable no-case-declarations */
3
3
  /* eslint-disable no-fallthrough */
4
- import { DateOperator, FieldTypes, FilterNames, NullOperator, NumberOperator, StringOperator, TimeUnit, } from '../models/Filter';
4
+ import { BoolOperator, DateOperator, FieldTypes, FilterNames, NullOperator, NumberOperator, StringOperator, TimeUnit, } from '../models/Filter';
5
5
  import { format, isValid, parse, subDays, subHours, subMonths, subWeeks, subYears, } from 'date-fns';
6
6
  // Map SQL string operators to corresponding StringOperator enums
7
7
  const stringOperatorMap = {
@@ -33,10 +33,15 @@ const numberOperatorMap = {
33
33
  [NumberOperator.GreaterThanOrEqualTo]: ['>='],
34
34
  [NumberOperator.LessThanOrEqualTo]: ['<='],
35
35
  };
36
+ // Map SQL boolean operators to corresponding BooleanOperator enums
37
+ const boolOperatorMap = {
38
+ [BoolOperator.EqualTo]: ['=', 'IS'],
39
+ [BoolOperator.NotEqualTo]: ['<>', '!=', 'IS NOT'],
40
+ };
36
41
  // Map SQL null operators to corresponding NullOperator enums
37
42
  const nullOperatorMap = {
38
- [NullOperator.IsNull]: ['IS'],
39
- [NullOperator.IsNotNull]: ['IS NOT'],
43
+ [NullOperator.IsNull]: ['IS', '='],
44
+ [NullOperator.IsNotNull]: ['IS NOT', '!=', '<>'],
40
45
  };
41
46
  // Combine all individual operator maps into a single map for easy lookup
42
47
  const operatorMap = {
@@ -44,6 +49,7 @@ const operatorMap = {
44
49
  ...dateOperatorMap,
45
50
  ...numberOperatorMap,
46
51
  ...nullOperatorMap,
52
+ ...boolOperatorMap,
47
53
  };
48
54
  /**
49
55
  * Helper function to reverse map SQL operators back to Filter Operators based on field type
@@ -58,6 +64,8 @@ const reverseOperatorMap = (operator, fieldType) => {
58
64
  return (Object.keys(numberOperatorMap).find((key) => numberOperatorMap[key].includes(operator)) ?? null);
59
65
  case FieldTypes.Null:
60
66
  return (Object.keys(nullOperatorMap).find((key) => nullOperatorMap[key].includes(operator)) ?? null);
67
+ case FieldTypes.Boolean:
68
+ return (Object.keys(boolOperatorMap).find((key) => boolOperatorMap[key].includes(operator)) ?? null);
61
69
  default:
62
70
  return null;
63
71
  }
@@ -112,6 +120,8 @@ function mapOperatorToFilterName(operator, fieldType) {
112
120
  return FilterNames.NumericFilter;
113
121
  case FieldTypes.Null:
114
122
  return FilterNames.NullFilter;
123
+ case FieldTypes.Boolean:
124
+ return FilterNames.BooleanFilter;
115
125
  default:
116
126
  console.error(`Could not determine filter name: {operator: ${operator}, fieldType: ${fieldType}}`);
117
127
  return null;
@@ -4322,6 +4332,9 @@ export const astToFilter = (ast, db) => {
4322
4332
  fieldType = FieldTypes.String;
4323
4333
  }
4324
4334
  break;
4335
+ case 'bool':
4336
+ fieldType = FieldTypes.Boolean;
4337
+ break;
4325
4338
  default:
4326
4339
  fieldType = FieldTypes.String;
4327
4340
  }
@@ -4490,6 +4503,14 @@ export const astToFilter = (ast, db) => {
4490
4503
  value: value.value,
4491
4504
  };
4492
4505
  }
4506
+ case FilterNames.BooleanFilter:
4507
+ return {
4508
+ field: field,
4509
+ name: filterName,
4510
+ type: FieldTypes.Boolean,
4511
+ operator: mappedOperator,
4512
+ value: Boolean(right.value),
4513
+ };
4493
4514
  }
4494
4515
  return null;
4495
4516
  };
@@ -8043,6 +8064,20 @@ export const filterToAst = (filter, db) => {
8043
8064
  left: { type: 'column_ref', table: null, column: field },
8044
8065
  right: { type: 'null', value: null },
8045
8066
  };
8067
+ case FieldTypes.Boolean:
8068
+ return {
8069
+ type: 'binary_expr',
8070
+ operator: mappedOperator,
8071
+ left: {
8072
+ type: 'column_ref',
8073
+ table: null,
8074
+ column: field,
8075
+ },
8076
+ right: {
8077
+ type: 'bool',
8078
+ value: value,
8079
+ },
8080
+ };
8046
8081
  default:
8047
8082
  return null;
8048
8083
  }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-undef */
2
- import { DateOperator, FieldTypes, FilterNames, NullOperator, NumberOperator, StringOperator, TimeUnit, } from '../models/Filter';
2
+ import { BoolOperator, DateOperator, FieldTypes, FilterNames, NullOperator, NumberOperator, StringOperator, TimeUnit, } from '../models/Filter';
3
3
  import { astToFilter, filterToAst } from './astFilterProcessing';
4
4
  import { format, subDays, subMonths, subYears } from 'date-fns';
5
5
  import * as fs from 'fs';
@@ -20,7 +20,7 @@ describe('Filter to AST - String', () => {
20
20
  value: ['value 1', 'value 2'],
21
21
  };
22
22
  const ast = filterToAst(filter, 'mysql');
23
- const sql = "SELECT * FROM t WHERE field IN ('value 1', 'value 2')";
23
+ const sql = "SELECT * FROM t WHERE LOWER(field) IN (LOWER('value 1'), LOWER('value 2'))";
24
24
  const expectedAst = parseSelectSQL(sql).where;
25
25
  expect(ast).toEqual(expectedAst);
26
26
  });
@@ -33,7 +33,7 @@ describe('Filter to AST - String', () => {
33
33
  value: ['value 1', 'value 2'],
34
34
  };
35
35
  const ast = filterToAst(filter, 'mysql');
36
- const sql = "SELECT * FROM t WHERE field NOT IN ('value 1', 'value 2')";
36
+ const sql = "SELECT * FROM t WHERE LOWER(field) NOT IN (LOWER('value 1'), LOWER('value 2'))";
37
37
  const expectedAst = parseSelectSQL(sql).where;
38
38
  expect(ast).toEqual(expectedAst);
39
39
  });
@@ -261,7 +261,7 @@ describe('Filter to AST - String', () => {
261
261
  });
262
262
  describe('AST to Filter - String', () => {
263
263
  it('should convert AST to Filter for string field - Is', () => {
264
- const sql = "SELECT * FROM t WHERE field IN ('value 1', 'value 2')";
264
+ const sql = "SELECT * FROM t WHERE LOWER(field) IN (LOWER('value 1'), LOWER('value 2'))";
265
265
  const ast = parseSelectSQL(sql);
266
266
  const filter = astToFilter(ast.where, 'mysql');
267
267
  const expectedFilter = {
@@ -274,7 +274,7 @@ describe('AST to Filter - String', () => {
274
274
  expect(filter).toEqual(expectedFilter);
275
275
  });
276
276
  it('should convert AST to Filter for string field - IsNot', () => {
277
- const sql = "SELECT * FROM t WHERE field NOT IN ('value 1', 'value 2')";
277
+ const sql = "SELECT * FROM t WHERE LOWER(field) NOT IN (LOWER('value 1'), LOWER('value 2'))";
278
278
  const ast = parseSelectSQL(sql);
279
279
  const filter = astToFilter(ast.where, 'mysql');
280
280
  const expectedFilter = {
@@ -2727,3 +2727,151 @@ describe('AST to Filter - Date (Date Comparison Operators)', () => {
2727
2727
  expect(filter).toEqual(expectedFilter);
2728
2728
  });
2729
2729
  });
2730
+ describe('Filter to AST - Bool', () => {
2731
+ it('should convert Filter to AST for boolean field - IsTrue', () => {
2732
+ const filter = {
2733
+ field: 'is_something',
2734
+ name: FilterNames.BooleanFilter,
2735
+ type: FieldTypes.Boolean,
2736
+ operator: BoolOperator.EqualTo,
2737
+ value: true,
2738
+ };
2739
+ const ast = filterToAst(filter, 'mysql');
2740
+ const sql = `
2741
+ SELECT * FROM transactions
2742
+ WHERE is_something = TRUE
2743
+ `
2744
+ .replace(/\s+/g, ' ')
2745
+ .trim();
2746
+ const expectedAst = parseSelectSQL(sql).where;
2747
+ expect(ast).toEqual(expectedAst);
2748
+ });
2749
+ it('should convert Filter to AST for boolean field - IsFalse', () => {
2750
+ const filter = {
2751
+ field: 'is_something',
2752
+ name: FilterNames.BooleanFilter,
2753
+ type: FieldTypes.Boolean,
2754
+ operator: BoolOperator.EqualTo,
2755
+ value: false,
2756
+ };
2757
+ const ast = filterToAst(filter, 'mysql');
2758
+ const sql = `
2759
+ SELECT * FROM transactions
2760
+ WHERE is_something = FALSE
2761
+ `
2762
+ .replace(/\s+/g, ' ')
2763
+ .trim();
2764
+ const expectedAst = parseSelectSQL(sql).where;
2765
+ expect(ast).toEqual(expectedAst);
2766
+ });
2767
+ it('should convert Filter to AST for boolean field - IsNotTrue', () => {
2768
+ const filter = {
2769
+ field: 'is_something',
2770
+ name: FilterNames.BooleanFilter,
2771
+ type: FieldTypes.Boolean,
2772
+ operator: BoolOperator.NotEqualTo,
2773
+ value: true,
2774
+ };
2775
+ const ast = filterToAst(filter, 'mysql');
2776
+ const sql = `
2777
+ SELECT * FROM transactions
2778
+ WHERE is_something <> TRUE
2779
+ `
2780
+ .replace(/\s+/g, ' ')
2781
+ .trim();
2782
+ const expectedAst = parseSelectSQL(sql).where;
2783
+ expect(ast).toEqual(expectedAst);
2784
+ });
2785
+ it('should convert Filter to AST for boolean field - IsNotFalse', () => {
2786
+ const filter = {
2787
+ field: 'is_something',
2788
+ name: FilterNames.BooleanFilter,
2789
+ type: FieldTypes.Boolean,
2790
+ operator: BoolOperator.NotEqualTo,
2791
+ value: false,
2792
+ };
2793
+ const ast = filterToAst(filter, 'mysql');
2794
+ const sql = `
2795
+ SELECT * FROM transactions
2796
+ WHERE is_something <> FALSE
2797
+ `
2798
+ .replace(/\s+/g, ' ')
2799
+ .trim();
2800
+ const expectedAst = parseSelectSQL(sql).where;
2801
+ expect(ast).toEqual(expectedAst);
2802
+ });
2803
+ });
2804
+ describe('AST to Filter - Bool', () => {
2805
+ it('should convert AST to Filter for boolean field - IsTrue', () => {
2806
+ const sql = `
2807
+ SELECT * FROM transactions
2808
+ WHERE is_something = TRUE
2809
+ `
2810
+ .replace(/\s+/g, ' ')
2811
+ .trim();
2812
+ const ast = parseSelectSQL(sql);
2813
+ const filter = astToFilter(ast.where, 'postgresql');
2814
+ const expectedFilter = {
2815
+ field: 'is_something',
2816
+ name: FilterNames.BooleanFilter,
2817
+ type: FieldTypes.Boolean,
2818
+ operator: BoolOperator.EqualTo,
2819
+ value: true,
2820
+ };
2821
+ expect(filter).toEqual(expectedFilter);
2822
+ });
2823
+ it('should convert AST to Filter for boolean field - IsFalse', () => {
2824
+ const sql = `
2825
+ SELECT * FROM transactions
2826
+ WHERE is_something = FALSE
2827
+ `
2828
+ .replace(/\s+/g, ' ')
2829
+ .trim();
2830
+ const ast = parseSelectSQL(sql);
2831
+ const filter = astToFilter(ast.where, 'postgresql');
2832
+ const expectedFilter = {
2833
+ field: 'is_something',
2834
+ name: FilterNames.BooleanFilter,
2835
+ type: FieldTypes.Boolean,
2836
+ operator: BoolOperator.EqualTo,
2837
+ value: false,
2838
+ };
2839
+ expect(filter).toEqual(expectedFilter);
2840
+ });
2841
+ it('should convert AST to Filter for boolean field - IsNotTrue', () => {
2842
+ const sql = `
2843
+ SELECT * FROM transactions
2844
+ WHERE is_something <> TRUE
2845
+ `
2846
+ .replace(/\s+/g, ' ')
2847
+ .trim();
2848
+ const ast = parseSelectSQL(sql);
2849
+ const filter = astToFilter(ast.where, 'postgresql');
2850
+ const expectedFilter = {
2851
+ field: 'is_something',
2852
+ name: FilterNames.BooleanFilter,
2853
+ type: FieldTypes.Boolean,
2854
+ operator: BoolOperator.NotEqualTo,
2855
+ value: true,
2856
+ };
2857
+ expect(filter).toEqual(expectedFilter);
2858
+ });
2859
+ it('should convert AST to Filter for boolean field - IsNotFalse', () => {
2860
+ const sql = `
2861
+ SELECT * FROM transactions
2862
+ WHERE is_something <> FALSE
2863
+ `
2864
+ .replace(/\s+/g, ' ')
2865
+ .trim();
2866
+ const ast = parseSelectSQL(sql);
2867
+ const filter = astToFilter(ast.where, 'postgresql');
2868
+ const expectedFilter = {
2869
+ field: 'is_something',
2870
+ name: FilterNames.BooleanFilter,
2871
+ type: FieldTypes.Boolean,
2872
+ operator: BoolOperator.NotEqualTo,
2873
+ value: false,
2874
+ };
2875
+ expect(filter).toEqual(expectedFilter);
2876
+ });
2877
+ });
@@ -1,5 +1,6 @@
1
1
  import { ColumnInfo } from '../components/ReportBuilder/schema';
2
2
  import { Column, ColumnInternal } from '../models/Columns';
3
+ import { QuillReportInternal } from '../models/Report';
3
4
  export declare function convertPostgresColumn(field: {
4
5
  name: string;
5
6
  dataTypeID: number;
@@ -8,4 +9,5 @@ export declare function convertColumnInfoToColumnInternal(columnInfo: ColumnInfo
8
9
  export declare function convertFieldTypeToJSType(fieldType: string): string;
9
10
  export declare function convertFormatToJsType(column: Column): string;
10
11
  export declare function processColumnName(columnName: string): string;
12
+ export declare const getYAxisFields: (report: QuillReportInternal) => any[];
11
13
  //# sourceMappingURL=columnProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D"}
1
+ {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,eAAO,MAAM,cAAc,WAAY,mBAAmB,UAsDzD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { findAndProcessDateFilter } from './filterProcessing';
1
2
  function removeBigQuerySpecialChars(columnName) {
2
3
  return columnName.replaceAll('quill_forward_slash', '/');
3
4
  }
@@ -206,3 +207,54 @@ export function convertFormatToJsType(column) {
206
207
  export function processColumnName(columnName) {
207
208
  return removeBigQuerySpecialChars(columnName);
208
209
  }
210
+ export const getYAxisFields = (report) => {
211
+ try {
212
+ const curDateFilter = findAndProcessDateFilter(Object.values(report.filtersApplied));
213
+ if (report.pivot && report.pivotColumns && report.pivot.columnField) {
214
+ return (report.pivotColumns
215
+ .slice(1)
216
+ .map((column) => {
217
+ // @ts-ignore
218
+ return { ...column, format: report.yAxisFields[0].format };
219
+ }) ?? []);
220
+ }
221
+ else if (report.pivot && report.pivotColumns) {
222
+ return (report.pivotColumns
223
+ .slice(1)
224
+ .map((column) => {
225
+ return {
226
+ ...column,
227
+ // @ts-ignore
228
+ label: report?.yAxisFields[0].label,
229
+ // @ts-ignore
230
+ format: report?.yAxisFields[0].format,
231
+ };
232
+ }) ?? []);
233
+ }
234
+ else {
235
+ if (curDateFilter?.comparison &&
236
+ curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
237
+ const comparisonYAxisFields = report.yAxisFields?.map((field) => {
238
+ return {
239
+ ...field,
240
+ field: `comparison_${field.field}`,
241
+ label: `comparison ${field.label ?? field.field}`,
242
+ };
243
+ });
244
+ if (report.pivotColumns) {
245
+ return report.pivotColumns;
246
+ }
247
+ else if (comparisonYAxisFields || report.yAxisFields) {
248
+ const yAxisFields = report.yAxisFields ?? [];
249
+ const compYAxisFields = comparisonYAxisFields ?? [];
250
+ return [...yAxisFields, ...compYAxisFields];
251
+ }
252
+ return [];
253
+ }
254
+ return report.pivotColumns ?? report.yAxisFields ?? [];
255
+ }
256
+ }
257
+ catch (e) {
258
+ return report.yAxisFields;
259
+ }
260
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=columnProcessing.uspec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnProcessing.uspec.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.uspec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { DEFAULT_COMPARISON_DATE_FILTER, TWO_D_PIVOT, GENERIC_REPORT_INTERNAL, ONE_D_PIVOT, } from '../test-utils/constants';
2
+ import { createRows } from '../test-utils/generators';
3
+ import { getYAxisFields } from './columnProcessing';
4
+ describe('columnProcessing', () => {
5
+ describe('getYAxisFields', () => {
6
+ it('should return an array of fields for generic reports', () => {
7
+ const internalReport = {
8
+ ...GENERIC_REPORT_INTERNAL,
9
+ rows: createRows(GENERIC_REPORT_INTERNAL.columns, 10),
10
+ };
11
+ const result = getYAxisFields(internalReport);
12
+ expect(result).toEqual([
13
+ { field: 'id', format: 'whole_number', label: 'ID' },
14
+ ]);
15
+ });
16
+ it('should return an array of fields for comparison reports', () => {
17
+ const internalReport = {
18
+ ...GENERIC_REPORT_INTERNAL,
19
+ rows: createRows(GENERIC_REPORT_INTERNAL.columns, 10),
20
+ compareRows: createRows(GENERIC_REPORT_INTERNAL.columns, 10),
21
+ filtersApplied: [DEFAULT_COMPARISON_DATE_FILTER],
22
+ };
23
+ const result = getYAxisFields(internalReport);
24
+ expect(result).toEqual([
25
+ { field: 'id', format: 'whole_number', label: 'ID' },
26
+ {
27
+ field: 'comparison_id',
28
+ format: 'whole_number',
29
+ label: 'comparison ID',
30
+ },
31
+ ]);
32
+ });
33
+ it('should return the proper fields for a 2d pivot report', () => {
34
+ const internalReport = {
35
+ ...GENERIC_REPORT_INTERNAL,
36
+ rows: createRows(GENERIC_REPORT_INTERNAL.columns, 10),
37
+ pivotColumns: TWO_D_PIVOT.pivotColumns,
38
+ pivotRows: TWO_D_PIVOT.pivotRows,
39
+ pivot: TWO_D_PIVOT.pivot,
40
+ };
41
+ const result = getYAxisFields(internalReport);
42
+ expect(result).toEqual([
43
+ { field: 'Food', format: 'whole_number', label: 'Food' },
44
+ { field: 'Fuel', format: 'whole_number', label: 'Fuel' },
45
+ { field: 'Other', format: 'whole_number', label: 'Other' },
46
+ ]);
47
+ });
48
+ it('should return the proper fields for a 1d pivot report', () => {
49
+ const internalReport = {
50
+ ...GENERIC_REPORT_INTERNAL,
51
+ rows: createRows(GENERIC_REPORT_INTERNAL.columns, 10),
52
+ pivotColumns: ONE_D_PIVOT.pivotColumns,
53
+ pivotRows: ONE_D_PIVOT.pivotRows,
54
+ pivot: ONE_D_PIVOT.pivot,
55
+ yAxisFields: [
56
+ { field: 'amount', format: 'whole_number', label: 'Amount' },
57
+ ],
58
+ };
59
+ const result = getYAxisFields(internalReport);
60
+ expect(result).toEqual([
61
+ { field: 'amount', format: 'whole_number', label: 'Amount' },
62
+ ]);
63
+ });
64
+ });
65
+ });
@@ -1,4 +1,4 @@
1
- import { QuillReportInternal } from '../Dashboard';
1
+ import { QuillReportInternal } from '../models/Report';
2
2
  /**
3
3
  * Returns a cleaned version of the dashboard item we store in state. We clean
4
4
  * the dashboard item so that we aren't exposing unnecessary details to the
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAgC5E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAgD9B;AA0KD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA2Bd"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAyC9B;AAgHD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA2Bd"}
@@ -1,4 +1,3 @@
1
- import { valueFormatter } from './valueFormatter';
2
1
  import { generatePivotTable, generatePivotTableYAxis, } from '../internals/ReportBuilder/PivotModal';
3
2
  import { snakeAndCamelCaseToTitleCase } from './textProcessing';
4
3
  import { getData } from './dataFetcher';
@@ -14,15 +13,14 @@ const defaultDashboardItem = {
14
13
  chartType: '',
15
14
  dateField: null,
16
15
  pivot: null,
17
- primaryAggregation: '',
18
- comparisonAggregation: '',
19
- aggregationPercentChange: undefined,
20
16
  yAxisFields: [],
21
17
  xAxisLabel: '',
22
18
  xAxisField: '',
23
19
  xAxisFormat: 'string',
24
20
  order: -1,
25
21
  filtersApplied: {},
22
+ queryString: '',
23
+ rowCount: 0,
26
24
  };
27
25
  /**
28
26
  * Returns a cleaned version of the dashboard item we store in state. We clean
@@ -41,7 +39,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
41
39
  name: item.name,
42
40
  };
43
41
  const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
44
- const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
45
42
  return {
46
43
  id: item._id,
47
44
  name: item.name,
@@ -56,9 +53,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
56
53
  chartType: item.chartType,
57
54
  dateField: item.dateField,
58
55
  pivot: item.pivot,
59
- primaryAggregation,
60
- comparisonAggregation,
61
- aggregationPercentChange,
62
56
  yAxisFields: pivotTable
63
57
  ? extractPivotedYAxis(pivotTable, item)
64
58
  : item.yAxisFields,
@@ -70,42 +64,9 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
70
64
  rowCount: parseInt(item.rowCount),
71
65
  sort: item.sort,
72
66
  itemQuery: item.itemQuery,
67
+ queryString: item.queryString,
73
68
  };
74
69
  }
75
- /**
76
- * Extracts the aggregations from the item, if any.
77
- */
78
- function getAggragations(pivotTable, item) {
79
- const yAxisFields = extractPivotedYAxis(pivotTable, item);
80
- const rows = extractPivotedData(pivotTable, item);
81
- // extract the aggragation for the primary range.
82
- const mainKey = yAxisFields[0]?.field ?? item.pivot?.valueField;
83
- const primary = mainKey
84
- ? rows.reduce((sum, row) => sum + parseFloat(row[mainKey]), 0)
85
- : 0;
86
- // extract the aggragation for the comparison range, if applicable.
87
- const compKey = yAxisFields[1]?.field ?? item.pivot?.valueField;
88
- const comparison = compKey
89
- ? rows.reduce((sum, row) => sum + parseFloat(row[compKey]), 0)
90
- : 0;
91
- return {
92
- primaryAggregation: formatAggragation(item, primary),
93
- comparisonAggregation: formatAggragation(item, comparison),
94
- aggregationPercentChange: Number(primary - comparison),
95
- };
96
- }
97
- /**
98
- * Applies a valueFormatter to the given value based on the format in the item.
99
- */
100
- function formatAggragation(item, value) {
101
- if (!value)
102
- return undefined;
103
- return valueFormatter({
104
- value,
105
- field: item.pivot?.valueField,
106
- fields: item.yAxisFields,
107
- });
108
- }
109
70
  /**
110
71
  * Extract and transform the data from itemInfo.
111
72
  */
@@ -161,20 +122,6 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
161
122
  : undefined)
162
123
  : undefined;
163
124
  }
164
- /**
165
- * Returns the data list based on whether the table is pivoted and if there is
166
- * a config value passed into this component.
167
- */
168
- function extractPivotedData(pivotTable, item, config = undefined) {
169
- if (pivotTable)
170
- return pivotTable.rows;
171
- if (config) {
172
- if (config.bucketedRows.length > 0)
173
- return config.bucketedRows;
174
- return config.rows;
175
- }
176
- return item.rows;
177
- }
178
125
  /**
179
126
  * Extracts the yAxis from the pivot table, if one exists.
180
127
  */
@@ -1,8 +1,10 @@
1
- import { QuillReportInternal } from '../Dashboard';
1
+ import { QuillReportInternal } from '../models/Report';
2
2
  export declare enum Calculation {
3
3
  PointToPointPercentageChange = "POINT_TO_POINT_PERCENTAGE_CHANGE",
4
- SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE"
4
+ SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE",
5
+ Sum = "SUM"
5
6
  }
6
7
  export declare const getSimplePercentageChange: (data: QuillReportInternal) => number | undefined;
7
8
  export declare const getPointToPointPercentageChange: (data: QuillReportInternal) => number | undefined;
9
+ export declare const getSumOfFields: (data: QuillReportInternal) => number;
8
10
  //# sourceMappingURL=dataProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,oBAAY,WAAW;IACrB,4BAA4B,qCAAqC;IACjE,sBAAsB,6BAA6B;CACpD;AAyBD,eAAO,MAAM,yBAAyB,SAAU,mBAAmB,uBAsClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,SAAU,mBAAmB,uBAkFxE,CAAC"}
1
+ {"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,oBAAY,WAAW;IACrB,4BAA4B,qCAAqC;IACjE,sBAAsB,6BAA6B;IACnD,GAAG,QAAQ;CACZ;AAyBD,eAAO,MAAM,yBAAyB,SAAU,mBAAmB,uBAsClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,SAAU,mBAAmB,uBAkFxE,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,mBAAmB,WAavD,CAAC"}
@@ -4,6 +4,7 @@ export var Calculation;
4
4
  (function (Calculation) {
5
5
  Calculation["PointToPointPercentageChange"] = "POINT_TO_POINT_PERCENTAGE_CHANGE";
6
6
  Calculation["SimplePercentageChange"] = "SIMPLE_PERCENTAGE_CHANGE";
7
+ Calculation["Sum"] = "SUM";
7
8
  })(Calculation || (Calculation = {}));
8
9
  const getSumOfField = (rows, field) => {
9
10
  if (rows[0] && rows[0][field]) {
@@ -120,3 +121,18 @@ export const getPointToPointPercentageChange = (data) => {
120
121
  }
121
122
  }
122
123
  };
124
+ export const getSumOfFields = (data) => {
125
+ if (data.pivot && data.pivotRows && data.pivotColumns) {
126
+ const pivotRows = data.pivotRows;
127
+ const fields = data.pivotColumns.map((field) => {
128
+ return field.field;
129
+ });
130
+ return getSumOfFieldsAndRows(pivotRows, fields);
131
+ }
132
+ else {
133
+ const yAxisFields = data.yAxisFields.map((field) => {
134
+ return field.field;
135
+ });
136
+ return getSumOfFieldsAndRows(data.rows, yAxisFields);
137
+ }
138
+ };
@@ -10,6 +10,7 @@ const defaultReport = {
10
10
  order: 0,
11
11
  queryString: 'dummy',
12
12
  compareRows: [{ amount: '20' }, { amount: '20' }],
13
+ rowCount: 0,
13
14
  pivot: null,
14
15
  rows: [
15
16
  { amount: '40', created_at: '2024-06-01' },
@@ -14,6 +14,7 @@ export declare function getComparisonInterval(comparisonRange: {
14
14
  export declare function getDateBucketFromRange(dateRange: {
15
15
  start: Date;
16
16
  end: Date;
17
- }): "month" | "week" | "year" | "day";
17
+ }): "year" | "month" | "week" | "day";
18
18
  export declare function parseDateByDatabaseType(date: any, databaseType: string): Date;
19
+ export declare function getDateFormatFromBucket(dateBucket: string): string;
19
20
  //# sourceMappingURL=dates.d.ts.map