@quillsql/react 2.12.29 → 2.12.30
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 +24 -10
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +143 -183
- package/dist/cjs/ChartBuilder.d.ts +18 -12
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +125 -98
- package/dist/cjs/ChartEditor.d.ts +13 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +62 -121
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +42 -2
- package/dist/cjs/Dashboard.d.ts +16 -7
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +17 -22
- 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 -3
- 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 +17 -5
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +510 -487
- package/dist/cjs/SQLEditor.d.ts +2 -9
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +69 -86
- package/dist/cjs/Table.d.ts +19 -3
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +105 -87
- 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/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.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +2 -2
- 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 +2 -6
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +88 -181
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -4
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
- 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 +2 -2
- package/dist/cjs/components/QuillSelect.js +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +2 -2
- 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 +22 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.js +555 -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 +12 -15
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +326 -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 +30 -4
- 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 +10 -7
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +9 -8
- 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 +114 -82
- 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 +1 -0
- 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 +1 -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/Filter.d.ts +104 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +91 -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 +116 -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 +8056 -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/csv.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +3 -3
- 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 +8 -0
- package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/dataProcessing.js +127 -0
- package/dist/cjs/utils/dates.d.ts +1 -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.js +4 -4
- 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.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +9 -0
- 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 +7 -0
- package/dist/cjs/utils/report.d.ts.map +1 -0
- package/dist/cjs/utils/report.js +93 -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 +24 -10
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +146 -186
- package/dist/esm/ChartBuilder.d.ts +18 -12
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +126 -99
- package/dist/esm/ChartEditor.d.ts +13 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +63 -122
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +42 -2
- package/dist/esm/Dashboard.d.ts +16 -7
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +17 -22
- 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 -3
- 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 +17 -5
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +516 -493
- package/dist/esm/SQLEditor.d.ts +2 -9
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +68 -85
- package/dist/esm/Table.d.ts +19 -3
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +107 -89
- 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/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.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +2 -2
- 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 +2 -6
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +88 -181
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -4
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +3 -3
- 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 +2 -2
- package/dist/esm/components/QuillSelect.js +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +2 -2
- 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 +22 -0
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/FilterModal.js +552 -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 +12 -15
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +324 -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 +1152 -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 +28 -3
- 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 +10 -7
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +9 -8
- 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 +114 -82
- 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 +1 -0
- 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 +1 -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/Filter.d.ts +104 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +90 -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 +116 -0
- package/dist/esm/models/Report.d.ts.map +1 -0
- package/dist/esm/models/Report.js +1 -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 +8049 -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 +2729 -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/csv.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +3 -3
- 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 +8 -0
- package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
- package/dist/esm/utils/dataProcessing.js +122 -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 +204 -0
- package/dist/esm/utils/dates.d.ts +1 -1
- 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.js +4 -4
- 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.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +9 -0
- 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 +7 -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 +88 -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 Filter_1 = require("./models/Filter");
|
|
45
|
+
const astFilterProcessing_1 = require("./utils/astFilterProcessing");
|
|
46
|
+
const useAstToFilterTree_1 = __importDefault(require("./hooks/useAstToFilterTree"));
|
|
47
|
+
const QuillMultiSelect_1 = require("./components/QuillMultiSelect");
|
|
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 = QuillMultiSelect_1.QuillMultiSelectComponent, 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)('');
|
|
@@ -101,7 +105,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
101
105
|
const [columns, setColumns] = (0, react_1.useState)([]);
|
|
102
106
|
const [tempReport, setTempReport] = (0, react_1.useState)({});
|
|
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,13 @@ 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 [openFilterIndex, setOpenFilterIndex] = (0, react_1.useState)(null); // Sets open filter modals
|
|
137
|
+
const [fieldValuesMap, setFieldValuesMap] = (0, react_1.useState)({}); // Mapping of unique values per field, used in string filter 'in' and 'not in'
|
|
138
|
+
const filterTree = (0, useAstToFilterTree_1.default)(formData, client); // Stores the state of filters
|
|
134
139
|
(0, react_1.useEffect)(() => {
|
|
135
140
|
if (!client) {
|
|
136
141
|
return;
|
|
@@ -146,6 +151,21 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
146
151
|
(0, width_1.updateFirstChildWidth)(askAIContainerRef, setAskAIInputWidth, { gap: 12 });
|
|
147
152
|
(0, width_1.updateFirstChildWidth)(askAILoadingContainerRef, setAskAILoadingContainerWidth, { gap: 12 });
|
|
148
153
|
}, [dataDisplayed]);
|
|
154
|
+
// Whenever unique values changes, update the fieldValuesMap, used in FilterModals
|
|
155
|
+
(0, react_1.useEffect)(() => {
|
|
156
|
+
const tables = (0, ast_1.getTableNames)(baseAst);
|
|
157
|
+
const table = tables.length === 1 ? tables[0] : initialTableName;
|
|
158
|
+
const newFieldValues = {};
|
|
159
|
+
if (uniqueValues[table]) {
|
|
160
|
+
for (const field of Object.keys(uniqueValues[table])) {
|
|
161
|
+
newFieldValues[field] = [];
|
|
162
|
+
for (const value of Object.keys(uniqueValues[table][field])) {
|
|
163
|
+
newFieldValues[field]?.push(value);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
setFieldValuesMap(newFieldValues);
|
|
168
|
+
}, [uniqueValues]);
|
|
149
169
|
(0, react_1.useEffect)(() => {
|
|
150
170
|
// Since the TextInput component takes a required numeric width parameter,
|
|
151
171
|
// we dynamically calculate the width of this component here.
|
|
@@ -184,7 +204,17 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
184
204
|
if (tempDateRange) {
|
|
185
205
|
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
186
206
|
}
|
|
187
|
-
|
|
207
|
+
let distinctValuesForQuery = {};
|
|
208
|
+
if (pivot.columnField) {
|
|
209
|
+
distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
|
|
210
|
+
{
|
|
211
|
+
field: pivot.columnField,
|
|
212
|
+
label: pivot.columnField,
|
|
213
|
+
format: 'string',
|
|
214
|
+
},
|
|
215
|
+
], activeQuery, [], client, customFields);
|
|
216
|
+
}
|
|
217
|
+
const pivotedData = await (0, PivotModal_1.generatePivotTable)(pivot, rows, undefined, false, -1, undefined, dateBucket, tempReport, client, distinctValuesForQuery);
|
|
188
218
|
setPivotData(pivotedData || []);
|
|
189
219
|
const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
|
|
190
220
|
setPivot(newPivot);
|
|
@@ -224,7 +254,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
224
254
|
setRows([]);
|
|
225
255
|
setColumns([]);
|
|
226
256
|
setTopLevelBinaryOperator('AND');
|
|
227
|
-
setEditPopoverKey(null);
|
|
228
257
|
setErrorMessage('');
|
|
229
258
|
setFormattedRows([]);
|
|
230
259
|
// setUniqueValues({});
|
|
@@ -252,8 +281,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
252
281
|
if (pivot) {
|
|
253
282
|
const formattedRows = copiedRows.map((row) => {
|
|
254
283
|
const formattedRow = row;
|
|
255
|
-
Object.keys(row).forEach((key
|
|
256
|
-
|
|
284
|
+
Object.keys(row).forEach((key) => {
|
|
285
|
+
const column = columns.find((c) => c.field === key);
|
|
257
286
|
let format = 'string';
|
|
258
287
|
if (!column) {
|
|
259
288
|
format =
|
|
@@ -313,42 +342,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
313
342
|
navigator.clipboard.writeText(query);
|
|
314
343
|
setTimeout(() => setIsCopying(false), 800);
|
|
315
344
|
};
|
|
316
|
-
const copyToClipboard = (str) => {
|
|
317
|
-
setIsCopying(true);
|
|
318
|
-
navigator.clipboard.writeText(str);
|
|
319
|
-
setTimeout(() => setIsCopying(false), 800);
|
|
320
|
-
};
|
|
321
345
|
const clearCheckboxes = () => {
|
|
322
346
|
const checkboxes = uniqueValues;
|
|
323
347
|
const newValues = {};
|
|
324
|
-
for (
|
|
348
|
+
for (const table of Object.keys(checkboxes)) {
|
|
325
349
|
newValues[table] = {};
|
|
326
|
-
for (
|
|
350
|
+
for (const column of Object.keys(checkboxes[table])) {
|
|
327
351
|
newValues[table][column] = {};
|
|
328
|
-
for (
|
|
352
|
+
for (const variant of Object.keys(checkboxes[table][column])) {
|
|
329
353
|
newValues[table][column][variant] = false;
|
|
330
354
|
}
|
|
331
355
|
}
|
|
332
356
|
}
|
|
333
357
|
setUniqueValues(newValues);
|
|
334
358
|
};
|
|
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
359
|
const fetchSqlQuery = async (ast, formData, fetchData = true) => {
|
|
353
360
|
if (fetchData) {
|
|
354
361
|
setLoading(true);
|
|
@@ -364,6 +371,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
364
371
|
body: JSON.stringify({
|
|
365
372
|
ast: { ...ast, where },
|
|
366
373
|
publicKey: client.publicKey,
|
|
374
|
+
useNewNodeSql: true, // new flag
|
|
367
375
|
}),
|
|
368
376
|
});
|
|
369
377
|
const data = await response.json();
|
|
@@ -371,6 +379,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
371
379
|
if (fetchData) {
|
|
372
380
|
fetchUponChange(ast, formData);
|
|
373
381
|
}
|
|
382
|
+
return data.query;
|
|
374
383
|
}
|
|
375
384
|
catch (error) {
|
|
376
385
|
setLoading(false);
|
|
@@ -495,83 +504,102 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
495
504
|
};
|
|
496
505
|
(0, react_1.useEffect)(() => {
|
|
497
506
|
const loadChart = async () => {
|
|
498
|
-
|
|
507
|
+
setInitialChartLoad(true);
|
|
508
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
499
509
|
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);
|
|
510
|
+
setInitialChartLoad(false);
|
|
512
511
|
return;
|
|
513
512
|
}
|
|
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,
|
|
513
|
+
try {
|
|
514
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
515
|
+
const tableName = report.referencedTables[0];
|
|
516
|
+
if (!tableName) {
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
const resp = await (0, dataFetcher_2.getDataFromCloud)(client, `astify`, {
|
|
520
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
521
|
+
query: report.queryString,
|
|
522
|
+
useNewNodeSql: true,
|
|
523
|
+
});
|
|
524
|
+
if (resp.success === false) {
|
|
525
|
+
setErrorMessage(resp.message);
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
const ast = (0, astProcessing_1.getSelectFromAST)(resp.ast);
|
|
529
|
+
let convertedAst = (0, astProcessing_1.processStarColumn)(ast, report.columns);
|
|
530
|
+
(0, astProcessing_1.processApostrophe)(convertedAst, ['type', 'value']);
|
|
531
|
+
convertedAst = (0, convert_1.convertBigQuery)(convertedAst);
|
|
532
|
+
const schemaInfo = schema.length !== 0 ? schema : await fetchSchema();
|
|
533
|
+
let newAst;
|
|
534
|
+
let groupByPivot = {};
|
|
535
|
+
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(convertedAst,
|
|
561
536
|
// @ts-ignore
|
|
562
|
-
|
|
563
|
-
|
|
537
|
+
report.pivot, schemaInfo));
|
|
538
|
+
if (convertedAst.where) {
|
|
539
|
+
setFormData((0, util_1.deepCopy)(convertedAst.where));
|
|
540
|
+
}
|
|
541
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
542
|
+
setActiveQuery(report.queryString);
|
|
543
|
+
newAst = groupByPivot ? newAst : convertedAst;
|
|
544
|
+
const initialRows = await fetchUponChange(newAst, undefined);
|
|
545
|
+
if (initialRows.error) {
|
|
546
|
+
setBaseAst(null);
|
|
547
|
+
setErrorMessage(initialRows.message);
|
|
548
|
+
setInitialChartLoad(false);
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
setBaseAst(newAst);
|
|
552
|
+
const tableInfo = schemaInfo.find((table) => table.name === tableName);
|
|
553
|
+
let newUniqueValues = undefined;
|
|
554
|
+
let dateRangesTemp = undefined;
|
|
555
|
+
if (tableName) {
|
|
556
|
+
newUniqueValues = await getUniqueStringValues(tableInfo.columns, tableName);
|
|
557
|
+
setUniqueValues(newUniqueValues);
|
|
558
|
+
dateRangesTemp = await getDateRanges(tableInfo.columns, tableName);
|
|
559
|
+
setDateRanges(dateRangesTemp);
|
|
560
|
+
}
|
|
561
|
+
if (groupByPivot) {
|
|
562
|
+
// @ts-ignore
|
|
563
|
+
setPivotRowField(groupByPivot.rowField);
|
|
564
|
+
// @ts-ignore
|
|
565
|
+
setPivotAggregation(groupByPivot.aggregationType);
|
|
566
|
+
// @ts-ignore
|
|
567
|
+
setPivotColumnField(groupByPivot.columnField);
|
|
568
|
+
// @ts-ignore
|
|
569
|
+
setPivotValueField(groupByPivot.valueField);
|
|
570
|
+
setPivot(groupByPivot);
|
|
571
|
+
let dateBucket = undefined;
|
|
572
|
+
const tempDateRange = dateRangesTemp &&
|
|
573
|
+
groupByPivot.rowField &&
|
|
574
|
+
dateRangesTemp[groupByPivot.rowField];
|
|
575
|
+
if (tempDateRange) {
|
|
576
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
577
|
+
}
|
|
578
|
+
const pivotedData = await (0, PivotModal_1.generatePivotTable)(
|
|
579
|
+
// @ts-ignore
|
|
580
|
+
groupByPivot, initialRows, tempDateRange, false, -1, undefined, dateBucket, report, client, newUniqueValues[tableName]);
|
|
581
|
+
setPivotData(pivotedData || []);
|
|
582
|
+
const formattedRows = formatRows(pivotedData.rows, report.columns, true,
|
|
583
|
+
// @ts-ignore
|
|
584
|
+
groupByPivot.aggregationType);
|
|
585
|
+
setFormattedRows(formattedRows);
|
|
586
|
+
}
|
|
587
|
+
else {
|
|
588
|
+
const formattedRows = formatRows(report.rows, report.columns);
|
|
589
|
+
setFormattedRows(formattedRows);
|
|
590
|
+
}
|
|
591
|
+
setCurrentTable(tableName);
|
|
564
592
|
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
593
|
+
catch (error) {
|
|
594
|
+
console.error(error);
|
|
595
|
+
setErrorMessage('Error loading report');
|
|
568
596
|
}
|
|
569
|
-
setCurrentTable(tableName);
|
|
570
597
|
// This handles a flashing issue
|
|
571
598
|
setTimeout(() => {
|
|
572
|
-
|
|
599
|
+
setInitialChartLoad(false);
|
|
573
600
|
}, 500);
|
|
574
601
|
};
|
|
602
|
+
// @ts-ignore THIS PROCESS SHOULD BE UPDATED TO NOT USE USEQUILL
|
|
575
603
|
if (report && report.referencedTables.length === 1) {
|
|
576
604
|
loadChart();
|
|
577
605
|
}
|
|
@@ -897,10 +925,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
897
925
|
isReplaceSubtree: true,
|
|
898
926
|
});
|
|
899
927
|
};
|
|
900
|
-
// Function to handle the deletion of expressions
|
|
901
|
-
const handleDelete = (key) => {
|
|
902
|
-
updateFormData([{ path: key, value: null }], { isDeletion: true });
|
|
903
|
-
};
|
|
904
928
|
// Function to handle the insertion of expressions
|
|
905
929
|
const handleInsertion = (value, op = 'OR', isCondition = undefined) => {
|
|
906
930
|
updateFormData([{ path: '', value }], {
|
|
@@ -965,84 +989,61 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
965
989
|
};
|
|
966
990
|
const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
|
|
967
991
|
const [currentProcessing, setCurrentProcessing] = (0, react_1.useState)({
|
|
968
|
-
page:
|
|
992
|
+
page: paginationProcessing_1.DEFAULT_PAGINATION,
|
|
969
993
|
});
|
|
970
994
|
const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
|
|
971
995
|
const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
|
|
972
996
|
const onPageChange = (page) => {
|
|
973
|
-
if (
|
|
974
|
-
|
|
997
|
+
if (currentProcessing.page &&
|
|
998
|
+
(0, paginationProcessing_1.shouldFetchMore)(paginationProcessing_1.DEFAULT_PAGINATION, page, previousPage)) {
|
|
999
|
+
const newPagination = { ...currentProcessing.page, page };
|
|
1000
|
+
const updatedProcessing = { ...currentProcessing, page: newPagination };
|
|
1001
|
+
setCurrentProcessing(updatedProcessing);
|
|
1002
|
+
handleRunQuery(updatedProcessing);
|
|
975
1003
|
}
|
|
976
|
-
if (
|
|
977
|
-
(page
|
|
978
|
-
(previousPage > page.currentPage &&
|
|
979
|
-
(previousPage * page.rowsPerPage) % constants_2.MAX_COLUMN_ROWS_LIMIT === 0)) {
|
|
980
|
-
handleRunQuery({ ...currentProcessing, page });
|
|
1004
|
+
if (page > previousPage) {
|
|
1005
|
+
setPreviousPage(page);
|
|
981
1006
|
}
|
|
982
|
-
setPreviousPage(page.currentPage);
|
|
983
1007
|
};
|
|
984
1008
|
const onSortChange = (sort) => {
|
|
985
|
-
if (
|
|
1009
|
+
if (report &&
|
|
1010
|
+
(0, paginationProcessing_1.shouldSortInMemory)(paginationProcessing_1.DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
|
|
986
1011
|
return;
|
|
987
1012
|
}
|
|
988
|
-
|
|
1013
|
+
const updatedProcessing = { page: paginationProcessing_1.DEFAULT_PAGINATION, sort };
|
|
1014
|
+
handleRunQuery(updatedProcessing, true);
|
|
1015
|
+
setCurrentProcessing(updatedProcessing);
|
|
989
1016
|
setPreviousPage(0);
|
|
990
1017
|
};
|
|
991
|
-
const handleRunQuery = async (processing) => {
|
|
1018
|
+
const handleRunQuery = async (processing, resetRows = false) => {
|
|
992
1019
|
try {
|
|
993
1020
|
setErrorMessage('');
|
|
994
1021
|
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;
|
|
1022
|
+
const tableInfo = await (0, tableProcessing_1.fetchTableByQuery)(activeQuery, client, processing, customFields);
|
|
1023
|
+
if (tableInfo.error) {
|
|
1024
|
+
throw new Error(tableInfo.error);
|
|
1016
1025
|
}
|
|
1017
|
-
if (
|
|
1018
|
-
|
|
1026
|
+
else if (tableInfo.rows.length === 0) {
|
|
1027
|
+
throw new Error('No data found');
|
|
1028
|
+
}
|
|
1029
|
+
if (tableInfo.rowCount) {
|
|
1030
|
+
setNumberOfRows(tableInfo.rowCount);
|
|
1019
1031
|
}
|
|
1020
|
-
setErrorMessage('');
|
|
1021
1032
|
setCurrentProcessing(processing);
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
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);
|
|
1033
|
+
let tempRows = [...rows, ...tableInfo.rows];
|
|
1034
|
+
if (resetRows) {
|
|
1035
|
+
tempRows = tableInfo.rows;
|
|
1036
|
+
}
|
|
1037
|
+
setRows(tempRows);
|
|
1038
|
+
setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
|
|
1039
|
+
setColumns(tableInfo.columns);
|
|
1041
1040
|
setTableLoading(false);
|
|
1042
1041
|
}
|
|
1043
1042
|
catch (e) {
|
|
1044
1043
|
setTableLoading(false);
|
|
1045
|
-
|
|
1044
|
+
setErrorMessage('Failed to run SQL query: ' + e);
|
|
1045
|
+
setRows([]);
|
|
1046
|
+
setColumns([]);
|
|
1046
1047
|
return;
|
|
1047
1048
|
}
|
|
1048
1049
|
};
|
|
@@ -1061,10 +1062,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1061
1062
|
case 'binary_expr':
|
|
1062
1063
|
if (dateComparisonPartialMatch ||
|
|
1063
1064
|
((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);
|
|
1065
|
+
const { dateColumn, dateFilterType, intervalCount, intervalType, intervalPaths, } = (0, util_1.getDateFilterInfo)(node);
|
|
1068
1066
|
const isPlural = intervalCount !== 1 && dateFilterType !== 'in the current'
|
|
1069
1067
|
? 's'
|
|
1070
1068
|
: '';
|
|
@@ -1212,7 +1210,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1212
1210
|
} }))] }));
|
|
1213
1211
|
}
|
|
1214
1212
|
else if ((0, util_1.isInTheLastInterval)(node, client.databaseType)) {
|
|
1215
|
-
const { dateColumn
|
|
1213
|
+
const { dateColumn } = (0, util_1.getDateFilterInfo)(node);
|
|
1216
1214
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1217
1215
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1218
1216
|
value: column.name,
|
|
@@ -1273,7 +1271,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1273
1271
|
], width: 200 }) })] }));
|
|
1274
1272
|
}
|
|
1275
1273
|
else if ((0, util_1.isTheCurrentInterval)(node, client.databaseType)) {
|
|
1276
|
-
const { dateFilterType } = (0, util_1.getDateFilterInfo)(node);
|
|
1277
1274
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1278
1275
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1279
1276
|
value: column.name,
|
|
@@ -1332,7 +1329,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1332
1329
|
{ label: `week`, value: 'WEEK' },
|
|
1333
1330
|
], width: 200 })] }));
|
|
1334
1331
|
}
|
|
1335
|
-
else if ((0, util_1.isThePreviousInterval)(node
|
|
1332
|
+
else if ((0, util_1.isThePreviousInterval)(node)) {
|
|
1336
1333
|
const options = getAllPossibleColumns().map((column) => ({
|
|
1337
1334
|
label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column.displayName),
|
|
1338
1335
|
value: column.name,
|
|
@@ -1479,7 +1476,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1479
1476
|
.find((tableInfo) => tableInfo.name === table)
|
|
1480
1477
|
?.columns.find((col) => col.name === leftChildValue);
|
|
1481
1478
|
const columnType = column?.fieldType;
|
|
1482
|
-
|
|
1479
|
+
const operatorOptions = [
|
|
1483
1480
|
...((0, ast_1.isNumericColumnType)(columnType)
|
|
1484
1481
|
? [
|
|
1485
1482
|
{ label: 'equal to', value: '=' },
|
|
@@ -1720,112 +1717,214 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1720
1717
|
}
|
|
1721
1718
|
return validPivot;
|
|
1722
1719
|
};
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
let
|
|
1732
|
-
let
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1720
|
+
/**
|
|
1721
|
+
*
|
|
1722
|
+
* @param filterTree
|
|
1723
|
+
* Returns a list of filters to be displayed
|
|
1724
|
+
* Replaces the functionality of renderNodes in the context of filters
|
|
1725
|
+
* Contains filterSentence, which replaces renderSentence
|
|
1726
|
+
*/
|
|
1727
|
+
const renderFilters = (filterTree) => {
|
|
1728
|
+
let tree = filterTree;
|
|
1729
|
+
let filterStack = [];
|
|
1730
|
+
/**
|
|
1731
|
+
* Function that takes in a FilterTree and flattens it into an array using in order traversal
|
|
1732
|
+
*/
|
|
1733
|
+
function traverseTree(node) {
|
|
1734
|
+
if (!node) {
|
|
1735
|
+
return;
|
|
1736
|
+
}
|
|
1737
|
+
if (node.leaf) {
|
|
1738
|
+
filterStack.push(node);
|
|
1739
|
+
}
|
|
1740
|
+
else {
|
|
1741
|
+
traverseTree(node.leftNode);
|
|
1742
|
+
filterStack.push(node);
|
|
1743
|
+
traverseTree(node.rightNode);
|
|
1744
|
+
}
|
|
1736
1745
|
}
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
'
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
'
|
|
1753
|
-
|
|
1754
|
-
|
|
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 '()';
|
|
1746
|
+
/**
|
|
1747
|
+
* Returns a sentence to describe a Filter
|
|
1748
|
+
*/
|
|
1749
|
+
function filterSentence(filter) {
|
|
1750
|
+
let value = '';
|
|
1751
|
+
if (filter.name == Filter_1.FilterNames.NullFilter) {
|
|
1752
|
+
return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}`;
|
|
1753
|
+
}
|
|
1754
|
+
else if (filter.value === null || filter.value === undefined) {
|
|
1755
|
+
return 'Error: filter missing value';
|
|
1756
|
+
}
|
|
1757
|
+
if (typeof filter.value === 'string' ||
|
|
1758
|
+
typeof filter.value === 'number') {
|
|
1759
|
+
value = filter.value.toString();
|
|
1760
|
+
}
|
|
1761
|
+
else if ('unit' in filter.value) {
|
|
1762
|
+
if (filter.operator === Filter_1.DateOperator.InTheCurrent) {
|
|
1763
|
+
value = `${filter.value.unit}`;
|
|
1774
1764
|
}
|
|
1775
|
-
|
|
1776
|
-
.
|
|
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`;
|
|
1765
|
+
else {
|
|
1766
|
+
value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
|
|
1791
1767
|
}
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1768
|
+
}
|
|
1769
|
+
else if ('startDate' in filter.value) {
|
|
1770
|
+
value = `from ${filter.value.startDate}`;
|
|
1771
|
+
}
|
|
1772
|
+
else if (filter.value.length > 0) {
|
|
1773
|
+
value = filter.value.join(', ');
|
|
1774
|
+
}
|
|
1775
|
+
return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator} ${value}`;
|
|
1776
|
+
}
|
|
1777
|
+
/**
|
|
1778
|
+
* Given an array of Filters (presumed to be in in-order state), generate
|
|
1779
|
+
* the corresponding Filter tree. Essentially the reverse of what traverseTree does
|
|
1780
|
+
*/
|
|
1781
|
+
function filterStackToFilterTree(stack) {
|
|
1782
|
+
function buildTree(i) {
|
|
1783
|
+
const newNode = {
|
|
1784
|
+
leaf: false,
|
|
1785
|
+
operator: null,
|
|
1786
|
+
leftNode: null,
|
|
1787
|
+
rightNode: null,
|
|
1788
|
+
};
|
|
1789
|
+
if (i >= stack.length) {
|
|
1807
1790
|
return null;
|
|
1808
1791
|
}
|
|
1809
|
-
if (
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1792
|
+
else if (stack[i].leaf) {
|
|
1793
|
+
if (i < stack.length - 1) {
|
|
1794
|
+
// more nodes later
|
|
1795
|
+
newNode.operator = stack[i + 1].operator;
|
|
1796
|
+
newNode.leftNode = {
|
|
1797
|
+
leaf: true,
|
|
1798
|
+
leftNode: null,
|
|
1799
|
+
rightNode: null,
|
|
1800
|
+
operator: null,
|
|
1801
|
+
value: stack[i].value,
|
|
1802
|
+
};
|
|
1803
|
+
newNode.rightNode = buildTree(i + 2);
|
|
1804
|
+
}
|
|
1805
|
+
else {
|
|
1806
|
+
newNode.leaf = true;
|
|
1807
|
+
newNode.value = stack[i].value;
|
|
1808
|
+
}
|
|
1824
1809
|
}
|
|
1825
|
-
return
|
|
1826
|
-
|
|
1827
|
-
|
|
1810
|
+
return newNode;
|
|
1811
|
+
}
|
|
1812
|
+
return buildTree(0);
|
|
1828
1813
|
}
|
|
1814
|
+
traverseTree(tree);
|
|
1815
|
+
// Remove null (invalid) filters from filter stack
|
|
1816
|
+
filterStack = filterStack.filter((filter) => {
|
|
1817
|
+
return ((!filter.leaf &&
|
|
1818
|
+
filter.rightNode &&
|
|
1819
|
+
(!filter.rightNode.leaf || filter.rightNode.value)) ||
|
|
1820
|
+
(filter.leaf && filter.value));
|
|
1821
|
+
});
|
|
1822
|
+
// Render filterStack
|
|
1823
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1824
|
+
display: 'flex',
|
|
1825
|
+
flexDirection: 'column',
|
|
1826
|
+
}, children: filterStack.map((item, index) => {
|
|
1827
|
+
if (!item.leaf &&
|
|
1828
|
+
(item.operator === 'and' || item.operator === 'or')) {
|
|
1829
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
1830
|
+
width: 'fit-content',
|
|
1831
|
+
marginBottom: '8px',
|
|
1832
|
+
marginTop: '8px',
|
|
1833
|
+
}, children: (0, jsx_runtime_1.jsx)(TabsComponent, { value: item.operator.toUpperCase(), options: UiComponents_1.DEFAULT_TAB_OPTIONS, onChange: () => {
|
|
1834
|
+
if (item.operator === 'and') {
|
|
1835
|
+
item.operator = 'or';
|
|
1836
|
+
}
|
|
1837
|
+
else {
|
|
1838
|
+
item.operator = 'and';
|
|
1839
|
+
}
|
|
1840
|
+
let newFormData = null;
|
|
1841
|
+
if (tree) {
|
|
1842
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1843
|
+
}
|
|
1844
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1845
|
+
...constants_1.defaultAST,
|
|
1846
|
+
...baseAst,
|
|
1847
|
+
...(!baseAst?.columns && {
|
|
1848
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1849
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1850
|
+
newColumn.expr.column = c.name;
|
|
1851
|
+
return newColumn;
|
|
1852
|
+
}),
|
|
1853
|
+
}),
|
|
1854
|
+
...(!baseAst?.from && {
|
|
1855
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1856
|
+
}),
|
|
1857
|
+
where: newFormData,
|
|
1858
|
+
});
|
|
1859
|
+
setBaseAst(newAst);
|
|
1860
|
+
setFormData(newFormData);
|
|
1861
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1862
|
+
} }) }, index));
|
|
1863
|
+
}
|
|
1864
|
+
else {
|
|
1865
|
+
return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(ui_1.FilterPopoverWrapper, { schema: schema.find((s) => s.name === currentTable ||
|
|
1866
|
+
s.displayName === currentTable) ?? schema[0], filter: item.value, filterLabel: item.value ? filterSentence(item.value) : '', index: index, openFilterIndex: openFilterIndex, setOpenFilterIndex: setOpenFilterIndex, FilterPopover: FilterPopoverComponent, FilterModal: FilterModal_1.default, fieldValuesMap: fieldValuesMap, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (filter) => {
|
|
1867
|
+
item.value = filter;
|
|
1868
|
+
let newFormData = null;
|
|
1869
|
+
if (tree) {
|
|
1870
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1871
|
+
}
|
|
1872
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1873
|
+
...constants_1.defaultAST,
|
|
1874
|
+
...baseAst,
|
|
1875
|
+
...(!baseAst?.columns && {
|
|
1876
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1877
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1878
|
+
newColumn.expr.column = c.name;
|
|
1879
|
+
return newColumn;
|
|
1880
|
+
}),
|
|
1881
|
+
}),
|
|
1882
|
+
...(!baseAst?.from && {
|
|
1883
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1884
|
+
}),
|
|
1885
|
+
where: newFormData,
|
|
1886
|
+
});
|
|
1887
|
+
setBaseAst(newAst);
|
|
1888
|
+
setFormData(newFormData);
|
|
1889
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1890
|
+
}, handleFilterDelete: (i) => {
|
|
1891
|
+
if (i > 0) {
|
|
1892
|
+
filterStack.splice(i - 1, 2);
|
|
1893
|
+
}
|
|
1894
|
+
else {
|
|
1895
|
+
if (filterStack.length > 1) {
|
|
1896
|
+
filterStack.splice(i, 2);
|
|
1897
|
+
}
|
|
1898
|
+
else {
|
|
1899
|
+
filterStack.splice(i, 1);
|
|
1900
|
+
}
|
|
1901
|
+
}
|
|
1902
|
+
tree = filterStackToFilterTree(filterStack);
|
|
1903
|
+
let newFormData = null;
|
|
1904
|
+
if (tree) {
|
|
1905
|
+
newFormData = (0, astFilterProcessing_1.filterTreeToAst)(tree, client.databaseType.toLowerCase());
|
|
1906
|
+
}
|
|
1907
|
+
const newAst = (0, util_1.deepCopy)({
|
|
1908
|
+
...constants_1.defaultAST,
|
|
1909
|
+
...baseAst,
|
|
1910
|
+
...(!baseAst?.columns && {
|
|
1911
|
+
columns: getAllPossibleColumns().map((c) => {
|
|
1912
|
+
const newColumn = (0, util_1.deepCopy)(constants_1.defaultColumn);
|
|
1913
|
+
newColumn.expr.column = c.name;
|
|
1914
|
+
return newColumn;
|
|
1915
|
+
}),
|
|
1916
|
+
}),
|
|
1917
|
+
...(!baseAst?.from && {
|
|
1918
|
+
from: [{ ...constants_1.defaultTable, table: initialTableName }],
|
|
1919
|
+
}),
|
|
1920
|
+
where: newFormData,
|
|
1921
|
+
});
|
|
1922
|
+
setBaseAst(newAst);
|
|
1923
|
+
setFormData(newFormData);
|
|
1924
|
+
fetchSqlQuery(newAst, newFormData);
|
|
1925
|
+
} }) }, index));
|
|
1926
|
+
}
|
|
1927
|
+
}) }));
|
|
1829
1928
|
};
|
|
1830
1929
|
const getAllPossibleColumns = () => {
|
|
1831
1930
|
if (!baseAst || !baseAst.from) {
|
|
@@ -1867,7 +1966,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1867
1966
|
if (selectedColumns.length < 1)
|
|
1868
1967
|
return false;
|
|
1869
1968
|
const allColumns = orderedColumnNames.filter((row) => {
|
|
1870
|
-
const [table
|
|
1969
|
+
const [table] = row.split('.');
|
|
1871
1970
|
const selectedTable = selectedColumns[0].split('.')[0];
|
|
1872
1971
|
return selectedTable === table;
|
|
1873
1972
|
});
|
|
@@ -1913,23 +2012,16 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1913
2012
|
customFields,
|
|
1914
2013
|
additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
|
|
1915
2014
|
useUpdatedDataGathering: true,
|
|
2015
|
+
useNewNodeSql: true, // new flag
|
|
1916
2016
|
},
|
|
1917
2017
|
};
|
|
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
2018
|
const tables = (0, ast_1.getTableNames)(baseAst);
|
|
1928
2019
|
const table = tables.length >= 1 ? tables[0] : initialTableName;
|
|
1929
2020
|
let newUniqueValues = uniqueValues;
|
|
1930
2021
|
let dateRangesTemp = dateRanges;
|
|
1931
|
-
let curReport =
|
|
1932
|
-
if (
|
|
2022
|
+
let curReport = tempReport;
|
|
2023
|
+
if ((newUniqueValues && Object.keys(newUniqueValues).length === 0) ||
|
|
2024
|
+
table !== currentTable) {
|
|
1933
2025
|
const tableInfo = schema.find((tableInfo) => tableInfo.name === table);
|
|
1934
2026
|
if (tableInfo) {
|
|
1935
2027
|
newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
|
|
@@ -1941,6 +2033,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1941
2033
|
}
|
|
1942
2034
|
setCurrentTable(table);
|
|
1943
2035
|
}
|
|
2036
|
+
const cloudBody = {};
|
|
2037
|
+
const data2 = await (0, dataFetcher_1.getData)(client, 'dashquery', 'same-origin', hostedBody, cloudBody);
|
|
2038
|
+
if (data2.success === false) {
|
|
2039
|
+
throw new Error(data2.errorMessage);
|
|
2040
|
+
}
|
|
2041
|
+
rows = data2.rows;
|
|
2042
|
+
if (data2.rowCount) {
|
|
2043
|
+
setNumberOfRows(data2.rowCount);
|
|
2044
|
+
}
|
|
1944
2045
|
if (data2.rows && data2.rows.length) {
|
|
1945
2046
|
if (pivot) {
|
|
1946
2047
|
// check if any of the pivot fields aren't in the data2.fields array
|
|
@@ -1970,13 +2071,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1970
2071
|
setFormattedRows(formattedRows);
|
|
1971
2072
|
return;
|
|
1972
2073
|
}
|
|
2074
|
+
curReport = {
|
|
2075
|
+
...formData,
|
|
2076
|
+
itemQuery: data2.itemQuery,
|
|
2077
|
+
rowCount: data2.rowCount,
|
|
2078
|
+
filtersApplied: [],
|
|
2079
|
+
rows: data2.rows,
|
|
2080
|
+
};
|
|
1973
2081
|
// 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
2082
|
let dateBucket = undefined;
|
|
1981
2083
|
const tempDateRange = dateRangesTemp &&
|
|
1982
2084
|
pivot.rowField &&
|
|
@@ -1984,9 +2086,20 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
1984
2086
|
if (tempDateRange) {
|
|
1985
2087
|
dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
|
|
1986
2088
|
}
|
|
2089
|
+
let distinctValuesForQuery = {};
|
|
2090
|
+
if (pivot.columnField) {
|
|
2091
|
+
const sqlQuery = await fetchSqlQuery({ ...baseAst, where: curFormData }, null, false);
|
|
2092
|
+
distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
|
|
2093
|
+
{
|
|
2094
|
+
field: pivot.columnField,
|
|
2095
|
+
label: pivot.columnField,
|
|
2096
|
+
format: 'string',
|
|
2097
|
+
},
|
|
2098
|
+
], sqlQuery, [], client, customFields);
|
|
2099
|
+
}
|
|
1987
2100
|
const pivotedData = await (0, PivotModal_1.generatePivotTable)(
|
|
1988
2101
|
// @ts-ignore
|
|
1989
|
-
pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client,
|
|
2102
|
+
pivot, data2.rows, undefined, false, -1, undefined, dateBucket, curReport, client, distinctValuesForQuery ? distinctValuesForQuery : undefined);
|
|
1990
2103
|
console.info(`%c[Pivot]: ${JSON.stringify(pivot)}`, 'color: dimgray');
|
|
1991
2104
|
const processedFields = data2.fields.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem));
|
|
1992
2105
|
setPivotData(pivotedData);
|
|
@@ -2048,105 +2161,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2048
2161
|
setFormattedRows([]);
|
|
2049
2162
|
setPivotData(null);
|
|
2050
2163
|
}
|
|
2164
|
+
setLoading(false);
|
|
2165
|
+
setDataDisplayed(true);
|
|
2166
|
+
return rows;
|
|
2051
2167
|
}
|
|
2052
2168
|
catch (e) {
|
|
2053
|
-
console.error(e);
|
|
2054
2169
|
setErrorMessage(e.message);
|
|
2055
|
-
}
|
|
2056
|
-
finally {
|
|
2057
2170
|
setLoading(false);
|
|
2058
2171
|
setDataDisplayed(true);
|
|
2059
|
-
|
|
2172
|
+
setRows([]);
|
|
2173
|
+
setColumns([]);
|
|
2174
|
+
setFormattedRows([]);
|
|
2175
|
+
setPivotData(null);
|
|
2176
|
+
return { error: true, message: e.message };
|
|
2060
2177
|
}
|
|
2061
2178
|
}
|
|
2062
2179
|
};
|
|
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
2180
|
// Returns whether a where-clause contains a nested subquery.
|
|
2151
2181
|
const isSubquery = (node) => {
|
|
2152
2182
|
if (!node)
|
|
@@ -2170,7 +2200,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2170
2200
|
return;
|
|
2171
2201
|
}
|
|
2172
2202
|
try {
|
|
2173
|
-
let errored = false;
|
|
2174
2203
|
setLoading(true);
|
|
2175
2204
|
setAskedAQuestion(true);
|
|
2176
2205
|
setErrorMessage('');
|
|
@@ -2190,6 +2219,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2190
2219
|
body: JSON.stringify({
|
|
2191
2220
|
initialQuestion: aiPrompt || overridePrompt,
|
|
2192
2221
|
publicKey: client.publicKey,
|
|
2222
|
+
useNewNodeSql: true, // new flag
|
|
2193
2223
|
}),
|
|
2194
2224
|
});
|
|
2195
2225
|
}
|
|
@@ -2201,6 +2231,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2201
2231
|
sqlQuery: activeQuery,
|
|
2202
2232
|
initialQuestion: aiPrompt,
|
|
2203
2233
|
publicKey: client.publicKey,
|
|
2234
|
+
useNewNodeSql: true, // new flag
|
|
2204
2235
|
}),
|
|
2205
2236
|
});
|
|
2206
2237
|
}
|
|
@@ -2218,31 +2249,33 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2218
2249
|
setErrorMessage("Error: Couldn't process your request, please re-word your prompt.");
|
|
2219
2250
|
return;
|
|
2220
2251
|
}
|
|
2252
|
+
let currentSchema = schema;
|
|
2253
|
+
if (currentSchema && currentSchema.length === 0) {
|
|
2254
|
+
currentSchema = await fetchSchema();
|
|
2255
|
+
}
|
|
2221
2256
|
let newAst, groupByPivot;
|
|
2222
2257
|
if (ast) {
|
|
2223
2258
|
// Unwrap the ast object, supporting many possible types
|
|
2224
2259
|
ast = ast.length ? ast[0] : ast;
|
|
2225
2260
|
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
|
-
}
|
|
2261
|
+
newAst = (0, convert_1.convertWildcardColumns)(newAst, currentSchema); // must go before groupby
|
|
2262
|
+
({ ast: newAst, pivot: groupByPivot } = (0, convert_1.convertGroupBy)(newAst, pivot, currentSchema));
|
|
2232
2263
|
newAst = (0, convert_1.convertStringComparison)(newAst, client.databaseType);
|
|
2233
2264
|
newAst = (0, convert_1.convertRemoveSimpleParentheses)(newAst);
|
|
2234
2265
|
const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
|
|
2235
2266
|
const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
|
|
2236
2267
|
newAst = (0, util_1.removeNonSelectedTableReferences)(newAst, tableAlias ?? table, getAllPossibleColumns().map((col) => col.name));
|
|
2237
|
-
|
|
2268
|
+
const procesedColumns = (0, util_1.deepCopy)(newAst).columns?.map((column) => {
|
|
2238
2269
|
if (column.expr.type === 'column_ref') {
|
|
2239
|
-
|
|
2270
|
+
const columnName = (0, ast_1.extractColumnish)(column.expr);
|
|
2271
|
+
return `${table}.${columnName}`;
|
|
2240
2272
|
}
|
|
2241
2273
|
else if (column.as) {
|
|
2242
2274
|
return `${table}.${column.as}`;
|
|
2243
2275
|
}
|
|
2244
2276
|
return `${table}.${column.expr.value}`;
|
|
2245
|
-
})
|
|
2277
|
+
});
|
|
2278
|
+
setSelectedColumns(procesedColumns);
|
|
2246
2279
|
if (groupByPivot) {
|
|
2247
2280
|
setBaseAst((0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null }));
|
|
2248
2281
|
newAst = (0, util_1.deepCopy)({ ...newAst, orderby: null, limit: null });
|
|
@@ -2258,7 +2291,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2258
2291
|
ast = newAst; // so we fetch data for newAst later.
|
|
2259
2292
|
fetchSqlQuery(ast, undefined, false);
|
|
2260
2293
|
const table = (0, ast_1.getTableNames)(newAst)[0] ?? initialTableName;
|
|
2261
|
-
const tableAlias = (0, ast_1.getTableAliases)(newAst)[0] ?? initialTableName;
|
|
2262
2294
|
const hostedBody = {
|
|
2263
2295
|
metadata: {
|
|
2264
2296
|
clientId: client.publicKey,
|
|
@@ -2269,19 +2301,19 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2269
2301
|
additionalProcessing: { page: { currentPage: 0, rowsPerPage: 20 } },
|
|
2270
2302
|
useUpdatedDataGathering: true,
|
|
2271
2303
|
pivot: groupByPivot,
|
|
2304
|
+
useNewNodeSql: true, // new flag
|
|
2272
2305
|
},
|
|
2273
2306
|
};
|
|
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
2307
|
let currentUniqueValues = uniqueValues;
|
|
2280
2308
|
let dateRangesTemp = dateRanges;
|
|
2281
|
-
if (
|
|
2282
|
-
|
|
2309
|
+
if ((currentUniqueValues &&
|
|
2310
|
+
currentUniqueValues[table] &&
|
|
2311
|
+
Object.keys(currentUniqueValues[table]).length === 0) ||
|
|
2312
|
+
table !== currentTable) {
|
|
2313
|
+
const tableInfo = currentSchema.find((tableInfo) => tableInfo.name === table);
|
|
2283
2314
|
if (tableInfo) {
|
|
2284
2315
|
const newUniqueValues = await getUniqueStringValues(tableInfo.columns, table);
|
|
2316
|
+
currentUniqueValues = newUniqueValues;
|
|
2285
2317
|
if ((0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
|
|
2286
2318
|
setUniqueValues(newUniqueValues);
|
|
2287
2319
|
}
|
|
@@ -2290,8 +2322,22 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2290
2322
|
}
|
|
2291
2323
|
setCurrentTable(table);
|
|
2292
2324
|
}
|
|
2325
|
+
const cloudBody = {};
|
|
2326
|
+
const data2 = await (0, dataFetcher_1.getData)(client, 'patterns', 'same-origin', hostedBody, cloudBody);
|
|
2327
|
+
if (!data2 || data2.status === 'error') {
|
|
2328
|
+
throw new Error('Error querying data from patterns');
|
|
2329
|
+
}
|
|
2293
2330
|
if (data2.rows && data2.rows.length) {
|
|
2294
|
-
const processedFields = data2.fields
|
|
2331
|
+
const processedFields = data2.fields
|
|
2332
|
+
.map((elem) => (0, columnProcessing_1.convertPostgresColumn)(elem))
|
|
2333
|
+
.map((elem) => {
|
|
2334
|
+
const tableInfo = currentSchema.find((t) => t.name === table);
|
|
2335
|
+
const columnInfo = tableInfo?.columns.find((column) => column.name === elem.field);
|
|
2336
|
+
return columnInfo
|
|
2337
|
+
? (0, columnProcessing_1.convertColumnInfoToColumnInternal)(columnInfo)
|
|
2338
|
+
: null;
|
|
2339
|
+
})
|
|
2340
|
+
.filter((elem) => elem);
|
|
2295
2341
|
let possiblePivot = true;
|
|
2296
2342
|
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(processedFields, currentUniqueValues[table]);
|
|
2297
2343
|
if (groupByPivot &&
|
|
@@ -2305,7 +2351,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2305
2351
|
let errorMessageEnding = '';
|
|
2306
2352
|
if (groupByPivot.columnField &&
|
|
2307
2353
|
!possibleColumns.columnFields.includes(groupByPivot?.columnField || '')) {
|
|
2308
|
-
if (currentUniqueValues[table][groupByPivot?.columnField || '']) {
|
|
2354
|
+
if (currentUniqueValues[table]?.[groupByPivot?.columnField || '']) {
|
|
2309
2355
|
errorMessageEnding = `The column ${groupByPivot?.columnField} has more than 24 unique values to pivot on.`;
|
|
2310
2356
|
}
|
|
2311
2357
|
else {
|
|
@@ -2314,7 +2360,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2314
2360
|
}
|
|
2315
2361
|
else if (groupByPivot.rowField &&
|
|
2316
2362
|
!possibleColumns.rowFields.includes(groupByPivot?.rowField || '')) {
|
|
2317
|
-
if (currentUniqueValues[table][groupByPivot?.rowField || '']) {
|
|
2363
|
+
if (currentUniqueValues[table]?.[groupByPivot?.rowField || '']) {
|
|
2318
2364
|
errorMessageEnding = `The column ${groupByPivot?.rowField} has more than 36 unique values to pivot on.`;
|
|
2319
2365
|
}
|
|
2320
2366
|
else {
|
|
@@ -2326,7 +2372,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2326
2372
|
errorMessageEnding = `The column ${groupByPivot?.valueField} is not a proper value field.`;
|
|
2327
2373
|
}
|
|
2328
2374
|
setErrorMessage(`The requested pivot is not supported. ${errorMessageEnding}`);
|
|
2329
|
-
errored = true;
|
|
2330
2375
|
}
|
|
2331
2376
|
if (groupByPivot && possiblePivot) {
|
|
2332
2377
|
let curReport = report ? report : undefined;
|
|
@@ -2403,7 +2448,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2403
2448
|
setActiveQuery('');
|
|
2404
2449
|
}
|
|
2405
2450
|
if (data2.errorMessage) {
|
|
2406
|
-
setErrorMessage(`Error:
|
|
2451
|
+
setErrorMessage(`Error: Couldn't process your request, please re-word your prompt.`);
|
|
2407
2452
|
}
|
|
2408
2453
|
}
|
|
2409
2454
|
catch (e) {
|
|
@@ -2423,7 +2468,8 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2423
2468
|
setSelectedColumns((selectedColumns) => selectedColumns.filter((column) => !column.endsWith(name)));
|
|
2424
2469
|
const columns = baseAst.columns.filter((col) => {
|
|
2425
2470
|
if (col.expr.type === 'column_ref') {
|
|
2426
|
-
return col.expr.column !== name
|
|
2471
|
+
return (col.expr.column !== name &&
|
|
2472
|
+
(!col.expr.column.expr || col.expr.column.expr.value !== name));
|
|
2427
2473
|
}
|
|
2428
2474
|
else if (col.as) {
|
|
2429
2475
|
return col.as !== name;
|
|
@@ -2438,14 +2484,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2438
2484
|
setBaseAst(newAst);
|
|
2439
2485
|
fetchSqlQuery(newAst);
|
|
2440
2486
|
};
|
|
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
2487
|
const DraggableItem = ({ id, label, onDelete }) => {
|
|
2450
2488
|
const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
|
|
2451
2489
|
const style = {
|
|
@@ -2472,7 +2510,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2472
2510
|
setOrderedColumnNames(newOrder);
|
|
2473
2511
|
const orderedSelectedColumns = [];
|
|
2474
2512
|
for (const value of newOrder) {
|
|
2475
|
-
const
|
|
2513
|
+
const column = value.split('.')[1];
|
|
2476
2514
|
if (selectedColumns.includes(value)) {
|
|
2477
2515
|
orderedSelectedColumns.push(column);
|
|
2478
2516
|
}
|
|
@@ -2496,12 +2534,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2496
2534
|
fetchSqlQuery(newAst, undefined, false);
|
|
2497
2535
|
}
|
|
2498
2536
|
}
|
|
2499
|
-
const columnNamesInAst = baseAst?.columns
|
|
2500
|
-
|
|
2501
|
-
|
|
2537
|
+
const columnNamesInAst = baseAst?.columns
|
|
2538
|
+
.map((col) => {
|
|
2539
|
+
if (col.expr.type === 'column_ref' && col.expr.column) {
|
|
2540
|
+
if (typeof col.expr.column === 'string') {
|
|
2541
|
+
return col.expr.column;
|
|
2542
|
+
}
|
|
2543
|
+
else {
|
|
2544
|
+
return col.expr.column.expr.value;
|
|
2545
|
+
}
|
|
2502
2546
|
}
|
|
2503
2547
|
else if (col.as) {
|
|
2504
|
-
|
|
2548
|
+
if (typeof col.as === 'string') {
|
|
2549
|
+
return col.as;
|
|
2550
|
+
}
|
|
2551
|
+
else {
|
|
2552
|
+
return col.as.expr?.value;
|
|
2553
|
+
}
|
|
2505
2554
|
}
|
|
2506
2555
|
else if (col.expr && col.expr.type === 'aggr_func') {
|
|
2507
2556
|
if (col.expr.args) {
|
|
@@ -2510,22 +2559,23 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2510
2559
|
return col.expr.name;
|
|
2511
2560
|
}
|
|
2512
2561
|
return col.expr.value;
|
|
2513
|
-
})
|
|
2562
|
+
})
|
|
2563
|
+
.filter(
|
|
2564
|
+
// remove duplicate entries
|
|
2565
|
+
(value, index, self) => value && self.indexOf(value) === index) ?? [];
|
|
2514
2566
|
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
2567
|
display: 'flex',
|
|
2516
2568
|
flexDirection: 'column',
|
|
2517
2569
|
gap: 8,
|
|
2518
2570
|
}, 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
2571
|
}
|
|
2520
|
-
if (loading ||
|
|
2572
|
+
if (loading || initialChartLoad) {
|
|
2521
2573
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2522
2574
|
display: 'flex',
|
|
2523
2575
|
flexDirection: 'row',
|
|
2524
2576
|
height: '100%',
|
|
2525
2577
|
...containerStyle,
|
|
2526
2578
|
}, 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
2579
|
if (!openPopover) {
|
|
2530
2580
|
setOpenPopover('AddColumnModal');
|
|
2531
2581
|
}
|
|
@@ -2546,12 +2596,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2546
2596
|
}, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
|
|
2547
2597
|
setBaseAst(ast);
|
|
2548
2598
|
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: {
|
|
2599
|
+
}, 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
2600
|
display: 'flex',
|
|
2551
2601
|
flexDirection: 'column',
|
|
2552
2602
|
gap: 8,
|
|
2553
2603
|
marginBottom: 12,
|
|
2554
|
-
}, children:
|
|
2604
|
+
}, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2555
2605
|
display: 'flex',
|
|
2556
2606
|
flexDirection: 'column',
|
|
2557
2607
|
alignItems: 'flex-start',
|
|
@@ -2563,7 +2613,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2563
2613
|
}
|
|
2564
2614
|
if (!openPopover) {
|
|
2565
2615
|
const value = orderedColumnNames[0];
|
|
2566
|
-
const
|
|
2616
|
+
const column = value.split('.')[1];
|
|
2567
2617
|
const columnType = getColumnTypeByName(column);
|
|
2568
2618
|
if ((0, ast_1.isNumericColumnType)(columnType)) {
|
|
2569
2619
|
const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
|
|
@@ -2592,27 +2642,15 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2592
2642
|
setActiveEditItem(null);
|
|
2593
2643
|
}, 300);
|
|
2594
2644
|
}
|
|
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 &&
|
|
2645
|
+
}, popoverTitle: 'Add filter', popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
|
|
2646
|
+
s.displayName === currentTable) ?? schema[0], fieldValuesMap: uniqueValues[(0, ast_1.getTableNames)(baseAst).length === 1
|
|
2647
|
+
? (0, ast_1.getTableNames)(baseAst)[0]
|
|
2648
|
+
: initialTableName], onSubmitFilter: (filter) => {
|
|
2649
|
+
setOpenPopover(null);
|
|
2650
|
+
setIsPending(false);
|
|
2651
|
+
const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
|
|
2652
|
+
handleInsertion(item, 'AND', false);
|
|
2653
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, SecondaryButtonComponent: SecondaryButtonComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
|
|
2616
2654
|
false && ( // temp removed the AddConditionPopover
|
|
2617
2655
|
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2618
2656
|
if (!openPopover) {
|
|
@@ -2651,14 +2689,14 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2651
2689
|
setActivePath(null);
|
|
2652
2690
|
setOpenPopover(null);
|
|
2653
2691
|
}
|
|
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:
|
|
2692
|
+
} }) })] }))] })] }), (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
2693
|
setPivot(null);
|
|
2656
2694
|
setPivotData(null);
|
|
2657
2695
|
const formattedRows = formatRows(rows, columns, false);
|
|
2658
2696
|
setFormattedRows(formattedRows);
|
|
2659
2697
|
},
|
|
2660
2698
|
// TODOs
|
|
2661
|
-
selectPivot: (
|
|
2699
|
+
selectPivot: () => {
|
|
2662
2700
|
return;
|
|
2663
2701
|
}, 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
2702
|
setPivotRowField(value);
|
|
@@ -2675,7 +2713,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2675
2713
|
}, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
|
|
2676
2714
|
type: pivot.sortDirection,
|
|
2677
2715
|
expr: { type: 'column_ref', column: pivot.sortField },
|
|
2678
|
-
}, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
2716
|
+
}, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
|
|
2679
2717
|
setPivot({ ...pivot, sort: false });
|
|
2680
2718
|
setBaseAst((0, util_1.deepCopy)(baseAst));
|
|
2681
2719
|
if (!pivot) {
|
|
@@ -2724,7 +2762,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2724
2762
|
if (!pivot) {
|
|
2725
2763
|
fetchSqlQuery(newAst);
|
|
2726
2764
|
}
|
|
2727
|
-
}, setIsPending: setIsPending, setEditPopoverKey:
|
|
2765
|
+
}, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
|
|
2728
2766
|
const newAst = { ...baseAst };
|
|
2729
2767
|
newAst.orderby.splice(id, 1);
|
|
2730
2768
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
@@ -2747,7 +2785,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2747
2785
|
setActivePath(null);
|
|
2748
2786
|
setOpenPopover(null);
|
|
2749
2787
|
}
|
|
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: {
|
|
2788
|
+
}, 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
2789
|
display: 'flex',
|
|
2752
2790
|
flexDirection: 'column',
|
|
2753
2791
|
gap: 8,
|
|
@@ -2802,7 +2840,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2802
2840
|
? askAIInputWidth
|
|
2803
2841
|
: askAILoadingContainerWidth, value: aiPrompt, onChange: () => { } }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => { }, label: "Ask AI" }), ((baseAst && dataDisplayed) ||
|
|
2804
2842
|
initialLoad ||
|
|
2805
|
-
|
|
2843
|
+
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
2844
|
display: 'flex',
|
|
2807
2845
|
flexDirection: 'row',
|
|
2808
2846
|
gap: '12px',
|
|
@@ -2817,8 +2855,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2817
2855
|
boxSizing: 'border-box',
|
|
2818
2856
|
...containerStyle,
|
|
2819
2857
|
}, 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
2858
|
if (!orderedColumnNames) {
|
|
2823
2859
|
return;
|
|
2824
2860
|
}
|
|
@@ -2842,12 +2878,12 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2842
2878
|
}, orderedColumnNames: orderedColumnNames, setOrderedColumnNames: setOrderedColumnNames, selectedColumns: selectedColumns, setSelectedColumns: setSelectedColumns, isSelectedAllColumns: isSelectedAllColumns, clearAllState: clearAllState, nameToColumn: nameToColumn, baseAst: baseAst, setBaseAst: (ast) => {
|
|
2843
2879
|
setBaseAst(ast);
|
|
2844
2880
|
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: {
|
|
2881
|
+
}, 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
2882
|
display: 'flex',
|
|
2847
2883
|
flexDirection: 'column',
|
|
2848
2884
|
gap: 8,
|
|
2849
2885
|
marginBottom: 12,
|
|
2850
|
-
}, children:
|
|
2886
|
+
}, children: filterTree && renderFilters(filterTree) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
2851
2887
|
display: 'flex',
|
|
2852
2888
|
flexDirection: 'column',
|
|
2853
2889
|
alignItems: 'flex-start',
|
|
@@ -2859,7 +2895,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2859
2895
|
}
|
|
2860
2896
|
if (!openPopover) {
|
|
2861
2897
|
const value = orderedColumnNames[0];
|
|
2862
|
-
const
|
|
2898
|
+
const column = value.split('.')[1];
|
|
2863
2899
|
const columnType = getColumnTypeByName(column);
|
|
2864
2900
|
if ((0, ast_1.isNumericColumnType)(columnType)) {
|
|
2865
2901
|
const newSubtree = (0, util_1.deepCopy)(constants_1.defaultNumericComparison);
|
|
@@ -2889,27 +2925,13 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2889
2925
|
setActiveEditItem(null);
|
|
2890
2926
|
}, 300);
|
|
2891
2927
|
}
|
|
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 &&
|
|
2928
|
+
}, popoverTitle: "Add filter", popoverChildren: (0, jsx_runtime_1.jsx)(FilterModal_1.default, { schema: schema.find((s) => s.name === currentTable ||
|
|
2929
|
+
s.displayName === currentTable) ?? schema[0], fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
|
|
2930
|
+
setOpenPopover(null);
|
|
2931
|
+
setIsPending(false);
|
|
2932
|
+
const item = (0, astFilterProcessing_1.filterToAst)(filter, client.databaseType.toLowerCase());
|
|
2933
|
+
handleInsertion(item, 'AND', false);
|
|
2934
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent }) }) }), baseAst?.where &&
|
|
2913
2935
|
false && ( // temp removed the AddConditionPopover
|
|
2914
2936
|
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
|
|
2915
2937
|
if (!openPopover) {
|
|
@@ -2949,7 +2971,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
2949
2971
|
setOpenPopover(null);
|
|
2950
2972
|
clearCheckboxes();
|
|
2951
2973
|
}
|
|
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:
|
|
2974
|
+
} }) })] }))] })] }), (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
2975
|
setPivot(null);
|
|
2954
2976
|
setPivotData(null);
|
|
2955
2977
|
const formattedRows = formatRows(rows, columns, false);
|
|
@@ -3008,7 +3030,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3008
3030
|
`.${pivot.rowField}`,
|
|
3009
3031
|
`.${pivot.valueField || 'count'}`,
|
|
3010
3032
|
]
|
|
3011
|
-
: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
3033
|
+
: selectedColumns, setIsPending: setIsPending, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setActivePath: setActivePath, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
|
|
3012
3034
|
if (pivot) {
|
|
3013
3035
|
const tempPivot = { ...pivot, sort: false };
|
|
3014
3036
|
let dateBucket = undefined;
|
|
@@ -3063,7 +3085,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3063
3085
|
flexDirection: 'column',
|
|
3064
3086
|
gap: 8,
|
|
3065
3087
|
marginBottom: 12,
|
|
3066
|
-
}, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: setIsPending, setEditPopoverKey:
|
|
3088
|
+
}, 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
3089
|
if (pivot) {
|
|
3068
3090
|
setPivot({ ...pivot, sort: false });
|
|
3069
3091
|
return;
|
|
@@ -3173,7 +3195,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3173
3195
|
setOpenPopover(null);
|
|
3174
3196
|
setBaseAst((0, util_1.deepCopy)(newAst));
|
|
3175
3197
|
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: {
|
|
3198
|
+
} }) }) })] }), (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
3199
|
display: 'flex',
|
|
3178
3200
|
flexDirection: 'column',
|
|
3179
3201
|
gap: 8,
|
|
@@ -3246,7 +3268,7 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3246
3268
|
? 'Ask a follow-up question...'
|
|
3247
3269
|
: '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
3270
|
(loading && errorMessage.length === 0) ||
|
|
3249
|
-
|
|
3271
|
+
initialChartLoad, rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, columns: pivot
|
|
3250
3272
|
? pivotData?.columns || emptyPivotColumns()
|
|
3251
3273
|
: enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
|
|
3252
3274
|
return {
|
|
@@ -3264,9 +3286,10 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3264
3286
|
overflow: 'hidden',
|
|
3265
3287
|
width: '100%',
|
|
3266
3288
|
gap: 12,
|
|
3267
|
-
|
|
3289
|
+
alignItems: 'center',
|
|
3290
|
+
}, 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
3291
|
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
|
|
3292
|
+
}, 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
3293
|
? {
|
|
3271
3294
|
...report,
|
|
3272
3295
|
...tempReport,
|
|
@@ -3280,6 +3303,6 @@ function ReportBuilder({ initialTableName = '', onSubmitEditReport = (_) => void
|
|
|
3280
3303
|
queryString: activeQuery,
|
|
3281
3304
|
rows: rows,
|
|
3282
3305
|
}
|
|
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 }))] }));
|
|
3306
|
+
: 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
3307
|
}
|
|
3285
3308
|
exports.default = ReportBuilder;
|