@quillsql/react 2.12.29 → 2.12.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts +29 -46
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +187 -468
- package/dist/cjs/ChartBuilder.d.ts +30 -61
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +190 -131
- package/dist/cjs/ChartEditor.d.ts +14 -2
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +70 -125
- package/dist/cjs/Context.d.ts +4 -1
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +52 -6
- package/dist/cjs/Dashboard.d.ts +74 -118
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +273 -47
- package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/Calendar.js +3 -6
- package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -29
- package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
- package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
- package/dist/cjs/ReportBuilder.d.ts +18 -6
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +477 -489
- package/dist/cjs/SQLEditor.d.ts +4 -11
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +76 -88
- package/dist/cjs/Table.d.ts +19 -3
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +130 -114
- package/dist/cjs/TableChart.d.ts.map +1 -1
- package/dist/cjs/TableChart.js +0 -1
- package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
- package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
- package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
- package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
- package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
- package/dist/cjs/components/Banner/index.d.ts +1 -1
- package/dist/cjs/components/Banner/index.d.ts.map +1 -1
- package/dist/cjs/components/Banner/index.js +1 -1
- package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -1
- package/dist/cjs/components/BigModal/BigModal.js +6 -12
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +12 -1
- package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarList.js +21 -14
- package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
- package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartError.js +40 -5
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +27 -3
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +1 -3
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +5 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +8 -12
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +137 -194
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -5
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +3 -32
- package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
- package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
- package/dist/cjs/components/Dropdown/index.d.ts +2 -2
- package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
- package/dist/cjs/components/Modal/Modal.js +2 -3
- package/dist/cjs/components/Modal/index.d.ts +1 -1
- package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelect.js +18 -3
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +18 -3
- package/dist/cjs/components/QuillSelect.js +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +6 -3
- package/dist/cjs/components/QuillTable.d.ts +1 -4
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +5 -11
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +30 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.js +579 -0
- package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ast.js +33 -6
- package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
- package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/constants.js +24 -3
- package/dist/cjs/components/ReportBuilder/convert.d.ts +18 -16
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +378 -494
- package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
- package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/operators.js +32 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +15 -5
- package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +15 -18
- package/dist/cjs/components/UiComponents.d.ts +36 -8
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +106 -12
- package/dist/cjs/components/selectUtils.d.ts +0 -1
- package/dist/cjs/components/selectUtils.d.ts.map +1 -1
- package/dist/cjs/components/selectUtils.js +1 -22
- package/dist/cjs/hooks/index.d.ts +4 -4
- package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
- package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
- package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +5 -1
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +3 -1
- package/dist/cjs/hooks/useOnClickOutside.js +4 -4
- package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnWindowResize.js +2 -2
- package/dist/cjs/hooks/useQuill.d.ts +10 -27
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +133 -85
- package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
- package/dist/cjs/hooks/useTheme.js +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +8 -21
- package/dist/cjs/lib/utils.js +2 -2
- package/dist/cjs/models/Columns.d.ts +2 -1
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +115 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +99 -0
- package/dist/cjs/models/Pagination.d.ts +10 -0
- package/dist/cjs/models/Pagination.d.ts.map +1 -0
- package/dist/cjs/models/Pagination.js +2 -0
- package/dist/cjs/models/Report.d.ts +103 -0
- package/dist/cjs/models/Report.d.ts.map +1 -0
- package/dist/cjs/models/Report.js +2 -0
- package/dist/cjs/utils/aggregate.js +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/astFilterProcessing.js +8091 -0
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +4 -3
- package/dist/cjs/utils/axisFormatter.js +0 -71
- package/dist/cjs/utils/color.js +9 -87
- package/dist/cjs/utils/columnProcessing.d.ts +2 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +54 -1
- package/dist/cjs/utils/csv.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.d.ts +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +6 -59
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +63 -1
- package/dist/cjs/utils/dataProcessing.d.ts +10 -0
- package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/dataProcessing.js +144 -0
- package/dist/cjs/utils/dates.d.ts +2 -1
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +23 -1
- package/dist/cjs/utils/error.d.ts +5 -0
- package/dist/cjs/utils/error.d.ts.map +1 -0
- package/dist/cjs/utils/error.js +12 -0
- package/dist/cjs/utils/filterConstants.d.ts +34 -0
- package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
- package/dist/cjs/utils/filterConstants.js +36 -0
- package/dist/cjs/utils/filterProcessing.d.ts +7 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +104 -17
- package/dist/cjs/utils/logging.d.ts.map +1 -1
- package/dist/cjs/utils/logging.js +1 -0
- package/dist/cjs/utils/merge.js +0 -21
- package/dist/cjs/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
- package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
- package/dist/cjs/utils/monacoConfig.js +324 -0
- package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
- package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/paginationProcessing.js +30 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +16 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +12 -6
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +4 -3
- package/dist/cjs/utils/report.d.ts +10 -0
- package/dist/cjs/utils/report.d.ts.map +1 -0
- package/dist/cjs/utils/report.js +180 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +35 -6
- package/dist/cjs/utils/styles.d.ts +1 -1
- package/dist/cjs/utils/styles.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.d.ts +22 -8
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +116 -35
- package/dist/cjs/utils/textProcessing.js +3 -3
- package/dist/cjs/utils/validation.d.ts +9 -0
- package/dist/cjs/utils/validation.d.ts.map +1 -0
- package/dist/cjs/utils/validation.js +24 -0
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +8 -4
- package/dist/esm/Chart.d.ts +29 -46
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +189 -471
- package/dist/esm/ChartBuilder.d.ts +30 -61
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +191 -129
- package/dist/esm/ChartEditor.d.ts +14 -2
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +71 -126
- package/dist/esm/Context.d.ts +4 -1
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +51 -5
- package/dist/esm/Dashboard.d.ts +74 -118
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +275 -49
- package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/Calendar.js +5 -8
- package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePicker.js +2 -29
- package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
- package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
- package/dist/esm/ReportBuilder.d.ts +18 -6
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +484 -496
- package/dist/esm/SQLEditor.d.ts +4 -11
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +75 -87
- package/dist/esm/Table.d.ts +19 -3
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +132 -116
- package/dist/esm/TableChart.d.ts.map +1 -1
- package/dist/esm/TableChart.js +0 -1
- package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
- package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
- package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
- package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
- package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
- package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
- package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
- package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
- package/dist/esm/components/Banner/index.d.ts +1 -1
- package/dist/esm/components/Banner/index.d.ts.map +1 -1
- package/dist/esm/components/Banner/index.js +1 -1
- package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
- package/dist/esm/components/BigModal/BigModal.js +7 -13
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +13 -2
- package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarList.js +21 -14
- package/dist/esm/components/Chart/ChartError.d.ts +8 -1
- package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartError.js +39 -6
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +8 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +28 -4
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +1 -3
- package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
- package/dist/esm/components/Dashboard/DataLoader.d.ts +8 -12
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +137 -194
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
- package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -5
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +3 -32
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +2 -4
- package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
- package/dist/esm/components/Dropdown/index.d.ts +2 -2
- package/dist/esm/components/Dropdown/index.js +2 -2
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +2 -3
- package/dist/esm/components/Modal/index.d.ts +1 -1
- package/dist/esm/components/Modal/index.js +1 -1
- package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelect.js +18 -3
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +18 -3
- package/dist/esm/components/QuillSelect.js +1 -1
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +7 -4
- package/dist/esm/components/QuillTable.d.ts +1 -4
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +5 -11
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +30 -0
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/FilterModal.js +576 -0
- package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ast.js +31 -5
- package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
- package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/constants.js +24 -3
- package/dist/esm/components/ReportBuilder/convert.d.ts +18 -16
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +375 -493
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/convert.uspec.js +1419 -0
- package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
- package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/operators.js +32 -4
- package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +13 -4
- package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +16 -19
- package/dist/esm/components/UiComponents.d.ts +36 -8
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +104 -11
- package/dist/esm/components/selectUtils.d.ts +0 -1
- package/dist/esm/components/selectUtils.d.ts.map +1 -1
- package/dist/esm/components/selectUtils.js +0 -20
- package/dist/esm/hooks/index.d.ts +4 -4
- package/dist/esm/hooks/index.js +4 -4
- package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
- package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
- package/dist/esm/hooks/useAstToFilterTree.js +24 -0
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +5 -1
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +4 -2
- package/dist/esm/hooks/useOnClickOutside.js +5 -5
- package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
- package/dist/esm/hooks/useOnWindowResize.js +3 -3
- package/dist/esm/hooks/useQuill.d.ts +10 -27
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +133 -85
- package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
- package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
- package/dist/esm/hooks/useTheme.js +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +11 -24
- package/dist/esm/lib/utils.js +2 -2
- package/dist/esm/models/Columns.d.ts +2 -1
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +115 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +98 -1
- package/dist/esm/models/Pagination.d.ts +10 -0
- package/dist/esm/models/Pagination.d.ts.map +1 -0
- package/dist/esm/models/Pagination.js +1 -0
- package/dist/esm/models/Report.d.ts +103 -0
- package/dist/esm/models/Report.d.ts.map +1 -0
- package/dist/esm/models/Report.js +1 -0
- package/dist/esm/test-utils/constants.d.ts +56 -0
- package/dist/esm/test-utils/constants.d.ts.map +1 -0
- package/dist/esm/test-utils/constants.js +271 -0
- package/dist/esm/test-utils/generators.d.ts +4 -0
- package/dist/esm/test-utils/generators.d.ts.map +1 -0
- package/dist/esm/test-utils/generators.js +37 -0
- package/dist/esm/utils/aggregate.js +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
- package/dist/esm/utils/astFilterProcessing.js +8084 -0
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/astFilterProcessing.uspec.js +2877 -0
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +4 -3
- package/dist/esm/utils/axisFormatter.js +0 -71
- package/dist/esm/utils/color.js +9 -87
- package/dist/esm/utils/columnProcessing.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +52 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/columnProcessing.uspec.js +65 -0
- package/dist/esm/utils/csv.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.d.ts +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +6 -59
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +63 -1
- package/dist/esm/utils/dataProcessing.d.ts +10 -0
- package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
- package/dist/esm/utils/dataProcessing.js +138 -0
- package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/dataProcessing.uspec.js +205 -0
- package/dist/esm/utils/dates.d.ts +2 -1
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +21 -0
- package/dist/esm/utils/error.d.ts +5 -0
- package/dist/esm/utils/error.d.ts.map +1 -0
- package/dist/esm/utils/error.js +8 -0
- package/dist/esm/utils/filterConstants.d.ts +34 -0
- package/dist/esm/utils/filterConstants.d.ts.map +1 -0
- package/dist/esm/utils/filterConstants.js +33 -0
- package/dist/esm/utils/filterProcessing.d.ts +7 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +101 -16
- package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/filterProcessing.uspec.js +245 -0
- package/dist/esm/utils/logging.d.ts.map +1 -1
- package/dist/esm/utils/logging.js +1 -0
- package/dist/esm/utils/merge.js +0 -21
- package/dist/esm/utils/{monacoAutocomplete.d.ts → monacoConfig.d.ts} +3 -2
- package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
- package/dist/esm/utils/monacoConfig.js +319 -0
- package/dist/esm/utils/paginationProcessing.d.ts +5 -0
- package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
- package/dist/esm/utils/paginationProcessing.js +25 -0
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +16 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +12 -6
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +4 -3
- package/dist/esm/utils/queryConstructor.uspec.js +21 -21
- package/dist/esm/utils/report.d.ts +10 -0
- package/dist/esm/utils/report.d.ts.map +1 -0
- package/dist/esm/utils/report.ispec.d.ts +2 -0
- package/dist/esm/utils/report.ispec.d.ts.map +1 -0
- package/dist/esm/utils/report.ispec.js +46 -0
- package/dist/esm/utils/report.js +174 -0
- package/dist/esm/utils/report.uspec.d.ts +2 -0
- package/dist/esm/utils/report.uspec.d.ts.map +1 -0
- package/dist/esm/utils/report.uspec.js +66 -0
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +35 -6
- package/dist/esm/utils/styles.d.ts +1 -1
- package/dist/esm/utils/styles.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.d.ts +22 -8
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
- package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
- package/dist/esm/utils/tableProcessing.ispec.js +61 -0
- package/dist/esm/utils/tableProcessing.js +112 -33
- package/dist/esm/utils/textProcessing.js +3 -3
- package/dist/esm/utils/validation.d.ts +9 -0
- package/dist/esm/utils/validation.d.ts.map +1 -0
- package/dist/esm/utils/validation.js +20 -0
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +8 -4
- package/package.json +1 -1
- package/dist/cjs/utils/monacoAutocomplete.d.ts.map +0 -1
- package/dist/cjs/utils/monacoAutocomplete.js +0 -145
- package/dist/cjs/utils/queryConstructor.uspec.d.ts +0 -2
- package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +0 -1
- package/dist/cjs/utils/queryConstructor.uspec.js +0 -225
- package/dist/esm/utils/monacoAutocomplete.d.ts.map +0 -1
- package/dist/esm/utils/monacoAutocomplete.js +0 -140
package/dist/esm/ChartBuilder.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/* eslint-disable no-unused-vars */
|
|
3
2
|
import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
|
|
4
|
-
import { ClientContext, DashboardContext, DashboardFiltersContext, SchemaContext, ThemeContext, } from './Context';
|
|
3
|
+
import { ClientContext, DashboardContext, DashboardDataContext, DashboardFiltersContext, SchemaContext, ThemeContext, } from './Context';
|
|
5
4
|
import { getData, getDataFromCloud } from './utils/dataFetcher';
|
|
6
5
|
import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
|
|
7
6
|
import { PivotCard } from './internals/ReportBuilder/PivotList';
|
|
8
|
-
import
|
|
7
|
+
import { ChartDisplay } from './Chart';
|
|
9
8
|
import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, QuillTableComponent, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillChartBuilderFormContainer, QuillLoadingComponent, } from './components/UiComponents';
|
|
10
9
|
import { mergeComparisonRange } from './utils/merge';
|
|
11
10
|
import { removeDoubleQuotes, snakeAndCamelCaseToTitleCase, } from './utils/textProcessing';
|
|
@@ -16,6 +15,9 @@ import { convertColumnInfoToColumnInternal, convertFieldTypeToJSType, } from './
|
|
|
16
15
|
import { createTableNameToTableAliasMap, getColumnsByTableFromASTAndSchema, getSelectFromAST, } from './utils/astProcessing';
|
|
17
16
|
import { getSchemaInfoWithCustomFields } from './utils/schema';
|
|
18
17
|
import { getDateBucketFromRange } from './utils/dates';
|
|
18
|
+
import { validateReport } from './utils/validation';
|
|
19
|
+
import { QuillChartErrorWithAction } from './components/Chart/ChartError';
|
|
20
|
+
import { convertInternalReportToReport } from './utils/report';
|
|
19
21
|
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
20
22
|
const POSTGRES_DATE_TYPES = [
|
|
21
23
|
'timestamp',
|
|
@@ -58,12 +60,12 @@ export function createInitialFormData(columns) {
|
|
|
58
60
|
return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
|
|
59
61
|
}),
|
|
60
62
|
xAxisField: columns?.[0]?.field || '',
|
|
61
|
-
xAxisFormat: columns?.[0]?.format || '',
|
|
63
|
+
xAxisFormat: columns?.[0]?.format || 'whole_number',
|
|
62
64
|
yAxisFields: [
|
|
63
65
|
{
|
|
64
66
|
field: firstNumberColumn?.field || columns?.[0]?.field || '',
|
|
65
67
|
label: '',
|
|
66
|
-
format: firstNumberColumn?.format || columns?.[0]?.
|
|
68
|
+
format: firstNumberColumn?.format || columns?.[0]?.format || 'string',
|
|
67
69
|
},
|
|
68
70
|
],
|
|
69
71
|
xAxisLabel: '',
|
|
@@ -74,18 +76,26 @@ export function createInitialFormData(columns) {
|
|
|
74
76
|
};
|
|
75
77
|
return formEmptyState;
|
|
76
78
|
}
|
|
77
|
-
function getChartTypeOptions(formData) {
|
|
79
|
+
function getChartTypeOptions(formData, dashboard) {
|
|
80
|
+
let viableCharts = CHART_TYPES;
|
|
81
|
+
if (dashboard.dateFilter && dashboard.dateFilter.comparison) {
|
|
82
|
+
viableCharts = viableCharts.filter((chart) => !['table', 'metric', 'bar', 'pie'].includes(chart));
|
|
83
|
+
}
|
|
78
84
|
if (formData.pivot && !formData.pivot.rowField) {
|
|
79
|
-
return
|
|
85
|
+
return viableCharts
|
|
86
|
+
.filter((elem) => elem === 'metric' || elem === 'table')
|
|
87
|
+
.map((elem) => ({
|
|
80
88
|
label: elem,
|
|
81
89
|
value: elem,
|
|
82
90
|
}));
|
|
83
91
|
}
|
|
84
92
|
else {
|
|
85
|
-
return
|
|
93
|
+
return viableCharts
|
|
94
|
+
.filter((elem) => !((formData.pivot && elem === 'metric') ||
|
|
86
95
|
(formData.pivot &&
|
|
87
96
|
formData.pivot.columnField &&
|
|
88
|
-
(elem === 'bar' || elem === 'pie'))))
|
|
97
|
+
(elem === 'bar' || elem === 'pie'))))
|
|
98
|
+
.map((elem) => ({ label: elem, value: elem }));
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
101
|
function getTablesHelper(ast, allTables) {
|
|
@@ -101,8 +111,9 @@ function getTablesHelper(ast, allTables) {
|
|
|
101
111
|
// With statement column references
|
|
102
112
|
if (ast.with) {
|
|
103
113
|
for (const withStmt of ast.with) {
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
const astFrom = withStmt.stmt.from ?? withStmt.stmt.ast.from;
|
|
115
|
+
if (astFrom) {
|
|
116
|
+
const withReferencedColumns = getColumnsByTableFromASTAndSchema(withStmt.stmt.ast ?? withStmt.stmt, allTables, tableAliasMap);
|
|
106
117
|
// @ts-ignore
|
|
107
118
|
Object.keys(withReferencedColumns).forEach((tableName) => {
|
|
108
119
|
if (referencedColumns[tableName]) {
|
|
@@ -129,7 +140,7 @@ function getTablesHelper(ast, allTables) {
|
|
|
129
140
|
}) || [],
|
|
130
141
|
};
|
|
131
142
|
});
|
|
132
|
-
|
|
143
|
+
const dateFields = allTables
|
|
133
144
|
.filter((table) => onlyReferenceTables.includes(table.displayName))
|
|
134
145
|
.map((table) => {
|
|
135
146
|
return {
|
|
@@ -144,12 +155,32 @@ function getTablesHelper(ast, allTables) {
|
|
|
144
155
|
return { referencedTablesAndColumns, dateFields };
|
|
145
156
|
}
|
|
146
157
|
async function getReferencedTables(client, sqlQuery, dbTables) {
|
|
147
|
-
const resp = await getDataFromCloud(client, `astify`, {
|
|
158
|
+
const resp = await getDataFromCloud(client, `astify`, {
|
|
159
|
+
query: sqlQuery,
|
|
160
|
+
useNewNodeSql: true,
|
|
161
|
+
});
|
|
148
162
|
if (resp.success === false) {
|
|
149
163
|
return getTablesHelper(getSelectFromAST({}), dbTables);
|
|
150
164
|
}
|
|
151
165
|
return getTablesHelper(getSelectFromAST(resp.ast), dbTables);
|
|
152
166
|
}
|
|
167
|
+
function createReportFromForm(formData, report, selectedPivotTable, rows = []) {
|
|
168
|
+
return convertInternalReportToReport({
|
|
169
|
+
...formData,
|
|
170
|
+
dashboardName: formData.dashboardName || '',
|
|
171
|
+
pivot: formData.pivot,
|
|
172
|
+
id: '',
|
|
173
|
+
order: -1,
|
|
174
|
+
compareRows: report?.compareRows || [],
|
|
175
|
+
filtersApplied: report?.filtersApplied || [],
|
|
176
|
+
queryString: '',
|
|
177
|
+
rows: selectedPivotTable?.rows ?? rows,
|
|
178
|
+
rowCount: report?.rowCount || selectedPivotTable?.rows?.length || rows.length || 0,
|
|
179
|
+
yAxisFields: formData.yAxisFields ?? [],
|
|
180
|
+
pivotColumns: selectedPivotTable?.columns ?? undefined,
|
|
181
|
+
pivotRows: selectedPivotTable?.rows ?? undefined,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
153
184
|
export const numberFormatOptions = [
|
|
154
185
|
'whole_number',
|
|
155
186
|
'one_decimal_place',
|
|
@@ -260,7 +291,7 @@ export function ChartBuilderWithModal(props) {
|
|
|
260
291
|
* ### Chart Builder API
|
|
261
292
|
* @see https://docs.quillsql.com/components/chart-builder
|
|
262
293
|
*/
|
|
263
|
-
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, report = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, onSortChange, onPageChange, rowCount, isLoading, isComparison, onClickChartElement, }) {
|
|
294
|
+
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent = MemoizedModal, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, ErrorComponent = QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, report = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, onSortChange, onPageChange, rowCount, isLoading, isComparison, onClickChartElement, }) {
|
|
264
295
|
const dateRange = dr;
|
|
265
296
|
const [client] = useContext(ClientContext);
|
|
266
297
|
const [theme] = useContext(ThemeContext);
|
|
@@ -268,15 +299,27 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
268
299
|
const [windowWidth, setWindowWidth] = useState(1200);
|
|
269
300
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
270
301
|
const [pivotCardWidth, setPivotCardWidth] = useState(665);
|
|
302
|
+
const [chartTypes, setChartTypes] = useState(CHART_TYPES.map((type) => {
|
|
303
|
+
return { label: type, value: type };
|
|
304
|
+
}));
|
|
271
305
|
const [formWidth, setFormWidth] = useState(665);
|
|
272
306
|
const inputRef = useRef(null);
|
|
273
307
|
const selectRef = useRef(null);
|
|
274
|
-
const
|
|
308
|
+
const [, dispatch] = useContext(DashboardContext);
|
|
275
309
|
const [processedColumns, setProcessedColumns] = useState(columns);
|
|
276
310
|
const parentRef = useRef(null);
|
|
277
311
|
const deleteRef = useRef(null);
|
|
278
312
|
const modalPadding = 20;
|
|
279
313
|
const deleteButtonMargin = -12;
|
|
314
|
+
const validationHelper = (formData, dashboard, dateField, tables) => {
|
|
315
|
+
const issues = validateReport(formData, dashboard, dateField || defaultDateField, tables || allTables);
|
|
316
|
+
if (issues.length > 0) {
|
|
317
|
+
setFilterIssues(issues);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
setFilterIssues([]);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
280
323
|
useEffect(() => {
|
|
281
324
|
if (schema) {
|
|
282
325
|
const newProcessedColumns = columns.map((col) => {
|
|
@@ -361,18 +404,14 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
361
404
|
const [dashboardOptions, setDashboardOptions] = useState([]);
|
|
362
405
|
const [defaultDashboardName, setDefaultDashboardName] = useState(destinationDashboard || report?.dashboardName || '');
|
|
363
406
|
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
364
|
-
const
|
|
407
|
+
const { dashboardData } = useContext(DashboardDataContext);
|
|
365
408
|
const specificDashboardFilter = useMemo(() => {
|
|
366
409
|
return dashboardFilters.filter((f) => f && defaultDashboardName === f.dashboardName);
|
|
367
410
|
}, [dashboardFilters]);
|
|
368
|
-
const [dashboardFilters2, setDashboardFilters] = useState([]);
|
|
369
|
-
const [dashboardHasDateFilter, setDashboardHasDateFilter] = useState(false);
|
|
370
|
-
const [dashboardHasDateComparison, setDashboardHasDateComparison] = useState(false);
|
|
371
411
|
const [showFilterModal, setShowFilterModal] = useState(false);
|
|
372
412
|
const [filterIssues, setFilterIssues] = useState([]);
|
|
373
413
|
const [showPivotPopover, setShowPivotPopover] = useState(false);
|
|
374
414
|
const [isEdittingPivot, setIsEdittingPivot] = useState(false);
|
|
375
|
-
const [intialLoad, setInitialLoad] = useState(true);
|
|
376
415
|
const [selectedPivotIndex, setSelectedPivotIndex] = useState(-1);
|
|
377
416
|
const [tableName, setTableName] = useState(undefined);
|
|
378
417
|
const selectedTable = schema?.find((t) => t.displayName === tableName);
|
|
@@ -402,12 +441,12 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
402
441
|
return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
|
|
403
442
|
}),
|
|
404
443
|
xAxisField: columns?.[0]?.field || '',
|
|
405
|
-
xAxisFormat: columns?.[0]?.format || '',
|
|
444
|
+
xAxisFormat: columns?.[0]?.format || 'string',
|
|
406
445
|
yAxisFields: [
|
|
407
446
|
{
|
|
408
447
|
field: firstNumberColumn?.field || columns?.[0]?.field || '',
|
|
409
448
|
label: '',
|
|
410
|
-
format: firstNumberColumn?.format || columns?.[0]?.
|
|
449
|
+
format: firstNumberColumn?.format || columns?.[0]?.format || 'string',
|
|
411
450
|
},
|
|
412
451
|
],
|
|
413
452
|
xAxisLabel: '',
|
|
@@ -417,6 +456,9 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
417
456
|
template: false,
|
|
418
457
|
};
|
|
419
458
|
const updateDashboardFilters = async (dashboardName) => {
|
|
459
|
+
if (dashboardData && dashboardData[dashboardName]) {
|
|
460
|
+
return dashboardData[dashboardName];
|
|
461
|
+
}
|
|
420
462
|
const { queryEndpoint, queryHeaders, publicKey, customerId } = client;
|
|
421
463
|
if (queryEndpoint) {
|
|
422
464
|
const response = await fetch(queryEndpoint, {
|
|
@@ -432,22 +474,22 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
432
474
|
name: dashboardName,
|
|
433
475
|
clientId: publicKey,
|
|
434
476
|
databaseType: client.databaseType,
|
|
477
|
+
useNewNodeSql: true,
|
|
435
478
|
},
|
|
436
479
|
}),
|
|
437
480
|
credentials: 'omit', // If withCredentials is true, set to 'include'. Otherwise, set to 'omit'.
|
|
438
481
|
});
|
|
439
482
|
const responseData = (await response.json()).data;
|
|
440
483
|
if (responseData) {
|
|
441
|
-
|
|
442
|
-
setDashboardHasDateFilter(!!responseData.dateFilter);
|
|
443
|
-
setDashboardHasDateComparison(responseData.dateFilter?.comparison || false);
|
|
484
|
+
return responseData;
|
|
444
485
|
}
|
|
445
486
|
}
|
|
446
487
|
};
|
|
447
488
|
const pivotFormData = (pivot) => {
|
|
448
489
|
const yAxisField = pivot.columnField || pivot.valueField;
|
|
449
|
-
const yAxisLabel = report?.yAxisFields?.length > 0
|
|
450
|
-
?
|
|
490
|
+
const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
491
|
+
? // @ts-ignore
|
|
492
|
+
report.yAxisFields[0].label
|
|
451
493
|
: pivot.valueField;
|
|
452
494
|
// date labels for pivots should be treated like strings since they are
|
|
453
495
|
const yAxisIsDate = pivot.columnField
|
|
@@ -461,6 +503,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
461
503
|
xAxisFormat: isDateField(pivot.rowFieldType)
|
|
462
504
|
? 'string'
|
|
463
505
|
: columns.find((col) => col.field === pivot.rowField)?.format ||
|
|
506
|
+
report?.xAxisFormat ||
|
|
464
507
|
'whole_number',
|
|
465
508
|
xAxisLabel: report?.xAxisLabel || pivot.rowField,
|
|
466
509
|
yAxisFields: [
|
|
@@ -469,22 +512,33 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
469
512
|
label: yAxisLabel,
|
|
470
513
|
format: yAxisIsDate
|
|
471
514
|
? 'string'
|
|
472
|
-
: report?.yAxisFields?.length > 0
|
|
473
|
-
?
|
|
515
|
+
: report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
516
|
+
? // @ts-ignore
|
|
517
|
+
report?.yAxisFields[0].format
|
|
474
518
|
: columns.find((col) => col.field === pivot.valueField)?.format ||
|
|
475
519
|
'whole_number',
|
|
476
520
|
},
|
|
477
521
|
],
|
|
478
522
|
};
|
|
479
523
|
};
|
|
480
|
-
const
|
|
481
|
-
|
|
524
|
+
const formFormDataFromReport = (report) => {
|
|
525
|
+
let pivotData = {};
|
|
526
|
+
let dateField = defaultDateField;
|
|
527
|
+
if (pivot) {
|
|
528
|
+
pivotData = pivotFormData(pivot);
|
|
529
|
+
}
|
|
530
|
+
if (report) {
|
|
531
|
+
dateField = report.dateField || defaultDateField;
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
482
534
|
...formEmptyState,
|
|
483
535
|
...report,
|
|
484
|
-
...
|
|
536
|
+
...pivotData,
|
|
485
537
|
...(destinationDashboard && { dashboardName: destinationDashboard }),
|
|
486
|
-
|
|
487
|
-
|
|
538
|
+
dateField: dateField,
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
const [formData, setFormData] = useState(formFormDataFromReport(report));
|
|
488
542
|
useEffect(() => {
|
|
489
543
|
if (!loadingFormData && triggeredEditChart) {
|
|
490
544
|
editChart();
|
|
@@ -494,8 +548,14 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
494
548
|
async function getFormData() {
|
|
495
549
|
setLoadingFormData(true);
|
|
496
550
|
const curFormData = formData;
|
|
497
|
-
|
|
498
|
-
|
|
551
|
+
let dashNames = Object.keys(dashboardData).map((dashboard) => {
|
|
552
|
+
return dashboard;
|
|
553
|
+
}) ?? [];
|
|
554
|
+
if (dashNames.length === 0) {
|
|
555
|
+
const resp = await getDataFromCloud(client, `dashnames/${client.publicKey}/`, null, 'GET');
|
|
556
|
+
dashNames = resp.dashboardNames;
|
|
557
|
+
}
|
|
558
|
+
let dashboardOptions = dashNames
|
|
499
559
|
.filter((elem) => elem !== null)
|
|
500
560
|
.map((key) => ({ label: key, value: key }));
|
|
501
561
|
if (!dashboardOptions.length) {
|
|
@@ -508,13 +568,16 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
508
568
|
{ label: destinationDashboard, value: destinationDashboard },
|
|
509
569
|
];
|
|
510
570
|
}
|
|
511
|
-
|
|
512
|
-
|
|
571
|
+
let dashboardName = report?.dashboardName
|
|
572
|
+
? report.dashboardName
|
|
573
|
+
: dashboardOptions[0]?.label || '';
|
|
574
|
+
if (destinationDashboard) {
|
|
575
|
+
dashboardName = destinationDashboard;
|
|
576
|
+
}
|
|
577
|
+
const curDashboard = await updateDashboardFilters(dashboardName);
|
|
513
578
|
setDashboardOptions(dashboardOptions);
|
|
514
|
-
const dashboardName = destinationDashboard ??
|
|
515
|
-
(report ? report?.dashboardName : dashboardOptions[0]?.label);
|
|
516
579
|
curFormData.dashboardName = dashboardName;
|
|
517
|
-
setDefaultDashboardName(
|
|
580
|
+
setDefaultDashboardName(dashboardName ??
|
|
518
581
|
(report ? report?.dashboardName : dashboardOptions[0]?.label));
|
|
519
582
|
let curSchemaData = schema;
|
|
520
583
|
if (!curSchemaData || curSchemaData.length === 0) {
|
|
@@ -538,7 +601,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
538
601
|
const tableNames = result.referencedTablesAndColumns.map((table) => table.name);
|
|
539
602
|
setAllTables(tableNames);
|
|
540
603
|
let customFieldUsage = false;
|
|
541
|
-
for (
|
|
604
|
+
for (const table of tableNames) {
|
|
542
605
|
const tableInfo = curSchemaData.find((elem) => elem.name === table);
|
|
543
606
|
if (tableInfo?.customFieldInfo) {
|
|
544
607
|
customFieldUsage = true;
|
|
@@ -558,18 +621,22 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
558
621
|
result.dateFields[0]?.columns[0]?.field ||
|
|
559
622
|
'',
|
|
560
623
|
};
|
|
561
|
-
curFormData.dateField = dateField;
|
|
562
624
|
let isTemplate = curFormData.template;
|
|
563
625
|
if (customFieldUsage) {
|
|
564
626
|
isTemplate = false;
|
|
565
627
|
}
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
dashboardName: report && report.dashboardName
|
|
628
|
+
curFormData.dashboardName =
|
|
629
|
+
report && report.dashboardName
|
|
569
630
|
? report?.dashboardName
|
|
570
|
-
: dashboardOptions[0]?.label
|
|
571
|
-
|
|
572
|
-
|
|
631
|
+
: dashboardOptions[0]?.label;
|
|
632
|
+
curFormData.template = isTemplate;
|
|
633
|
+
if (!curFormData.dateField.field || !curFormData.dateField.table) {
|
|
634
|
+
if (dateField.field) {
|
|
635
|
+
curFormData.dateField = dateField;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
setFormData(curFormData);
|
|
639
|
+
validationHelper(curFormData, curDashboard, curFormData.dateField ?? dateField, tableNames);
|
|
573
640
|
setLoadingFormData(false);
|
|
574
641
|
}
|
|
575
642
|
getFormData();
|
|
@@ -577,7 +644,6 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
577
644
|
const [selectedPivotTable, setSelectedPivotTable] = useState(pivotData || undefined);
|
|
578
645
|
const fetchPivotData = async (pivot, uniqueValues, overrideDateRange) => {
|
|
579
646
|
if (pivot && rows) {
|
|
580
|
-
setInitialLoad(false);
|
|
581
647
|
const dateFilter = report
|
|
582
648
|
? report.filtersApplied.find((filter) => {
|
|
583
649
|
return filter.filterType === 'date_range';
|
|
@@ -633,8 +699,15 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
633
699
|
}, {});
|
|
634
700
|
});
|
|
635
701
|
}
|
|
636
|
-
}, [
|
|
637
|
-
|
|
702
|
+
}, [
|
|
703
|
+
selectedPivotTable,
|
|
704
|
+
formData.columns,
|
|
705
|
+
formData.chartType,
|
|
706
|
+
rows,
|
|
707
|
+
formData.pivot,
|
|
708
|
+
]);
|
|
709
|
+
const handleChange = async (value, fieldName, index) => {
|
|
710
|
+
let updatedForm = { ...formData };
|
|
638
711
|
try {
|
|
639
712
|
// WE NEED TO REPROCESS THE PIVOT TABLE IF THE PIVOT COLUMN CHANGES
|
|
640
713
|
// WE NEED TO UPDATE BOTH VALUEFIELDTYPE AND COLUMN FIELD TYPES
|
|
@@ -648,14 +721,14 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
648
721
|
valueFieldType: value,
|
|
649
722
|
};
|
|
650
723
|
// @ts-ignore
|
|
651
|
-
|
|
652
|
-
return;
|
|
724
|
+
updatedForm.pivot = updatedPivot;
|
|
653
725
|
}
|
|
654
|
-
if (index !== undefined) {
|
|
726
|
+
else if (index !== undefined) {
|
|
655
727
|
// For dynamic array fields
|
|
656
728
|
const [field, subfield] = fieldName.split('.');
|
|
657
729
|
// @ts-ignore
|
|
658
730
|
const updatedArray = formData[field].map((item, i) => i === index ? { ...item, [subfield]: value } : item);
|
|
731
|
+
updatedForm = { ...formData, [field]: updatedArray };
|
|
659
732
|
setFormData({ ...formData, [field]: updatedArray });
|
|
660
733
|
}
|
|
661
734
|
else if (fieldName.includes('.')) {
|
|
@@ -665,19 +738,18 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
665
738
|
const subfieldTypeFieldName = subfield + 'Type';
|
|
666
739
|
if (value.length) {
|
|
667
740
|
const subFieldType = columns.find((columns) => columns.field === value).fieldType;
|
|
668
|
-
|
|
669
|
-
...
|
|
741
|
+
updatedForm = {
|
|
742
|
+
...updatedForm,
|
|
670
743
|
// @ts-ignore
|
|
671
744
|
[field]: {
|
|
672
|
-
...
|
|
745
|
+
...updatedForm[field],
|
|
673
746
|
[subfield]: value,
|
|
674
747
|
[subfieldTypeFieldName]: subFieldType,
|
|
675
748
|
},
|
|
676
|
-
}
|
|
677
|
-
return;
|
|
749
|
+
};
|
|
678
750
|
}
|
|
679
751
|
else {
|
|
680
|
-
|
|
752
|
+
updatedForm = {
|
|
681
753
|
...formData,
|
|
682
754
|
// @ts-ignore
|
|
683
755
|
[field]: {
|
|
@@ -685,36 +757,42 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
685
757
|
[subfield]: '',
|
|
686
758
|
[subfieldTypeFieldName]: '',
|
|
687
759
|
},
|
|
688
|
-
}
|
|
689
|
-
return;
|
|
760
|
+
};
|
|
690
761
|
}
|
|
691
762
|
}
|
|
692
|
-
if (field === 'dateField' &&
|
|
763
|
+
else if (field === 'dateField' &&
|
|
693
764
|
subfield === 'table' &&
|
|
694
765
|
!formData.dateField.field) {
|
|
695
766
|
const field = schema?.find((elem) => elem.name === value)
|
|
696
767
|
?.columns?.[0]?.name;
|
|
697
|
-
|
|
698
|
-
...formData,
|
|
768
|
+
updatedForm.dateField = {
|
|
699
769
|
// @ts-ignore
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
770
|
+
...updatedForm[field],
|
|
771
|
+
[subfield]: value,
|
|
772
|
+
field: field,
|
|
773
|
+
};
|
|
703
774
|
}
|
|
704
|
-
|
|
705
|
-
...
|
|
775
|
+
updatedForm = {
|
|
776
|
+
...updatedForm,
|
|
706
777
|
// @ts-ignore
|
|
707
|
-
[field]: { ...
|
|
708
|
-
}
|
|
778
|
+
[field]: { ...updatedForm[field], [subfield]: value },
|
|
779
|
+
};
|
|
709
780
|
}
|
|
710
781
|
else {
|
|
711
782
|
// For simple fields
|
|
712
|
-
|
|
783
|
+
updatedForm = { ...updatedForm, [fieldName]: value };
|
|
784
|
+
}
|
|
785
|
+
let dashboardName = updatedForm.dashboardName;
|
|
786
|
+
if (fieldName === 'dashboardName') {
|
|
787
|
+
dashboardName = value;
|
|
713
788
|
}
|
|
789
|
+
validationHelper(updatedForm, dashboardData[dashboardName || '']);
|
|
790
|
+
setChartTypes(getChartTypeOptions(updatedForm, dashboardData[dashboardName || '']));
|
|
714
791
|
}
|
|
715
792
|
catch (e) {
|
|
716
|
-
|
|
793
|
+
updatedForm = { ...updatedForm, [fieldName]: value };
|
|
717
794
|
}
|
|
795
|
+
setFormData(updatedForm);
|
|
718
796
|
};
|
|
719
797
|
const handleAddPivot = async (pivot, uniqueValues, dateRange, pivotData) => {
|
|
720
798
|
const newPivotFormData = pivotFormData(pivot);
|
|
@@ -780,7 +858,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
780
858
|
columnField: '',
|
|
781
859
|
columnFieldType: '',
|
|
782
860
|
valueField: '',
|
|
783
|
-
aggregationType: '',
|
|
861
|
+
aggregationType: 'sum',
|
|
784
862
|
},
|
|
785
863
|
});
|
|
786
864
|
}
|
|
@@ -801,12 +879,12 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
801
879
|
event.preventDefault();
|
|
802
880
|
};
|
|
803
881
|
const deleteChart = async () => {
|
|
804
|
-
if (!report
|
|
882
|
+
if (!report?.id || !client) {
|
|
805
883
|
return;
|
|
806
884
|
}
|
|
807
885
|
const { publicKey, customerId } = client;
|
|
808
886
|
const cloudBody = {
|
|
809
|
-
dashboardItemId: report.
|
|
887
|
+
dashboardItemId: report.id,
|
|
810
888
|
};
|
|
811
889
|
const searchParams = new URLSearchParams(customerId
|
|
812
890
|
? {
|
|
@@ -823,30 +901,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
823
901
|
setIsOpen(false);
|
|
824
902
|
setIsSubmitting(false);
|
|
825
903
|
};
|
|
826
|
-
const editChart = async (
|
|
827
|
-
if (!override) {
|
|
828
|
-
let dashboardDiscrepancyIssues = [];
|
|
829
|
-
if (dashboardHasDateComparison && formData.chartType === 'pie') {
|
|
830
|
-
dashboardDiscrepancyIssues.push(`The ${formData.dashboardName} dashboard is used for comparing date fields, you cannot add a pie chart to this dashboard.`);
|
|
831
|
-
}
|
|
832
|
-
if (dashboardHasDateFilter &&
|
|
833
|
-
((!defaultDateField.table && !defaultDateField.field) ||
|
|
834
|
-
(!formData.dateField.field && !formData.dateField.table))) {
|
|
835
|
-
dashboardDiscrepancyIssues.push(`The dashboard "${formData.dashboardName}" has a global date filter but this chart doesn't reference any tables with a date field.`);
|
|
836
|
-
}
|
|
837
|
-
dashboardFilters2.forEach((filter) => {
|
|
838
|
-
const table = allTables.find((elem) => elem === filter.table);
|
|
839
|
-
if (!table) {
|
|
840
|
-
dashboardDiscrepancyIssues.push(`The dashboard "${formData.dashboardName}" a global filter on "${filter.table}" "${filter.field}" but this chart doesn't reference "${filter.table}".`);
|
|
841
|
-
}
|
|
842
|
-
});
|
|
843
|
-
if (dashboardDiscrepancyIssues.length) {
|
|
844
|
-
setFilterIssues(dashboardDiscrepancyIssues);
|
|
845
|
-
setShowFilterModal(true);
|
|
846
|
-
setTriggeredEditChart(false);
|
|
847
|
-
return;
|
|
848
|
-
}
|
|
849
|
-
}
|
|
904
|
+
const editChart = async () => {
|
|
850
905
|
if (isSubmitting) {
|
|
851
906
|
setTriggeredEditChart(false);
|
|
852
907
|
return;
|
|
@@ -858,8 +913,8 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
858
913
|
return;
|
|
859
914
|
}
|
|
860
915
|
// If the dashbaordItem is a template but the editor isn't an admin, create a new dashboardItem and set the template to false
|
|
861
|
-
let dashboardItemId = report ? report.
|
|
862
|
-
if (report && !showAccessControlOptions &&
|
|
916
|
+
let dashboardItemId = report ? report.id : undefined;
|
|
917
|
+
if (report && !showAccessControlOptions && formData.template) {
|
|
863
918
|
dashboardItemId = undefined;
|
|
864
919
|
}
|
|
865
920
|
const cloudBody = {
|
|
@@ -876,10 +931,11 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
876
931
|
pivot: formData.pivot,
|
|
877
932
|
referencedTables: allTables,
|
|
878
933
|
referencedColumns,
|
|
879
|
-
template: report && !showAccessControlOptions &&
|
|
934
|
+
template: report && !showAccessControlOptions && formData.template
|
|
880
935
|
? false
|
|
881
936
|
: formData.template,
|
|
882
937
|
customerId: customerId || '*',
|
|
938
|
+
useNewNodeSql: true,
|
|
883
939
|
};
|
|
884
940
|
// @ts-ignore
|
|
885
941
|
if (cloudBody['rows']) {
|
|
@@ -897,6 +953,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
897
953
|
databaseType: databaseType,
|
|
898
954
|
...cloudBody,
|
|
899
955
|
orgId: customerId || '*',
|
|
956
|
+
useNewNodeSql: true,
|
|
900
957
|
},
|
|
901
958
|
};
|
|
902
959
|
const searchParams = new URLSearchParams(customerId
|
|
@@ -966,14 +1023,8 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
966
1023
|
maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
|
|
967
1024
|
}),
|
|
968
1025
|
...(!isHorizontalView && isOpen && { width: formWidth }),
|
|
969
|
-
}, children: [((!isHorizontalView && windowWidth >= 1200) ||
|
|
970
|
-
formData.chartType !== 'table') && (_jsx(
|
|
971
|
-
...formData,
|
|
972
|
-
rows: chartRows,
|
|
973
|
-
pivotRows: selectedPivotTable?.rows || undefined,
|
|
974
|
-
pivotColumns: selectedPivotTable?.columns || undefined,
|
|
975
|
-
rowCount,
|
|
976
|
-
}, hideDateRangeFilter: hideDateRangeFilter, containerStyle: {
|
|
1026
|
+
}, children: [report?.adminError || report?.error ? (_jsx(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : (((!isHorizontalView && windowWidth >= 1200) ||
|
|
1027
|
+
formData.chartType !== 'table') && (_jsx(ChartDisplay, { reportId: report ? report.id : undefined, config: createReportFromForm(formData, report, selectedPivotTable, rows), colors: theme.chartColors, loading: isLoading ? true : false, hideDateRangeFilter: hideDateRangeFilter, containerStyle: {
|
|
977
1028
|
width: '100%',
|
|
978
1029
|
height: formData.chartType === 'metric'
|
|
979
1030
|
? 100
|
|
@@ -983,7 +1034,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
983
1034
|
: 'calc(100% - 10px)'
|
|
984
1035
|
: 400,
|
|
985
1036
|
...(isHorizontalView && { flexGrow: 1 }),
|
|
986
|
-
}, onClickChartElement: onClickChartElement })),
|
|
1037
|
+
}, onClickChartElement: onClickChartElement }))),
|
|
987
1038
|
// Make sure to display non-pivoted table when using pivot chart
|
|
988
1039
|
showTableFormatOptions &&
|
|
989
1040
|
(isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsx("div", { style: {
|
|
@@ -1024,7 +1075,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
1024
1075
|
})), width: 200 }) })), _jsx("div", { ref: selectRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(SelectComponent, { label: "Chart type", value: formData.chartType, onChange: (e) => handleChange(e.target.value, 'chartType'),
|
|
1025
1076
|
// filter out metric for all pivots
|
|
1026
1077
|
// filter out bar and pie for row and column pivot
|
|
1027
|
-
options:
|
|
1078
|
+
options: chartTypes, width: 200 }) })] }), _jsxs("div", { style: {
|
|
1028
1079
|
display: 'flex',
|
|
1029
1080
|
flexDirection: 'column',
|
|
1030
1081
|
gap: 6,
|
|
@@ -1059,7 +1110,11 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
1059
1110
|
: formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
|
|
1060
1111
|
isDateField(formData.pivot.rowFieldType)
|
|
1061
1112
|
? [{ value: 'pivot_date', label: 'date' }]
|
|
1062
|
-
: formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields
|
|
1113
|
+
: formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields
|
|
1114
|
+
.filter((yAxisField) => {
|
|
1115
|
+
return !yAxisField.field.startsWith('comparison_');
|
|
1116
|
+
})
|
|
1117
|
+
.map((yAxisField, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.pivot
|
|
1063
1118
|
? formData.pivot.valueField || 'count'
|
|
1064
1119
|
: yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
|
|
1065
1120
|
? [
|
|
@@ -1154,18 +1209,25 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
1154
1209
|
justifyContent: 'flex-end',
|
|
1155
1210
|
marginTop: 'auto',
|
|
1156
1211
|
gap: 10,
|
|
1157
|
-
}, children: [!hideDeleteButton && !isHorizontalView && report && (_jsx(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), !hideSubmitButton && (
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
},
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1212
|
+
}, children: [!hideDeleteButton && !isHorizontalView && report && (_jsx(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), !hideSubmitButton && (_jsxs("div", { style: {
|
|
1213
|
+
display: 'flex',
|
|
1214
|
+
flexDirection: 'row',
|
|
1215
|
+
width: '100%',
|
|
1216
|
+
justifyContent: 'space-between',
|
|
1217
|
+
alignItems: 'center',
|
|
1218
|
+
gap: 6,
|
|
1219
|
+
}, children: [filterIssues.length === 0 ? (_jsx("div", {})) : (_jsx(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), _jsx(ButtonComponent, { onClick: () => {
|
|
1220
|
+
if (loadingFormData) {
|
|
1221
|
+
setTriggeredEditChart(true);
|
|
1222
|
+
}
|
|
1223
|
+
else {
|
|
1224
|
+
editChart();
|
|
1225
|
+
}
|
|
1226
|
+
}, disabled: filterIssues.length !== 0, label: buttonLabel
|
|
1227
|
+
? buttonLabel
|
|
1228
|
+
: report
|
|
1229
|
+
? 'Save changes'
|
|
1230
|
+
: 'Add to dashboard' })] }))] })] }))] }), _jsx(DashboardFilterModal, { isOpen: showFilterModal, setIsOpen: setShowFilterModal, issues: filterIssues, ButtonComponent: ButtonComponent, ModalComponent: ModalComponent })] }));
|
|
1169
1231
|
}
|
|
1170
1232
|
function SegmentedControl({ onChange, value, theme, organizationName, customFieldTableRef, }) {
|
|
1171
1233
|
return (_jsxs("div", { style: {
|
|
@@ -1240,7 +1302,7 @@ export function DashboardFilterModal({ isOpen, setIsOpen, issues, ModalComponent
|
|
|
1240
1302
|
boxSizing: 'border-box',
|
|
1241
1303
|
overflow: 'scroll',
|
|
1242
1304
|
maxHeight: 600,
|
|
1243
|
-
}, children: [issues.map((issue
|
|
1305
|
+
}, children: [issues.map((issue) => (_jsx("span", { style: { paddingTop: '10px' }, children: issue }, issue))), _jsx("div", { style: {
|
|
1244
1306
|
display: 'flex',
|
|
1245
1307
|
flexDirection: 'row',
|
|
1246
1308
|
justifyContent: 'flex-end',
|