@quillsql/react 2.12.29 → 2.12.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts +29 -46
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +187 -468
- package/dist/cjs/ChartBuilder.d.ts +30 -61
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +190 -131
- package/dist/cjs/ChartEditor.d.ts +14 -2
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +70 -125
- package/dist/cjs/Context.d.ts +4 -1
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +52 -6
- package/dist/cjs/Dashboard.d.ts +74 -118
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +273 -47
- package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/Calendar.js +3 -6
- package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -29
- package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
- package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
- package/dist/cjs/ReportBuilder.d.ts +18 -6
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +477 -489
- package/dist/cjs/SQLEditor.d.ts +4 -11
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +76 -88
- package/dist/cjs/Table.d.ts +19 -3
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +130 -114
- package/dist/cjs/TableChart.d.ts.map +1 -1
- package/dist/cjs/TableChart.js +0 -1
- package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
- package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
- package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
- package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
- package/dist/cjs/components/Banner/index.d.ts +1 -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/BigModal/BigModal.d.ts.map +1 -1
- package/dist/cjs/components/BigModal/BigModal.js +6 -12
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +12 -1
- package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarList.js +21 -14
- package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
- package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartError.js +40 -5
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +27 -3
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +1 -3
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -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 +5 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +8 -12
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +137 -194
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -5
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +3 -32
- package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
- package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
- package/dist/cjs/components/Dropdown/index.d.ts +2 -2
- package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
- package/dist/cjs/components/Modal/Modal.js +2 -3
- package/dist/cjs/components/Modal/index.d.ts +1 -1
- package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelect.js +18 -3
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +18 -3
- package/dist/cjs/components/QuillSelect.js +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +6 -3
- package/dist/cjs/components/QuillTable.d.ts +1 -4
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +5 -11
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +30 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.js +579 -0
- package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ast.js +33 -6
- package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
- package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/constants.js +24 -3
- package/dist/cjs/components/ReportBuilder/convert.d.ts +18 -16
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +378 -494
- package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
- package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/operators.js +32 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +15 -5
- package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +15 -18
- package/dist/cjs/components/UiComponents.d.ts +36 -8
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +106 -12
- package/dist/cjs/components/selectUtils.d.ts +0 -1
- package/dist/cjs/components/selectUtils.d.ts.map +1 -1
- package/dist/cjs/components/selectUtils.js +1 -22
- package/dist/cjs/hooks/index.d.ts +4 -4
- package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
- package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
- package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +5 -1
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +3 -1
- package/dist/cjs/hooks/useOnClickOutside.js +4 -4
- package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnWindowResize.js +2 -2
- package/dist/cjs/hooks/useQuill.d.ts +10 -27
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +133 -85
- package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
- package/dist/cjs/hooks/useTheme.js +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +8 -21
- package/dist/cjs/lib/utils.js +2 -2
- package/dist/cjs/models/Columns.d.ts +2 -1
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +115 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +99 -0
- package/dist/cjs/models/Pagination.d.ts +10 -0
- package/dist/cjs/models/Pagination.d.ts.map +1 -0
- package/dist/cjs/models/Pagination.js +2 -0
- package/dist/cjs/models/Report.d.ts +103 -0
- package/dist/cjs/models/Report.d.ts.map +1 -0
- package/dist/cjs/models/Report.js +2 -0
- package/dist/cjs/utils/aggregate.js +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/astFilterProcessing.js +8091 -0
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +4 -3
- package/dist/cjs/utils/axisFormatter.js +0 -71
- package/dist/cjs/utils/color.js +9 -87
- package/dist/cjs/utils/columnProcessing.d.ts +2 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +54 -1
- package/dist/cjs/utils/csv.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.d.ts +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +6 -59
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +63 -1
- package/dist/cjs/utils/dataProcessing.d.ts +10 -0
- package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/dataProcessing.js +144 -0
- package/dist/cjs/utils/dates.d.ts +2 -1
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +23 -1
- package/dist/cjs/utils/error.d.ts +5 -0
- package/dist/cjs/utils/error.d.ts.map +1 -0
- package/dist/cjs/utils/error.js +12 -0
- package/dist/cjs/utils/filterConstants.d.ts +34 -0
- package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
- package/dist/cjs/utils/filterConstants.js +36 -0
- package/dist/cjs/utils/filterProcessing.d.ts +7 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +104 -17
- package/dist/cjs/utils/logging.d.ts.map +1 -1
- package/dist/cjs/utils/logging.js +1 -0
- package/dist/cjs/utils/merge.js +0 -21
- package/dist/cjs/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
- package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
- package/dist/cjs/utils/monacoConfig.js +324 -0
- package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
- package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/paginationProcessing.js +30 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +16 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +12 -6
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +4 -3
- package/dist/cjs/utils/report.d.ts +10 -0
- package/dist/cjs/utils/report.d.ts.map +1 -0
- package/dist/cjs/utils/report.js +180 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +35 -6
- package/dist/cjs/utils/styles.d.ts +1 -1
- package/dist/cjs/utils/styles.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.d.ts +22 -8
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +116 -35
- package/dist/cjs/utils/textProcessing.js +3 -3
- package/dist/cjs/utils/validation.d.ts +9 -0
- package/dist/cjs/utils/validation.d.ts.map +1 -0
- package/dist/cjs/utils/validation.js +24 -0
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +8 -4
- package/dist/esm/Chart.d.ts +29 -46
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +189 -471
- package/dist/esm/ChartBuilder.d.ts +30 -61
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +191 -129
- package/dist/esm/ChartEditor.d.ts +14 -2
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +71 -126
- package/dist/esm/Context.d.ts +4 -1
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +51 -5
- package/dist/esm/Dashboard.d.ts +74 -118
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +275 -49
- package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/Calendar.js +5 -8
- package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePicker.js +2 -29
- package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
- package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
- package/dist/esm/ReportBuilder.d.ts +18 -6
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +484 -496
- package/dist/esm/SQLEditor.d.ts +4 -11
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +75 -87
- package/dist/esm/Table.d.ts +19 -3
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +132 -116
- package/dist/esm/TableChart.d.ts.map +1 -1
- package/dist/esm/TableChart.js +0 -1
- package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
- package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
- package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
- package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
- package/dist/esm/components/Banner/index.d.ts +1 -1
- package/dist/esm/components/Banner/index.d.ts.map +1 -1
- package/dist/esm/components/Banner/index.js +1 -1
- package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
- package/dist/esm/components/BigModal/BigModal.js +7 -13
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +13 -2
- package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarList.js +21 -14
- package/dist/esm/components/Chart/ChartError.d.ts +8 -1
- package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartError.js +39 -6
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +8 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +28 -4
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +1 -3
- package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
- package/dist/esm/components/Dashboard/DataLoader.d.ts +8 -12
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +137 -194
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
- package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -5
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +3 -32
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +2 -4
- package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
- package/dist/esm/components/Dropdown/index.d.ts +2 -2
- package/dist/esm/components/Dropdown/index.js +2 -2
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +2 -3
- package/dist/esm/components/Modal/index.d.ts +1 -1
- package/dist/esm/components/Modal/index.js +1 -1
- package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelect.js +18 -3
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +18 -3
- package/dist/esm/components/QuillSelect.js +1 -1
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +7 -4
- package/dist/esm/components/QuillTable.d.ts +1 -4
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +5 -11
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +30 -0
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/FilterModal.js +576 -0
- package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ast.js +31 -5
- package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
- package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/constants.js +24 -3
- package/dist/esm/components/ReportBuilder/convert.d.ts +18 -16
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +375 -493
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/convert.uspec.js +1419 -0
- package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
- package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/operators.js +32 -4
- package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +13 -4
- package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +16 -19
- package/dist/esm/components/UiComponents.d.ts +36 -8
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +104 -11
- package/dist/esm/components/selectUtils.d.ts +0 -1
- package/dist/esm/components/selectUtils.d.ts.map +1 -1
- package/dist/esm/components/selectUtils.js +0 -20
- package/dist/esm/hooks/index.d.ts +4 -4
- package/dist/esm/hooks/index.js +4 -4
- package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
- package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
- package/dist/esm/hooks/useAstToFilterTree.js +24 -0
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +5 -1
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +4 -2
- package/dist/esm/hooks/useOnClickOutside.js +5 -5
- package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
- package/dist/esm/hooks/useOnWindowResize.js +3 -3
- package/dist/esm/hooks/useQuill.d.ts +10 -27
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +133 -85
- package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
- package/dist/esm/hooks/useTheme.js +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +11 -24
- package/dist/esm/lib/utils.js +2 -2
- package/dist/esm/models/Columns.d.ts +2 -1
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +115 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +98 -1
- package/dist/esm/models/Pagination.d.ts +10 -0
- package/dist/esm/models/Pagination.d.ts.map +1 -0
- package/dist/esm/models/Pagination.js +1 -0
- package/dist/esm/models/Report.d.ts +103 -0
- package/dist/esm/models/Report.d.ts.map +1 -0
- package/dist/esm/models/Report.js +1 -0
- package/dist/esm/test-utils/constants.d.ts +56 -0
- package/dist/esm/test-utils/constants.d.ts.map +1 -0
- package/dist/esm/test-utils/constants.js +271 -0
- package/dist/esm/test-utils/generators.d.ts +4 -0
- package/dist/esm/test-utils/generators.d.ts.map +1 -0
- package/dist/esm/test-utils/generators.js +37 -0
- package/dist/esm/utils/aggregate.js +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
- package/dist/esm/utils/astFilterProcessing.js +8084 -0
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/astFilterProcessing.uspec.js +2877 -0
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +4 -3
- package/dist/esm/utils/axisFormatter.js +0 -71
- package/dist/esm/utils/color.js +9 -87
- package/dist/esm/utils/columnProcessing.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +52 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/columnProcessing.uspec.js +65 -0
- package/dist/esm/utils/csv.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.d.ts +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +6 -59
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +63 -1
- package/dist/esm/utils/dataProcessing.d.ts +10 -0
- package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
- package/dist/esm/utils/dataProcessing.js +138 -0
- package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/dataProcessing.uspec.js +205 -0
- package/dist/esm/utils/dates.d.ts +2 -1
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +21 -0
- package/dist/esm/utils/error.d.ts +5 -0
- package/dist/esm/utils/error.d.ts.map +1 -0
- package/dist/esm/utils/error.js +8 -0
- package/dist/esm/utils/filterConstants.d.ts +34 -0
- package/dist/esm/utils/filterConstants.d.ts.map +1 -0
- package/dist/esm/utils/filterConstants.js +33 -0
- package/dist/esm/utils/filterProcessing.d.ts +7 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +101 -16
- package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/filterProcessing.uspec.js +245 -0
- package/dist/esm/utils/logging.d.ts.map +1 -1
- package/dist/esm/utils/logging.js +1 -0
- package/dist/esm/utils/merge.js +0 -21
- package/dist/esm/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
- package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
- package/dist/esm/utils/monacoConfig.js +319 -0
- package/dist/esm/utils/paginationProcessing.d.ts +5 -0
- package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
- package/dist/esm/utils/paginationProcessing.js +25 -0
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +16 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +12 -6
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +4 -3
- package/dist/esm/utils/queryConstructor.uspec.js +21 -21
- package/dist/esm/utils/report.d.ts +10 -0
- package/dist/esm/utils/report.d.ts.map +1 -0
- package/dist/esm/utils/report.ispec.d.ts +2 -0
- package/dist/esm/utils/report.ispec.d.ts.map +1 -0
- package/dist/esm/utils/report.ispec.js +46 -0
- package/dist/esm/utils/report.js +174 -0
- package/dist/esm/utils/report.uspec.d.ts +2 -0
- package/dist/esm/utils/report.uspec.d.ts.map +1 -0
- package/dist/esm/utils/report.uspec.js +66 -0
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +35 -6
- package/dist/esm/utils/styles.d.ts +1 -1
- package/dist/esm/utils/styles.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.d.ts +22 -8
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
- package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
- package/dist/esm/utils/tableProcessing.ispec.js +61 -0
- package/dist/esm/utils/tableProcessing.js +112 -33
- package/dist/esm/utils/textProcessing.js +3 -3
- package/dist/esm/utils/validation.d.ts +9 -0
- package/dist/esm/utils/validation.d.ts.map +1 -0
- package/dist/esm/utils/validation.js +20 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +8 -4
- package/package.json +1 -1
- package/dist/cjs/utils/monacoAutocomplete.d.ts.map +0 -1
- package/dist/cjs/utils/monacoAutocomplete.js +0 -145
- package/dist/cjs/utils/queryConstructor.uspec.d.ts +0 -2
- package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +0 -1
- package/dist/cjs/utils/queryConstructor.uspec.js +0 -225
- package/dist/esm/utils/monacoAutocomplete.d.ts.map +0 -1
- package/dist/esm/utils/monacoAutocomplete.js +0 -140
|
@@ -5,13 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.QUILL_SERVER = void 0;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
-
/* eslint-disable no-unused-vars */
|
|
9
8
|
const react_1 = require("react");
|
|
10
9
|
const UiComponents_1 = require("./components/UiComponents");
|
|
11
10
|
const core_1 = require("@dnd-kit/core");
|
|
12
11
|
const sortable_1 = require("@dnd-kit/sortable");
|
|
13
12
|
const utilities_1 = require("@dnd-kit/utilities");
|
|
14
|
-
const date_fns_1 = require("date-fns");
|
|
15
13
|
const Context_1 = require("./Context");
|
|
16
14
|
const ast_1 = require("./components/ReportBuilder/ast");
|
|
17
15
|
const ChartBuilder_1 = require("./ChartBuilder");
|
|
@@ -41,8 +39,14 @@ const columnProcessing_1 = require("./utils/columnProcessing");
|
|
|
41
39
|
const astProcessing_1 = require("./utils/astProcessing");
|
|
42
40
|
const PivotForm_1 = __importDefault(require("./internals/ReportBuilder/PivotForm"));
|
|
43
41
|
const schema_1 = require("./utils/schema");
|
|
44
|
-
const constants_2 = require("./utils/constants");
|
|
45
42
|
const dates_1 = require("./utils/dates");
|
|
43
|
+
const FilterModal_1 = __importDefault(require("./components/ReportBuilder/FilterModal"));
|
|
44
|
+
const astFilterProcessing_1 = require("./utils/astFilterProcessing");
|
|
45
|
+
const useAstToFilterTree_1 = __importDefault(require("./hooks/useAstToFilterTree"));
|
|
46
|
+
const filterProcessing_1 = require("./utils/filterProcessing");
|
|
47
|
+
const QuillMultiSelectWithCombo_1 = require("./components/QuillMultiSelectWithCombo");
|
|
48
|
+
const paginationProcessing_1 = require("./utils/paginationProcessing");
|
|
49
|
+
const report_1 = require("./utils/report");
|
|
46
50
|
exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SERVER_HOST) ||
|
|
47
51
|
'https://quill-344421.uc.r.appspot.com';
|
|
48
52
|
/**
|
|
@@ -76,7 +80,7 @@ exports.QUILL_SERVER = (typeof process !== 'undefined' && process?.env?.QUILL_SE
|
|
|
76
80
|
* ### Report Builder API
|
|
77
81
|
* @see https://docs.quillsql.com/components/report-builder
|
|
78
82
|
*/
|
|
79
|
-
function ReportBuilder({ initialTableName = '', onSubmitEditReport = (
|
|
83
|
+
function ReportBuilder({ initialTableName = '', onSubmitEditReport = () => void null, onSubmitCreateReport = () => void null, destinationDashboard = undefined, organizationName = '', ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, ModalComponent = UiComponents_1.MemoizedModal, TextInputComponent = UiComponents_2.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent, MultiSelectComponent = QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, TableComponent = UiComponents_1.QuillTableSQLEditorComponent, PopoverComponent = UiComponents_1.MemoizedPopover, TabsComponent = UiComponents_1.QuillTabs, CheckboxComponent = UiComponents_1.MemoizedCheckbox, SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer, SelectColumnComponent = ui_1.QuillSelectColumn, DraggableColumnComponent = ui_1.QuillDraggableColumn, SidebarHeadingComponent = ui_1.QuillSidebarHeading, FilterPopoverComponent = ui_1.QuillFilterPopover, SortPopoverComponent = ui_1.QuillSortPopover, LimitPopoverComponent = ui_1.QuillLimitPopover, CardComponent = QuillCard_1.QuillCard, LabelComponent = UiComponents_1.MemoizedLabel, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, TextComponent = UiComponents_1.MemoizedText, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, ChartBuilderFormContainer = UiComponents_1.QuillChartBuilderFormContainer, ChartBuilderModalComponent = UiComponents_1.MemoizedModal, isAdminEnabled = false, isAIEnabled = true, showChartBuilderTableFormatOptions = true, containerStyle, className, pivotRecommendationsEnabled = true, reportId, hideCopySQL = true, isChartBuilderHorizontalView = true, onClickChartElement, }) {
|
|
80
84
|
const { data: report } = (0, useQuill_1.useQuill)(reportId || '');
|
|
81
85
|
const [aiPrompt, setAiPrompt] = (0, react_1.useState)('');
|
|
82
86
|
const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
|
|
@@ -99,9 +103,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
99
103
|
const [rows, setRows] = (0, react_1.useState)([]);
|
|
100
104
|
const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
|
|
101
105
|
const [columns, setColumns] = (0, react_1.useState)([]);
|
|
102
|
-
const [tempReport, setTempReport] = (0, react_1.useState)(
|
|
106
|
+
const [tempReport, setTempReport] = (0, react_1.useState)(report_1.EMPTY_REPORT);
|
|
103
107
|
const [topLevelBinaryOperator, setTopLevelBinaryOperator] = (0, react_1.useState)('AND');
|
|
104
|
-
const [editPopoverKey, setEditPopoverKey] = (0, react_1.useState)(null);
|
|
105
108
|
const [uniqueValues, setUniqueValues] = (0, react_1.useState)({});
|
|
106
109
|
const [pivot, setPivot] = (0, react_1.useState)(null);
|
|
107
110
|
const [pivotData, setPivotData] = (0, react_1.useState)(null);
|
|
@@ -109,8 +112,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
109
112
|
const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)([]);
|
|
110
113
|
const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add pivot');
|
|
111
114
|
const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
|
|
112
|
-
const [
|
|
113
|
-
const [
|
|
115
|
+
const [isEditingPivot, setIsEditingPivot] = (0, react_1.useState)(false);
|
|
116
|
+
const [initialChartLoad, setInitialChartLoad] = (0, react_1.useState)(false);
|
|
114
117
|
const [askedAQuestion, setAskedAQuestion] = (0, react_1.useState)(false);
|
|
115
118
|
const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
|
|
116
119
|
const [initialLoad, setInitialLoad] = (0, react_1.useState)(!!initialTableName || !!reportId);
|
|
@@ -126,11 +129,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
126
129
|
const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
|
|
127
130
|
const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
|
|
128
131
|
const [dateRanges, setDateRanges] = (0, react_1.useState)(null);
|
|
129
|
-
|
|
130
|
-
const [client, _setClient] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
132
|
+
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
131
133
|
// JANK: This is temp and stupid
|
|
132
134
|
const [overrideRecommendations, setOverrideRecommendations] = (0, react_1.useState)(true);
|
|
133
135
|
const [customFields, setCustomFields] = (0, react_1.useContext)(Context_1.CustomFieldContext);
|
|
136
|
+
const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
|
|
137
|
+
const filterTree = (0, useAstToFilterTree_1.default)(formData, client); // Stores the state of filters
|
|
134
138
|
(0, react_1.useEffect)(() => {
|
|
135
139
|
if (!client) {
|
|
136
140
|
return;
|
|
@@ -146,6 +150,21 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
146
150
|
(0, width_1.updateFirstChildWidth)(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
|
|
147
151
|
(0, width_1.updateFirstChildWidth)(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
|
|
148
152
|
}, [dataDisplayed]);
|
|
153
|
+
// Whenever unique values changes, update the fieldValuesMap, used in FilterModals
|
|
154
|
+
(0, react_1.useEffect)(() => {
|
|
155
|
+
const tables = (0, ast_1.getTableNames)(baseAst);
|
|
156
|
+
const table = tables.length === 1 ? tables[0] : initialTableName;
|
|
157
|
+
const newFieldValues = {};
|
|
158
|
+
if (uniqueValues[table]) {
|
|
159
|
+
for (const field of Object.keys(uniqueValues[table])) {
|
|
160
|
+
newFieldValues[field] = [];
|
|
161
|
+
for (const value of Object.keys(uniqueValues[table][field])) {
|
|
162
|
+
newFieldValues[field]?.push(value);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
setFieldValuesMap(newFieldValues);
|
|
167
|
+
}, [uniqueValues]);
|
|
149
168
|
(0, react_1.useEffect)(() => {
|
|
150
169
|
// Since the TextInput component takes a required numeric width parameter,
|
|
151
170
|
// we dynamically calculate the width of this component here.
|
|
@@ -184,7 +203,17 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
184
203
|
if (tempDateRange) {
|
|
185
204
|
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
186
205
|
}
|
|
187
|
-
|
|
206
|
+
let distinctValuesForQuery = {};
|
|
207
|
+
if (pivot.columnField) {
|
|
208
|
+
distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
|
|
209
|
+
{
|
|
210
|
+
field: pivot.columnField,
|
|
211
|
+
label: pivot.columnField,
|
|
212
|
+
format: 'string',
|
|
213
|
+
},
|
|
214
|
+
], activeQuery, [], client, customFields);
|
|
215
|
+
}
|
|
216
|
+
const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
|
|
188
217
|
setPivotData(pivotedData || []);
|
|
189
218
|
const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
|
|
190
219
|
setPivot(newPivot);
|
|
@@ -224,7 +253,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
224
253
|
setRows([]);
|
|
225
254
|
setColumns([]);
|
|
226
255
|
setTopLevelBinaryOperator('AND');
|
|
227
|
-
setEditPopoverKey(null);
|
|
228
256
|
setErrorMessage('');
|
|
229
257
|
setFormattedRows([]);
|
|
230
258
|
// setUniqueValues({});
|
|
@@ -252,8 +280,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
252
280
|
if (pivot) {
|
|
253
281
|
const formattedRows = copiedRows.map((row) => {
|
|
254
282
|
const formattedRow = row;
|
|
255
|
-
Object.keys(row).forEach((key
|
|
256
|
-
|
|
283
|
+
Object.keys(row).forEach((key) => {
|
|
284
|
+
const column = columns.find((c) => c.field === key);
|
|
257
285
|
let format = 'string';
|
|
258
286
|
if (!column) {
|
|
259
287
|
format =
|
|
@@ -313,42 +341,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
313
341
|
navigator.clipboard.writeText(query);
|
|
314
342
|
setTimeout(() => setIsCopying(false), 800);
|
|
315
343
|
};
|
|
316
|
-
const copyToClipboard = (str) => {
|
|
317
|
-
setIsCopying(true);
|
|
318
|
-
navigator.clipboard.writeText(str);
|
|
319
|
-
setTimeout(() => setIsCopying(false), 800);
|
|
320
|
-
};
|
|
321
344
|
const clearCheckboxes = () => {
|
|
322
345
|
const checkboxes = uniqueValues;
|
|
323
346
|
const newValues = {};
|
|
324
|
-
for (
|
|
347
|
+
for (const table of Object.keys(checkboxes)) {
|
|
325
348
|
newValues[table] = {};
|
|
326
|
-
for (
|
|
349
|
+
for (const column of Object.keys(checkboxes[table])) {
|
|
327
350
|
newValues[table][column] = {};
|
|
328
|
-
for (
|
|
351
|
+
for (const variant of Object.keys(checkboxes[table][column])) {
|
|
329
352
|
newValues[table][column][variant] = false;
|
|
330
353
|
}
|
|
331
354
|
}
|
|
332
355
|
}
|
|
333
356
|
setUniqueValues(newValues);
|
|
334
357
|
};
|
|
335
|
-
const setCheckboxes = (node) => {
|
|
336
|
-
if (!['IN', 'NOT IN'].includes(node.operator))
|
|
337
|
-
return;
|
|
338
|
-
const selectedItems = node.right.value.flatMap((v) => v.args.value.map((x) => x.value.toLowerCase()));
|
|
339
|
-
const checkboxes = uniqueValues;
|
|
340
|
-
const newValues = {};
|
|
341
|
-
for (let table of Object.keys(checkboxes)) {
|
|
342
|
-
newValues[table] = {};
|
|
343
|
-
for (let column of Object.keys(checkboxes[table])) {
|
|
344
|
-
newValues[table][column] = {};
|
|
345
|
-
for (let variant of Object.keys(checkboxes[table][column])) {
|
|
346
|
-
newValues[table][column][variant] = selectedItems.includes(variant.toLowerCase());
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
setUniqueValues(newValues);
|
|
351
|
-
};
|
|
352
358
|
const fetchSqlQuery = async (ast, formData, fetchData = true) => {
|
|
353
359
|
if (fetchData) {
|
|
354
360
|
setLoading(true);
|
|
@@ -364,6 +370,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
364
370
|
body: JSON.stringify({
|
|
365
371
|
ast: { ...ast, where },
|
|
366
372
|
publicKey: client.publicKey,
|
|
373
|
+
useNewNodeSql: true, // new flag
|
|
367
374
|
}),
|
|
368
375
|
});
|
|
369
376
|
const data = await response.json();
|
|
@@ -371,6 +378,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
371
378
|
if (fetchData) {
|
|
372
379
|
fetchUponChange(ast, formData);
|
|
373
380
|
}
|
|
381
|
+
return data.query;
|
|
374
382
|
}
|
|
375
383
|
catch (error) {
|
|
376
384
|
setLoading(false);
|
|
@@ -495,83 +503,102 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
495
503
|
};
|
|
496
504
|
(0, react_1.useEffect)(() => {
|
|
497
505
|
const loadChart = async () => {
|
|
498
|
-
|
|
506
|
+
setInitialChartLoad(true);
|
|
507
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
499
508
|
if (!report || report.referencedTables.length !== 1) {
|
|
500
|
-
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
const tableName = report.referencedTables[0];
|
|
504
|
-
if (!tableName) {
|
|
505
|
-
return;
|
|
506
|
-
}
|
|
507
|
-
const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
|
|
508
|
-
query: report.queryString,
|
|
509
|
-
});
|
|
510
|
-
if (resp.success === false) {
|
|
511
|
-
setErrorMessage('Error: ' + resp.message);
|
|
509
|
+
setInitialChartLoad(false);
|
|
512
510
|
return;
|
|
513
511
|
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
setDateRanges(dateRangesTemp);
|
|
538
|
-
}
|
|
539
|
-
if (groupByPivot) {
|
|
540
|
-
// @ts-ignore
|
|
541
|
-
setPivotRowField(groupByPivot.rowField);
|
|
542
|
-
// @ts-ignore
|
|
543
|
-
setPivotAggregation(groupByPivot.aggregationType);
|
|
544
|
-
// @ts-ignore
|
|
545
|
-
setPivotColumnField(groupByPivot.columnField);
|
|
546
|
-
// @ts-ignore
|
|
547
|
-
setPivotValueField(groupByPivot.valueField);
|
|
548
|
-
setPivot(groupByPivot);
|
|
549
|
-
let dateBucket = undefined;
|
|
550
|
-
const tempDateRange = dateRangesTemp &&
|
|
551
|
-
groupByPivot.rowField &&
|
|
552
|
-
dateRangesTemp[groupByPivot.rowField];
|
|
553
|
-
if (tempDateRange) {
|
|
554
|
-
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
555
|
-
}
|
|
556
|
-
const pivotedData = await (0, PivotModal_1.generatePivotTable)(
|
|
557
|
-
// @ts-ignore
|
|
558
|
-
groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
|
|
559
|
-
setPivotData(pivotedData || []);
|
|
560
|
-
const formattedRows = formatRows(pivotedData.rows, report.columns, true,
|
|
512
|
+
try {
|
|
513
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
514
|
+
const tableName = report.referencedTables[0];
|
|
515
|
+
if (!tableName) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
|
|
519
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
520
|
+
query: report.queryString,
|
|
521
|
+
useNewNodeSql: true,
|
|
522
|
+
});
|
|
523
|
+
if (resp.success === false) {
|
|
524
|
+
setErrorMessage(resp.message);
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
|
|
528
|
+
let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
|
|
529
|
+
(0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
|
|
530
|
+
convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
|
|
531
|
+
const schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
|
|
532
|
+
let newAst;
|
|
533
|
+
let groupByPivot = {};
|
|
534
|
+
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
|
|
561
535
|
// @ts-ignore
|
|
562
|
-
|
|
563
|
-
|
|
536
|
+
report.pivot, schemaInfo));
|
|
537
|
+
if (convertedAst.where) {
|
|
538
|
+
setFormData((0, util_1.deepCopy)(convertedAst.where));
|
|
539
|
+
}
|
|
540
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
541
|
+
setActiveQuery(report.queryString);
|
|
542
|
+
newAst = groupByPivot ? newAst : convertedAst;
|
|
543
|
+
const initialRows = await fetchUponChange(newAst, undefined);
|
|
544
|
+
if (initialRows.error) {
|
|
545
|
+
setBaseAst(null);
|
|
546
|
+
setErrorMessage(initialRows.message);
|
|
547
|
+
setInitialChartLoad(false);
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
setBaseAst(newAst);
|
|
551
|
+
const tableInfo = schemaInfo.find((table) => table.name === tableName);
|
|
552
|
+
let newUniqueValues = undefined;
|
|
553
|
+
let dateRangesTemp = undefined;
|
|
554
|
+
if (tableName) {
|
|
555
|
+
newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
|
|
556
|
+
setUniqueValues(newUniqueValues);
|
|
557
|
+
dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
|
|
558
|
+
setDateRanges(dateRangesTemp);
|
|
559
|
+
}
|
|
560
|
+
if (groupByPivot) {
|
|
561
|
+
// @ts-ignore
|
|
562
|
+
setPivotRowField(groupByPivot.rowField);
|
|
563
|
+
// @ts-ignore
|
|
564
|
+
setPivotAggregation(groupByPivot.aggregationType);
|
|
565
|
+
// @ts-ignore
|
|
566
|
+
setPivotColumnField(groupByPivot.columnField);
|
|
567
|
+
// @ts-ignore
|
|
568
|
+
setPivotValueField(groupByPivot.valueField);
|
|
569
|
+
setPivot(groupByPivot);
|
|
570
|
+
let dateBucket = undefined;
|
|
571
|
+
const tempDateRange = dateRangesTemp &&
|
|
572
|
+
groupByPivot.rowField &&
|
|
573
|
+
dateRangesTemp[groupByPivot.rowField];
|
|
574
|
+
if (tempDateRange) {
|
|
575
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
576
|
+
}
|
|
577
|
+
const pivotedData = await (0, PivotModal_1.generatePivotTable)(
|
|
578
|
+
// @ts-ignore
|
|
579
|
+
groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
|
|
580
|
+
setPivotData(pivotedData || []);
|
|
581
|
+
const formattedRows = formatRows(pivotedData.rows, report.columns, true,
|
|
582
|
+
// @ts-ignore
|
|
583
|
+
groupByPivot.aggregationType);
|
|
584
|
+
setFormattedRows(formattedRows);
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
const formattedRows = formatRows(report.rows, report.columns);
|
|
588
|
+
setFormattedRows(formattedRows);
|
|
589
|
+
}
|
|
590
|
+
setCurrentTable(tableName);
|
|
564
591
|
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
592
|
+
catch (error) {
|
|
593
|
+
console.error(error);
|
|
594
|
+
setErrorMessage('Error loading report');
|
|
568
595
|
}
|
|
569
|
-
setCurrentTable(tableName);
|
|
570
596
|
// This handles a flashing issue
|
|
571
597
|
setTimeout(() => {
|
|
572
|
-
|
|
598
|
+
setInitialChartLoad(false);
|
|
573
599
|
}, 500);
|
|
574
600
|
};
|
|
601
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
575
602
|
if (report && report.referencedTables.length === 1) {
|
|
576
603
|
loadChart();
|
|
577
604
|
}
|
|
@@ -897,10 +924,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
897
924
|
isReplaceSubtree: true,
|
|
898
925
|
});
|
|
899
926
|
};
|
|
900
|
-
// Function to handle the deletion of expressions
|
|
901
|
-
const handleDelete = (key) => {
|
|
902
|
-
updateFormData([{ path: key, value: null }], { isDeletion: true });
|
|
903
|
-
};
|
|
904
927
|
// Function to handle the insertion of expressions
|
|
905
928
|
const handleInsertion = (value, op = 'OR', isCondition = undefined) => {
|
|
906
929
|
updateFormData([{ path: '', value }], {
|
|
@@ -965,84 +988,60 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
965
988
|
};
|
|
966
989
|
const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
|
|
967
990
|
const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
|
|
968
|
-
page:
|
|
991
|
+
page: paginationProcessing_1.DEFAULT_PAGINATION,
|
|
969
992
|
});
|
|
970
993
|
const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
|
|
971
994
|
const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
|
|
972
995
|
const onPageChange = (page) => {
|
|
973
|
-
if (
|
|
974
|
-
|
|
996
|
+
if (currentProcessing.page &&
|
|
997
|
+
(0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
|
|
998
|
+
const newPagination = { ...currentProcessing.page, page };
|
|
999
|
+
const updatedProcessing = { ...currentProcessing, page: newPagination };
|
|
1000
|
+
setCurrentProcessing(updatedProcessing);
|
|
1001
|
+
handleRunQuery(updatedProcessing);
|
|
975
1002
|
}
|
|
976
|
-
if (
|
|
977
|
-
(page
|
|
978
|
-
(previousPage > page.currentPage &&
|
|
979
|
-
(previousPage * page.rowsPerPage) % constants_2.MAX_COLUMN_ROWS_LIMIT === 0)) {
|
|
980
|
-
handleRunQuery({ ...currentProcessing, page });
|
|
1003
|
+
if (page > previousPage) {
|
|
1004
|
+
setPreviousPage(page);
|
|
981
1005
|
}
|
|
982
|
-
setPreviousPage(page.currentPage);
|
|
983
1006
|
};
|
|
984
1007
|
const onSortChange = (sort) => {
|
|
985
|
-
if (pivot) {
|
|
1008
|
+
if ((0, paginationProcessing_1.shouldSortInMemory)(paginationProcessing_1.DEFAULT_PAGINATION, numberOfRows, !!pivot)) {
|
|
986
1009
|
return;
|
|
987
1010
|
}
|
|
988
|
-
|
|
1011
|
+
const updatedProcessing = { page: paginationProcessing_1.DEFAULT_PAGINATION, sort };
|
|
1012
|
+
handleRunQuery(updatedProcessing, true);
|
|
1013
|
+
setCurrentProcessing(updatedProcessing);
|
|
989
1014
|
setPreviousPage(0);
|
|
990
1015
|
};
|
|
991
|
-
const handleRunQuery = async (processing) => {
|
|
1016
|
+
const handleRunQuery = async (processing, resetRows = false) => {
|
|
992
1017
|
try {
|
|
993
1018
|
setErrorMessage('');
|
|
994
1019
|
setTableLoading(true);
|
|
995
|
-
const
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
task: 'query',
|
|
999
|
-
orgId: client.customerId || '*',
|
|
1000
|
-
clientId: client.publicKey,
|
|
1001
|
-
databaseType: client?.databaseType,
|
|
1002
|
-
getCustomFields: !client.customerId || client.customerId === '*' ? false : true,
|
|
1003
|
-
customFieldsByTable: customFields,
|
|
1004
|
-
additionalProcessing: processing,
|
|
1005
|
-
useUpdatedDataGathering: true,
|
|
1006
|
-
},
|
|
1007
|
-
};
|
|
1008
|
-
const cloudBody = { activeQuery };
|
|
1009
|
-
const resp = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
|
|
1010
|
-
if (resp && resp.errorMessage) {
|
|
1011
|
-
setTableLoading(false);
|
|
1012
|
-
setErrorMessage('Failed to run SQL query: ' + resp.errorMessage);
|
|
1013
|
-
setRows([]);
|
|
1014
|
-
setColumns([]);
|
|
1015
|
-
return;
|
|
1020
|
+
const tableInfo = await (0, tableProcessing_1.fetchTableByQuery)(activeQuery, client, processing, customFields);
|
|
1021
|
+
if (tableInfo.error) {
|
|
1022
|
+
throw new Error(tableInfo.error);
|
|
1016
1023
|
}
|
|
1017
|
-
if (
|
|
1018
|
-
|
|
1024
|
+
else if (tableInfo.rows.length === 0) {
|
|
1025
|
+
throw new Error('No data found');
|
|
1026
|
+
}
|
|
1027
|
+
if (tableInfo.rowCount) {
|
|
1028
|
+
setNumberOfRows(tableInfo.rowCount);
|
|
1019
1029
|
}
|
|
1020
|
-
setErrorMessage('');
|
|
1021
1030
|
setCurrentProcessing(processing);
|
|
1022
|
-
|
|
1023
|
-
|
|
1031
|
+
let tempRows = [...rows, ...tableInfo.rows];
|
|
1032
|
+
if (resetRows) {
|
|
1033
|
+
tempRows = tableInfo.rows;
|
|
1024
1034
|
}
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
// setNumberOfRows(resp.compareRows[0]?.count || temp_rows.length);
|
|
1029
|
-
setFormattedRows(temp_rows.map((row) => {
|
|
1030
|
-
return processedFields.reduce((formattedRow, column) => {
|
|
1031
|
-
// Apply the format function to each field in the row
|
|
1032
|
-
const formattedValue = (0, valueFormatter_1.quillFormat)({
|
|
1033
|
-
value: row[column.field],
|
|
1034
|
-
format: column.format,
|
|
1035
|
-
});
|
|
1036
|
-
formattedRow[column.field] = formattedValue;
|
|
1037
|
-
return formattedRow;
|
|
1038
|
-
}, {});
|
|
1039
|
-
}));
|
|
1040
|
-
setColumns(processedFields);
|
|
1035
|
+
setRows(tempRows);
|
|
1036
|
+
setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
|
|
1037
|
+
setColumns(tableInfo.columns);
|
|
1041
1038
|
setTableLoading(false);
|
|
1042
1039
|
}
|
|
1043
1040
|
catch (e) {
|
|
1044
1041
|
setTableLoading(false);
|
|
1045
|
-
|
|
1042
|
+
setErrorMessage('Failed to run SQL query: ' + e.message);
|
|
1043
|
+
setRows([]);
|
|
1044
|
+
setColumns([]);
|
|
1046
1045
|
return;
|
|
1047
1046
|
}
|
|
1048
1047
|
};
|
|
@@ -1061,10 +1060,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1061
1060
|
case 'binary_expr':
|
|
1062
1061
|
if (dateComparisonPartialMatch ||
|
|
1063
1062
|
((0, util_1.isDateTruncEquals)(node) && client.databaseType !== 'BigQuery')) {
|
|
1064
|
-
const { dateColumn,
|
|
1065
|
-
// see onChange callback handleChange
|
|
1066
|
-
// eslint-disable-next-line no-unused-vars
|
|
1067
|
-
dateColumnPath, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
|
|
1063
|
+
const { dateColumn, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
|
|
1068
1064
|
const isPlural = intervalCount !== 1 && dateFilterType !== 'in the current'
|
|
1069
1065
|
? 's'
|
|
1070
1066
|
: '';
|
|
@@ -1212,7 +1208,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1212
1208
|
} }))] }));
|
|
1213
1209
|
}
|
|
1214
1210
|
else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
|
|
1215
|
-
const { dateColumn
|
|
1211
|
+
const { dateColumn } = (0, util_1.getDateFilterInfo)(node);
|
|
1216
1212
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1217
1213
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1218
1214
|
value: column.name,
|
|
@@ -1273,7 +1269,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1273
1269
|
], width: 200 }) })] }));
|
|
1274
1270
|
}
|
|
1275
1271
|
else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
|
|
1276
|
-
const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
|
|
1277
1272
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1278
1273
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1279
1274
|
value: column.name,
|
|
@@ -1332,7 +1327,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1332
1327
|
{ label: `week`, value: 'WEEK' },
|
|
1333
1328
|
], width: 200 })] }));
|
|
1334
1329
|
}
|
|
1335
|
-
else if ((0, util_1.isThePreviousInterval)(node
|
|
1330
|
+
else if ((0, util_1.isThePreviousInterval)(node)) {
|
|
1336
1331
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1337
1332
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1338
1333
|
value: column.name,
|
|
@@ -1479,7 +1474,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1479
1474
|
.find((tableInfo) => tableInfo.name === table)
|
|
1480
1475
|
?.columns.find((col) => col.name === leftChildValue);
|
|
1481
1476
|
const columnType = column?.fieldType;
|
|
1482
|
-
|
|
1477
|
+
const operatorOptions = [
|
|
1483
1478
|
...((0, ast_1.isNumericColumnType)(columnType)
|
|
1484
1479
|
? [
|
|
1485
1480
|
{ label: 'equal to', value: '=' },
|
|
@@ -1720,112 +1715,180 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1720
1715
|
}
|
|
1721
1716
|
return validPivot;
|
|
1722
1717
|
};
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1718
|
+
/**
|
|
1719
|
+
* @param filterTree
|
|
1720
|
+
* Returns a list of filters to be displayed
|
|
1721
|
+
* Replaces the functionality of renderNodes in the context of filters
|
|
1722
|
+
*/
|
|
1723
|
+
const renderFilters = (filterTree) => {
|
|
1724
|
+
let tree = filterTree;
|
|
1725
|
+
let filterStack = [];
|
|
1726
|
+
/**
|
|
1727
|
+
* Function that takes in a FilterTree and flattens it into an array using in order traversal
|
|
1728
|
+
*/
|
|
1729
|
+
function traverseTree(node) {
|
|
1730
|
+
if (!node) {
|
|
1731
|
+
return;
|
|
1732
|
+
}
|
|
1733
|
+
if (node.leaf) {
|
|
1734
|
+
filterStack.push(node);
|
|
1735
|
+
}
|
|
1736
|
+
else {
|
|
1737
|
+
traverseTree(node.leftNode);
|
|
1738
|
+
filterStack.push(node);
|
|
1739
|
+
traverseTree(node.rightNode);
|
|
1740
|
+
}
|
|
1736
1741
|
}
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
'>': 'is greater than',
|
|
1751
|
-
'<=': 'is less than or equal to',
|
|
1752
|
-
'>=': 'is greater than or equal to',
|
|
1753
|
-
'<>': 'is not',
|
|
1754
|
-
'-': 'minus',
|
|
1755
|
-
'IS NOT': 'is not',
|
|
1756
|
-
IS: 'is',
|
|
1757
|
-
};
|
|
1758
|
-
switch (node.type) {
|
|
1759
|
-
case 'binary_expr':
|
|
1760
|
-
return ((0, jsx_runtime_1.jsx)(ui_1.TagWrapper, { keyPrefix: keyPrefix, formData: formData, activeEditItem: activeEditItem, setEditPopoverKey: setEditPopoverKey, setActiveEditItem: setActiveEditItem, setCheckboxes: setCheckboxes, handleReplaceSubtree: handleReplaceSubtree, FilterPopover: FilterPopoverComponent, setActivePath: setActivePath, setOpenPopover: setOpenPopover, setIsPending: setIsPending, clearCheckboxes: clearCheckboxes, handleDelete: handleDelete, editPopoverKey: editPopoverKey, isCard: isCard, isRow: isRow, getByKey: getByKey, EditPopover: ui_1.EditPopover, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, renderNode: renderNode, children: dateComparisonPartialMatch ??
|
|
1761
|
-
dateEqualityPartialMatch ??
|
|
1762
|
-
uniqueSentence ?? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [node.left &&
|
|
1763
|
-
renderSentence(formData, node.left, keyPrefix + 'left.', false, false, isRow), isRow ? (' ' + OPS[node.operator] + ' ') : isTopLevel || topLevelBinaryOperator === 'OR' ? ((0, jsx_runtime_1.jsx)(TopLevelBooleanSwitch, { node: node, keyPrefix: keyPrefix, handleOperatorChange: handleOperatorChange, Select: SelectComponent })) : null, node.right &&
|
|
1764
|
-
renderSentence(formData, node.right, keyPrefix + 'right.', false, false, isRow)] })) }));
|
|
1765
|
-
case 'column_ref':
|
|
1766
|
-
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.column);
|
|
1767
|
-
case 'expr_list':
|
|
1768
|
-
if (node.value.length === 1) {
|
|
1769
|
-
const subQuery = renderSentence(formData, node.value[0]);
|
|
1770
|
-
if (subQuery) {
|
|
1771
|
-
return `${subQuery}`;
|
|
1772
|
-
}
|
|
1773
|
-
return '()';
|
|
1774
|
-
}
|
|
1775
|
-
return `${node.value
|
|
1776
|
-
.map((elem) => renderSentence(formData, elem))
|
|
1777
|
-
.join(', ')}`;
|
|
1778
|
-
case 'single_quote_string':
|
|
1779
|
-
return node.value.replaceAll('%', '');
|
|
1780
|
-
case 'double_quote_string':
|
|
1781
|
-
case 'number':
|
|
1782
|
-
return node.value;
|
|
1783
|
-
case 'null':
|
|
1784
|
-
return 'null';
|
|
1785
|
-
case 'bool':
|
|
1786
|
-
return node.value.toString();
|
|
1787
|
-
case 'interval':
|
|
1788
|
-
if (node.unit) {
|
|
1789
|
-
// eg. `INTERVAL '90' DAY` -> "90 days"
|
|
1790
|
-
return `${node.expr.value} ${node.unit}s`;
|
|
1791
|
-
}
|
|
1792
|
-
return node.expr.value;
|
|
1793
|
-
case 'function':
|
|
1794
|
-
if (node.name.toLowerCase() === 'lower' ||
|
|
1795
|
-
node.name.toLowerCase() === 'upper') {
|
|
1796
|
-
// how many transactions were above 20 and not fuel or made in the last 90 days (hint: use lower)
|
|
1797
|
-
if (node.args.value.length < 1)
|
|
1798
|
-
return null;
|
|
1799
|
-
if (node.args.value[0].value) {
|
|
1800
|
-
if (node.args.value[0].type === 'single_quote_string') {
|
|
1801
|
-
return node.args.value[0].value.replaceAll('%', '');
|
|
1802
|
-
}
|
|
1803
|
-
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.args.value[0].value.replaceAll('%', ''));
|
|
1804
|
-
}
|
|
1805
|
-
if (node.args.value[0].column)
|
|
1806
|
-
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(node.args.value[0].column.replaceAll('%', ''));
|
|
1742
|
+
/**
|
|
1743
|
+
* Given an array of Filters (presumed to be in in-order state), generate
|
|
1744
|
+
* the corresponding Filter tree. Essentially the reverse of what traverseTree does
|
|
1745
|
+
*/
|
|
1746
|
+
function filterStackToFilterTree(stack) {
|
|
1747
|
+
function buildTree(i) {
|
|
1748
|
+
const newNode = {
|
|
1749
|
+
leaf: false,
|
|
1750
|
+
operator: null,
|
|
1751
|
+
leftNode: null,
|
|
1752
|
+
rightNode: null,
|
|
1753
|
+
};
|
|
1754
|
+
if (i >= stack.length) {
|
|
1807
1755
|
return null;
|
|
1808
1756
|
}
|
|
1809
|
-
if (
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1757
|
+
else if (stack[i].leaf) {
|
|
1758
|
+
if (i < stack.length - 1) {
|
|
1759
|
+
// more nodes later
|
|
1760
|
+
newNode.operator = stack[i + 1].operator;
|
|
1761
|
+
newNode.leftNode = {
|
|
1762
|
+
leaf: true,
|
|
1763
|
+
leftNode: null,
|
|
1764
|
+
rightNode: null,
|
|
1765
|
+
operator: null,
|
|
1766
|
+
value: stack[i].value,
|
|
1767
|
+
};
|
|
1768
|
+
newNode.rightNode = buildTree(i + 2);
|
|
1769
|
+
}
|
|
1770
|
+
else {
|
|
1771
|
+
newNode.leaf = true;
|
|
1772
|
+
newNode.value = stack[i].value;
|
|
1773
|
+
}
|
|
1824
1774
|
}
|
|
1825
|
-
return
|
|
1826
|
-
|
|
1827
|
-
|
|
1775
|
+
return newNode;
|
|
1776
|
+
}
|
|
1777
|
+
return buildTree(0);
|
|
1828
1778
|
}
|
|
1779
|
+
traverseTree(tree);
|
|
1780
|
+
// Remove null (invalid) filters from filter stack
|
|
1781
|
+
filterStack = filterStack.filter((filter) => {
|
|
1782
|
+
return ((!filter.leaf &&
|
|
1783
|
+
filter.rightNode &&
|
|
1784
|
+
(!filter.rightNode.leaf || filter.rightNode.value)) ||
|
|
1785
|
+
(filter.leaf && filter.value));
|
|
1786
|
+
});
|
|
1787
|
+
// Render filterStack
|
|
1788
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1789
|
+
display: 'flex',
|
|
1790
|
+
flexDirection: 'column',
|
|
1791
|
+
}, children: filterStack.map((item, index) => {
|
|
1792
|
+
if (!item.leaf &&
|
|
1793
|
+
(item.operator === 'and' || item.operator === 'or')) {
|
|
1794
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1795
|
+
width: 'fit-content',
|
|
1796
|
+
marginBottom: '8px',
|
|
1797
|
+
marginTop: '8px',
|
|
1798
|
+
}, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: item.operator.toUpperCase(), options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: () => {
|
|
1799
|
+
if (item.operator === 'and') {
|
|
1800
|
+
item.operator = 'or';
|
|
1801
|
+
}
|
|
1802
|
+
else {
|
|
1803
|
+
item.operator = 'and';
|
|
1804
|
+
}
|
|
1805
|
+
let newFormData = null;
|
|
1806
|
+
if (tree) {
|
|
1807
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1808
|
+
}
|
|
1809
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1810
|
+
...constants_1.defaultAST,
|
|
1811
|
+
...baseAst,
|
|
1812
|
+
...(!baseAst?.columns && {
|
|
1813
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1814
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1815
|
+
newColumn.expr.column = c.name;
|
|
1816
|
+
return newColumn;
|
|
1817
|
+
}),
|
|
1818
|
+
}),
|
|
1819
|
+
...(!baseAst?.from && {
|
|
1820
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1821
|
+
}),
|
|
1822
|
+
where: newFormData,
|
|
1823
|
+
});
|
|
1824
|
+
setBaseAst(newAst);
|
|
1825
|
+
setFormData(newFormData);
|
|
1826
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1827
|
+
} }) }, index));
|
|
1828
|
+
}
|
|
1829
|
+
else {
|
|
1830
|
+
return ((0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: schema.find((s) => s.name === currentTable || s.displayName === currentTable) ?? schema[0], filter: item.value, filterLabel: item.value ? (0, filterProcessing_1.filterSentence)(item.value) : '', index: index, FilterTagComponent: FilterPopoverComponent, FilterModal: FilterModal_1.default, fieldValuesMap: fieldValuesMap, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
|
|
1831
|
+
item.value = filter;
|
|
1832
|
+
let newFormData = null;
|
|
1833
|
+
if (tree) {
|
|
1834
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1835
|
+
}
|
|
1836
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1837
|
+
...constants_1.defaultAST,
|
|
1838
|
+
...baseAst,
|
|
1839
|
+
...(!baseAst?.columns && {
|
|
1840
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1841
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1842
|
+
newColumn.expr.column = c.name;
|
|
1843
|
+
return newColumn;
|
|
1844
|
+
}),
|
|
1845
|
+
}),
|
|
1846
|
+
...(!baseAst?.from && {
|
|
1847
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1848
|
+
}),
|
|
1849
|
+
where: newFormData,
|
|
1850
|
+
});
|
|
1851
|
+
setBaseAst(newAst);
|
|
1852
|
+
setFormData(newFormData);
|
|
1853
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1854
|
+
}, handleFilterDelete: (i) => {
|
|
1855
|
+
if (i > 0) {
|
|
1856
|
+
filterStack.splice(i - 1, 2);
|
|
1857
|
+
}
|
|
1858
|
+
else {
|
|
1859
|
+
if (filterStack.length > 1) {
|
|
1860
|
+
filterStack.splice(i, 2);
|
|
1861
|
+
}
|
|
1862
|
+
else {
|
|
1863
|
+
filterStack.splice(i, 1);
|
|
1864
|
+
}
|
|
1865
|
+
}
|
|
1866
|
+
tree = filterStackToFilterTree(filterStack);
|
|
1867
|
+
let newFormData = null;
|
|
1868
|
+
if (tree) {
|
|
1869
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1870
|
+
}
|
|
1871
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1872
|
+
...constants_1.defaultAST,
|
|
1873
|
+
...baseAst,
|
|
1874
|
+
...(!baseAst?.columns && {
|
|
1875
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1876
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1877
|
+
newColumn.expr.column = c.name;
|
|
1878
|
+
return newColumn;
|
|
1879
|
+
}),
|
|
1880
|
+
}),
|
|
1881
|
+
...(!baseAst?.from && {
|
|
1882
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1883
|
+
}),
|
|
1884
|
+
where: newFormData,
|
|
1885
|
+
});
|
|
1886
|
+
setBaseAst(newAst);
|
|
1887
|
+
setFormData(newFormData);
|
|
1888
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1889
|
+
} }, 'filter' + index));
|
|
1890
|
+
}
|
|
1891
|
+
}) }));
|
|
1829
1892
|
};
|
|
1830
1893
|
const getAllPossibleColumns = () => {
|
|
1831
1894
|
if (!baseAst || !baseAst.from) {
|
|
@@ -1867,7 +1930,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1867
1930
|
if (selectedColumns.length < 1)
|
|
1868
1931
|
return false;
|
|
1869
1932
|
const allColumns = orderedColumnNames.filter((row) => {
|
|
1870
|
-
const [table
|
|
1933
|
+
const [table] = row.split('.');
|
|
1871
1934
|
const selectedTable = selectedColumns[0].split('.')[0];
|
|
1872
1935
|
return selectedTable === table;
|
|
1873
1936
|
});
|
|
@@ -1913,23 +1976,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1913
1976
|
customFields,
|
|
1914
1977
|
additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
|
|
1915
1978
|
useUpdatedDataGathering: true,
|
|
1979
|
+
useNewNodeSql: true, // new flag
|
|
1916
1980
|
},
|
|
1917
1981
|
};
|
|
1918
|
-
const cloudBody = {};
|
|
1919
|
-
const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
|
|
1920
|
-
if (data2.success === false) {
|
|
1921
|
-
throw new Error(data2.errorMessage);
|
|
1922
|
-
}
|
|
1923
|
-
rows = data2.rows;
|
|
1924
|
-
if (data2.rowCount) {
|
|
1925
|
-
setNumberOfRows(data2.rowCount);
|
|
1926
|
-
}
|
|
1927
1982
|
const tables = (0, ast_1.getTableNames)(baseAst);
|
|
1928
1983
|
const table = tables.length >= 1 ? tables[0] : initialTableName;
|
|
1929
1984
|
let newUniqueValues = uniqueValues;
|
|
1930
1985
|
let dateRangesTemp = dateRanges;
|
|
1931
|
-
let curReport =
|
|
1932
|
-
if (
|
|
1986
|
+
let curReport = tempReport;
|
|
1987
|
+
if ((newUniqueValues && Object.keys(newUniqueValues).length === 0) ||
|
|
1988
|
+
table !== currentTable) {
|
|
1933
1989
|
const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
|
|
1934
1990
|
if (tableInfo) {
|
|
1935
1991
|
newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
|
|
@@ -1941,6 +1997,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1941
1997
|
}
|
|
1942
1998
|
setCurrentTable(table);
|
|
1943
1999
|
}
|
|
2000
|
+
const cloudBody = {};
|
|
2001
|
+
const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
|
|
2002
|
+
if (data2.success === false) {
|
|
2003
|
+
throw new Error(data2.errorMessage);
|
|
2004
|
+
}
|
|
2005
|
+
rows = data2.rows;
|
|
2006
|
+
if (data2.rowCount) {
|
|
2007
|
+
setNumberOfRows(data2.rowCount);
|
|
2008
|
+
}
|
|
1944
2009
|
if (data2.rows && data2.rows.length) {
|
|
1945
2010
|
if (pivot) {
|
|
1946
2011
|
// check if any of the pivot fields aren't in the data2.fields array
|
|
@@ -1970,13 +2035,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1970
2035
|
setFormattedRows(formattedRows);
|
|
1971
2036
|
return;
|
|
1972
2037
|
}
|
|
2038
|
+
curReport = {
|
|
2039
|
+
...formData,
|
|
2040
|
+
itemQuery: data2.itemQuery,
|
|
2041
|
+
rowCount: data2.rowCount,
|
|
2042
|
+
filtersApplied: [],
|
|
2043
|
+
rows: data2.rows,
|
|
2044
|
+
};
|
|
1973
2045
|
// Do all of this to make sure we have the right unique columns when applying a pivot
|
|
1974
|
-
let uniqueFormatted = {};
|
|
1975
|
-
const uniqueRecords = Array.from(new Set(data2.rows.map((row) => row[pivot.columnField]))).reduce((acc, curr) => {
|
|
1976
|
-
acc[curr] = false;
|
|
1977
|
-
return acc;
|
|
1978
|
-
}, {});
|
|
1979
|
-
uniqueFormatted[pivot.columnField] = uniqueRecords;
|
|
1980
2046
|
let dateBucket = undefined;
|
|
1981
2047
|
const tempDateRange = dateRangesTemp &&
|
|
1982
2048
|
pivot.rowField &&
|
|
@@ -1984,9 +2050,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1984
2050
|
if (tempDateRange) {
|
|
1985
2051
|
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
1986
2052
|
}
|
|
2053
|
+
let distinctValuesForQuery = {};
|
|
2054
|
+
if (pivot.columnField) {
|
|
2055
|
+
const sqlQuery = await fetchSqlQuery({ ...baseAst, where: curFormData }, null, false);
|
|
2056
|
+
distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
|
|
2057
|
+
{
|
|
2058
|
+
field: pivot.columnField,
|
|
2059
|
+
label: pivot.columnField,
|
|
2060
|
+
format: 'string',
|
|
2061
|
+
},
|
|
2062
|
+
], sqlQuery, [], client, customFields);
|
|
2063
|
+
}
|
|
1987
2064
|
const pivotedData = await (0, PivotModal_1.generatePivotTable)(
|
|
1988
2065
|
// @ts-ignore
|
|
1989
|
-
pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client,
|
|
2066
|
+
pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, distinctValuesForQuery ? distinctValuesForQuery : undefined);
|
|
1990
2067
|
console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
|
|
1991
2068
|
const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
|
|
1992
2069
|
setPivotData(pivotedData);
|
|
@@ -2048,105 +2125,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2048
2125
|
setFormattedRows([]);
|
|
2049
2126
|
setPivotData(null);
|
|
2050
2127
|
}
|
|
2128
|
+
setLoading(false);
|
|
2129
|
+
setDataDisplayed(true);
|
|
2130
|
+
return rows;
|
|
2051
2131
|
}
|
|
2052
2132
|
catch (e) {
|
|
2053
|
-
console.error(e);
|
|
2054
2133
|
setErrorMessage(e.message);
|
|
2055
|
-
}
|
|
2056
|
-
finally {
|
|
2057
2134
|
setLoading(false);
|
|
2058
2135
|
setDataDisplayed(true);
|
|
2059
|
-
|
|
2136
|
+
setRows([]);
|
|
2137
|
+
setColumns([]);
|
|
2138
|
+
setFormattedRows([]);
|
|
2139
|
+
setPivotData(null);
|
|
2140
|
+
return { error: true, message: e.message };
|
|
2060
2141
|
}
|
|
2061
2142
|
}
|
|
2062
2143
|
};
|
|
2063
|
-
// Convert an array of columns to a map where the name is the
|
|
2064
|
-
// key and the value is the column node.
|
|
2065
|
-
const columnArrayToMap = (columns) => {
|
|
2066
|
-
const columnMap = {};
|
|
2067
|
-
for (const col of columns) {
|
|
2068
|
-
const key = col.expr?.value ?? col.expr?.column ?? col.as;
|
|
2069
|
-
columnMap[key] = col;
|
|
2070
|
-
}
|
|
2071
|
-
return columnMap;
|
|
2072
|
-
};
|
|
2073
|
-
const applyFormatting = (response, columns) => {
|
|
2074
|
-
const columnFormatters = {};
|
|
2075
|
-
const columnMap = columnArrayToMap(columns);
|
|
2076
|
-
response.fields.forEach((field) => {
|
|
2077
|
-
// TODO: columnMap[field.name] silently breaks for columnField columns
|
|
2078
|
-
const formatType = (0, util_1.getPostgresBasicType)(field);
|
|
2079
|
-
if (formatType === 'date') {
|
|
2080
|
-
columnFormatters[field.name] = (x) => {
|
|
2081
|
-
const d = new Date(x);
|
|
2082
|
-
// check if d is a valid date
|
|
2083
|
-
if (isNaN(d.getTime())) {
|
|
2084
|
-
return 'Invalid Date';
|
|
2085
|
-
}
|
|
2086
|
-
d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); // TZ adjust
|
|
2087
|
-
if (columnMap[field.name]?.expr.type === 'function' &&
|
|
2088
|
-
columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
|
|
2089
|
-
columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
|
|
2090
|
-
'month') {
|
|
2091
|
-
return d.toLocaleString('default', {
|
|
2092
|
-
month: 'short',
|
|
2093
|
-
year: 'numeric',
|
|
2094
|
-
});
|
|
2095
|
-
}
|
|
2096
|
-
else if (columnMap[field.name]?.expr.type === 'function' &&
|
|
2097
|
-
columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
|
|
2098
|
-
columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
|
|
2099
|
-
'quarter') {
|
|
2100
|
-
return `Q${(0, date_fns_1.getQuarter)(d)} ${d.getFullYear()}`;
|
|
2101
|
-
}
|
|
2102
|
-
else if (columnMap[field.name]?.expr.type === 'function' &&
|
|
2103
|
-
columnMap[field.name]?.expr.name.toLowerCase() === 'date_trunc' &&
|
|
2104
|
-
columnMap[field.name]?.expr.args.value[0].value.toLowerCase() ===
|
|
2105
|
-
'year') {
|
|
2106
|
-
return d.toLocaleString('default', {
|
|
2107
|
-
year: 'numeric',
|
|
2108
|
-
});
|
|
2109
|
-
}
|
|
2110
|
-
return constants_1.DATE_FMT.format(d);
|
|
2111
|
-
};
|
|
2112
|
-
}
|
|
2113
|
-
else if (formatType === 'number') {
|
|
2114
|
-
columnFormatters[field.name] = (x) => {
|
|
2115
|
-
if (columnMap[field.name]?.expr.type === 'extract' &&
|
|
2116
|
-
columnMap[field.name]?.expr.args.field.toLowerCase() === 'dow') {
|
|
2117
|
-
return constants_1.DAY_OF_WEEK[x];
|
|
2118
|
-
}
|
|
2119
|
-
else if (columnMap[field.name]?.expr.type === 'extract' &&
|
|
2120
|
-
columnMap[field.name]?.expr.args.field.toLowerCase() === 'month') {
|
|
2121
|
-
return constants_1.MONTH_OF_YEAR[x - 1];
|
|
2122
|
-
}
|
|
2123
|
-
else if (`${x}`.includes('.')) {
|
|
2124
|
-
// return MONEY_FMT.format(Number(x ?? 0.0));
|
|
2125
|
-
return Number(x ?? 0.0).toFixed(2);
|
|
2126
|
-
}
|
|
2127
|
-
return x ?? 0.0;
|
|
2128
|
-
};
|
|
2129
|
-
}
|
|
2130
|
-
else if (formatType === 'boolean') {
|
|
2131
|
-
columnFormatters[field.name] = (x) => {
|
|
2132
|
-
if (x) {
|
|
2133
|
-
return 'True';
|
|
2134
|
-
}
|
|
2135
|
-
return 'False';
|
|
2136
|
-
};
|
|
2137
|
-
}
|
|
2138
|
-
else {
|
|
2139
|
-
columnFormatters[field.name] = (x) => x;
|
|
2140
|
-
}
|
|
2141
|
-
});
|
|
2142
|
-
return response.rows.map((row) => {
|
|
2143
|
-
const newRow = {};
|
|
2144
|
-
Object.keys(row).forEach((key) => (newRow[key] = columnFormatters[key]
|
|
2145
|
-
? columnFormatters[key](row[key])
|
|
2146
|
-
: row[key]));
|
|
2147
|
-
return newRow;
|
|
2148
|
-
});
|
|
2149
|
-
};
|
|
2150
2144
|
// Returns whether a where-clause contains a nested subquery.
|
|
2151
2145
|
const isSubquery = (node) => {
|
|
2152
2146
|
if (!node)
|
|
@@ -2170,7 +2164,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2170
2164
|
return;
|
|
2171
2165
|
}
|
|
2172
2166
|
try {
|
|
2173
|
-
let errored = false;
|
|
2174
2167
|
setLoading(true);
|
|
2175
2168
|
setAskedAQuestion(true);
|
|
2176
2169
|
setErrorMessage('');
|
|
@@ -2190,6 +2183,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2190
2183
|
body: JSON.stringify({
|
|
2191
2184
|
initialQuestion: aiPrompt || overridePrompt,
|
|
2192
2185
|
publicKey: client.publicKey,
|
|
2186
|
+
useNewNodeSql: true, // new flag
|
|
2193
2187
|
}),
|
|
2194
2188
|
});
|
|
2195
2189
|
}
|
|
@@ -2201,6 +2195,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2201
2195
|
sqlQuery: activeQuery,
|
|
2202
2196
|
initialQuestion: aiPrompt,
|
|
2203
2197
|
publicKey: client.publicKey,
|
|
2198
|
+
useNewNodeSql: true, // new flag
|
|
2204
2199
|
}),
|
|
2205
2200
|
});
|
|
2206
2201
|
}
|
|
@@ -2218,31 +2213,34 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2218
2213
|
setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
|
|
2219
2214
|
return;
|
|
2220
2215
|
}
|
|
2216
|
+
let currentSchema = schema;
|
|
2217
|
+
if (currentSchema && currentSchema.length === 0) {
|
|
2218
|
+
currentSchema = await fetchSchema();
|
|
2219
|
+
}
|
|
2221
2220
|
let newAst, groupByPivot;
|
|
2222
2221
|
if (ast) {
|
|
2223
2222
|
// Unwrap the ast object, supporting many possible types
|
|
2224
2223
|
ast = ast.length ? ast[0] : ast;
|
|
2225
2224
|
newAst = (0, convert_1.convertBigQuery)(ast);
|
|
2226
|
-
newAst = (0, convert_1.convertWildcardColumns)(newAst,
|
|
2227
|
-
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot,
|
|
2228
|
-
if (groupByPivot && !groupByPivot?.valueField) {
|
|
2229
|
-
setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
|
|
2230
|
-
return;
|
|
2231
|
-
}
|
|
2225
|
+
newAst = (0, convert_1.convertWildcardColumns)(newAst, currentSchema); // must go before groupby
|
|
2226
|
+
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, currentSchema));
|
|
2232
2227
|
newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
|
|
2233
2228
|
newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
|
|
2234
2229
|
const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
|
|
2235
2230
|
const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
|
|
2231
|
+
newAst = (0, convert_1.convertUnaryToBinary)(newAst);
|
|
2236
2232
|
newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table, getAllPossibleColumns().map((col) => col.name));
|
|
2237
|
-
|
|
2233
|
+
const procesedColumns = (0, util_1.deepCopy)(newAst).columns?.map((column) => {
|
|
2238
2234
|
if (column.expr.type === 'column_ref') {
|
|
2239
|
-
|
|
2235
|
+
const columnName = (0, ast_1.extractColumnish)(column.expr);
|
|
2236
|
+
return `${table}.${columnName}`;
|
|
2240
2237
|
}
|
|
2241
2238
|
else if (column.as) {
|
|
2242
2239
|
return `${table}.${column.as}`;
|
|
2243
2240
|
}
|
|
2244
2241
|
return `${table}.${column.expr.value}`;
|
|
2245
|
-
})
|
|
2242
|
+
});
|
|
2243
|
+
setSelectedColumns(procesedColumns);
|
|
2246
2244
|
if (groupByPivot) {
|
|
2247
2245
|
setBaseAst((0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null }));
|
|
2248
2246
|
newAst = (0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null });
|
|
@@ -2258,7 +2256,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2258
2256
|
ast = newAst; // so we fetch data for newAst later.
|
|
2259
2257
|
fetchSqlQuery(ast, undefined, false);
|
|
2260
2258
|
const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
|
|
2261
|
-
const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
|
|
2262
2259
|
const hostedBody = {
|
|
2263
2260
|
metadata: {
|
|
2264
2261
|
clientId: client.publicKey,
|
|
@@ -2269,19 +2266,19 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2269
2266
|
additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
|
|
2270
2267
|
useUpdatedDataGathering: true,
|
|
2271
2268
|
pivot: groupByPivot,
|
|
2269
|
+
useNewNodeSql: true, // new flag
|
|
2272
2270
|
},
|
|
2273
2271
|
};
|
|
2274
|
-
const cloudBody = {};
|
|
2275
|
-
const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
|
|
2276
|
-
if (data2.status === 'error') {
|
|
2277
|
-
throw new Error('Error querying data from patterns');
|
|
2278
|
-
}
|
|
2279
2272
|
let currentUniqueValues = uniqueValues;
|
|
2280
2273
|
let dateRangesTemp = dateRanges;
|
|
2281
|
-
if (
|
|
2282
|
-
|
|
2274
|
+
if ((currentUniqueValues &&
|
|
2275
|
+
currentUniqueValues[table] &&
|
|
2276
|
+
Object.keys(currentUniqueValues[table]).length === 0) ||
|
|
2277
|
+
table !== currentTable) {
|
|
2278
|
+
const tableInfo = currentSchema.find((tableInfo) => tableInfo.name === table);
|
|
2283
2279
|
if (tableInfo) {
|
|
2284
2280
|
const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
|
|
2281
|
+
currentUniqueValues = newUniqueValues;
|
|
2285
2282
|
if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
|
|
2286
2283
|
setUniqueValues(newUniqueValues);
|
|
2287
2284
|
}
|
|
@@ -2290,8 +2287,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2290
2287
|
}
|
|
2291
2288
|
setCurrentTable(table);
|
|
2292
2289
|
}
|
|
2290
|
+
const cloudBody = {};
|
|
2291
|
+
const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
|
|
2292
|
+
if (!data2 || data2.status === 'error') {
|
|
2293
|
+
throw new Error('Error querying data from patterns');
|
|
2294
|
+
}
|
|
2293
2295
|
if (data2.rows && data2.rows.length) {
|
|
2294
|
-
const processedFields = data2.fields
|
|
2296
|
+
const processedFields = data2.fields
|
|
2297
|
+
.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem))
|
|
2298
|
+
.map((elem) => {
|
|
2299
|
+
const tableInfo = currentSchema.find((t) => t.name === table);
|
|
2300
|
+
const columnInfo = tableInfo?.columns.find((column) => column.name === elem.field);
|
|
2301
|
+
return columnInfo
|
|
2302
|
+
? (0, columnProcessing_1.convertColumnInfoToColumnInternal)(columnInfo)
|
|
2303
|
+
: null;
|
|
2304
|
+
})
|
|
2305
|
+
.filter((elem) => elem);
|
|
2295
2306
|
let possiblePivot = true;
|
|
2296
2307
|
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
|
|
2297
2308
|
if (groupByPivot &&
|
|
@@ -2305,7 +2316,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2305
2316
|
let errorMessageEnding = '';
|
|
2306
2317
|
if (groupByPivot.columnField &&
|
|
2307
2318
|
!possibleColumns.columnFields.includes(groupByPivot?.columnField || '')) {
|
|
2308
|
-
if (currentUniqueValues[table][groupByPivot?.columnField || '']) {
|
|
2319
|
+
if (currentUniqueValues[table]?.[groupByPivot?.columnField || '']) {
|
|
2309
2320
|
errorMessageEnding = `The column ${groupByPivot?.columnField} has more than 24 unique values to pivot on.`;
|
|
2310
2321
|
}
|
|
2311
2322
|
else {
|
|
@@ -2314,7 +2325,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2314
2325
|
}
|
|
2315
2326
|
else if (groupByPivot.rowField &&
|
|
2316
2327
|
!possibleColumns.rowFields.includes(groupByPivot?.rowField || '')) {
|
|
2317
|
-
if (currentUniqueValues[table][groupByPivot?.rowField || '']) {
|
|
2328
|
+
if (currentUniqueValues[table]?.[groupByPivot?.rowField || '']) {
|
|
2318
2329
|
errorMessageEnding = `The column ${groupByPivot?.rowField} has more than 36 unique values to pivot on.`;
|
|
2319
2330
|
}
|
|
2320
2331
|
else {
|
|
@@ -2326,7 +2337,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2326
2337
|
errorMessageEnding = `The column ${groupByPivot?.valueField} is not a proper value field.`;
|
|
2327
2338
|
}
|
|
2328
2339
|
setErrorMessage(`The requested pivot is not supported. ${errorMessageEnding}`);
|
|
2329
|
-
errored = true;
|
|
2330
2340
|
}
|
|
2331
2341
|
if (groupByPivot && possiblePivot) {
|
|
2332
2342
|
let curReport = report ? report : undefined;
|
|
@@ -2403,7 +2413,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2403
2413
|
setActiveQuery('');
|
|
2404
2414
|
}
|
|
2405
2415
|
if (data2.errorMessage) {
|
|
2406
|
-
setErrorMessage(`Error:
|
|
2416
|
+
setErrorMessage(`Error: Couldn't process your request, please re-word your prompt.`);
|
|
2407
2417
|
}
|
|
2408
2418
|
}
|
|
2409
2419
|
catch (e) {
|
|
@@ -2423,7 +2433,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2423
2433
|
setSelectedColumns((selectedColumns) => selectedColumns.filter((column) => !column.endsWith(name)));
|
|
2424
2434
|
const columns = baseAst.columns.filter((col) => {
|
|
2425
2435
|
if (col.expr.type === 'column_ref') {
|
|
2426
|
-
return col.expr.column !== name
|
|
2436
|
+
return (col.expr.column !== name &&
|
|
2437
|
+
(!col.expr.column.expr || col.expr.column.expr.value !== name));
|
|
2427
2438
|
}
|
|
2428
2439
|
else if (col.as) {
|
|
2429
2440
|
return col.as !== name;
|
|
@@ -2438,14 +2449,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2438
2449
|
setBaseAst(newAst);
|
|
2439
2450
|
fetchSqlQuery(newAst);
|
|
2440
2451
|
};
|
|
2441
|
-
function TopLevelBooleanSwitch({ node, keyPrefix, handleOperatorChange, }) {
|
|
2442
|
-
return ((0, jsx_runtime_1.jsx)("div", { style: { width: 'fit-content' }, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: node.operator, options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: (event) => {
|
|
2443
|
-
if (loading) {
|
|
2444
|
-
return;
|
|
2445
|
-
}
|
|
2446
|
-
handleOperatorChange(event.target.value, node, keyPrefix);
|
|
2447
|
-
} }) }));
|
|
2448
|
-
}
|
|
2449
2452
|
const DraggableItem = ({ id, label, onDelete }) => {
|
|
2450
2453
|
const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
|
|
2451
2454
|
const style = {
|
|
@@ -2472,7 +2475,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2472
2475
|
setOrderedColumnNames(newOrder);
|
|
2473
2476
|
const orderedSelectedColumns = [];
|
|
2474
2477
|
for (const value of newOrder) {
|
|
2475
|
-
const
|
|
2478
|
+
const column = value.split('.')[1];
|
|
2476
2479
|
if (selectedColumns.includes(value)) {
|
|
2477
2480
|
orderedSelectedColumns.push(column);
|
|
2478
2481
|
}
|
|
@@ -2496,12 +2499,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2496
2499
|
fetchSqlQuery(newAst, undefined, false);
|
|
2497
2500
|
}
|
|
2498
2501
|
}
|
|
2499
|
-
const columnNamesInAst = baseAst?.columns
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
+
const columnNamesInAst = baseAst?.columns
|
|
2503
|
+
.map((col) => {
|
|
2504
|
+
if (col.expr.type === 'column_ref' && col.expr.column) {
|
|
2505
|
+
if (typeof col.expr.column === 'string') {
|
|
2506
|
+
return col.expr.column;
|
|
2507
|
+
}
|
|
2508
|
+
else {
|
|
2509
|
+
return col.expr.column.expr.value;
|
|
2510
|
+
}
|
|
2502
2511
|
}
|
|
2503
2512
|
else if (col.as) {
|
|
2504
|
-
|
|
2513
|
+
if (typeof col.as === 'string') {
|
|
2514
|
+
return col.as;
|
|
2515
|
+
}
|
|
2516
|
+
else {
|
|
2517
|
+
return col.as.expr?.value;
|
|
2518
|
+
}
|
|
2505
2519
|
}
|
|
2506
2520
|
else if (col.expr && col.expr.type === 'aggr_func') {
|
|
2507
2521
|
if (col.expr.args) {
|
|
@@ -2510,22 +2524,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2510
2524
|
return col.expr.name;
|
|
2511
2525
|
}
|
|
2512
2526
|
return col.expr.value;
|
|
2513
|
-
})
|
|
2527
|
+
})
|
|
2528
|
+
.filter(
|
|
2529
|
+
// remove duplicate entries
|
|
2530
|
+
(value, index, self) => value && self.indexOf(value) === index) ?? [];
|
|
2514
2531
|
return ((0, jsx_runtime_1.jsx)(core_1.DndContext, { sensors: sensors, collisionDetection: core_1.closestCenter, onDragEnd: handleDragEnd, children: (0, jsx_runtime_1.jsx)(sortable_1.SortableContext, { items: columnNamesInAst, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2515
2532
|
display: 'flex',
|
|
2516
2533
|
flexDirection: 'column',
|
|
2517
2534
|
gap: 8,
|
|
2518
2535
|
}, children: [columnNamesInAst.map((name) => ((0, jsx_runtime_1.jsx)(DraggableItem, { id: name, label: name, onDelete: () => handleDeleteColumn(name) }, name))), columnNamesInAst?.length > 0 && (0, jsx_runtime_1.jsx)("div", { style: { height: 6 } })] }) }) }));
|
|
2519
2536
|
}
|
|
2520
|
-
if (loading ||
|
|
2537
|
+
if (loading || initialChartLoad) {
|
|
2521
2538
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2522
2539
|
display: 'flex',
|
|
2523
2540
|
flexDirection: 'row',
|
|
2524
2541
|
height: '100%',
|
|
2525
2542
|
...containerStyle,
|
|
2526
2543
|
}, className: className, ref: parentRef, children: [(0, jsx_runtime_1.jsxs)(SidebarComponent, { children: [(0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Columns" }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2527
|
-
if (loadingSchema)
|
|
2528
|
-
return;
|
|
2529
2544
|
if (!openPopover) {
|
|
2530
2545
|
setOpenPopover('AddColumnModal');
|
|
2531
2546
|
}
|
|
@@ -2546,12 +2561,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2546
2561
|
}, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
|
|
2547
2562
|
setBaseAst(ast);
|
|
2548
2563
|
fetchSqlQuery(ast);
|
|
2549
|
-
}, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2564
|
+
}, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2550
2565
|
display: 'flex',
|
|
2551
2566
|
flexDirection: 'column',
|
|
2552
2567
|
gap: 8,
|
|
2553
2568
|
marginBottom: 12,
|
|
2554
|
-
}, children:
|
|
2569
|
+
}, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2555
2570
|
display: 'flex',
|
|
2556
2571
|
flexDirection: 'column',
|
|
2557
2572
|
alignItems: 'flex-start',
|
|
@@ -2563,7 +2578,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2563
2578
|
}
|
|
2564
2579
|
if (!openPopover) {
|
|
2565
2580
|
const value = orderedColumnNames[0];
|
|
2566
|
-
const
|
|
2581
|
+
const column = value.split('.')[1];
|
|
2567
2582
|
const columnType = getColumnTypeByName(column);
|
|
2568
2583
|
if ((0, ast_1.isNumericColumnType)(columnType)) {
|
|
2569
2584
|
const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
|
|
@@ -2592,27 +2607,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2592
2607
|
setActiveEditItem(null);
|
|
2593
2608
|
}, 300);
|
|
2594
2609
|
}
|
|
2595
|
-
}, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
}
|
|
2605
|
-
else {
|
|
2606
|
-
setIsPending(false);
|
|
2607
|
-
handleInsertion(activeEditItem, 'AND', false);
|
|
2608
|
-
setActivePath(null);
|
|
2609
|
-
setOpenPopover(null);
|
|
2610
|
-
setTimeout(() => {
|
|
2611
|
-
clearCheckboxes();
|
|
2612
|
-
setActiveEditItem(null);
|
|
2613
|
-
}, 300);
|
|
2614
|
-
}
|
|
2615
|
-
}, Button: ButtonComponent, renderNode: renderNode, activeEditItem: activeEditItem }) }) }), baseAst?.where &&
|
|
2610
|
+
}, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
|
|
2611
|
+
s.displayName === currentTable) ?? schema[0], fieldValuesMap: uniqueValues[(0, ast_1.getTableNames)(baseAst).length === 1
|
|
2612
|
+
? (0, ast_1.getTableNames)(baseAst)[0]
|
|
2613
|
+
: initialTableName], onSubmitFilter: (filter) => {
|
|
2614
|
+
setOpenPopover(null);
|
|
2615
|
+
setIsPending(false);
|
|
2616
|
+
const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
|
|
2617
|
+
handleInsertion(item, 'AND', false);
|
|
2618
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
|
|
2616
2619
|
false && ( // temp removed the AddConditionPopover
|
|
2617
2620
|
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2618
2621
|
if (!openPopover) {
|
|
@@ -2651,14 +2654,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2651
2654
|
setActivePath(null);
|
|
2652
2655
|
setOpenPopover(null);
|
|
2653
2656
|
}
|
|
2654
|
-
} }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot:
|
|
2657
|
+
} }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, CardComponent: CardComponent, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEditingPivot, setShowUpdatePivot: setIsEditingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
|
|
2655
2658
|
setPivot(null);
|
|
2656
2659
|
setPivotData(null);
|
|
2657
2660
|
const formattedRows = formatRows(rows, columns, false);
|
|
2658
2661
|
setFormattedRows(formattedRows);
|
|
2659
2662
|
},
|
|
2660
2663
|
// TODOs
|
|
2661
|
-
selectPivot: (
|
|
2664
|
+
selectPivot: () => {
|
|
2662
2665
|
return;
|
|
2663
2666
|
}, selectPivotOnEdit: true, showTrigger: !pivot, theme: theme, LabelComponent: LabelComponent, HeaderComponent: HeaderComponent, dateRange: undefined, pivotCountRequest: 4, SecondaryButtonComponent: SecondaryButtonComponent, query: activeQuery, initialUniqueValues: uniqueValues[currentTable], disabled: !loading && (!baseAst || !dataDisplayed), pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, report: tempReport ?? report }), pivot && ((0, jsx_runtime_1.jsx)(PivotForm_1.default, { columns: columns, uniqueValues: uniqueValues[currentTable], setPivotRowField: (value) => {
|
|
2664
2667
|
setPivotRowField(value);
|
|
@@ -2675,7 +2678,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2675
2678
|
}, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
|
|
2676
2679
|
type: pivot.sortDirection,
|
|
2677
2680
|
expr: { type: 'column_ref', column: pivot.sortField },
|
|
2678
|
-
}, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
2681
|
+
}, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
|
|
2679
2682
|
setPivot({ ...pivot, sort: false });
|
|
2680
2683
|
setBaseAst((0, util_1.deepCopy)(baseAst));
|
|
2681
2684
|
if (!pivot) {
|
|
@@ -2724,7 +2727,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2724
2727
|
if (!pivot) {
|
|
2725
2728
|
fetchSqlQuery(newAst);
|
|
2726
2729
|
}
|
|
2727
|
-
}, setIsPending: setIsPending, setEditPopoverKey:
|
|
2730
|
+
}, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
|
|
2728
2731
|
const newAst = { ...baseAst };
|
|
2729
2732
|
newAst.orderby.splice(id, 1);
|
|
2730
2733
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
@@ -2747,7 +2750,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2747
2750
|
setActivePath(null);
|
|
2748
2751
|
setOpenPopover(null);
|
|
2749
2752
|
}
|
|
2750
|
-
}, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: SelectComponent, Button: ButtonComponent, onSave: () => { } }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2753
|
+
}, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: selectedColumns, Select: SelectComponent, Button: ButtonComponent, onSave: () => { } }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit && baseAst.limit.value?.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2751
2754
|
display: 'flex',
|
|
2752
2755
|
flexDirection: 'column',
|
|
2753
2756
|
gap: 8,
|
|
@@ -2802,7 +2805,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2802
2805
|
? askAIInputWidth
|
|
2803
2806
|
: askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
|
|
2804
2807
|
initialLoad ||
|
|
2805
|
-
|
|
2808
|
+
initialChartLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => { }, label: "New report" }))] }) })), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(TableComponent, { isLoading: true, rows: [], columns: [] }), baseAst && dataDisplayed && !initialChartLoad && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2806
2809
|
display: 'flex',
|
|
2807
2810
|
flexDirection: 'row',
|
|
2808
2811
|
gap: '12px',
|
|
@@ -2817,8 +2820,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2817
2820
|
boxSizing: 'border-box',
|
|
2818
2821
|
...containerStyle,
|
|
2819
2822
|
}, className: className, children: [(0, jsx_runtime_1.jsxs)(SidebarComponent, { children: [(0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Columns" }), (0, jsx_runtime_1.jsx)(DraggableColumns, {}), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2820
|
-
if (loadingSchema)
|
|
2821
|
-
return;
|
|
2822
2823
|
if (!orderedColumnNames) {
|
|
2823
2824
|
return;
|
|
2824
2825
|
}
|
|
@@ -2842,12 +2843,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2842
2843
|
}, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
|
|
2843
2844
|
setBaseAst(ast);
|
|
2844
2845
|
fetchSqlQuery(ast);
|
|
2845
|
-
}, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2846
|
+
}, pivot: pivot, initialTableName: initialTableName, defaultAST: constants_1.defaultAST, defaultTable: constants_1.defaultTable, schemaLoading: loadingSchema, setPivot: setPivot, TextInput: TextInputComponent, SelectColumn: SelectColumnComponent, SecondaryButton: SecondaryButtonComponent, Button: ButtonComponent, ColumnSearchEmptyState: ColumnSearchEmptyState, LoadingComponent: LoadingComponent }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Filters" }), formData && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
2846
2847
|
display: 'flex',
|
|
2847
2848
|
flexDirection: 'column',
|
|
2848
2849
|
gap: 8,
|
|
2849
2850
|
marginBottom: 12,
|
|
2850
|
-
}, children:
|
|
2851
|
+
}, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2851
2852
|
display: 'flex',
|
|
2852
2853
|
flexDirection: 'column',
|
|
2853
2854
|
alignItems: 'flex-start',
|
|
@@ -2859,7 +2860,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2859
2860
|
}
|
|
2860
2861
|
if (!openPopover) {
|
|
2861
2862
|
const value = orderedColumnNames[0];
|
|
2862
|
-
const
|
|
2863
|
+
const column = value.split('.')[1];
|
|
2863
2864
|
const columnType = getColumnTypeByName(column);
|
|
2864
2865
|
if ((0, ast_1.isNumericColumnType)(columnType)) {
|
|
2865
2866
|
const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
|
|
@@ -2889,27 +2890,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2889
2890
|
setActiveEditItem(null);
|
|
2890
2891
|
}, 300);
|
|
2891
2892
|
}
|
|
2892
|
-
}, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
setActiveEditItem(null);
|
|
2900
|
-
}, 300);
|
|
2901
|
-
}
|
|
2902
|
-
else {
|
|
2903
|
-
setOpenPopover(null);
|
|
2904
|
-
setIsPending(false);
|
|
2905
|
-
handleInsertion(activeEditItem, 'AND', false);
|
|
2906
|
-
setActivePath(null);
|
|
2907
|
-
setTimeout(() => {
|
|
2908
|
-
clearCheckboxes();
|
|
2909
|
-
setActiveEditItem(null);
|
|
2910
|
-
}, 300);
|
|
2911
|
-
}
|
|
2912
|
-
}, Button: ButtonComponent, renderNode: renderNode, activeEditItem: activeEditItem }) }) }), baseAst?.where &&
|
|
2893
|
+
}, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
|
|
2894
|
+
s.displayName === currentTable) ?? schema[0], fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
|
|
2895
|
+
setOpenPopover(null);
|
|
2896
|
+
setIsPending(false);
|
|
2897
|
+
const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
|
|
2898
|
+
handleInsertion(item, 'AND', false);
|
|
2899
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
|
|
2913
2900
|
false && ( // temp removed the AddConditionPopover
|
|
2914
2901
|
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2915
2902
|
if (!openPopover) {
|
|
@@ -2949,7 +2936,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2949
2936
|
setOpenPopover(null);
|
|
2950
2937
|
clearCheckboxes();
|
|
2951
2938
|
}
|
|
2952
|
-
} }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot:
|
|
2939
|
+
} }) })] }))] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Pivot" }), (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: initialTableName, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, TextComponent: TextComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEditingPivot, setShowUpdatePivot: setIsEditingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: () => {
|
|
2953
2940
|
setPivot(null);
|
|
2954
2941
|
setPivotData(null);
|
|
2955
2942
|
const formattedRows = formatRows(rows, columns, false);
|
|
@@ -3008,7 +2995,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3008
2995
|
`.${pivot.rowField}`,
|
|
3009
2996
|
`.${pivot.valueField || 'count'}`,
|
|
3010
2997
|
]
|
|
3011
|
-
: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
2998
|
+
: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
|
|
3012
2999
|
if (pivot) {
|
|
3013
3000
|
const tempPivot = { ...pivot, sort: false };
|
|
3014
3001
|
let dateBucket = undefined;
|
|
@@ -3063,7 +3050,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3063
3050
|
flexDirection: 'column',
|
|
3064
3051
|
gap: 8,
|
|
3065
3052
|
marginBottom: 12,
|
|
3066
|
-
}, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
3053
|
+
}, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
|
|
3067
3054
|
if (pivot) {
|
|
3068
3055
|
setPivot({ ...pivot, sort: false });
|
|
3069
3056
|
return;
|
|
@@ -3173,7 +3160,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3173
3160
|
setOpenPopover(null);
|
|
3174
3161
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
3175
3162
|
fetchSqlQuery((0, util_1.deepCopy)(newAst));
|
|
3176
|
-
} }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
3163
|
+
} }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit && baseAst.limit.value?.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
3177
3164
|
display: 'flex',
|
|
3178
3165
|
flexDirection: 'column',
|
|
3179
3166
|
gap: 8,
|
|
@@ -3246,7 +3233,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3246
3233
|
? 'Ask a follow-up question...'
|
|
3247
3234
|
: 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleAsk, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: tableLoading ||
|
|
3248
3235
|
(loading && errorMessage.length === 0) ||
|
|
3249
|
-
|
|
3236
|
+
initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
|
|
3250
3237
|
? pivotData?.columns || emptyPivotColumns()
|
|
3251
3238
|
: enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
|
|
3252
3239
|
return {
|
|
@@ -3264,9 +3251,10 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3264
3251
|
overflow: 'hidden',
|
|
3265
3252
|
width: '100%',
|
|
3266
3253
|
gap: 12,
|
|
3267
|
-
|
|
3254
|
+
alignItems: 'center',
|
|
3255
|
+
}, children: [(0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: errorMessage }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAsk, label: 'Retry' })] })) : ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' } })), baseAst && dataDisplayed && !initialChartLoad && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [!hideCopySQL && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: isCopying ? '✅ Copied' : 'Copy SQL', onClick: () => copySQLToClipboard() })), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
|
|
3268
3256
|
setIsChartBuilderOpen(true);
|
|
3269
|
-
}, label: report ? 'Save changes' : 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: report
|
|
3257
|
+
}, disabled: !!errorMessage, label: report ? 'Save changes' : 'Add to dashboard' })] }))] })] }), (0, jsx_runtime_1.jsx)("style", { children: `body{margin:0;}` })] })), (!isChartBuilderHorizontalView || isChartBuilderOpen) && ((0, jsx_runtime_1.jsx)(ChartBuilder_1.ChartBuilderWithModal, { report: report
|
|
3270
3258
|
? {
|
|
3271
3259
|
...report,
|
|
3272
3260
|
...tempReport,
|
|
@@ -3280,6 +3268,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3280
3268
|
queryString: activeQuery,
|
|
3281
3269
|
rows: rows,
|
|
3282
3270
|
}
|
|
3283
|
-
: tempReport, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement }))] }));
|
|
3271
|
+
: tempReport, rows: rows, columns: columns, pivot: pivot, query: activeQuery, showTableFormatOptions: showChartBuilderTableFormatOptions, showDateFieldOptions: isAdminEnabled, showAccessControlOptions: isAdminEnabled, title: report ? 'Save changes' : 'Add to dashboard', isHorizontalView: true, isOpen: isChartBuilderOpen, setIsOpen: setIsChartBuilderOpen, onAddToDashboardComplete: report ? onSubmitEditReport : onSubmitCreateReport, destinationDashboard: destinationDashboard, organizationName: organizationName, pivotData: pivotData, initialUniqueValues: uniqueValues[currentTable], pivotRecommendationsEnabled: pivotRecommendationsEnabled && overrideRecommendations, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, CardComponent: CardComponent, ModalComponent: ChartBuilderModalComponent, PopoverComponent: PopoverComponent, TableComponent: TableComponent, DeleteButtonComponent: DeleteButtonComponent, LoadingComponent: LoadingComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, FormContainer: ChartBuilderFormContainer, hideDateRangeFilter: true, buttonLabel: report ? 'Save changes' : 'Add to dashboard', onClickChartElement: onClickChartElement, rowCount: numberOfRows, onPageChange: onPageChange, onSortChange: onSortChange, isLoading: tableLoading }))] }));
|
|
3284
3272
|
}
|
|
3285
3273
|
exports.default = ReportBuilder;
|