@quillsql/react 2.13.38 → 2.13.40

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 (91) 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 +73 -66
  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/QuillMultiSelectSectionList.js +5 -5
  13. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
  14. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  15. package/dist/cjs/components/ReportBuilder/convert.js +73 -21
  16. package/dist/cjs/components/UiComponents.d.ts +2 -1
  17. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  18. package/dist/cjs/components/UiComponents.js +11 -4
  19. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  20. package/dist/cjs/hooks/useExport.js +4 -5
  21. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +19 -11
  22. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  23. package/dist/cjs/internals/ReportBuilder/PivotForm.js +62 -48
  24. package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
  25. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +28 -31
  26. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  27. package/dist/cjs/internals/ReportBuilder/PivotModal.js +315 -633
  28. package/dist/cjs/models/Pivot.d.ts +27 -7
  29. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  30. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  31. package/dist/cjs/utils/dashboard.js +36 -11
  32. package/dist/cjs/utils/merge.d.ts.map +1 -1
  33. package/dist/cjs/utils/merge.js +2 -1
  34. package/dist/cjs/utils/pivotConstructor.d.ts +1 -0
  35. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  36. package/dist/cjs/utils/pivotConstructor.js +39 -8
  37. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  38. package/dist/cjs/utils/pivotProcessing.js +10 -14
  39. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  40. package/dist/cjs/utils/queryConstructor.js +421 -134
  41. package/dist/cjs/utils/report.d.ts.map +1 -1
  42. package/dist/cjs/utils/report.js +2 -2
  43. package/dist/cjs/utils/textProcessing.d.ts +1 -1
  44. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  45. package/dist/cjs/utils/textProcessing.js +3 -0
  46. package/dist/esm/Chart.d.ts.map +1 -1
  47. package/dist/esm/Chart.js +0 -1
  48. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  49. package/dist/esm/ChartBuilder.js +73 -66
  50. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  51. package/dist/esm/ReportBuilder.js +69 -51
  52. package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -1
  53. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  54. package/dist/esm/components/Chart/ChartTooltip.js +3 -3
  55. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  56. package/dist/esm/components/Chart/LineChart.js +4 -4
  57. package/dist/esm/components/QuillMultiSelectSectionList.js +5 -5
  58. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
  59. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  60. package/dist/esm/components/ReportBuilder/convert.js +74 -22
  61. package/dist/esm/components/UiComponents.d.ts +2 -1
  62. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  63. package/dist/esm/components/UiComponents.js +11 -4
  64. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  65. package/dist/esm/hooks/useExport.js +4 -5
  66. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +19 -11
  67. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  68. package/dist/esm/internals/ReportBuilder/PivotForm.js +63 -49
  69. package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
  70. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +28 -31
  71. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  72. package/dist/esm/internals/ReportBuilder/PivotModal.js +327 -635
  73. package/dist/esm/models/Pivot.d.ts +27 -7
  74. package/dist/esm/models/Pivot.d.ts.map +1 -1
  75. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  76. package/dist/esm/utils/dashboard.js +36 -11
  77. package/dist/esm/utils/merge.d.ts.map +1 -1
  78. package/dist/esm/utils/merge.js +2 -1
  79. package/dist/esm/utils/pivotConstructor.d.ts +1 -0
  80. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  81. package/dist/esm/utils/pivotConstructor.js +39 -9
  82. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  83. package/dist/esm/utils/pivotProcessing.js +10 -14
  84. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  85. package/dist/esm/utils/queryConstructor.js +421 -134
  86. package/dist/esm/utils/report.d.ts.map +1 -1
  87. package/dist/esm/utils/report.js +2 -2
  88. package/dist/esm/utils/textProcessing.d.ts +1 -1
  89. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  90. package/dist/esm/utils/textProcessing.js +3 -0
  91. 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) {
@@ -57,7 +74,8 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
57
74
  ? (0, queryConstructor_1.additionalProcessingOnPivotQuery)(pivot, comparisonPivotSql, additionalProcessing, client.databaseType)
58
75
  : '';
59
76
  const preQueries = [paginatedSqlQuery];
60
- if (getPivotRowCount && report?.chartType === 'table') {
77
+ getPivotRowCount = getPivotRowCount && report?.chartType === 'table';
78
+ if (getPivotRowCount) {
61
79
  const pivotRowCountQuery = (0, queryConstructor_1.generateRowCountQuery)(sqlQuery, client.databaseType);
62
80
  preQueries.push(pivotRowCountQuery);
63
81
  }
@@ -124,12 +142,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
124
142
  });
125
143
  }
126
144
  const columns = responseFields
127
- ?.map((field) => ({
145
+ ?.map((field, index) => ({
128
146
  field: (0, columnProcessing_1.processColumnName)(field.name),
129
147
  label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
130
148
  format: field.name === pivot.rowField
131
149
  ? 'string'
132
- : (pivot.valueFieldType ?? pivot.aggregationType === 'percentage')
150
+ : (pivot.aggregations?.[index]?.aggregationType === 'percentage')
133
151
  ? 'percent'
134
152
  : 'whole_number',
135
153
  fieldType: field.fieldType,
@@ -217,11 +235,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
217
235
  // });
218
236
  // }
219
237
  // for the case of count agg on no value field
220
- columns?.forEach((column) => {
238
+ columns?.forEach((column, index) => {
221
239
  if (column.label &&
222
240
  ['null', 'undefined'].includes(column.label.toLowerCase()) &&
223
- !pivot.valueField &&
224
- pivot.aggregationType === 'count') {
241
+ !pivot.columnField &&
242
+ !pivot.aggregations?.[index]?.valueField &&
243
+ pivot.aggregations?.[index]?.aggregationType === 'count') {
225
244
  column.label = 'Count';
226
245
  }
227
246
  });
@@ -243,3 +262,15 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
243
262
  comparisonPivotQuery: comparisonPivotSql,
244
263
  };
245
264
  }
265
+ function disambiguatedValueField(pivot) {
266
+ // console.log(pivot);
267
+ if (pivot.aggregations && pivot.aggregations.length > 0) {
268
+ if (pivot.aggregations.length === 1) {
269
+ return pivot.aggregations[0]?.valueField ?? pivot.valueField;
270
+ }
271
+ else {
272
+ return `${pivot.aggregations[0].valueField}_${(0, textProcessing_1.matchCasing)(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
273
+ }
274
+ }
275
+ return pivot.valueField;
276
+ }
@@ -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"}