@quillsql/react 2.13.7 → 2.13.9
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.
- package/dist/cjs/Chart.d.ts +5 -5
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +19 -8
- package/dist/cjs/ChartBuilder.d.ts +1 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +58 -93
- package/dist/cjs/ChartEditor.js +1 -1
- package/dist/cjs/Context.d.ts +9 -8
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +119 -34
- package/dist/cjs/Dashboard.d.ts +20 -8
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +68 -58
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -2
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +64 -52
- package/dist/cjs/ReportBuilder.d.ts +2 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +339 -339
- package/dist/cjs/SQLEditor.d.ts +1 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +30 -18
- package/dist/cjs/components/Banner/index.d.ts +0 -1
- package/dist/cjs/components/Banner/index.d.ts.map +1 -1
- package/dist/cjs/components/Banner/index.js +1 -1
- package/dist/cjs/components/Chart/BarChart.d.ts +0 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +1 -1
- package/dist/cjs/components/Chart/BarList.js +1 -2
- package/dist/cjs/components/Chart/ChartError.js +2 -3
- package/dist/cjs/components/Chart/ChartSkeleton.js +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +1 -1
- package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts +0 -1
- package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltipFrame.js +1 -1
- package/dist/cjs/components/Chart/ChartTooltipGroup.js +1 -1
- package/dist/cjs/components/Chart/ChartTooltipRow.js +1 -1
- package/dist/cjs/components/Chart/LineChart.d.ts +0 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +1 -1
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +18 -9
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +10 -2
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +9 -23
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts +0 -1
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardSection.js +1 -1
- package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
- package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +1 -1
- package/dist/cjs/components/Dashboard/DashboardTemplate.js +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +9 -7
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +104 -61
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +1 -1
- package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TemplateChartComponent.js +1 -1
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.js +1 -1
- package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts +0 -1
- package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TemplateTableComponent.js +1 -1
- package/dist/cjs/components/Dashboard/util.js +2 -3
- package/dist/cjs/components/QuillCard.js +1 -2
- package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelect.js +21 -20
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +172 -70
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +9 -8
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +26 -12
- package/dist/cjs/components/QuillTable.d.ts +5 -1
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +5 -3
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +5 -6
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +3 -4
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +45 -39
- package/dist/cjs/components/ReportBuilder/FilterStack.js +1 -1
- package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ast.js +2 -2
- package/dist/cjs/components/ReportBuilder/convert.js +11 -12
- package/dist/cjs/components/ReportBuilder/postgres.js +4 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +3 -3
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +21 -23
- package/dist/cjs/components/UiComponents.d.ts +14 -12
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +41 -17
- package/dist/cjs/components/selectUtils.js +3 -3
- package/dist/cjs/contexts/BaseColorContext.d.ts +0 -1
- package/dist/cjs/contexts/BaseColorContext.d.ts.map +1 -1
- package/dist/cjs/contexts/RootStylesContext.d.ts +0 -1
- package/dist/cjs/contexts/RootStylesContext.d.ts.map +1 -1
- package/dist/cjs/contexts/SelectedValueContext.d.ts +0 -1
- package/dist/cjs/contexts/SelectedValueContext.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.d.ts +2 -2
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +11 -11
- package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.d.ts +8 -7
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +47 -31
- package/dist/cjs/hooks/useExport.d.ts +3 -4
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +6 -2
- package/dist/cjs/hooks/useInternalState.d.ts +1 -2
- package/dist/cjs/hooks/useInternalState.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -1
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.d.ts +0 -14
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +17 -55
- package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -2
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +4 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +32 -7
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +17 -13
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +368 -162
- package/dist/cjs/lib/utils.d.ts +0 -1
- package/dist/cjs/lib/utils.d.ts.map +1 -1
- package/dist/cjs/lib/utils.js +2 -2
- package/dist/cjs/models/Filter.d.ts +49 -30
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +125 -52
- package/dist/cjs/models/Pivot.d.ts +3 -1
- package/dist/cjs/models/Pivot.d.ts.map +1 -1
- package/dist/cjs/models/Report.d.ts +2 -2
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +4 -4
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +3839 -3427
- package/dist/cjs/utils/astProcessing.d.ts +12 -3
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +76 -11
- package/dist/cjs/utils/client.js +2 -2
- package/dist/cjs/utils/color.js +5 -6
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +7 -7
- package/dist/cjs/utils/crypto.js +1 -2
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +34 -30
- package/dist/cjs/utils/dataFetcher.js +3 -4
- package/dist/cjs/utils/dataProcessing.js +2 -2
- package/dist/cjs/utils/dates.d.ts +4 -1
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +12 -10
- package/dist/cjs/utils/errorProcessing.js +1 -2
- package/dist/cjs/utils/filterProcessing.d.ts +3 -3
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +30 -27
- package/dist/cjs/utils/getDomain.js +1 -1
- package/dist/cjs/utils/logging.js +1 -2
- package/dist/cjs/utils/merge.d.ts +1 -1
- package/dist/cjs/utils/merge.d.ts.map +1 -1
- package/dist/cjs/utils/merge.js +15 -11
- package/dist/cjs/utils/monacoConfig.js +3 -3
- package/dist/cjs/utils/paginationProcessing.js +3 -3
- package/dist/cjs/utils/pivotConstructor.d.ts +4 -4
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +104 -127
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +14 -16
- package/dist/cjs/utils/queryConstructor.d.ts +2 -2
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +344 -78
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +22 -12
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/styles.js +1 -2
- package/dist/cjs/utils/tableProcessing.d.ts +12 -12
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +69 -26
- package/dist/cjs/utils/textProcessing.js +5 -6
- package/dist/cjs/utils/validation.d.ts.map +1 -1
- package/dist/cjs/utils/validation.js +3 -1
- package/dist/cjs/utils/valueFormatter.d.ts +1 -0
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +2 -0
- package/dist/cjs/utils/width.d.ts.map +1 -1
- package/dist/esm/Chart.d.ts +5 -5
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +15 -4
- package/dist/esm/ChartBuilder.d.ts +1 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +52 -87
- package/dist/esm/Context.d.ts +9 -8
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +119 -34
- package/dist/esm/Dashboard.d.ts +20 -8
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +68 -58
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +64 -52
- package/dist/esm/ReportBuilder.d.ts +2 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +343 -343
- package/dist/esm/SQLEditor.d.ts +1 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +29 -17
- package/dist/esm/components/Banner/index.d.ts +0 -1
- package/dist/esm/components/Banner/index.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.d.ts +0 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +0 -1
- package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.d.ts +0 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +18 -9
- package/dist/esm/components/Dashboard/ChartComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +10 -2
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +8 -21
- package/dist/esm/components/Dashboard/DashboardSection.d.ts +0 -1
- package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
- package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts +9 -7
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +102 -62
- package/dist/esm/components/Dashboard/MetricComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
- package/dist/esm/components/Dashboard/TableComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts +0 -1
- package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelect.js +19 -18
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +171 -69
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +8 -6
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +25 -10
- package/dist/esm/components/QuillTable.d.ts +5 -1
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +4 -2
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +5 -6
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +3 -4
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +46 -40
- package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts +3 -3
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +0 -2
- package/dist/esm/components/UiComponents.d.ts +14 -12
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +37 -14
- package/dist/esm/contexts/BaseColorContext.d.ts +0 -1
- package/dist/esm/contexts/BaseColorContext.d.ts.map +1 -1
- package/dist/esm/contexts/RootStylesContext.d.ts +0 -1
- package/dist/esm/contexts/RootStylesContext.d.ts.map +1 -1
- package/dist/esm/contexts/SelectedValueContext.d.ts +0 -1
- package/dist/esm/contexts/SelectedValueContext.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.d.ts +2 -2
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +12 -12
- package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.d.ts +8 -7
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +48 -32
- package/dist/esm/hooks/useExport.d.ts +3 -4
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +6 -2
- package/dist/esm/hooks/useInternalState.d.ts +1 -2
- package/dist/esm/hooks/useInternalState.d.ts.map +1 -1
- package/dist/esm/hooks/useOnClickOutside.d.ts +3 -1
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.d.ts +0 -14
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +16 -53
- package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +4 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +32 -7
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +17 -13
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +364 -158
- package/dist/esm/lib/utils.d.ts +0 -1
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +49 -30
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +123 -50
- package/dist/esm/models/Pivot.d.ts +3 -1
- package/dist/esm/models/Pivot.d.ts.map +1 -1
- package/dist/esm/models/Report.d.ts +2 -2
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +4 -4
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +3835 -3423
- package/dist/esm/utils/astProcessing.d.ts +12 -3
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +64 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +31 -26
- package/dist/esm/utils/dates.d.ts +4 -1
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +6 -3
- package/dist/esm/utils/filterProcessing.d.ts +3 -3
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +22 -19
- package/dist/esm/utils/merge.d.ts +1 -1
- package/dist/esm/utils/merge.d.ts.map +1 -1
- package/dist/esm/utils/merge.js +14 -9
- package/dist/esm/utils/pivotConstructor.d.ts +4 -4
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +103 -125
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +9 -11
- package/dist/esm/utils/queryConstructor.d.ts +2 -2
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +338 -71
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +18 -8
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.d.ts +12 -12
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +69 -26
- package/dist/esm/utils/validation.d.ts.map +1 -1
- package/dist/esm/utils/validation.js +3 -1
- package/dist/esm/utils/valueFormatter.d.ts +1 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +2 -1
- package/dist/esm/utils/width.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -3,7 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.PivotModal = void 0;
|
|
7
|
+
exports.generatePivotTableYAxis = generatePivotTableYAxis;
|
|
8
|
+
exports.generatePivotTitle = generatePivotTitle;
|
|
9
|
+
exports.getDateRange = getDateRange;
|
|
10
|
+
exports.getDateBuckets = getDateBuckets;
|
|
11
|
+
exports.getDateString = getDateString;
|
|
12
|
+
exports.isDateField = isDateField;
|
|
13
|
+
exports.generatePivotTable = generatePivotTable;
|
|
14
|
+
exports.generatePivotTableInMemory = generatePivotTableInMemory;
|
|
7
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
16
|
const react_1 = require("react");
|
|
9
17
|
const Context_1 = require("../../Context");
|
|
@@ -22,8 +30,11 @@ const tableProcessing_1 = require("../../utils/tableProcessing");
|
|
|
22
30
|
const pivotConstructor_1 = require("../../utils/pivotConstructor");
|
|
23
31
|
const dates_1 = require("../../utils/dates");
|
|
24
32
|
const big_js_1 = __importDefault(require("big.js"));
|
|
25
|
-
const
|
|
33
|
+
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
34
|
+
const filterProcessing_1 = require("../../utils/filterProcessing");
|
|
35
|
+
const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotValueField2, setPivotValueField2, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, CardComponent = QuillCard_1.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, showTrigger = true, pivotCountRequest = 6, query, initialUniqueValues, uniqueValuesIsLoading, initialSelectedPivotTable, disabled = false, pivotRecommendationsEnabled = true, report, }) => {
|
|
26
36
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
37
|
+
const [previewLoading, setPreviewLoading] = (0, react_1.useState)(false);
|
|
27
38
|
const [selectedPivotType, setSelectedPivotType] = (0, react_1.useState)('recommended');
|
|
28
39
|
const [errors, setErrors] = (0, react_1.useState)([]);
|
|
29
40
|
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
@@ -32,12 +43,16 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
32
43
|
const colFieldRef = (0, react_1.useRef)(null);
|
|
33
44
|
const [pivotCardWidth, setPivotCardWidth] = (0, react_1.useState)(420);
|
|
34
45
|
const [samplePivotTable, setSamplePivotTable] = (0, react_1.useState)(null);
|
|
46
|
+
const [hasNoRecommendedPivots, sethasNoRecommendedPivots] = (0, react_1.useState)(false);
|
|
47
|
+
const [isFetchingPivots, setIsFetchingPivots] = (0, react_1.useState)(false);
|
|
35
48
|
const [allowedColumnFields, setAllowedColumnFields] = (0, react_1.useState)([]);
|
|
36
49
|
const [allowedRowFields, setAllowedRowFields] = (0, react_1.useState)([]);
|
|
37
50
|
const [allowedValueFields, setAllowedValueFields] = (0, react_1.useState)([]);
|
|
38
51
|
const [uniqueValues, setUniqueValues] = (0, react_1.useState)(initialUniqueValues);
|
|
52
|
+
const buttonRef = (0, react_1.useRef)(null);
|
|
39
53
|
const [dateRanges, setDateRanges] = (0, react_1.useState)({});
|
|
40
|
-
const
|
|
54
|
+
const [pivotError, setPivotError] = (0, react_1.useState)('');
|
|
55
|
+
const getDistinctValues = async (fetchDistinct) => {
|
|
41
56
|
if (!client) {
|
|
42
57
|
return {
|
|
43
58
|
possibleColumns: { rowFields: [], columnFields: [], valueFields: [] },
|
|
@@ -55,8 +70,11 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
55
70
|
setAllowedValueFields(possibleColumns.valueFields);
|
|
56
71
|
return { possibleColumns, uniqueValues: {} };
|
|
57
72
|
}
|
|
58
|
-
|
|
59
|
-
|
|
73
|
+
let newUniqueValues = uniqueValues;
|
|
74
|
+
if (fetchDistinct || !uniqueValues) {
|
|
75
|
+
const { filteredColumns: smallStringColumns } = await (0, tableProcessing_1.getCountsByColumns)(stringColumns, query || '', client, schemaData.customFields ?? []);
|
|
76
|
+
newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(smallStringColumns, query || '', data.rows || [], client, schemaData.customFields ?? []);
|
|
77
|
+
}
|
|
60
78
|
if (!uniqueValues ||
|
|
61
79
|
(0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
|
|
62
80
|
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, newUniqueValues || {});
|
|
@@ -81,7 +99,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
81
99
|
if (dateColumns.length === 0) {
|
|
82
100
|
return;
|
|
83
101
|
}
|
|
84
|
-
const dateRangeByColumn = await (0, tableProcessing_1.
|
|
102
|
+
const dateRangeByColumn = await (0, tableProcessing_1.getQueryDateRangeByColumns)(dateColumns, query || '', client, schemaData.customFields ?? []);
|
|
85
103
|
setDateRanges(dateRangeByColumn || {});
|
|
86
104
|
}
|
|
87
105
|
};
|
|
@@ -119,9 +137,23 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
119
137
|
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
120
138
|
valueField: pivotValueField || '',
|
|
121
139
|
aggregationType: pivotAggregation || '',
|
|
140
|
+
valueField2: pivotValueField2 || '',
|
|
122
141
|
};
|
|
123
|
-
|
|
124
|
-
|
|
142
|
+
try {
|
|
143
|
+
const { rows, columns } = await generatePivotTable({
|
|
144
|
+
pivot,
|
|
145
|
+
report,
|
|
146
|
+
client,
|
|
147
|
+
uniqueValues,
|
|
148
|
+
});
|
|
149
|
+
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
if (e instanceof Error) {
|
|
153
|
+
setPivotError(e.message);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
125
157
|
}
|
|
126
158
|
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
127
159
|
getDistinctValues();
|
|
@@ -141,6 +173,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
141
173
|
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
142
174
|
valueField: pivotValueField || '',
|
|
143
175
|
aggregationType: pivotAggregation || '',
|
|
176
|
+
valueField2: pivotValueField2 || '',
|
|
144
177
|
};
|
|
145
178
|
if (initialSelectedPivotTable) {
|
|
146
179
|
setSamplePivotTable({
|
|
@@ -150,8 +183,21 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
150
183
|
});
|
|
151
184
|
}
|
|
152
185
|
else {
|
|
153
|
-
|
|
154
|
-
|
|
186
|
+
try {
|
|
187
|
+
const { rows, columns } = await generatePivotTable({
|
|
188
|
+
pivot,
|
|
189
|
+
report,
|
|
190
|
+
client,
|
|
191
|
+
uniqueValues,
|
|
192
|
+
});
|
|
193
|
+
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
if (e instanceof Error) {
|
|
197
|
+
setPivotError(e.message);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
155
201
|
}
|
|
156
202
|
}
|
|
157
203
|
};
|
|
@@ -167,15 +213,16 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
167
213
|
}
|
|
168
214
|
}, [initialSelectedPivotTable, columns, data, pivotRowField]);
|
|
169
215
|
(0, react_1.useEffect)(() => {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
216
|
+
setAllowedFields(initialUniqueValues || {});
|
|
217
|
+
setUniqueValues(initialUniqueValues);
|
|
218
|
+
}, [initialUniqueValues, columns]);
|
|
219
|
+
const setAllowedFields = (uniqueValues) => {
|
|
220
|
+
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, uniqueValues);
|
|
174
221
|
setAllowedRowFields(possibleColumns.rowFields);
|
|
175
222
|
setAllowedColumnFields(possibleColumns.columnFields);
|
|
176
223
|
setAllowedValueFields(possibleColumns.valueFields);
|
|
177
|
-
|
|
178
|
-
}
|
|
224
|
+
return possibleColumns;
|
|
225
|
+
};
|
|
179
226
|
const columnsToShow = (0, react_1.useMemo)(() => {
|
|
180
227
|
return (columns || []).reduce((map, col) => {
|
|
181
228
|
// only use columns shown in the report builder's table
|
|
@@ -194,15 +241,41 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
194
241
|
return null;
|
|
195
242
|
}
|
|
196
243
|
const pivot = createdPivots[selectedPivotIndex];
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
244
|
+
try {
|
|
245
|
+
const { rows, columns } = await generatePivotTable({
|
|
246
|
+
pivot,
|
|
247
|
+
report,
|
|
248
|
+
client,
|
|
249
|
+
uniqueValues,
|
|
250
|
+
});
|
|
251
|
+
setSelectedPivotTable({
|
|
252
|
+
pivot: pivot,
|
|
253
|
+
rows: rows,
|
|
254
|
+
columns: columns,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
if (e instanceof Error) {
|
|
259
|
+
setPivotError(e.message);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
203
263
|
};
|
|
204
264
|
fetchPivotTables();
|
|
205
265
|
}, [selectedPivotIndex, data, dateRange, createdPivots]);
|
|
266
|
+
const previousUniqueValuesRef = (0, react_1.useRef)();
|
|
267
|
+
(0, react_1.useEffect)(() => {
|
|
268
|
+
if (!uniqueValuesIsLoading &&
|
|
269
|
+
!(0, fast_deep_equal_1.default)(uniqueValues, previousUniqueValuesRef.current)) {
|
|
270
|
+
previousUniqueValuesRef.current = uniqueValues;
|
|
271
|
+
setRecommendedPivotTables([]);
|
|
272
|
+
setRecommendedPivots([]);
|
|
273
|
+
setCreatedPivotTables([]);
|
|
274
|
+
setCreatedPivots([]);
|
|
275
|
+
sethasNoRecommendedPivots(false);
|
|
276
|
+
refreshPivots();
|
|
277
|
+
}
|
|
278
|
+
}, [uniqueValuesIsLoading, uniqueValues]);
|
|
206
279
|
const onSelectRecommendedPivot = (pivot, index) => {
|
|
207
280
|
if (showEditOnPivotClick) {
|
|
208
281
|
onEditPivot(pivot, index, 'recommended');
|
|
@@ -218,7 +291,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
218
291
|
setIsOpen(false);
|
|
219
292
|
};
|
|
220
293
|
const onSelectCreatedPivot = (pivot) => {
|
|
221
|
-
selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField || '']?.dateRange
|
|
294
|
+
selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField || '']?.dateRange);
|
|
222
295
|
setSelectedPivotType('created');
|
|
223
296
|
setIsOpen(false);
|
|
224
297
|
setPopUpTitle('Add pivot');
|
|
@@ -228,6 +301,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
228
301
|
setPivotRowField(pivot.rowField);
|
|
229
302
|
setPivotColumnField(pivot.columnField);
|
|
230
303
|
setPivotValueField(pivot.valueField);
|
|
304
|
+
setPivotValueField2(pivot.valueField2);
|
|
231
305
|
setPivotAggregation(pivot.aggregationType);
|
|
232
306
|
setShowUpdatePivot(true);
|
|
233
307
|
if (pivotType === 'recommended' &&
|
|
@@ -241,9 +315,24 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
241
315
|
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
242
316
|
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
243
317
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
318
|
+
try {
|
|
319
|
+
const { rows, columns } = await generatePivotTable({
|
|
320
|
+
pivot,
|
|
321
|
+
dateBucket,
|
|
322
|
+
report,
|
|
323
|
+
client,
|
|
324
|
+
uniqueValues,
|
|
325
|
+
});
|
|
326
|
+
setSamplePivotTable({ pivot, rows, columns });
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
catch (e) {
|
|
330
|
+
if (e instanceof Error) {
|
|
331
|
+
setPivotError(e.message);
|
|
332
|
+
setSamplePivotTable(null);
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
247
336
|
}
|
|
248
337
|
setSamplePivotTable(null);
|
|
249
338
|
};
|
|
@@ -254,26 +343,33 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
254
343
|
if (!client) {
|
|
255
344
|
return;
|
|
256
345
|
}
|
|
257
|
-
if
|
|
346
|
+
// don't fetch unique values separately if they are already being fetched
|
|
347
|
+
if (uniqueValuesIsLoading) {
|
|
348
|
+
setIsLoading(true);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
if (isFetchingPivots ||
|
|
258
352
|
Object.keys(columnsToShow).length === 0 ||
|
|
259
353
|
!pivotRecommendationsEnabled) {
|
|
260
354
|
return;
|
|
261
355
|
}
|
|
356
|
+
setIsFetchingPivots(true);
|
|
357
|
+
setPivotError('');
|
|
262
358
|
setIsLoading(true);
|
|
263
|
-
let tempUniqueValues = uniqueValues;
|
|
359
|
+
let tempUniqueValues = uniqueValues || initialUniqueValues;
|
|
264
360
|
let possibleColumns = {
|
|
265
361
|
rowFields: allowedRowFields,
|
|
266
362
|
columnFields: allowedColumnFields,
|
|
267
363
|
valueFields: allowedValueFields,
|
|
268
364
|
};
|
|
269
|
-
if (
|
|
270
|
-
|
|
271
|
-
allowedValueFields.length === 0) ||
|
|
272
|
-
!uniqueValues) {
|
|
273
|
-
const distinctValues = await getDistinctValues();
|
|
365
|
+
if (!uniqueValues && !initialUniqueValues) {
|
|
366
|
+
const distinctValues = await getDistinctValues(true);
|
|
274
367
|
possibleColumns = distinctValues.possibleColumns;
|
|
275
368
|
tempUniqueValues = distinctValues.uniqueValues;
|
|
276
369
|
}
|
|
370
|
+
else {
|
|
371
|
+
possibleColumns = setAllowedFields(uniqueValues || initialUniqueValues);
|
|
372
|
+
}
|
|
277
373
|
const cloudBody = {
|
|
278
374
|
pivotCountRequest,
|
|
279
375
|
allowedRowFields: possibleColumns?.rowFields || [],
|
|
@@ -292,8 +388,12 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
292
388
|
try {
|
|
293
389
|
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, 'pivotai', cloudBody);
|
|
294
390
|
const recommendedPivots = resp?.data?.pivotTables.map((pivot) => (0, pivotProcessing_1.cleanPivot)(pivot, possibleColumns)) || [];
|
|
295
|
-
const cleanedPivots = recommendedPivots
|
|
296
|
-
|
|
391
|
+
const cleanedPivots = recommendedPivots
|
|
392
|
+
.filter((pivot) => (0, pivotProcessing_1.isValidPivot)(pivot) &&
|
|
393
|
+
(!pivot.columnField || pivot.columnField !== pivot.rowField)) // only recommend valid pivots
|
|
394
|
+
.map((pivot) => {
|
|
395
|
+
if (pivot.columnField &&
|
|
396
|
+
columnsToShow[pivot.columnField] === 'date') {
|
|
297
397
|
const columnField = pivot.columnField;
|
|
298
398
|
pivot.columnField = pivot.rowField;
|
|
299
399
|
pivot.rowField = columnField;
|
|
@@ -307,17 +407,42 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
307
407
|
title: generatePivotTitle(pivot),
|
|
308
408
|
};
|
|
309
409
|
});
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
410
|
+
const deduplicatedPivots = cleanedPivots
|
|
411
|
+
.filter((pivot, index, self) => index ===
|
|
412
|
+
self.findIndex((p) => p.rowField === pivot.rowField &&
|
|
413
|
+
p.columnField === pivot.columnField &&
|
|
414
|
+
p.valueField === pivot.valueField &&
|
|
415
|
+
p.aggregationType === pivot.aggregationType))
|
|
416
|
+
.filter((pivot) => !createdPivots.some((created) => created.rowField === pivot.rowField &&
|
|
417
|
+
created.columnField === pivot.columnField &&
|
|
418
|
+
created.valueField === pivot.valueField &&
|
|
419
|
+
created.aggregationType === pivot.aggregationType));
|
|
420
|
+
setRecommendedPivots(deduplicatedPivots);
|
|
421
|
+
sethasNoRecommendedPivots(deduplicatedPivots.length === 0);
|
|
422
|
+
const trimmedUniqueValues = trimUniqueValues(tempUniqueValues, 6);
|
|
423
|
+
const pts = await Promise.all(deduplicatedPivots.map(async (p) => {
|
|
424
|
+
try {
|
|
425
|
+
const { rows, columns } = await generatePivotTable({
|
|
426
|
+
pivot: p,
|
|
427
|
+
rowLimit: 6,
|
|
428
|
+
report,
|
|
429
|
+
client,
|
|
430
|
+
uniqueValues: trimmedUniqueValues,
|
|
431
|
+
});
|
|
432
|
+
return { pivot: p, rows, columns };
|
|
433
|
+
}
|
|
434
|
+
catch (e) {
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
314
437
|
}));
|
|
315
|
-
setRecommendedPivotTables(pts);
|
|
438
|
+
setRecommendedPivotTables(pts.filter((pt) => pt !== undefined));
|
|
316
439
|
setSelectedPivotIndex(-1);
|
|
317
440
|
}
|
|
318
441
|
catch (e) {
|
|
442
|
+
setPivotError('Failed to fetch pivot recommendations');
|
|
319
443
|
console.error('Failed parsing pivotai response', e);
|
|
320
444
|
}
|
|
445
|
+
setIsFetchingPivots(false);
|
|
321
446
|
setIsLoading(false);
|
|
322
447
|
}, [
|
|
323
448
|
selectedTable,
|
|
@@ -328,16 +453,17 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
328
453
|
allowedColumnFields,
|
|
329
454
|
allowedRowFields,
|
|
330
455
|
allowedValueFields,
|
|
456
|
+
uniqueValuesIsLoading,
|
|
331
457
|
columns,
|
|
332
458
|
]);
|
|
333
459
|
const pivotFieldChange = async (field, value) => {
|
|
334
460
|
setErrors([]);
|
|
335
|
-
setIsLoading(true);
|
|
336
461
|
const pivot = {
|
|
337
462
|
rowField: pivotRowField,
|
|
338
463
|
rowFieldType: columnsToShow[pivotRowField],
|
|
339
464
|
columnField: pivotColumnField,
|
|
340
465
|
valueField: pivotValueField,
|
|
466
|
+
valueField2: pivotValueField2,
|
|
341
467
|
aggregationType: pivotAggregation,
|
|
342
468
|
};
|
|
343
469
|
// @ts-ignore
|
|
@@ -350,52 +476,59 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
350
476
|
pivot.columnFieldType = columnsToShow[value];
|
|
351
477
|
}
|
|
352
478
|
if (!(0, pivotProcessing_1.isValidPivot)(pivot)) {
|
|
353
|
-
setIsLoading(false);
|
|
354
479
|
setSamplePivotTable(null);
|
|
355
480
|
return;
|
|
356
481
|
}
|
|
482
|
+
setPreviewLoading(true);
|
|
357
483
|
let dateBucket = undefined;
|
|
358
484
|
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
359
485
|
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
360
486
|
}
|
|
361
487
|
setTimeout(async () => {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
488
|
+
try {
|
|
489
|
+
console.log('HELP: ', pivot);
|
|
490
|
+
const { rows, columns } = await generatePivotTable({
|
|
491
|
+
pivot,
|
|
492
|
+
rowLimit: 6, // limit previews
|
|
493
|
+
dateBucket,
|
|
494
|
+
report,
|
|
495
|
+
client,
|
|
496
|
+
uniqueValues,
|
|
497
|
+
});
|
|
498
|
+
setSamplePivotTable({ pivot, rows, columns });
|
|
499
|
+
}
|
|
500
|
+
catch (e) {
|
|
501
|
+
if (e instanceof Error) {
|
|
502
|
+
setPivotError(e.message);
|
|
503
|
+
setSamplePivotTable(null);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
finally {
|
|
508
|
+
setPreviewLoading(false);
|
|
509
|
+
}
|
|
365
510
|
}, 500);
|
|
366
511
|
};
|
|
367
512
|
const [recommendedPivotTables, setRecommendedPivotTables] = (0, react_1.useState)([]);
|
|
368
|
-
// useEffect(() => {
|
|
369
|
-
// const fetchPivotTables = async () => {
|
|
370
|
-
// const pts = await Promise.all(
|
|
371
|
-
// recommendedPivots.map(async (p: Pivot) => {
|
|
372
|
-
// const { rows, columns } = await generatePivotTable(
|
|
373
|
-
// p,
|
|
374
|
-
// data,
|
|
375
|
-
// dateRange,
|
|
376
|
-
// false,
|
|
377
|
-
// 6,
|
|
378
|
-
// undefined,
|
|
379
|
-
// undefined,
|
|
380
|
-
// report,
|
|
381
|
-
// client,
|
|
382
|
-
// uniqueValues,
|
|
383
|
-
// );
|
|
384
|
-
// return { pivot: p, rows, columns };
|
|
385
|
-
// }),
|
|
386
|
-
// );
|
|
387
|
-
// setRecommendedPivotTables(pts);
|
|
388
|
-
// };
|
|
389
|
-
// fetchPivotTables();
|
|
390
|
-
// }, [recommendedPivots, dateRange]);
|
|
391
513
|
const [createdPivotTables, setCreatedPivotTables] = (0, react_1.useState)([]);
|
|
392
514
|
(0, react_1.useEffect)(() => {
|
|
393
515
|
const fetchPivotTables = async () => {
|
|
394
516
|
const pts = await Promise.all(createdPivots.map(async (p) => {
|
|
395
|
-
|
|
396
|
-
|
|
517
|
+
try {
|
|
518
|
+
const { rows, columns } = await generatePivotTable({
|
|
519
|
+
pivot: p,
|
|
520
|
+
rowLimit: 6,
|
|
521
|
+
report,
|
|
522
|
+
client,
|
|
523
|
+
uniqueValues,
|
|
524
|
+
});
|
|
525
|
+
return { pivot: p, rows, columns };
|
|
526
|
+
}
|
|
527
|
+
catch (e) {
|
|
528
|
+
return undefined;
|
|
529
|
+
}
|
|
397
530
|
}));
|
|
398
|
-
setCreatedPivotTables(pts);
|
|
531
|
+
setCreatedPivotTables(pts.filter((pt) => pt !== undefined));
|
|
399
532
|
};
|
|
400
533
|
fetchPivotTables();
|
|
401
534
|
}, [createdPivots, dateRange]);
|
|
@@ -415,22 +548,24 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
415
548
|
position: 'absolute',
|
|
416
549
|
top: -2,
|
|
417
550
|
right: -2,
|
|
418
|
-
} })) }), showTrigger && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: disabled, onClick: () => {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
551
|
+
} })) }), showTrigger && ((0, jsx_runtime_1.jsx)("div", { ref: buttonRef, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: disabled, onClick: () => {
|
|
552
|
+
if (columns.length === 0) {
|
|
553
|
+
setIsOpen(false);
|
|
554
|
+
}
|
|
555
|
+
// table is not loaded yet, so pivot button is not clickable
|
|
556
|
+
if (Object.keys(columnsToShow).length === 0) {
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
if (!isOpen &&
|
|
560
|
+
pivotRecommendationsEnabled &&
|
|
561
|
+
!hasNoRecommendedPivots &&
|
|
562
|
+
(recommendedPivots.length === 0 ||
|
|
563
|
+
recommendedPivotTables.length === 0)) {
|
|
564
|
+
refreshPivots();
|
|
565
|
+
}
|
|
566
|
+
setIsOpen(!isOpen);
|
|
567
|
+
setShowUpdatePivot(false);
|
|
568
|
+
}, label: triggerButtonText }) })), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
434
569
|
position: 'relative',
|
|
435
570
|
...(isOpen && showTrigger && { top: 12 }),
|
|
436
571
|
}, children: (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: isOpen, setIsOpen: (isOpen) => {
|
|
@@ -439,7 +574,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
439
574
|
setPopUpTitle('Add pivot');
|
|
440
575
|
}
|
|
441
576
|
setIsOpen(isOpen);
|
|
442
|
-
}, popoverTitle: showUpdatePivot || !pivotRecommendationsEnabled
|
|
577
|
+
}, ignoredRefs: [buttonRef], popoverTitle: showUpdatePivot || !pivotRecommendationsEnabled
|
|
443
578
|
? popUpTitle
|
|
444
579
|
: 'Recommended pivots', popoverChildren: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
445
580
|
paddingTop: showUpdatePivot || !pivotRecommendationsEnabled ? 0 : 20,
|
|
@@ -449,13 +584,14 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
449
584
|
display: 'flex',
|
|
450
585
|
flexDirection: 'column',
|
|
451
586
|
gap: 20,
|
|
452
|
-
}, children: [
|
|
587
|
+
}, children: [previewLoading && (0, jsx_runtime_1.jsx)(LoadingComponent, {}), samplePivotTable && !previewLoading && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
453
588
|
width: pivotCardWidth,
|
|
454
589
|
minHeight: 160,
|
|
455
590
|
}, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, CardComponent: CardComponent, onSelectPivot: () => { }, onClose: () => {
|
|
456
591
|
setPivotAggregation(null);
|
|
457
592
|
setPivotRowField(null);
|
|
458
593
|
setPivotValueField(null);
|
|
594
|
+
setPivotValueField2(null);
|
|
459
595
|
setPivotColumnField(null);
|
|
460
596
|
setSamplePivotTable(null);
|
|
461
597
|
} }) })), (0, jsx_runtime_1.jsxs)(PivotColumnContainer, { children: [(0, jsx_runtime_1.jsxs)(PivotRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: rowFieldRef, children: (0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "Row field", value: pivotRowField, onChange: (e) => {
|
|
@@ -463,7 +599,9 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
463
599
|
setPivotRowField(e.target.value === ''
|
|
464
600
|
? undefined
|
|
465
601
|
: e.target.value);
|
|
466
|
-
}, options: allowedRowFields
|
|
602
|
+
}, options: allowedRowFields
|
|
603
|
+
.filter((field) => field !== pivotColumnField)
|
|
604
|
+
.map((field) => {
|
|
467
605
|
return {
|
|
468
606
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field),
|
|
469
607
|
value: field,
|
|
@@ -473,22 +611,14 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
473
611
|
setPivotColumnField(e.target.value === ''
|
|
474
612
|
? undefined
|
|
475
613
|
: e.target.value);
|
|
476
|
-
}, options: allowedColumnFields
|
|
614
|
+
}, options: allowedColumnFields
|
|
615
|
+
.filter((field) => field !== pivotRowField)
|
|
616
|
+
.map((field) => {
|
|
477
617
|
return {
|
|
478
618
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field),
|
|
479
619
|
value: field,
|
|
480
620
|
};
|
|
481
|
-
}), isLoading: uniqueValuesIsLoading, width: 200 }) })] }), (0, jsx_runtime_1.jsxs)(PivotRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "
|
|
482
|
-
pivotFieldChange('valueField', e.target.value);
|
|
483
|
-
setPivotValueField(e.target.value === ''
|
|
484
|
-
? undefined
|
|
485
|
-
: e.target.value);
|
|
486
|
-
}, options: allowedValueFields.map((field) => {
|
|
487
|
-
return {
|
|
488
|
-
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field),
|
|
489
|
-
value: field,
|
|
490
|
-
};
|
|
491
|
-
}), isLoading: uniqueValuesIsLoading, width: 200 }), (0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "Aggregation type", value: pivotAggregation, onChange: (e) => {
|
|
621
|
+
}), isLoading: uniqueValuesIsLoading, width: 200 }) })] }), (0, jsx_runtime_1.jsxs)(PivotRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "Aggregation type", value: pivotAggregation, onChange: (e) => {
|
|
492
622
|
if (e.target.value !== 'count' &&
|
|
493
623
|
pivotValueField &&
|
|
494
624
|
!ChartBuilder_1.numberFormatOptions.includes(columns.find((col) => col.field === pivotValueField).format)) {
|
|
@@ -499,10 +629,49 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
499
629
|
? undefined
|
|
500
630
|
: e.target.value);
|
|
501
631
|
}, options: [
|
|
502
|
-
...[
|
|
632
|
+
...[
|
|
633
|
+
'sum',
|
|
634
|
+
'average',
|
|
635
|
+
'count',
|
|
636
|
+
'max',
|
|
637
|
+
'min',
|
|
638
|
+
'percentage',
|
|
639
|
+
].map((option) => {
|
|
503
640
|
return { label: option, value: option };
|
|
504
641
|
}),
|
|
505
|
-
], width: 200 })
|
|
642
|
+
], width: 200 }), (0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "Value field", value: pivotValueField, onChange: (e) => {
|
|
643
|
+
pivotFieldChange('valueField', e.target.value);
|
|
644
|
+
setPivotValueField(e.target.value === ''
|
|
645
|
+
? undefined
|
|
646
|
+
: e.target.value);
|
|
647
|
+
}, options: allowedValueFields
|
|
648
|
+
.map((field) => {
|
|
649
|
+
return {
|
|
650
|
+
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field),
|
|
651
|
+
value: field,
|
|
652
|
+
};
|
|
653
|
+
})
|
|
654
|
+
.filter((option) => {
|
|
655
|
+
return (pivotAggregation !== 'percentage' ||
|
|
656
|
+
pivotColumnField ||
|
|
657
|
+
option.value !== pivotValueField2);
|
|
658
|
+
}), isLoading: uniqueValuesIsLoading, width: 200 }), pivotAggregation === 'percentage' ? ((0, jsx_runtime_1.jsx)(SelectComponent, { id: "pivot-row-field", label: "Total field", value: pivotValueField2, onChange: (e) => {
|
|
659
|
+
pivotFieldChange('valueField2', e.target.value);
|
|
660
|
+
setPivotValueField2(e.target.value === ''
|
|
661
|
+
? undefined
|
|
662
|
+
: e.target.value);
|
|
663
|
+
}, options: allowedValueFields
|
|
664
|
+
.map((field) => {
|
|
665
|
+
return {
|
|
666
|
+
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field),
|
|
667
|
+
value: field,
|
|
668
|
+
};
|
|
669
|
+
})
|
|
670
|
+
.filter((option) => {
|
|
671
|
+
return (pivotAggregation !== 'percentage' ||
|
|
672
|
+
pivotColumnField ||
|
|
673
|
+
option.value !== pivotValueField);
|
|
674
|
+
}), isLoading: uniqueValuesIsLoading, width: 200 })) : null] })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(ButtonComponent, { id: "custom-button", onClick: () => {
|
|
506
675
|
const errors = [];
|
|
507
676
|
if (!pivotValueField &&
|
|
508
677
|
pivotAggregation !== 'count') {
|
|
@@ -525,6 +694,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
525
694
|
columnField: pivotColumnField,
|
|
526
695
|
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
527
696
|
valueField: pivotValueField || '',
|
|
697
|
+
valueField2: pivotValueField2 || '',
|
|
528
698
|
aggregationType: pivotAggregation || '',
|
|
529
699
|
};
|
|
530
700
|
if ((0, pivotProcessing_1.isValidPivot)(pivot)) {
|
|
@@ -571,7 +741,27 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
571
741
|
display: 'flex',
|
|
572
742
|
flexDirection: 'row',
|
|
573
743
|
gap: 8,
|
|
574
|
-
}, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: "Regenerate", onClick: refreshPivots, icon: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", style: { width: 16, height: 16 }, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z", clipRule: "evenodd" }) }) }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: "Create pivot +", onClick: () => onEditPivot({}, null) })] }), isLoading ? ((0, jsx_runtime_1.jsx)(LoadingComponent, {})) : ((0, jsx_runtime_1.jsx)("div", {
|
|
744
|
+
}, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: "Regenerate", onClick: refreshPivots, icon: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", style: { width: 16, height: 16 }, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5ZM16.5 15a.75.75 0 0 1 .712.513l.394 1.183c.15.447.5.799.948.948l1.183.395a.75.75 0 0 1 0 1.422l-1.183.395c-.447.15-.799.5-.948.948l-.395 1.183a.75.75 0 0 1-1.422 0l-.395-1.183a1.5 1.5 0 0 0-.948-.948l-1.183-.395a.75.75 0 0 1 0-1.422l1.183-.395c.447-.15.799-.5.948-.948l.395-1.183A.75.75 0 0 1 16.5 15Z", clipRule: "evenodd" }) }) }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: "Create pivot +", onClick: () => onEditPivot({}, null) })] }), isLoading || uniqueValuesIsLoading ? ((0, jsx_runtime_1.jsx)(LoadingComponent, {})) : pivotError ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
745
|
+
width: '100%',
|
|
746
|
+
height: '140px',
|
|
747
|
+
display: 'flex',
|
|
748
|
+
justifyContent: 'center',
|
|
749
|
+
alignItems: 'center',
|
|
750
|
+
}, children: pivotError })) : ((0, jsx_runtime_1.jsx)("div", { children: !hasNoRecommendedPivots ||
|
|
751
|
+
createdPivotTables.length > 0 ? ((0, jsx_runtime_1.jsx)(PivotList_1.PivotList, { recommendedPivotTables: recommendedPivotTables.filter((pivotTable) => !createdPivots.some((created) => created.rowField ===
|
|
752
|
+
pivotTable.pivot.rowField &&
|
|
753
|
+
created.columnField ===
|
|
754
|
+
pivotTable.pivot.columnField &&
|
|
755
|
+
created.valueField ===
|
|
756
|
+
pivotTable.pivot.valueField &&
|
|
757
|
+
created.aggregationType ===
|
|
758
|
+
pivotTable.pivot.aggregationType)), createdPivotTables: createdPivotTables, theme: theme, onSelectRecommendedPivot: onSelectRecommendedPivot, onSelectCreatedPivot: onSelectCreatedPivot, selectedPivotIndex: selectedPivotIndex, selectedPivotType: selectedPivotType, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, onEditRecommendedPivot: onEditRecommendedPivot, onEditCreatedPivot: onEditPivot, showPivotEditButton: showPivotEditButton, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent })) : ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
759
|
+
width: '100%',
|
|
760
|
+
height: '140px',
|
|
761
|
+
display: 'flex',
|
|
762
|
+
justifyContent: 'center',
|
|
763
|
+
alignItems: 'center',
|
|
764
|
+
}, children: "No valid pivots returned" })) }))] })) })) }) }) })] }) }));
|
|
575
765
|
};
|
|
576
766
|
exports.PivotModal = PivotModal;
|
|
577
767
|
function generatePivotTableYAxis(pivot, cols, yAxisField) {
|
|
@@ -594,7 +784,6 @@ function generatePivotTableYAxis(pivot, cols, yAxisField) {
|
|
|
594
784
|
},
|
|
595
785
|
];
|
|
596
786
|
}
|
|
597
|
-
exports.generatePivotTableYAxis = generatePivotTableYAxis;
|
|
598
787
|
function generatePivotTitle(pivot) {
|
|
599
788
|
if (pivot.rowField && !pivot.valueField) {
|
|
600
789
|
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(`${pivot.aggregationType} of ${pivot.rowField}
|
|
@@ -606,15 +795,22 @@ function generatePivotTitle(pivot) {
|
|
|
606
795
|
}
|
|
607
796
|
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(`${pivot.aggregationType} of ${pivot.valueField} by ${pivot.rowField}${pivot.columnField ? ` and ${pivot.columnField}` : ''}`);
|
|
608
797
|
}
|
|
609
|
-
exports.generatePivotTitle = generatePivotTitle;
|
|
610
798
|
function castValueToDate(value) {
|
|
611
799
|
if (!value) {
|
|
612
800
|
return null;
|
|
613
801
|
}
|
|
802
|
+
let dateStr = value;
|
|
614
803
|
if (typeof value === 'object' && value.value) {
|
|
615
|
-
|
|
804
|
+
dateStr = value.value;
|
|
805
|
+
}
|
|
806
|
+
if (dateStr instanceof Date) {
|
|
807
|
+
return dateStr;
|
|
808
|
+
}
|
|
809
|
+
const parsed = (0, date_fns_1.parseISO)(dateStr);
|
|
810
|
+
if ((0, date_fns_1.isValid)(parsed)) {
|
|
811
|
+
return parsed;
|
|
616
812
|
}
|
|
617
|
-
return new Date(
|
|
813
|
+
return new Date(dateStr);
|
|
618
814
|
}
|
|
619
815
|
function getLatestDate(a, b) {
|
|
620
816
|
return a > b ? a : b;
|
|
@@ -628,11 +824,11 @@ function getDateRange(dateRange, column, data) {
|
|
|
628
824
|
const maxDate = new Date(currentTime + ONE_CENTURY_IN_MILLISECONDS);
|
|
629
825
|
const minDate = new Date(0);
|
|
630
826
|
if (!dateRange) {
|
|
631
|
-
if (data.length == 0
|
|
827
|
+
if (data.length == 0) {
|
|
632
828
|
return { start: new Date(), end: new Date() };
|
|
633
829
|
}
|
|
634
|
-
const firstDate = castValueToDate(data[0][column]);
|
|
635
830
|
if (data.length == 1) {
|
|
831
|
+
const firstDate = castValueToDate(data[0][column]);
|
|
636
832
|
return {
|
|
637
833
|
start: firstDate || new Date(),
|
|
638
834
|
end: firstDate || new Date(),
|
|
@@ -641,12 +837,19 @@ function getDateRange(dateRange, column, data) {
|
|
|
641
837
|
let earliestDate = undefined;
|
|
642
838
|
let latestDate = undefined;
|
|
643
839
|
for (let i = 0; i < data.length; i++) {
|
|
644
|
-
if (earliestDate && latestDate) {
|
|
645
|
-
break;
|
|
646
|
-
}
|
|
647
840
|
const value = castValueToDate(data[i][column]);
|
|
648
|
-
earliestDate =
|
|
649
|
-
|
|
841
|
+
earliestDate =
|
|
842
|
+
value && value > minDate
|
|
843
|
+
? earliestDate
|
|
844
|
+
? getEarliestDate(earliestDate, value)
|
|
845
|
+
: value
|
|
846
|
+
: earliestDate;
|
|
847
|
+
latestDate =
|
|
848
|
+
value && value < maxDate
|
|
849
|
+
? latestDate
|
|
850
|
+
? getLatestDate(latestDate, value)
|
|
851
|
+
: value
|
|
852
|
+
: latestDate;
|
|
650
853
|
}
|
|
651
854
|
if (!earliestDate || !latestDate) {
|
|
652
855
|
return {
|
|
@@ -678,7 +881,6 @@ function getDateRange(dateRange, column, data) {
|
|
|
678
881
|
return dateRange;
|
|
679
882
|
}
|
|
680
883
|
}
|
|
681
|
-
exports.getDateRange = getDateRange;
|
|
682
884
|
function determineIntervalThroughOverride(dateBucket, dateRange) {
|
|
683
885
|
switch (dateBucket) {
|
|
684
886
|
case 'day':
|
|
@@ -693,6 +895,19 @@ function determineIntervalThroughOverride(dateBucket, dateRange) {
|
|
|
693
895
|
return (0, date_fns_1.eachMonthOfInterval)(dateRange);
|
|
694
896
|
}
|
|
695
897
|
}
|
|
898
|
+
// function to that takes in a uniqueValues obj and trims the number of unique values per column
|
|
899
|
+
function trimUniqueValues(obj, limit) {
|
|
900
|
+
const trimmedObj = {};
|
|
901
|
+
Object.keys(obj).forEach((key) => {
|
|
902
|
+
const values = obj[key] ? Object.keys(obj[key]) : [];
|
|
903
|
+
const limitedValues = values.slice(0, limit);
|
|
904
|
+
trimmedObj[key] = limitedValues.reduce((acc, curr) => {
|
|
905
|
+
acc[curr] = obj[key] ? (obj[key][curr] ?? false) : false;
|
|
906
|
+
return acc;
|
|
907
|
+
}, {});
|
|
908
|
+
});
|
|
909
|
+
return trimmedObj;
|
|
910
|
+
}
|
|
696
911
|
function getDateBuckets(dateRange, column, data, dateBucket) {
|
|
697
912
|
if (!dateRange) {
|
|
698
913
|
if (dateBucket) {
|
|
@@ -706,7 +921,6 @@ function getDateBuckets(dateRange, column, data, dateBucket) {
|
|
|
706
921
|
const dayDifference = (0, date_fns_1.differenceInDays)(dateRange.end, dateRange.start);
|
|
707
922
|
return dayDifferenceToInterval(dayDifference, dateRange);
|
|
708
923
|
}
|
|
709
|
-
exports.getDateBuckets = getDateBuckets;
|
|
710
924
|
function getCompDateBuckets(dateRange, compDateRange, column, data) {
|
|
711
925
|
if (!dateRange) {
|
|
712
926
|
return (0, date_fns_1.eachMonthOfInterval)(getDateRange(undefined, column, data));
|
|
@@ -776,7 +990,6 @@ function getDateString(value, dateRange, dateBucket) {
|
|
|
776
990
|
fields: [{ field: 'date', format }],
|
|
777
991
|
});
|
|
778
992
|
}
|
|
779
|
-
exports.getDateString = getDateString;
|
|
780
993
|
function isDateField(fieldType) {
|
|
781
994
|
return (fieldType === 'date' ||
|
|
782
995
|
fieldType === 'datetime' ||
|
|
@@ -788,7 +1001,6 @@ function isDateField(fieldType) {
|
|
|
788
1001
|
fieldType === 'MMM_dd_hh:mm_ap_pm' ||
|
|
789
1002
|
fieldType === 'hh_ap_pm');
|
|
790
1003
|
}
|
|
791
|
-
exports.isDateField = isDateField;
|
|
792
1004
|
const isNullUndefinedOrInvalidDate = (date) => date === null || date === undefined || isNaN(date.getTime());
|
|
793
1005
|
// If the value is an object with key value (ie. a BigQuery date) we will
|
|
794
1006
|
// return the inner value, otherwise return passed param as-is.
|
|
@@ -813,27 +1025,25 @@ const fixBigQueryData = (data = []) => {
|
|
|
813
1025
|
}
|
|
814
1026
|
return newData;
|
|
815
1027
|
};
|
|
816
|
-
async function generatePivotTable(pivot,
|
|
1028
|
+
async function generatePivotTable({ pivot, rowLimit = -1, dateBucket, report, client, uniqueValues, }) {
|
|
817
1029
|
try {
|
|
818
|
-
if (report && report.rowCount
|
|
1030
|
+
if (report && report.rowCount != null) {
|
|
1031
|
+
// rowCount can be 0 (could mean still loading in), loose equality check for undefined as well
|
|
819
1032
|
const dateFilter = report
|
|
820
1033
|
? report.filtersApplied.find((f) => f.filterType === 'date_range')
|
|
821
1034
|
: undefined;
|
|
822
1035
|
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, pivot.columnField && uniqueValues
|
|
823
1036
|
? Object.keys(uniqueValues[pivot.columnField])
|
|
824
|
-
: undefined);
|
|
825
|
-
|
|
826
|
-
return pivotTable;
|
|
827
|
-
}
|
|
1037
|
+
: undefined, rowLimit === -1 ? undefined : rowLimit);
|
|
1038
|
+
return pivotTable;
|
|
828
1039
|
}
|
|
829
1040
|
}
|
|
830
1041
|
catch (e) {
|
|
831
|
-
|
|
1042
|
+
throw Error(`Failed to generate pivot table with SQL: ${e}`);
|
|
832
1043
|
}
|
|
833
|
-
|
|
1044
|
+
throw Error('Failed to generate pivot table: invalid report');
|
|
834
1045
|
}
|
|
835
|
-
|
|
836
|
-
function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
|
|
1046
|
+
function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket, uniqueValues) {
|
|
837
1047
|
// If there is no rowField, aggregate on the valueField
|
|
838
1048
|
if (!pivot.rowField) {
|
|
839
1049
|
return valueFieldAggregation(data, pivot.valueField, pivot.aggregationType, isComparison);
|
|
@@ -851,9 +1061,15 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
851
1061
|
compRange = undefined;
|
|
852
1062
|
}
|
|
853
1063
|
const pivotRows = [];
|
|
1064
|
+
const uniqueValuesMap = (0, filterProcessing_1.uniqueValuesToStringMap)(uniqueValues || {});
|
|
854
1065
|
const uniqueRows = (isDateField(pivot.rowFieldType || '')
|
|
855
1066
|
? getDateBuckets(dateRange, pivot.rowField, data, dateBucket)
|
|
856
|
-
: [
|
|
1067
|
+
: uniqueValuesMap[pivot.rowField] &&
|
|
1068
|
+
uniqueValuesMap[pivot.rowField]?.[0] !== 'EXCEEDS_LIMIT'
|
|
1069
|
+
? uniqueValuesMap[pivot.rowField]
|
|
1070
|
+
: [...new Set(data.map((item) => item[pivot.rowField || '']))])
|
|
1071
|
+
.filter((col) => col !== null && col !== '')
|
|
1072
|
+
.map((col) => isDateField(pivot.rowFieldType || '') ? castValueToDate(col) : col);
|
|
857
1073
|
const rowDateRange = getDateRange(dateRange, pivot.rowField, data);
|
|
858
1074
|
const compRowDateRange = getDateRange(compRange ?? dateRange, pivot.rowField, data);
|
|
859
1075
|
// If columnField is not provided, we will not be using uniqueColumns
|
|
@@ -861,8 +1077,10 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
861
1077
|
const uniqueColumns = (pivot.columnField
|
|
862
1078
|
? isDateField(pivot.columnFieldType || '')
|
|
863
1079
|
? getDateBuckets(dateRange, pivot.columnField, data, dateBucket)
|
|
864
|
-
:
|
|
865
|
-
|
|
1080
|
+
: uniqueValues && pivot.columnField
|
|
1081
|
+
? uniqueValuesMap[pivot.columnField]
|
|
1082
|
+
: [...new Set(data.map((item) => item[pivot.columnField || '']))]
|
|
1083
|
+
: [pivot.valueField]).filter((col) => col !== null && col !== '' && col !== undefined);
|
|
866
1084
|
// Map from new dates to their corresponding prior dates
|
|
867
1085
|
const COL_DATE_MAP = {};
|
|
868
1086
|
const ROW_DATE_MAP = {};
|
|
@@ -895,7 +1113,9 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
895
1113
|
}
|
|
896
1114
|
compUniqueRows = (isDateField(pivot.rowFieldType || '')
|
|
897
1115
|
? getCompDateBuckets(dateRange, compRange ?? dateRange, pivot.rowField, data)
|
|
898
|
-
:
|
|
1116
|
+
: (uniqueValuesMap[pivot.rowField] ?? [
|
|
1117
|
+
...new Set(data.map((item) => item[pivot.rowField || ''])),
|
|
1118
|
+
])).filter((col) => col !== null && col !== '');
|
|
899
1119
|
}
|
|
900
1120
|
// Special corner case for count with only rowField pivot
|
|
901
1121
|
if (!pivot.valueField &&
|
|
@@ -907,7 +1127,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
907
1127
|
}
|
|
908
1128
|
}
|
|
909
1129
|
const rowsToGenerate = rowLimit !== -1 && rowLimit <= uniqueRows.length
|
|
910
|
-
? uniqueRows.slice(0, rowLimit
|
|
1130
|
+
? uniqueRows.slice(0, rowLimit)
|
|
911
1131
|
: uniqueRows;
|
|
912
1132
|
rowsToGenerate.forEach((rowValue, rowIndex) => {
|
|
913
1133
|
const row = {
|
|
@@ -943,22 +1163,22 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
943
1163
|
if (isDateField(pivot.columnFieldType || '') &&
|
|
944
1164
|
isDateField(pivot.rowFieldType || '')) {
|
|
945
1165
|
filteredData = data.filter((item) => {
|
|
946
|
-
return ((0, date_fns_1.isWithinInterval)(
|
|
1166
|
+
return ((0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.rowField || '']) ?? 0, {
|
|
947
1167
|
start: rowValue,
|
|
948
1168
|
end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
|
|
949
1169
|
}) &&
|
|
950
|
-
(0, date_fns_1.isWithinInterval)(
|
|
1170
|
+
(0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.columnField || '']) ?? 0, {
|
|
951
1171
|
start: colValue,
|
|
952
1172
|
end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
|
|
953
1173
|
}));
|
|
954
1174
|
});
|
|
955
1175
|
if (isComparison) {
|
|
956
1176
|
comparisonFilteredData = data.filter((item) => {
|
|
957
|
-
return ((0, date_fns_1.isWithinInterval)(
|
|
1177
|
+
return ((0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.rowField || '']) ?? 0, {
|
|
958
1178
|
start: rowValue,
|
|
959
1179
|
end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
|
|
960
1180
|
}) &&
|
|
961
|
-
(0, date_fns_1.isWithinInterval)(
|
|
1181
|
+
(0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.columnField || '']) ?? 0, {
|
|
962
1182
|
start: colValue,
|
|
963
1183
|
end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
|
|
964
1184
|
}));
|
|
@@ -969,7 +1189,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
969
1189
|
!isDateField(pivot.rowFieldType || '')) {
|
|
970
1190
|
filteredData = data.filter((item) => {
|
|
971
1191
|
return (item[pivot.rowField || ''] === rowValue &&
|
|
972
|
-
(0, date_fns_1.isWithinInterval)(
|
|
1192
|
+
(0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.columnField || '']) ?? 0, {
|
|
973
1193
|
start: colValue,
|
|
974
1194
|
end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
|
|
975
1195
|
}));
|
|
@@ -977,7 +1197,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
977
1197
|
if (isComparison) {
|
|
978
1198
|
comparisonFilteredData = data.filter((item) => {
|
|
979
1199
|
return (item[`comparison_${pivot.rowField}`] === rowValue &&
|
|
980
|
-
(0, date_fns_1.isWithinInterval)(
|
|
1200
|
+
(0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.columnField || '']) ?? 0, {
|
|
981
1201
|
start: colValue,
|
|
982
1202
|
end: (0, date_fns_1.subMilliseconds)(nextColumnValue, 1),
|
|
983
1203
|
}));
|
|
@@ -987,14 +1207,14 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
987
1207
|
else if (!isDateField(pivot.columnFieldType || '') &&
|
|
988
1208
|
isDateField(pivot.rowFieldType || '')) {
|
|
989
1209
|
filteredData = data.filter((item) => {
|
|
990
|
-
return ((0, date_fns_1.isWithinInterval)(
|
|
1210
|
+
return ((0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.rowField || '']) ?? 0, {
|
|
991
1211
|
start: rowValue,
|
|
992
1212
|
end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
|
|
993
1213
|
}) && item[pivot.columnField || ''] === colValue);
|
|
994
1214
|
});
|
|
995
1215
|
if (isComparison) {
|
|
996
1216
|
comparisonFilteredData = data.filter((item) => {
|
|
997
|
-
return ((0, date_fns_1.isWithinInterval)(
|
|
1217
|
+
return ((0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.rowField || '']) ?? 0, {
|
|
998
1218
|
start: rowValue,
|
|
999
1219
|
end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
|
|
1000
1220
|
}) &&
|
|
@@ -1023,7 +1243,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
1023
1243
|
filteredData = isDateField(pivot.rowFieldType || '')
|
|
1024
1244
|
? data.filter((item) => {
|
|
1025
1245
|
return (compRowValue &&
|
|
1026
|
-
(0, date_fns_1.isWithinInterval)(
|
|
1246
|
+
(0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[`comparison_${pivot.rowField}`]) ?? 0, {
|
|
1027
1247
|
start: compRowValue,
|
|
1028
1248
|
end: (0, date_fns_1.subMilliseconds)(compNextRowValue, 1),
|
|
1029
1249
|
}));
|
|
@@ -1033,7 +1253,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
1033
1253
|
else {
|
|
1034
1254
|
filteredData = isDateField(pivot.rowFieldType || '')
|
|
1035
1255
|
? data.filter((item) => {
|
|
1036
|
-
return (0, date_fns_1.isWithinInterval)(
|
|
1256
|
+
return (0, date_fns_1.isWithinInterval)((0, valueFormatter_1.getValidDate)(item[pivot.rowField || '']) ?? 0, {
|
|
1037
1257
|
start: rowValue,
|
|
1038
1258
|
end: (0, date_fns_1.subMilliseconds)(nextRowValue, 1),
|
|
1039
1259
|
});
|
|
@@ -1159,31 +1379,17 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
1159
1379
|
];
|
|
1160
1380
|
if (pivot.sort) {
|
|
1161
1381
|
pivotRows.sort((a, b) => {
|
|
1162
|
-
if (pivot.
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
return new Date(a[pivot.sortField]) - new Date(b[pivot.sortField]);
|
|
1166
|
-
}
|
|
1167
|
-
else if ((0, ast_1.isNumericColumnType)(pivot.sortFieldType)) {
|
|
1168
|
-
return a[pivot.sortField] - b[pivot.sortField];
|
|
1169
|
-
}
|
|
1170
|
-
return a[pivot.sortField].localeCompare(b[pivot.sortField]);
|
|
1382
|
+
if (pivot.sortField) {
|
|
1383
|
+
const result = (0, valueFormatter_1.compareValues)(a, b, pivot.sortField);
|
|
1384
|
+
return pivot.sortDirection === 'ASC' ? result : -result;
|
|
1171
1385
|
}
|
|
1172
1386
|
else {
|
|
1173
|
-
if (ChartBuilder_1.dateFormatOptions.includes(pivot.sortFieldType ?? '')) {
|
|
1174
|
-
// @ts-ignore
|
|
1175
|
-
return new Date(b[pivot.sortField]) - new Date(a[pivot.sortField]);
|
|
1176
|
-
}
|
|
1177
|
-
else if ((0, ast_1.isNumericColumnType)(pivot.sortFieldType)) {
|
|
1178
|
-
return b[pivot.sortField] - a[pivot.sortField];
|
|
1179
|
-
}
|
|
1180
1387
|
return b[pivot.sortField].localeCompare(a[pivot.sortField]);
|
|
1181
1388
|
}
|
|
1182
1389
|
});
|
|
1183
1390
|
}
|
|
1184
1391
|
return { rows: pivotRows, columns };
|
|
1185
1392
|
}
|
|
1186
|
-
exports.generatePivotTableInMemory = generatePivotTableInMemory;
|
|
1187
1393
|
function valueFieldAggregation(data, valueField, aggregationType, isComparison) {
|
|
1188
1394
|
if (!data || data.length === 0) {
|
|
1189
1395
|
return {
|