@quillsql/react 2.12.27 → 2.12.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +34 -17
  3. package/dist/cjs/ChartBuilder.d.ts +3 -3
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +30 -23
  6. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  7. package/dist/cjs/ChartEditor.js +66 -26
  8. package/dist/cjs/Context.d.ts.map +1 -1
  9. package/dist/cjs/Dashboard.d.ts +6 -1
  10. package/dist/cjs/Dashboard.d.ts.map +1 -1
  11. package/dist/cjs/Dashboard.js +3 -1
  12. package/dist/cjs/ReportBuilder.d.ts +1 -1
  13. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  14. package/dist/cjs/ReportBuilder.js +12 -10
  15. package/dist/cjs/SQLEditor.d.ts +10 -1
  16. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  17. package/dist/cjs/SQLEditor.js +27 -3
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/Table.js +17 -7
  20. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  21. package/dist/cjs/components/Chart/ChartTooltip.js +5 -4
  22. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  23. package/dist/cjs/components/Dashboard/DataLoader.js +52 -15
  24. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  25. package/dist/cjs/components/Dashboard/MetricComponent.js +7 -1
  26. package/dist/cjs/components/Dashboard/TableComponent.d.ts +16 -2
  27. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  28. package/dist/cjs/components/Dashboard/TableComponent.js +2 -14
  29. package/dist/cjs/components/QuillTable.d.ts +2 -2
  30. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  31. package/dist/cjs/components/QuillTable.js +7 -5
  32. package/dist/cjs/components/UiComponents.d.ts +3 -3
  33. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  34. package/dist/cjs/components/UiComponents.js +4 -4
  35. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +16 -1
  36. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  37. package/dist/cjs/internals/ReportBuilder/PivotModal.js +155 -80
  38. package/dist/cjs/utils/constants.d.ts +2 -0
  39. package/dist/cjs/utils/constants.d.ts.map +1 -0
  40. package/dist/cjs/utils/constants.js +4 -0
  41. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  42. package/dist/cjs/utils/dashboard.js +26 -96
  43. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  44. package/dist/cjs/utils/dataFetcher.js +56 -13
  45. package/dist/cjs/utils/dates.d.ts +8 -0
  46. package/dist/cjs/utils/dates.d.ts.map +1 -1
  47. package/dist/cjs/utils/dates.js +34 -1
  48. package/dist/cjs/utils/logging.d.ts +2 -0
  49. package/dist/cjs/utils/logging.d.ts.map +1 -0
  50. package/dist/cjs/utils/logging.js +10 -0
  51. package/dist/cjs/utils/pivotConstructor.d.ts +6 -0
  52. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -0
  53. package/dist/cjs/utils/pivotConstructor.js +87 -0
  54. package/dist/cjs/utils/queryConstructor.d.ts +2 -1
  55. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  56. package/dist/cjs/utils/queryConstructor.js +46 -11
  57. package/dist/cjs/utils/tableProcessing.d.ts +22 -0
  58. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  59. package/dist/cjs/utils/tableProcessing.js +87 -1
  60. package/dist/esm/Chart.d.ts.map +1 -1
  61. package/dist/esm/Chart.js +34 -17
  62. package/dist/esm/ChartBuilder.d.ts +3 -3
  63. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  64. package/dist/esm/ChartBuilder.js +30 -23
  65. package/dist/esm/ChartEditor.d.ts.map +1 -1
  66. package/dist/esm/ChartEditor.js +66 -26
  67. package/dist/esm/Context.d.ts.map +1 -1
  68. package/dist/esm/Dashboard.d.ts +6 -1
  69. package/dist/esm/Dashboard.d.ts.map +1 -1
  70. package/dist/esm/Dashboard.js +3 -1
  71. package/dist/esm/ReportBuilder.d.ts +1 -1
  72. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  73. package/dist/esm/ReportBuilder.js +13 -11
  74. package/dist/esm/SQLEditor.d.ts +10 -1
  75. package/dist/esm/SQLEditor.d.ts.map +1 -1
  76. package/dist/esm/SQLEditor.js +27 -3
  77. package/dist/esm/Table.d.ts.map +1 -1
  78. package/dist/esm/Table.js +17 -7
  79. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  80. package/dist/esm/components/Chart/ChartTooltip.js +5 -4
  81. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  82. package/dist/esm/components/Dashboard/DataLoader.js +52 -15
  83. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  84. package/dist/esm/components/Dashboard/MetricComponent.js +7 -1
  85. package/dist/esm/components/Dashboard/TableComponent.d.ts +16 -2
  86. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  87. package/dist/esm/components/Dashboard/TableComponent.js +2 -14
  88. package/dist/esm/components/QuillTable.d.ts +2 -2
  89. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  90. package/dist/esm/components/QuillTable.js +7 -5
  91. package/dist/esm/components/UiComponents.d.ts +3 -3
  92. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  93. package/dist/esm/components/UiComponents.js +4 -4
  94. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +16 -1
  95. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  96. package/dist/esm/internals/ReportBuilder/PivotModal.js +153 -80
  97. package/dist/esm/utils/constants.d.ts +2 -0
  98. package/dist/esm/utils/constants.d.ts.map +1 -0
  99. package/dist/esm/utils/constants.js +1 -0
  100. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  101. package/dist/esm/utils/dashboard.js +27 -97
  102. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  103. package/dist/esm/utils/dataFetcher.js +56 -13
  104. package/dist/esm/utils/dates.d.ts +8 -0
  105. package/dist/esm/utils/dates.d.ts.map +1 -1
  106. package/dist/esm/utils/dates.js +31 -0
  107. package/dist/esm/utils/logging.d.ts +2 -0
  108. package/dist/esm/utils/logging.d.ts.map +1 -0
  109. package/dist/esm/utils/logging.js +6 -0
  110. package/dist/esm/utils/pivotConstructor.d.ts +6 -0
  111. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -0
  112. package/dist/esm/utils/pivotConstructor.js +83 -0
  113. package/dist/esm/utils/queryConstructor.d.ts +2 -1
  114. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  115. package/dist/esm/utils/queryConstructor.js +44 -10
  116. package/dist/esm/utils/tableProcessing.d.ts +22 -0
  117. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  118. package/dist/esm/utils/tableProcessing.js +85 -1
  119. package/package.json +1 -1
@@ -331,7 +331,7 @@ export const LoadingSpinner = () => (_jsx("div", { style: {
331
331
  justifyContent: 'center',
332
332
  alignItems: 'center',
333
333
  }, children: _jsxs("svg", { width: "24", height: "24", children: [_jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 6)", stroke: "#364153", fill: "none", transform: "rotate(-90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "-180 12 12", to: "180 12 12", dur: "0.8s", repeatCount: "indefinite" }) }), _jsx("circle", { cx: "12", cy: "12", r: "9.375", strokeWidth: "3.75", strokeDasharray: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 1 / 3)", strokeDashoffset: "calc(2 * 3.14 * 9.375 / 3) calc(2 * 3.14 * 9.375 * 2 / 3)", stroke: '#ADB1B9', fill: "none", transform: "rotate(90 12 12)", children: _jsx("animateTransform", { attributeName: "transform", attributeType: "XML", type: "rotate", from: "0 12 12", to: "360 12 12", dur: "0.8s", repeatCount: "indefinite" }) })] }) }));
334
- export const QuillTableSQLEditorComponent = ({ rows, columns, isLoading = false, numberOfRows, onPageChange, onSortChange, }) => {
334
+ export const QuillTableSQLEditorComponent = ({ rows, columns, isLoading = false, rowCount, onPageChange, onSortChange, }) => {
335
335
  const [sort, setSort] = useState({ field: '', direction: '' });
336
336
  const [page, setPage] = useState(0);
337
337
  if (isLoading) {
@@ -343,7 +343,7 @@ export const QuillTableSQLEditorComponent = ({ rows, columns, isLoading = false,
343
343
  height: '100%',
344
344
  }, children: _jsx(LoadingSpinner, {}) }));
345
345
  }
346
- return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, numberOfRows: numberOfRows, onPageChange: (page) => {
346
+ return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, rowCount: rowCount, onPageChange: (page) => {
347
347
  setPage(page.currentPage);
348
348
  onPageChange && onPageChange(page);
349
349
  }, onSortChange: (sort) => {
@@ -352,7 +352,7 @@ export const QuillTableSQLEditorComponent = ({ rows, columns, isLoading = false,
352
352
  onSortChange && onSortChange(sort);
353
353
  }, sort: sort, currentPage: page, isLoading: isLoading }));
354
354
  };
355
- export const QuillTableComponent = ({ rows, columns, isLoading = false, numberOfRows, onPageChange, onSortChange, }) => {
355
+ export const QuillTableComponent = ({ rows, columns, isLoading = false, rowCount, onPageChange, onSortChange, }) => {
356
356
  const [sort, setSort] = useState({ field: '', direction: '' });
357
357
  const [page, setPage] = useState(0);
358
358
  const [initialLoad, setInitialLoad] = useState(true);
@@ -370,7 +370,7 @@ export const QuillTableComponent = ({ rows, columns, isLoading = false, numberOf
370
370
  height: '100%',
371
371
  }, children: _jsx(ChartSkeleton, {}) }));
372
372
  }
373
- return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, numberOfRows: numberOfRows, onPageChange: (page) => {
373
+ return (_jsx(QuillTable, { rows: rows, columns: columns, rowsPerPage: 20, rowCount: rowCount, onPageChange: (page) => {
374
374
  setPage(page.currentPage);
375
375
  onPageChange && onPageChange(page);
376
376
  }, onSortChange: (sort) => {
@@ -87,8 +87,9 @@ export interface PivotModalProps {
87
87
  initialSelectedPivotTable?: any;
88
88
  disabled?: boolean;
89
89
  pivotRecommendationsEnabled?: boolean;
90
+ report?: any;
90
91
  }
91
- export declare const PivotModal: ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent, PivotRowContainer, PivotColumnContainer, LoadingComponent, CardComponent, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText, showPivotEditButton, showEditOnPivotClick, selectPivotOnEdit, showTrigger, rightAlign, parentRef, pivotCountRequest, query, initialUniqueValues, initialSelectedPivotTable, disabled, pivotRecommendationsEnabled, }: PivotModalProps) => import("react/jsx-runtime").JSX.Element;
92
+ export declare const PivotModal: ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent, PivotRowContainer, PivotColumnContainer, LoadingComponent, CardComponent, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText, showPivotEditButton, showEditOnPivotClick, selectPivotOnEdit, showTrigger, rightAlign, parentRef, pivotCountRequest, query, initialUniqueValues, initialSelectedPivotTable, disabled, pivotRecommendationsEnabled, report, }: PivotModalProps) => import("react/jsx-runtime").JSX.Element;
92
93
  export declare function generatePivotTableYAxis(pivot: Pivot, cols: {
93
94
  label: string;
94
95
  field: string;
@@ -109,6 +110,10 @@ export declare function getDateRange(dateRange: {
109
110
  start: Date;
110
111
  end: Date;
111
112
  };
113
+ export declare function getDateBuckets(dateRange: {
114
+ start: Date;
115
+ end: Date;
116
+ } | undefined, column: string, data: any, dateBucket?: string): Date[];
112
117
  export declare function getDateString(value: string, dateRange?: {
113
118
  start: Date;
114
119
  end: Date;
@@ -120,6 +125,16 @@ export declare function generatePivotTable(pivot: Pivot, data: any, dateRange: {
120
125
  } | undefined, isComparison: boolean, rowLimit?: number, compRange?: {
121
126
  start: Date;
122
127
  end: Date;
128
+ } | undefined, dateBucket?: string, report?: any, client?: any, uniqueValues?: any): Promise<{
129
+ rows: any;
130
+ columns: any;
131
+ }>;
132
+ export declare function generatePivotTableInMemory(pivot: Pivot, data: any, dateRange: {
133
+ start: Date;
134
+ end: Date;
135
+ } | undefined, isComparison: boolean, rowLimit?: number, compRange?: {
136
+ start: Date;
137
+ end: Date;
123
138
  } | undefined, dateBucket?: string): {
124
139
  rows: any[];
125
140
  columns: {
@@ -1 +1 @@
1
- {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EAOZ,SAAS,EACV,MAAM,OAAO,CAAC;AAuBf,OAAO,EACL,oBAAoB,EAKrB,MAAM,+BAA+B,CAAC;AAgBvC,OAAO,EAAU,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AASlE,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC;IACnB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,GAAG,CAAC;IACnB,wBAAwB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,EAAE,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,eAAe,EAAE,SAAS,CAAC;KAC5B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,cAAc,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1D,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACpE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC;IACvB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,yBAAyB,CAAC,EAAE,GAAG,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,eAAO,MAAM,UAAU,23BAsDpB,eAAe,4CAu4BjB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE;IACJ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,EACH,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE;;;;IAqBjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAiBvD;AAoBD,wBAAgB,YAAY,CAC1B,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,EACjD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,GACR;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAuD5B;AAoBD,wBAAgB,cAAc,CAC5B,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,EACjD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACT,UAAU,CAAC,EAAE,MAAM,UAgBpB;AA+BD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,EACtC,UAAU,CAAC,EAAE,MAAM,UA+CpB;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,WAY5C;AAgCD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,GAAG,EACT,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,EACjD,YAAY,EAAE,OAAO,EACrB,QAAQ,SAAK,EACb,SAAS,GAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAqB,EAC7D,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,GAAG,EACZ,YAAY,CAAC,EAAE,GAAG;;;GAyCnB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,GAAG,EACT,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,EACjD,YAAY,EAAE,OAAO,EACrB,QAAQ,SAAK,EACb,SAAS,GAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAqB,EAC7D,UAAU,CAAC,EAAE,MAAM;;;;;;EAqdpB"}
@@ -12,7 +12,9 @@ import { isNumericColumnType, } from '../../components/ReportBuilder/ast';
12
12
  import { QuillCard } from '../../components/QuillCard';
13
13
  import { cleanPivot, getPossiblePivotFieldOptions, isValidPivot, } from '../../utils/pivotProcessing';
14
14
  import { hashCode } from '../../utils/crypto';
15
- import { getUniqueValuesByColumns } from '../../utils/tableProcessing';
15
+ import { getDateRangeByColumns, getUniqueValuesByColumns, } from '../../utils/tableProcessing';
16
+ import { generatePivotWithSQL } from '../../utils/pivotConstructor';
17
+ import { getDateBucketFromRange, } from '../../utils/dates';
16
18
  const QuillHover = () => {
17
19
  return (_jsx("style", { children: `
18
20
  .quill-hover {
@@ -26,7 +28,7 @@ const QuillHover = () => {
26
28
  }
27
29
  ` }));
28
30
  };
29
- export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent = QuillErrorMessageComponent, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, LoadingComponent = QuillLoadingComponent, CardComponent = QuillCard, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, pivotCountRequest = 6, query, initialUniqueValues, initialSelectedPivotTable, disabled = false, pivotRecommendationsEnabled = true, }) => {
31
+ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent = QuillErrorMessageComponent, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, LoadingComponent = QuillLoadingComponent, CardComponent = QuillCard, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, pivotCountRequest = 6, query, initialUniqueValues, initialSelectedPivotTable, disabled = false, pivotRecommendationsEnabled = true, report, }) => {
30
32
  const [isLoading, setIsLoading] = useState(false);
31
33
  const [selectedPivotType, setSelectedPivotType] = useState('recommended');
32
34
  const [errors, setErrors] = useState([]);
@@ -41,6 +43,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
41
43
  const [allowedRowFields, setAllowedRowFields] = useState([]);
42
44
  const [allowedValueFields, setAllowedValueFields] = useState([]);
43
45
  const [uniqueValues, setUniqueValues] = useState(initialUniqueValues);
46
+ const [dateRanges, setDateRanges] = useState({});
44
47
  const getDistinctValues = async () => {
45
48
  if (columns) {
46
49
  const stringColumns = columns.filter((column) => {
@@ -66,6 +69,23 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
66
69
  }
67
70
  return { rowFields: [], columnFields: [], valueFields: [] };
68
71
  };
72
+ const getAllDateRangesByColumn = async () => {
73
+ // Don't reprocess dateRanges if they are already gathered
74
+ if (Object.keys(dateRanges).length > 0 ||
75
+ (client && client.databaseType !== 'postgresql')) {
76
+ return;
77
+ }
78
+ if (columns) {
79
+ const dateColumns = columns.filter((column) => {
80
+ return column.jsType === 'date';
81
+ });
82
+ if (dateColumns.length === 0) {
83
+ return [];
84
+ }
85
+ const dateRangeByColumn = await getDateRangeByColumns(dateColumns, query || '', client, customFields);
86
+ setDateRanges(dateRangeByColumn || {});
87
+ }
88
+ };
69
89
  useEffect(() => {
70
90
  const calculatePivotCardSize = () => {
71
91
  // The pivot card should be the same width as the row of inputs
@@ -90,30 +110,65 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
90
110
  }, 500);
91
111
  }
92
112
  }, [showUpdatePivot, isOpen]);
113
+ useEffect(() => {
114
+ const fetchPivotData = async () => {
115
+ if (pivotRowField && data && columns) {
116
+ const pivot = {
117
+ rowField: pivotRowField || '',
118
+ rowFieldType: columnsToShow[pivotRowField || ''],
119
+ columnField: pivotColumnField,
120
+ columnFieldType: columnsToShow[pivotColumnField || ''],
121
+ valueField: pivotValueField || '',
122
+ aggregationType: pivotAggregation || '',
123
+ };
124
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
125
+ setSamplePivotTable({ pivot: pivot, rows, columns });
126
+ }
127
+ if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
128
+ getDistinctValues();
129
+ }
130
+ if (initialUniqueValues) {
131
+ const possibleColumns = getPossiblePivotFieldOptions(columns, initialUniqueValues);
132
+ setAllowedRowFields(possibleColumns.rowFields);
133
+ setAllowedColumnFields(possibleColumns.columnFields);
134
+ setAllowedValueFields(possibleColumns.valueFields);
135
+ setUniqueValues(initialUniqueValues);
136
+ }
137
+ if (pivotRowField && data && columns) {
138
+ const pivot = {
139
+ rowField: pivotRowField || '',
140
+ rowFieldType: columnsToShow[pivotRowField || ''],
141
+ columnField: pivotColumnField,
142
+ columnFieldType: columnsToShow[pivotColumnField || ''],
143
+ valueField: pivotValueField || '',
144
+ aggregationType: pivotAggregation || '',
145
+ };
146
+ if (initialSelectedPivotTable) {
147
+ setSamplePivotTable({
148
+ pivot: pivot,
149
+ rows: initialSelectedPivotTable.rows,
150
+ columns: initialSelectedPivotTable.columns,
151
+ });
152
+ }
153
+ else {
154
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
155
+ setSamplePivotTable({ pivot: pivot, rows, columns });
156
+ }
157
+ }
158
+ };
159
+ fetchPivotData();
160
+ }, []);
93
161
  useEffect(() => {
94
162
  if (pivotRowField && data && columns) {
95
- const pivot = {
96
- rowField: pivotRowField || '',
97
- rowFieldType: columnsToShow[pivotRowField || ''],
98
- columnField: pivotColumnField,
99
- columnFieldType: columnsToShow[pivotColumnField || ''],
100
- valueField: pivotValueField || '',
101
- aggregationType: pivotAggregation || '',
102
- };
103
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
104
- setSamplePivotTable({ pivot: pivot, rows, columns });
105
- }
106
- if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
107
163
  getDistinctValues();
164
+ getAllDateRangesByColumn();
108
165
  }
109
- if (initialUniqueValues) {
110
- const possibleColumns = getPossiblePivotFieldOptions(columns, initialUniqueValues);
111
- setAllowedRowFields(possibleColumns.rowFields);
112
- setAllowedColumnFields(possibleColumns.columnFields);
113
- setAllowedValueFields(possibleColumns.valueFields);
114
- setUniqueValues(initialUniqueValues);
166
+ else if (initialSelectedPivotTable) {
167
+ getDistinctValues();
115
168
  }
116
- if (pivotRowField && data && columns) {
169
+ }, [initialSelectedPivotTable, columns, data, pivotRowField]);
170
+ useEffect(() => {
171
+ const fetchPivotTables = async () => {
117
172
  const pivot = {
118
173
  rowField: pivotRowField || '',
119
174
  rowFieldType: columnsToShow[pivotRowField || ''],
@@ -122,37 +177,12 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
122
177
  valueField: pivotValueField || '',
123
178
  aggregationType: pivotAggregation || '',
124
179
  };
125
- if (initialSelectedPivotTable) {
126
- setSamplePivotTable({
127
- pivot: pivot,
128
- rows: initialSelectedPivotTable.rows,
129
- columns: initialSelectedPivotTable.columns,
130
- });
131
- }
132
- else {
133
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
180
+ if (isValidPivot(pivot) && data && columns) {
181
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
134
182
  setSamplePivotTable({ pivot: pivot, rows, columns });
135
183
  }
136
- }
137
- }, []);
138
- useEffect(() => {
139
- if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
140
- getDistinctValues();
141
- }
142
- }, [initialSelectedPivotTable, columns, data, pivotRowField]);
143
- useEffect(() => {
144
- const pivot = {
145
- rowField: pivotRowField || '',
146
- rowFieldType: columnsToShow[pivotRowField || ''],
147
- columnField: pivotColumnField,
148
- columnFieldType: columnsToShow[pivotColumnField || ''],
149
- valueField: pivotValueField || '',
150
- aggregationType: pivotAggregation || '',
151
184
  };
152
- if (isValidPivot(pivot) && data && columns) {
153
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
154
- setSamplePivotTable({ pivot: pivot, rows, columns });
155
- }
185
+ fetchPivotTables();
156
186
  }, [
157
187
  data,
158
188
  columns,
@@ -181,17 +211,21 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
181
211
  return map;
182
212
  }, {});
183
213
  }, [columns]);
184
- const selectedPivotTable = useMemo(() => {
185
- if (selectedPivotIndex === -1) {
186
- return null;
187
- }
188
- const pivot = createdPivots[selectedPivotIndex];
189
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
190
- return {
191
- pivot: pivot,
192
- rows: rows,
193
- columns: columns,
214
+ const [selectedPivotTable, setSelectedPivotTable] = useState(null);
215
+ useEffect(() => {
216
+ const fetchPivotTables = async () => {
217
+ if (selectedPivotIndex === -1) {
218
+ return null;
219
+ }
220
+ const pivot = createdPivots[selectedPivotIndex];
221
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
222
+ setSelectedPivotTable({
223
+ pivot: pivot,
224
+ rows: rows,
225
+ columns: columns,
226
+ });
194
227
  };
228
+ fetchPivotTables();
195
229
  }, [selectedPivotIndex, data, dateRange, createdPivots]);
196
230
  const onSelectRecommendedPivot = (pivot, index) => {
197
231
  if (showEditOnPivotClick) {
@@ -208,12 +242,12 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
208
242
  setIsOpen(false);
209
243
  };
210
244
  const onSelectCreatedPivot = (pivot, index) => {
211
- selectPivot(pivot);
245
+ selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField]?.dateRange);
212
246
  setSelectedPivotType('created');
213
247
  setIsOpen(false);
214
248
  setPopUpTitle('Add pivot');
215
249
  };
216
- const onEditPivot = (pivot, index) => {
250
+ const onEditPivot = async (pivot, index) => {
217
251
  setIsLoading(false);
218
252
  setPivotRowField(pivot.rowField);
219
253
  setPivotColumnField(pivot.columnField);
@@ -221,7 +255,11 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
221
255
  setPivotAggregation(pivot.aggregationType);
222
256
  setShowUpdatePivot(true);
223
257
  if (isValidPivot(pivot)) {
224
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
258
+ let dateBucket = undefined;
259
+ if (pivotRowField && dateRanges[pivotRowField]) {
260
+ dateBucket = getDateBucketFromRange(dateRanges[pivotRowField].dateRange);
261
+ }
262
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
225
263
  setSamplePivotTable({ pivot, rows, columns });
226
264
  return;
227
265
  }
@@ -323,26 +361,38 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
323
361
  setSamplePivotTable(null);
324
362
  return;
325
363
  }
326
- setTimeout(() => {
327
- const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
364
+ let dateBucket = undefined;
365
+ if (pivotRowField && dateRanges[pivotRowField]) {
366
+ dateBucket = getDateBucketFromRange(dateRanges[pivotRowField].dateRange);
367
+ }
368
+ setTimeout(async () => {
369
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
328
370
  setSamplePivotTable({ pivot, rows, columns });
329
371
  setIsLoading(false);
330
372
  }, 500);
331
373
  };
332
- const recommendedPivotTables = useMemo(() => {
333
- const pts = recommendedPivots.map((p) => {
334
- const { rows, columns } = generatePivotTable(p, data, dateRange, false, 6);
335
- return { pivot: p, rows, columns };
336
- });
337
- return pts;
338
- }, [recommendedPivots, data]);
339
- const createdPivotTables = useMemo(() => {
340
- const pts = createdPivots.map((p) => {
341
- const { rows, columns } = generatePivotTable(p, data, dateRange, false, 6);
342
- return { pivot: p, rows, columns };
343
- });
344
- return pts;
345
- }, [createdPivots, data]);
374
+ const [recommendedPivotTables, setRecommendedPivotTables] = useState([]);
375
+ useEffect(() => {
376
+ const fetchPivotTables = async () => {
377
+ const pts = await Promise.all(recommendedPivots.map(async (p) => {
378
+ const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
379
+ return { pivot: p, rows, columns };
380
+ }));
381
+ setRecommendedPivotTables(pts);
382
+ };
383
+ fetchPivotTables();
384
+ }, [recommendedPivots, dateRange]);
385
+ const [createdPivotTables, setCreatedPivotTables] = useState([]);
386
+ useEffect(() => {
387
+ const fetchPivotTables = async () => {
388
+ const pts = await Promise.all(createdPivots.map(async (p) => {
389
+ const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
390
+ return { pivot: p, rows, columns };
391
+ }));
392
+ setCreatedPivotTables(pts);
393
+ };
394
+ fetchPivotTables();
395
+ }, [createdPivots, dateRange]);
346
396
  return (_jsx("div", { style: { display: 'flex', flexDirection: 'column' }, children: _jsxs("div", { style: {
347
397
  position: 'relative',
348
398
  display: 'inline-block',
@@ -619,7 +669,7 @@ function determineIntervalThroughOverride(dateBucket, dateRange) {
619
669
  return eachMonthOfInterval(dateRange);
620
670
  }
621
671
  }
622
- function getDateBuckets(dateRange, column, data, dateBucket) {
672
+ export function getDateBuckets(dateRange, column, data, dateBucket) {
623
673
  if (!dateRange) {
624
674
  if (dateBucket) {
625
675
  return determineIntervalThroughOverride(dateBucket, getDateRange(undefined, column, data));
@@ -736,7 +786,30 @@ const fixBigQueryData = (data = []) => {
736
786
  }
737
787
  return newData;
738
788
  };
739
- export function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
789
+ export async function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket, report, client, uniqueValues) {
790
+ try {
791
+ if (report &&
792
+ report.rowCount &&
793
+ report.rowCount !== data.length &&
794
+ client &&
795
+ client.databaseType.toLowerCase() === 'postgresql') {
796
+ let dateFilter = report
797
+ ? report.filtersApplied.find((f) => f.filterType === 'date_range')
798
+ : undefined;
799
+ const pivotTable = await generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, pivot.columnField && uniqueValues
800
+ ? Object.keys(uniqueValues[pivot.columnField])
801
+ : undefined);
802
+ if (pivotTable) {
803
+ return pivotTable;
804
+ }
805
+ }
806
+ }
807
+ catch (e) {
808
+ console.error('Error generating pivot table with SQL, using in memory process', e);
809
+ }
810
+ return generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit, compRange);
811
+ }
812
+ export function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
740
813
  // If there is no rowField, aggregate on the valueField
741
814
  if (!pivot.rowField) {
742
815
  return valueFieldAggregation(data, pivot.valueField, pivot.aggregationType, isComparison);
@@ -0,0 +1,2 @@
1
+ export declare const MAX_COLUMN_ROWS_LIMIT = 500;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
@@ -0,0 +1 @@
1
+ export const MAX_COLUMN_ROWS_LIMIT = 500;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAkC5E;;;;;;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,CA+C9B;AAwQD,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAI,OAAO,CAAC,GAAG,CAAC,CA0BpF"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAoC5E;;;;;;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,CAiD9B;AA0KD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA0Bd"}
@@ -1,9 +1,9 @@
1
1
  import { valueFormatter } from './valueFormatter';
2
- import { generatePivotTable, generatePivotTableYAxis, getDateRange, getDateString, } from '../internals/ReportBuilder/PivotModal';
2
+ import { generatePivotTable, generatePivotTableYAxis, } from '../internals/ReportBuilder/PivotModal';
3
3
  import { snakeAndCamelCaseToTitleCase } from './textProcessing';
4
- import { generatePivotQuery } from './queryConstructor';
5
4
  import { getData } from './dataFetcher';
6
- import { differenceInDays } from 'date-fns';
5
+ import { getDateBucketFromRange } from './dates';
6
+ import { generatePivotWithSQL } from './pivotConstructor';
7
7
  const defaultDashboardItem = {
8
8
  id: '',
9
9
  name: '',
@@ -67,8 +67,10 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
67
67
  xAxisFormat: item.xAxisFormat,
68
68
  order: item.order,
69
69
  filtersApplied: item.filtersApplied,
70
+ rowCount: parseInt(item.rowCount),
70
71
  sort: item.sort,
71
72
  page: item.page,
73
+ itemQuery: item.itemQuery,
72
74
  };
73
75
  }
74
76
  /**
@@ -118,106 +120,34 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
118
120
  }
119
121
  const pivot = report?.pivot;
120
122
  const data = report || {};
121
- if (client && client.databaseType.toLowerCase() === 'postgresql') {
123
+ if (pivot && client && client.databaseType.toLowerCase() === 'postgresql') {
124
+ if (report.rowCount === 0) {
125
+ return { rows: [], columns: [] };
126
+ }
122
127
  try {
123
- let dateRange = undefined;
124
- let comparisonInterval = undefined;
125
128
  let dateBucket = dateBucketInitial;
126
- if (!dateBucket && pivot.rowFieldType !== 'string' && pivot.rowField) {
127
- let filterDateRange = undefined;
128
- if (dateFilter) {
129
- filterDateRange = {
130
- start: dateFilter.startDate,
131
- end: dateFilter.endDate,
132
- };
133
- }
134
- dateRange = getDateRange(filterDateRange, pivot.rowField, data.rows);
135
- const difference = differenceInDays(dateRange.end, dateRange.start);
136
- if (difference < 14) {
137
- dateBucket = 'day';
138
- }
139
- else if (difference < 60) {
140
- dateBucket = 'week';
141
- }
142
- else if (difference < 365 * 3) {
143
- dateBucket = 'month';
144
- }
145
- else {
146
- dateBucket = 'year';
147
- }
129
+ let filterDateRange = undefined;
130
+ if (dateFilter) {
131
+ filterDateRange = {
132
+ start: dateFilter.startDate,
133
+ end: dateFilter.endDate,
134
+ };
148
135
  }
149
- if (dateFilter && dateFilter && dateFilter.comparisonRange) {
150
- const comparisonRange = differenceInDays(dateFilter?.comparisonRange.endDate, dateFilter?.comparisonRange.startDate);
151
- if (!isNaN(comparisonRange)) {
152
- if (dateBucket === 'month') {
153
- comparisonInterval = comparisonRange / 30 + ' month';
154
- }
155
- else if (dateBucket === 'year') {
156
- comparisonInterval = comparisonRange / 365 + ' year';
157
- }
158
- else {
159
- comparisonInterval = comparisonRange + ' day';
160
- }
161
- }
136
+ else if (report.dateRange) {
137
+ filterDateRange = report.dateRange;
162
138
  }
163
- const sqlQuery = generatePivotQuery(pivot, report.itemQuery, report.rows, dateBucket, comparisonInterval);
164
- if (sqlQuery && report.rows.length > 0) {
165
- const hostedBody = {
166
- metadata: {
167
- preQueries: [sqlQuery],
168
- task: 'query',
169
- orgId: client.customerId || '*',
170
- clientId: client.publicKey,
171
- databaseType: client?.databaseType,
172
- getCustomFields: false,
173
- runQueryConfig: {
174
- overridePost: true,
175
- convertDatatypes: true,
176
- },
177
- },
178
- };
179
- const cloudBody = { ...hostedBody };
180
- const resp = await getData(client, 'query', 'same-origin', hostedBody, cloudBody);
181
- // With our current design we have to remove the second row field but leave the first for comparison purposes.
182
- const rows = resp.queryResults[0].rows;
183
- const columns = resp.queryResults[0].fields
184
- .map((field) => ({
185
- field: field.name,
186
- label: field.name.replace('comparison_', 'comparison '),
187
- }))
188
- .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0);
189
- if (pivot.rowFieldType !== 'string') {
190
- rows.forEach((row) => {
191
- row[pivot.rowField] = getDateString(row[pivot.rowField], undefined, dateBucket);
192
- });
193
- // add a row for each date in the range that doesn't have a value
194
- if (pivot.rowFieldType !== 'string') {
195
- const dateSet = new Set(rows.map((row) => row[pivot.rowField]));
196
- // create a loop that will go through each formatted date and add a row if it doesn't exist going to the current date
197
- for (let date = dateFilter.startDate; date <= dateFilter.endDate; date = new Date(date.getTime() + 24 * 60 * 60 * 1000)) {
198
- const formattedDate = getDateString(date.toDateString(), undefined, dateBucket);
199
- if (!dateSet.has(formattedDate)) {
200
- const newRow = {};
201
- newRow[pivot.rowField] = formattedDate;
202
- rows.push(newRow);
203
- dateSet.add(formattedDate);
204
- }
205
- // order the rows by the date field
206
- rows.sort((a, b) => {
207
- return new Date(a[pivot.rowField]) < new Date(b[pivot.rowField])
208
- ? -1
209
- : 1;
210
- });
211
- }
212
- }
213
- }
214
- return {
215
- rows: rows,
216
- columns: columns,
217
- };
139
+ if (!dateBucket && filterDateRange) {
140
+ dateBucket = getDateBucketFromRange(filterDateRange);
141
+ }
142
+ const pivotTable = await generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, report.distinctStrings);
143
+ if (pivotTable) {
144
+ return pivotTable;
218
145
  }
146
+ throw new Error('Error generating pivot table');
147
+ }
148
+ catch (e) {
149
+ throw new Error('Error generating pivot table: ' + e);
219
150
  }
220
- catch (e) { }
221
151
  }
222
152
  return pivot && data.rows
223
153
  ? generatePivotTable(pivot, JSON.parse(JSON.stringify(data.rows)), // deep copy
@@ -1 +1 @@
1
- {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgEhB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}
1
+ {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAqBA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAmGhB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}