@quillsql/react 2.13.38 → 2.13.39

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 (89) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +0 -1
  3. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  4. package/dist/cjs/ChartBuilder.js +68 -57
  5. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ReportBuilder.js +69 -51
  7. package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -1
  8. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  9. package/dist/cjs/components/Chart/ChartTooltip.js +3 -3
  10. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  11. package/dist/cjs/components/Chart/LineChart.js +4 -4
  12. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
  13. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  14. package/dist/cjs/components/ReportBuilder/convert.js +73 -21
  15. package/dist/cjs/components/UiComponents.d.ts +2 -1
  16. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  17. package/dist/cjs/components/UiComponents.js +11 -4
  18. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  19. package/dist/cjs/hooks/useExport.js +4 -5
  20. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +19 -11
  21. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  22. package/dist/cjs/internals/ReportBuilder/PivotForm.js +62 -48
  23. package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
  24. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +28 -31
  25. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  26. package/dist/cjs/internals/ReportBuilder/PivotModal.js +315 -633
  27. package/dist/cjs/models/Pivot.d.ts +27 -7
  28. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  29. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  30. package/dist/cjs/utils/dashboard.js +36 -11
  31. package/dist/cjs/utils/merge.d.ts.map +1 -1
  32. package/dist/cjs/utils/merge.js +2 -1
  33. package/dist/cjs/utils/pivotConstructor.d.ts +1 -0
  34. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  35. package/dist/cjs/utils/pivotConstructor.js +37 -7
  36. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  37. package/dist/cjs/utils/pivotProcessing.js +10 -14
  38. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  39. package/dist/cjs/utils/queryConstructor.js +421 -134
  40. package/dist/cjs/utils/report.d.ts.map +1 -1
  41. package/dist/cjs/utils/report.js +2 -2
  42. package/dist/cjs/utils/textProcessing.d.ts +1 -1
  43. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  44. package/dist/cjs/utils/textProcessing.js +3 -0
  45. package/dist/esm/Chart.d.ts.map +1 -1
  46. package/dist/esm/Chart.js +0 -1
  47. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  48. package/dist/esm/ChartBuilder.js +68 -57
  49. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  50. package/dist/esm/ReportBuilder.js +69 -51
  51. package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -1
  52. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  53. package/dist/esm/components/Chart/ChartTooltip.js +3 -3
  54. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  55. package/dist/esm/components/Chart/LineChart.js +4 -4
  56. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
  57. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  58. package/dist/esm/components/ReportBuilder/convert.js +74 -22
  59. package/dist/esm/components/UiComponents.d.ts +2 -1
  60. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  61. package/dist/esm/components/UiComponents.js +11 -4
  62. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  63. package/dist/esm/hooks/useExport.js +4 -5
  64. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +19 -11
  65. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  66. package/dist/esm/internals/ReportBuilder/PivotForm.js +63 -49
  67. package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
  68. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +28 -31
  69. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  70. package/dist/esm/internals/ReportBuilder/PivotModal.js +327 -635
  71. package/dist/esm/models/Pivot.d.ts +27 -7
  72. package/dist/esm/models/Pivot.d.ts.map +1 -1
  73. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  74. package/dist/esm/utils/dashboard.js +36 -11
  75. package/dist/esm/utils/merge.d.ts.map +1 -1
  76. package/dist/esm/utils/merge.js +2 -1
  77. package/dist/esm/utils/pivotConstructor.d.ts +1 -0
  78. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  79. package/dist/esm/utils/pivotConstructor.js +37 -8
  80. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  81. package/dist/esm/utils/pivotProcessing.js +10 -14
  82. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  83. package/dist/esm/utils/queryConstructor.js +421 -134
  84. package/dist/esm/utils/report.d.ts.map +1 -1
  85. package/dist/esm/utils/report.js +2 -2
  86. package/dist/esm/utils/textProcessing.d.ts +1 -1
  87. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  88. package/dist/esm/utils/textProcessing.js +3 -0
  89. package/package.json +1 -1
@@ -2,12 +2,8 @@ import { ColumnInternal } from './Columns';
2
2
  /**
3
3
  * Represents the metadata of a pivot table.
4
4
  */
5
- export type Pivot = {
6
- aggregationType: 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
7
- valueField: string;
8
- valueField2?: string;
9
- valueField2Type?: string;
10
- valueFieldType?: string;
5
+ export type Pivot = SingleAggregationPivot | MultiAggregationPivot;
6
+ interface BasePivot {
11
7
  rowField?: string;
12
8
  rowFieldType?: string;
13
9
  columnField?: string;
@@ -20,7 +16,30 @@ export type Pivot = {
20
16
  triggerButtonText?: string;
21
17
  rowLimit?: number;
22
18
  columnValues?: string[];
23
- };
19
+ }
20
+ interface SingleAggregationPivot extends BasePivot {
21
+ aggregationType: AggregationType;
22
+ valueField?: string;
23
+ valueField2?: string;
24
+ valueField2Type?: string;
25
+ valueFieldType?: string;
26
+ aggregations?: never;
27
+ }
28
+ interface MultiAggregationPivot extends BasePivot {
29
+ aggregationType?: never;
30
+ valueField?: never;
31
+ valueField2?: never;
32
+ valueField2Type?: never;
33
+ valueFieldType?: never;
34
+ aggregations: {
35
+ valueField?: string;
36
+ valueFieldType?: string;
37
+ valueField2?: string;
38
+ valueField2Type?: string;
39
+ aggregationType: AggregationType;
40
+ }[];
41
+ }
42
+ export type AggregationType = 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
24
43
  export type PivotInfo = {
25
44
  pivot: Pivot;
26
45
  possibleRowFields: string[];
@@ -34,4 +53,5 @@ export type PivotData = {
34
53
  pivotQuery: string;
35
54
  comparisonPivotQuery?: string;
36
55
  };
56
+ export {};
37
57
  //# sourceMappingURL=Pivot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,eAAe,EACX,KAAK,GACL,SAAS,GACT,KAAK,GACL,KAAK,GACL,OAAO,GACP,KAAK,GACL,YAAY,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
1
+ {"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAGnE,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,UAAU,sBAAuB,SAAQ,SAAS;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AACD,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,YAAY,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,eAAe,CAAC;KAClC,EAAE,CAAC;CACL;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,CAAC;AAEjG,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
@@ -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,CAyE9B;AAuID,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;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"}
@@ -50,7 +50,19 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
50
50
  let pivotTable;
51
51
  let pivotError;
52
52
  try {
53
- pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
53
+ pivotTable = await getPivotTable({
54
+ ...item,
55
+ pivot: item.pivot ? {
56
+ ...item.pivot,
57
+ aggregations: item.pivot.aggregations ?? [{
58
+ valueField: item.pivot.valueField,
59
+ valueFieldType: item.pivot.valueFieldType,
60
+ valueField2: item.pivot.valueField2,
61
+ valueField2Type: item.pivot.valueField2Type,
62
+ aggregationType: item.pivot.aggregationType,
63
+ }]
64
+ } : undefined,
65
+ }, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
54
66
  }
55
67
  catch (e) {
56
68
  pivotTable = undefined;
@@ -78,7 +90,17 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
78
90
  pivot: pivotError
79
91
  ? undefined
80
92
  : item.pivot
81
- ? { ...item.pivot, columnValues: item.distinctStrings }
93
+ ? {
94
+ ...item.pivot,
95
+ aggregations: item.pivot.aggregations ?? [{
96
+ valueField: item.pivot.valueField,
97
+ valueFieldType: item.pivot.valueFieldType,
98
+ valueField2: item.pivot.valueField2,
99
+ valueField2Type: item.pivot.valueField2Type,
100
+ aggregationType: item.pivot.aggregationType,
101
+ }],
102
+ columnValues: item.distinctStrings
103
+ }
82
104
  : undefined,
83
105
  yAxisFields: pivotTable
84
106
  ? extractPivotedYAxis(pivotTable, item)
@@ -129,15 +151,18 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
129
151
  dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(pivot.rowFieldType || 'string'),
130
152
  });
131
153
  }
132
- if (pivot.valueField) {
133
- columns.push({
134
- field: pivot.valueField,
135
- label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(pivot.valueField)),
136
- format: pivot.valueFieldType || 'string',
137
- jsType: (0, columnProcessing_1.convertFieldTypeToJSType)(pivot.valueFieldType || 'string'),
138
- fieldType: pivot.valueFieldType || 'string',
139
- dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(pivot.valueFieldType || 'string'),
140
- });
154
+ for (const agg of pivot.aggregations ?? []) {
155
+ if (agg.valueField) {
156
+ columns.push({
157
+ field: agg.valueField,
158
+ label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(agg.valueField)),
159
+ //FIXME: valueFieldType is not always the same as the format
160
+ format: agg.valueFieldType ?? 'whole_number',
161
+ jsType: agg.valueFieldType ?? 'number',
162
+ fieldType: agg.valueFieldType ?? 'number',
163
+ dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(agg.valueFieldType ?? 'number'),
164
+ });
165
+ }
141
166
  }
142
167
  return {
143
168
  rows: [],
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
@@ -7,6 +7,7 @@ exports.mergeComparisonPivotRows = mergeComparisonPivotRows;
7
7
  const date_fns_1 = require("date-fns");
8
8
  const columnProcessing_1 = require("./columnProcessing");
9
9
  const date_fns_tz_1 = require("date-fns-tz");
10
+ // FIXME: Update all of this as part of restoring date comparisons
10
11
  function mergeComparisonRange(resp) {
11
12
  if (resp.chartType === 'table')
12
13
  return resp;
@@ -94,7 +95,7 @@ function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType
94
95
  return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
95
96
  }
96
97
  function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
97
- if (!pivot.rowField || !pivot.valueField) {
98
+ if (!pivot.rowField || !pivot.aggregations?.some((agg) => agg.valueField)) {
98
99
  return rows;
99
100
  }
100
101
  return rows.map((row) => {
@@ -19,4 +19,5 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
19
19
  comparisonPivotQuery?: string;
20
20
  getPivotRowCount?: boolean;
21
21
  }): Promise<PivotData>;
22
+ export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
22
23
  //# sourceMappingURL=pivotConstructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAiVrB"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAkWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAUnD"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generatePivotWithSQL = generatePivotWithSQL;
4
+ exports.disambiguatedValueField = disambiguatedValueField;
4
5
  const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
5
6
  const columnProcessing_1 = require("./columnProcessing");
6
7
  const constants_1 = require("./constants");
@@ -18,7 +19,23 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
18
19
  pivot.columnField &&
19
20
  !pivot.columnValues &&
20
21
  !distinctStrings) {
21
- throw 'No distinct strings provided for column field';
22
+ if (!report?.rows) {
23
+ throw new Error('No distinct strings provided for column field');
24
+ }
25
+ else {
26
+ distinctStrings = Array.from(new Set(report.rows
27
+ .map((row) => row[pivot.columnField])
28
+ .filter((value) => value !== null && value !== undefined)));
29
+ }
30
+ }
31
+ if (!pivot.aggregations?.length && pivot.aggregationType) {
32
+ pivot.aggregations = [{
33
+ aggregationType: pivot.aggregationType,
34
+ valueField: pivot.valueField,
35
+ valueFieldType: pivot.valueFieldType,
36
+ valueField2: pivot.valueField2,
37
+ valueField2Type: pivot.valueField2Type,
38
+ }];
22
39
  }
23
40
  let comparisonInterval = undefined;
24
41
  if (dateFilter && dateFilter.comparisonRange) {
@@ -31,7 +48,7 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
31
48
  const rowColumn = report?.columns.find((column) => column.field === pivot.rowField);
32
49
  pivot.rowFieldType = rowColumn?.format || 'string';
33
50
  }
34
- const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
51
+ const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined && value !== '');
35
52
  const pivotColumnFields = filteredDistinctStrings?.slice(0, constants_1.MAX_PIVOT_UNIQUE_VALUES);
36
53
  if (!pivotQuery && report) {
37
54
  if (!report.itemQuery) {
@@ -124,12 +141,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
124
141
  });
125
142
  }
126
143
  const columns = responseFields
127
- ?.map((field) => ({
144
+ ?.map((field, index) => ({
128
145
  field: (0, columnProcessing_1.processColumnName)(field.name),
129
146
  label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
130
147
  format: field.name === pivot.rowField
131
148
  ? 'string'
132
- : (pivot.valueFieldType ?? pivot.aggregationType === 'percentage')
149
+ : (pivot.aggregations?.[index]?.aggregationType === 'percentage')
133
150
  ? 'percent'
134
151
  : 'whole_number',
135
152
  fieldType: field.fieldType,
@@ -217,11 +234,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
217
234
  // });
218
235
  // }
219
236
  // for the case of count agg on no value field
220
- columns?.forEach((column) => {
237
+ columns?.forEach((column, index) => {
221
238
  if (column.label &&
222
239
  ['null', 'undefined'].includes(column.label.toLowerCase()) &&
223
- !pivot.valueField &&
224
- pivot.aggregationType === 'count') {
240
+ !pivot.columnField &&
241
+ !pivot.aggregations?.[index]?.valueField &&
242
+ pivot.aggregations?.[index]?.aggregationType === 'count') {
225
243
  column.label = 'Count';
226
244
  }
227
245
  });
@@ -243,3 +261,15 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
243
261
  comparisonPivotQuery: comparisonPivotSql,
244
262
  };
245
263
  }
264
+ function disambiguatedValueField(pivot) {
265
+ // console.log(pivot);
266
+ if (pivot.aggregations && pivot.aggregations.length > 0) {
267
+ if (pivot.aggregations.length === 1) {
268
+ return pivot.aggregations[0]?.valueField ?? pivot.valueField;
269
+ }
270
+ else {
271
+ return `${pivot.aggregations[0].valueField}_${(0, textProcessing_1.matchCasing)(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
272
+ }
273
+ }
274
+ return pivot.valueField;
275
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6B7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CA8BP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
1
+ {"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAoCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
@@ -52,7 +52,7 @@ function generateTwoDPivotQuery(pivot, query, columns) {
52
52
  FROM original_query GROUP BY ${pivot.rowField}`;
53
53
  }
54
54
  function isValidPivot(pivot) {
55
- if (!pivot.rowField && !pivot.valueField) {
55
+ if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
56
56
  return {
57
57
  valid: false,
58
58
  reason: 'Row field cannot be empty without a value field',
@@ -64,17 +64,7 @@ function isValidPivot(pivot) {
64
64
  reason: 'Row field cannot be empty when column field is present',
65
65
  };
66
66
  }
67
- else if (!pivot.aggregationType) {
68
- return { valid: false, reason: 'Aggregation type cannot be empty' };
69
- }
70
- else if (pivot.aggregationType === 'percentage' &&
71
- (!pivot.valueField2 || !pivot.valueField)) {
72
- return {
73
- valid: false,
74
- reason: 'Percentage aggregation requires two value fields',
75
- };
76
- }
77
- else if (!pivot.valueField && pivot.aggregationType !== 'count') {
67
+ else if (pivot.aggregations?.some((a) => a.aggregationType !== 'count' && !a.valueField)) {
78
68
  return {
79
69
  valid: false,
80
70
  reason: 'Value field cannot be empty when aggregation is not "count"',
@@ -112,9 +102,9 @@ function getPossiblePivotFieldOptions(columns, uniqueValues) {
112
102
  rowFields.push(column.field);
113
103
  }
114
104
  }
115
- // value fields can be numbers
105
+ // value fields can be numbers or bools
116
106
  // TODO: should "format" be used as the indicator, or fieldType?
117
- if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format)) {
107
+ if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format) || column.jsType === 'bool') {
118
108
  if (!(0, util_1.isIdColumn)(column.field)) {
119
109
  valueFields.push(column.field);
120
110
  }
@@ -149,6 +139,12 @@ function cleanPivot(pivot, possibleColumns) {
149
139
  !possibleColumns.columnFields.includes(pivot.columnField)) {
150
140
  pivot.columnField = undefined;
151
141
  }
142
+ if (pivot.aggregationType) {
143
+ pivot.aggregations = [{
144
+ valueField: pivot.valueField,
145
+ aggregationType: pivot.aggregationType,
146
+ }];
147
+ }
152
148
  return pivot;
153
149
  }
154
150
  const isPivotPossible = (fields, pivot) => {
@@ -1 +1 @@
1
- {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA6aD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAmD5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
1
+ {"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA8uBD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAgE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}