@quillsql/react 2.13.43 → 2.13.44
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.map +1 -1
- package/dist/cjs/Chart.js +2 -2
- package/dist/cjs/ChartBuilder.d.ts +1 -0
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +48 -14
- package/dist/cjs/ChartEditor.d.ts +1 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +2 -2
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +37 -26
- package/dist/cjs/Dashboard.d.ts +2 -2
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +115 -99
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +871 -1574
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +23 -4
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/components/Chart/CustomReferenceLine.js +1 -1
- package/dist/cjs/components/Chart/GaugeChart.js +0 -6
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +3 -3
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts +1 -1
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardSection.js +20 -19
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +1 -0
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +58 -8
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +91 -14
- package/dist/cjs/components/QuillSelectWithCombo.js +6 -6
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +6 -16
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +172 -75
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -5
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -9
- package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts +17 -0
- package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/DraggableColumns.js +52 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts +17 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.js +17 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +6 -12
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +29 -20
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +8 -17
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +20 -86
- package/dist/cjs/components/ReportBuilder/convert.js +6 -6
- package/dist/cjs/components/ReportBuilder/ui.d.ts +8 -9
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +30 -8
- package/dist/cjs/components/ReportBuilder/util.d.ts +2 -5
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +1 -1
- package/dist/cjs/components/UiComponents.d.ts +3 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +13 -13
- package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +14 -12
- package/dist/cjs/hooks/useDashboard.d.ts +5 -3
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +8 -6
- package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -0
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnClickOutside.js +33 -0
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +22 -15
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +7 -5
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +100 -48
- package/dist/cjs/models/Client.d.ts +4 -0
- package/dist/cjs/models/Client.d.ts.map +1 -1
- package/dist/cjs/models/Dashboard.d.ts +1 -0
- package/dist/cjs/models/Dashboard.d.ts.map +1 -1
- package/dist/cjs/models/Report.d.ts +2 -0
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/models/ReportBuilder.d.ts +46 -0
- package/dist/cjs/models/ReportBuilder.d.ts.map +1 -0
- package/dist/cjs/models/ReportBuilder.js +19 -0
- package/dist/cjs/models/Tables.d.ts +5 -5
- package/dist/cjs/models/Tables.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +4 -0
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +301 -97
- package/dist/cjs/utils/astProcessing.d.ts +14 -4
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +38 -4
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +18 -3
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +4 -3
- package/dist/cjs/utils/filterProcessing.d.ts +2 -11
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +4 -16
- 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 +4 -2
- package/dist/cjs/utils/pivotProcessing.d.ts +17 -7
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +60 -51
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +15 -2
- package/dist/cjs/utils/report.d.ts +12 -9
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +114 -47
- package/dist/cjs/utils/reportBuilder.d.ts +88 -0
- package/dist/cjs/utils/reportBuilder.d.ts.map +1 -0
- package/dist/cjs/utils/reportBuilder.js +395 -0
- package/dist/cjs/utils/schema.d.ts +7 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +36 -2
- package/dist/cjs/utils/tableProcessing.d.ts +59 -29
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +75 -90
- package/dist/cjs/utils/ui.d.ts +2 -0
- package/dist/cjs/utils/ui.d.ts.map +1 -0
- package/dist/cjs/utils/ui.js +18 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +2 -2
- package/dist/esm/ChartBuilder.d.ts +1 -0
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +49 -15
- package/dist/esm/ChartEditor.d.ts +1 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +2 -2
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +37 -26
- package/dist/esm/Dashboard.d.ts +2 -2
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +119 -103
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +878 -1581
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +23 -4
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/components/Chart/CustomReferenceLine.js +1 -1
- package/dist/esm/components/Chart/GaugeChart.js +0 -6
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +3 -3
- package/dist/esm/components/Dashboard/DashboardSection.d.ts +1 -1
- package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardSection.js +21 -20
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +1 -0
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +5 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +57 -7
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +58 -14
- package/dist/esm/components/QuillSelectWithCombo.js +6 -6
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +6 -16
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +173 -76
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -5
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -9
- package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts +17 -0
- package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/DraggableColumns.js +46 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.d.ts +17 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.js +14 -0
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +6 -12
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +29 -20
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +8 -17
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +21 -87
- package/dist/esm/components/ReportBuilder/convert.js +6 -6
- package/dist/esm/components/ReportBuilder/ui.d.ts +8 -9
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +33 -11
- package/dist/esm/components/ReportBuilder/util.d.ts +2 -5
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +1 -1
- package/dist/esm/components/UiComponents.d.ts +3 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +13 -13
- package/dist/esm/hooks/useAskQuill.d.ts +1 -1
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +14 -12
- package/dist/esm/hooks/useDashboard.d.ts +5 -3
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +8 -6
- package/dist/esm/hooks/useOnClickOutside.d.ts +1 -0
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useOnClickOutside.js +31 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +23 -16
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +7 -5
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +101 -49
- package/dist/esm/models/Client.d.ts +4 -0
- package/dist/esm/models/Client.d.ts.map +1 -1
- package/dist/esm/models/Dashboard.d.ts +1 -0
- package/dist/esm/models/Dashboard.d.ts.map +1 -1
- package/dist/esm/models/Report.d.ts +2 -0
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/models/ReportBuilder.d.ts +46 -0
- package/dist/esm/models/ReportBuilder.d.ts.map +1 -0
- package/dist/esm/models/ReportBuilder.js +16 -0
- package/dist/esm/models/Tables.d.ts +5 -5
- package/dist/esm/models/Tables.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +4 -0
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +300 -97
- package/dist/esm/utils/astProcessing.d.ts +14 -4
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +38 -5
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +18 -3
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +4 -3
- package/dist/esm/utils/filterProcessing.d.ts +2 -11
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +4 -15
- 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 +4 -2
- package/dist/esm/utils/pivotProcessing.d.ts +17 -7
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +58 -49
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +15 -2
- package/dist/esm/utils/report.d.ts +12 -9
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +116 -46
- package/dist/esm/utils/reportBuilder.d.ts +88 -0
- package/dist/esm/utils/reportBuilder.d.ts.map +1 -0
- package/dist/esm/utils/reportBuilder.js +386 -0
- package/dist/esm/utils/schema.d.ts +7 -0
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +34 -1
- package/dist/esm/utils/tableProcessing.d.ts +59 -29
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +71 -86
- package/dist/esm/utils/ui.d.ts +2 -0
- package/dist/esm/utils/ui.d.ts.map +1 -0
- package/dist/esm/utils/ui.js +14 -0
- package/package.json +1 -1
|
@@ -55,7 +55,7 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
|
|
|
55
55
|
// Sort null to top
|
|
56
56
|
if (searchQuery === '') {
|
|
57
57
|
return options
|
|
58
|
-
|
|
58
|
+
?.sort((a, b) => {
|
|
59
59
|
if (a.value === null) {
|
|
60
60
|
return -1;
|
|
61
61
|
}
|
|
@@ -64,13 +64,13 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
|
|
|
64
64
|
}
|
|
65
65
|
return 0;
|
|
66
66
|
})
|
|
67
|
-
|
|
67
|
+
?.slice(0, 20) ?? [];
|
|
68
68
|
}
|
|
69
69
|
const uuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
|
|
70
70
|
const isUuid = options?.[0]?.value?.toString()?.match(uuidRegex);
|
|
71
71
|
const isNumber = typeof options?.[0]?.value === 'number';
|
|
72
72
|
return options
|
|
73
|
-
|
|
73
|
+
?.filter((option) => {
|
|
74
74
|
if (!option) {
|
|
75
75
|
return false;
|
|
76
76
|
}
|
|
@@ -84,7 +84,7 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
|
|
|
84
84
|
.replace(/\s+/g, '')
|
|
85
85
|
.includes(searchQuery.toLowerCase().replace(/\s+/g, '')) : false);
|
|
86
86
|
})
|
|
87
|
-
|
|
87
|
+
?.sort((a, b) => {
|
|
88
88
|
if (a.value === null) {
|
|
89
89
|
return -1;
|
|
90
90
|
}
|
|
@@ -93,13 +93,13 @@ function QuillSelectComponentWithCombo({ options, value, width, onChange, label,
|
|
|
93
93
|
}
|
|
94
94
|
return 0;
|
|
95
95
|
})
|
|
96
|
-
|
|
96
|
+
?.slice(0, 20) ?? [];
|
|
97
97
|
}, [options, searchQuery]);
|
|
98
98
|
const nullLabel = (0, react_1.useMemo)(() => {
|
|
99
99
|
return filteredItems.some((item) => item.value === '-') ? 'None' : '-';
|
|
100
100
|
}, [filteredItems]);
|
|
101
101
|
const selectedLabel = (0, react_1.useMemo)(() => {
|
|
102
|
-
const selectedOption = options
|
|
102
|
+
const selectedOption = options?.find((elem) => elem.value === value);
|
|
103
103
|
return selectedOption && selectedOption.label == '-'
|
|
104
104
|
? nullLabel
|
|
105
105
|
: (selectedOption?.label ?? 'Select');
|
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TextInputComponentProps } from '../UiComponents';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
selectedColumns:
|
|
8
|
-
|
|
9
|
-
isSelectedAllColumns: any;
|
|
10
|
-
clearAllState: any;
|
|
11
|
-
nameToColumn: any;
|
|
12
|
-
baseAst: any;
|
|
13
|
-
setBaseAst: any;
|
|
14
|
-
pivot: any;
|
|
15
|
-
initialTableName: any;
|
|
16
|
-
defaultAST: any;
|
|
17
|
-
defaultTable: any;
|
|
18
|
-
setPivot: any;
|
|
3
|
+
import { Table } from '../../models/Tables';
|
|
4
|
+
import { ReportBuilderColumn, ReportBuilderTable } from '../../models/ReportBuilder';
|
|
5
|
+
export default function AddColumnModal({ onSave, selectedColumns, schema, schemaLoading, TextInputComponent, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState, LoadingComponent, }: {
|
|
6
|
+
onSave: (newTables: ReportBuilderTable[], newColumns: ReportBuilderColumn[]) => void;
|
|
7
|
+
selectedColumns: ReportBuilderColumn[];
|
|
8
|
+
schema: Table[];
|
|
19
9
|
schemaLoading?: boolean;
|
|
20
10
|
TextInputComponent: ((props: TextInputComponentProps) => JSX.Element) | React.ForwardRefExoticComponent<TextInputComponentProps & React.RefAttributes<HTMLInputElement>>;
|
|
21
11
|
SelectColumn: (props: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AddColumnModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAiBpE,OAAO,EAGL,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAEL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,MAAM,EAEN,eAAe,EACf,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,sBAAoD,EACpD,gBAAwC,GACzC,EAAE;IACD,MAAM,EAAE,CACN,SAAS,EAAE,kBAAkB,EAAE,EAC/B,UAAU,EAAE,mBAAmB,EAAE,KAC9B,IAAI,CAAC;IAEV,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,EACd,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC,GACjD,KAAK,CAAC,yBAAyB,CAC7B,uBAAuB,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAChE,CAAC;IACN,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,sBAAsB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAC1C,gBAAgB,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;CACrC,2CA0UA"}
|
|
@@ -8,10 +8,81 @@ const sortable_1 = require("@dnd-kit/sortable");
|
|
|
8
8
|
const utilities_1 = require("@dnd-kit/utilities");
|
|
9
9
|
const UiComponents_1 = require("../UiComponents");
|
|
10
10
|
const textProcessing_1 = require("../../utils/textProcessing");
|
|
11
|
-
|
|
11
|
+
const ReportBuilder_1 = require("../../models/ReportBuilder");
|
|
12
|
+
const schema_1 = require("../../utils/schema");
|
|
13
|
+
function AddColumnModal({ onSave,
|
|
14
|
+
// selectedTables,
|
|
15
|
+
selectedColumns, schema, schemaLoading, TextInputComponent, SelectColumn, SecondaryButton, Button, ColumnSearchEmptyState = UiComponents_1.QuillColumnSearchEmptyState, LoadingComponent = UiComponents_1.QuillLoadingComponent, }) {
|
|
16
|
+
const [primaryTable, setPrimaryTable] = (0, react_1.useState)(undefined);
|
|
12
17
|
const [search, setSearch] = (0, react_1.useState)('');
|
|
13
|
-
const [searchResults, setSearchResults] = (0, react_1.useState)(orderedColumnNames);
|
|
14
18
|
const textInputContainerRef = (0, react_1.useRef)(null);
|
|
19
|
+
const [modalSelectedColumns, setModalSelectedColumns] = (0, react_1.useState)(selectedColumns.map((col) => `${col.table}.${col.field}`));
|
|
20
|
+
const foreignKeyMap = (0, react_1.useMemo)(() => {
|
|
21
|
+
return (0, schema_1.getSchemaForeignKeyMapping)(schema);
|
|
22
|
+
}, [schema]);
|
|
23
|
+
const columnOptions = schema
|
|
24
|
+
.filter((table) => {
|
|
25
|
+
if (!primaryTable)
|
|
26
|
+
return true;
|
|
27
|
+
return (table.name === primaryTable ||
|
|
28
|
+
foreignKeyMap[primaryTable]?.some((tableInfo) => tableInfo.foreignTable === table.name) ||
|
|
29
|
+
foreignKeyMap[table.name]?.some((tableInfo) => tableInfo.foreignTable === primaryTable));
|
|
30
|
+
})
|
|
31
|
+
.sort((a, b) => {
|
|
32
|
+
// Ensure primaryTable is always first, this is essential for SELECT ALL
|
|
33
|
+
if (primaryTable) {
|
|
34
|
+
if (a.name === primaryTable)
|
|
35
|
+
return -1;
|
|
36
|
+
if (b.name === primaryTable)
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
return 0; // Keep original order otherwise
|
|
40
|
+
})
|
|
41
|
+
.flatMap((table) => table.columns
|
|
42
|
+
.map((col) => `${table.name}.${col.field}`)
|
|
43
|
+
.sort((a, b) => {
|
|
44
|
+
const aIsId = a.endsWith('.id') ||
|
|
45
|
+
a.endsWith('_id') ||
|
|
46
|
+
a.endsWith('Id') ||
|
|
47
|
+
a === 'id';
|
|
48
|
+
const bIsId = b.endsWith('.id') ||
|
|
49
|
+
b.endsWith('_id') ||
|
|
50
|
+
b.endsWith('Id') ||
|
|
51
|
+
b === 'id';
|
|
52
|
+
if (aIsId && !bIsId)
|
|
53
|
+
return 1;
|
|
54
|
+
if (bIsId && !aIsId)
|
|
55
|
+
return -1;
|
|
56
|
+
return 0;
|
|
57
|
+
}));
|
|
58
|
+
const [orderedColumnNames, setOrderedColumnNames] = (0, react_1.useState)(columnOptions);
|
|
59
|
+
const isSelectedAllColumns = columnOptions.length === modalSelectedColumns.length;
|
|
60
|
+
const duplicateColumnNames = (0, react_1.useMemo)(() => {
|
|
61
|
+
const columnNames = modalSelectedColumns.map((col) => {
|
|
62
|
+
const [, ...rest] = col.split('.');
|
|
63
|
+
return rest.join('.');
|
|
64
|
+
});
|
|
65
|
+
const duplicates = columnNames.filter((name, i) => columnNames.indexOf(name) !== i);
|
|
66
|
+
return duplicates;
|
|
67
|
+
}, [modalSelectedColumns, schema]);
|
|
68
|
+
const searchResults = (0, react_1.useMemo)(() => {
|
|
69
|
+
return orderedColumnNames.filter((column) => {
|
|
70
|
+
return (columnOptions.includes(column) &&
|
|
71
|
+
(search.length === 0 ||
|
|
72
|
+
column.toLowerCase().includes(search.toLowerCase()) ||
|
|
73
|
+
(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(column)
|
|
74
|
+
.toLowerCase()
|
|
75
|
+
.includes(search.toLowerCase())));
|
|
76
|
+
});
|
|
77
|
+
}, [search, columnOptions, orderedColumnNames]);
|
|
78
|
+
(0, react_1.useEffect)(() => {
|
|
79
|
+
if (modalSelectedColumns.length === 0) {
|
|
80
|
+
setPrimaryTable(undefined);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
setPrimaryTable(modalSelectedColumns[0]?.split('.')[0]);
|
|
84
|
+
}
|
|
85
|
+
}, [modalSelectedColumns]);
|
|
15
86
|
const sensors = (0, core_1.useSensors)((0, core_1.useSensor)(core_1.PointerSensor), (0, core_1.useSensor)(core_1.KeyboardSensor, {
|
|
16
87
|
coordinateGetter: sortable_1.sortableKeyboardCoordinates,
|
|
17
88
|
}));
|
|
@@ -28,25 +99,6 @@ function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, sel
|
|
|
28
99
|
});
|
|
29
100
|
}
|
|
30
101
|
}
|
|
31
|
-
const getColumnsInPivot = () => {
|
|
32
|
-
if (!pivot)
|
|
33
|
-
return [];
|
|
34
|
-
const { valueField, rowField, columnField } = pivot;
|
|
35
|
-
return [valueField, rowField, columnField].filter(Boolean);
|
|
36
|
-
};
|
|
37
|
-
(0, react_1.useEffect)(() => {
|
|
38
|
-
setSearchResults(orderedColumnNames
|
|
39
|
-
.filter((row) => {
|
|
40
|
-
const [table] = row.split('.');
|
|
41
|
-
const selectedTable = selectedColumns[0]?.split('.')[0];
|
|
42
|
-
return selectedColumns.length === 0 || selectedTable === table;
|
|
43
|
-
})
|
|
44
|
-
.filter((row) => search.length === 0 ||
|
|
45
|
-
row.includes(search) ||
|
|
46
|
-
(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(row)
|
|
47
|
-
.toLowerCase()
|
|
48
|
-
.includes(search.toLowerCase())));
|
|
49
|
-
}, [search, orderedColumnNames, selectedColumns]);
|
|
50
102
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
51
103
|
display: 'flex',
|
|
52
104
|
flexDirection: 'column',
|
|
@@ -69,11 +121,35 @@ function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, sel
|
|
|
69
121
|
gap: 8,
|
|
70
122
|
overflowY: 'auto',
|
|
71
123
|
maxWidth: '400px',
|
|
72
|
-
}, children: [searchResults.map((value) => {
|
|
73
|
-
return ((0, jsx_runtime_1.jsx)(SortableItem, { selectedColumns:
|
|
124
|
+
}, children: [searchResults.map((value, index) => {
|
|
125
|
+
return ((0, jsx_runtime_1.jsx)(SortableItem, { selectedColumns: modalSelectedColumns, setSelectedColumns: (newSelectedColumns) => {
|
|
126
|
+
if (!primaryTable) {
|
|
127
|
+
setModalSelectedColumns(newSelectedColumns);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// need to check if primary table is in selected columns
|
|
131
|
+
const columnTables = [
|
|
132
|
+
...new Set(newSelectedColumns.map((col) => {
|
|
133
|
+
const [table] = col.split('.');
|
|
134
|
+
return table || '';
|
|
135
|
+
})),
|
|
136
|
+
];
|
|
137
|
+
if (columnTables.includes(primaryTable)) {
|
|
138
|
+
setModalSelectedColumns(newSelectedColumns);
|
|
139
|
+
}
|
|
140
|
+
else if (columnTables.length === 1) {
|
|
141
|
+
setPrimaryTable(columnTables[0]);
|
|
142
|
+
setModalSelectedColumns(newSelectedColumns);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
setPrimaryTable(undefined);
|
|
146
|
+
setModalSelectedColumns([]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}, id: value, label: value
|
|
74
150
|
.split('.')
|
|
75
151
|
.map((v) => (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(v))
|
|
76
|
-
.join(' | '), SelectColumn: SelectColumn },
|
|
152
|
+
.join(' | '), SelectColumn: SelectColumn }, index));
|
|
77
153
|
}), search.length > 0 && searchResults.length === 0 && ((0, jsx_runtime_1.jsx)(ColumnSearchEmptyState, {}))] }) }) })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
78
154
|
display: 'flex',
|
|
79
155
|
width: '100%',
|
|
@@ -81,50 +157,75 @@ function AddColumnModal({ onSave, orderedColumnNames, setOrderedColumnNames, sel
|
|
|
81
157
|
gap: 8,
|
|
82
158
|
justifyContent: 'end',
|
|
83
159
|
marginTop: 12,
|
|
84
|
-
}, children: [
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
160
|
+
}, children: [modalSelectedColumns.length > 0 && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setModalSelectedColumns([]), label: "Clear" })), modalSelectedColumns.length > 0 && !isSelectedAllColumns && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => setModalSelectedColumns(columnOptions), label: "Select all" })), (0, jsx_runtime_1.jsx)(Button, { onClick: () => {
|
|
161
|
+
const newTableNames = [
|
|
162
|
+
...new Set(modalSelectedColumns
|
|
163
|
+
.map((col) => {
|
|
164
|
+
const [table] = col.split('.');
|
|
165
|
+
return table;
|
|
166
|
+
})
|
|
167
|
+
.filter((table) => table !== undefined)),
|
|
168
|
+
];
|
|
169
|
+
const newTables = newTableNames
|
|
170
|
+
.map((table) => {
|
|
171
|
+
if (primaryTable && primaryTable !== table) {
|
|
172
|
+
const asForeignTable = foreignKeyMap[primaryTable]?.find((tableInfo) => tableInfo.foreignTable === table);
|
|
173
|
+
const asPrimaryTable = foreignKeyMap[table]?.find((tableInfo) => tableInfo.foreignTable === primaryTable);
|
|
174
|
+
const foreignTable = asForeignTable || asPrimaryTable;
|
|
175
|
+
const primaryTableField = asForeignTable?.foreignKey ||
|
|
176
|
+
asPrimaryTable?.foreignTablePrimaryKey;
|
|
177
|
+
const foreignTableField = asForeignTable?.foreignTablePrimaryKey ||
|
|
178
|
+
asPrimaryTable?.foreignKey;
|
|
179
|
+
if (!foreignTable ||
|
|
180
|
+
!primaryTableField ||
|
|
181
|
+
!foreignTableField) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
name: table,
|
|
186
|
+
join: {
|
|
187
|
+
type: ReportBuilder_1.JoinType.JOIN,
|
|
188
|
+
condition: {
|
|
189
|
+
operator: '=',
|
|
190
|
+
left: {
|
|
191
|
+
table: primaryTable,
|
|
192
|
+
field: primaryTableField,
|
|
193
|
+
},
|
|
194
|
+
right: {
|
|
195
|
+
table,
|
|
196
|
+
field: foreignTableField,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return { name: table };
|
|
97
204
|
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
c.as === col);
|
|
123
|
-
if (pivot &&
|
|
124
|
-
!getColumnsInPivot().every((c) => columnInAST(c))) {
|
|
125
|
-
setPivot(null);
|
|
126
|
-
}
|
|
127
|
-
onSave();
|
|
205
|
+
})
|
|
206
|
+
.filter((table) => table !== null);
|
|
207
|
+
const sortedSelectedColumns = orderedColumnNames.filter((col) => modalSelectedColumns.includes(col));
|
|
208
|
+
const newColumns = sortedSelectedColumns
|
|
209
|
+
.map((col) => {
|
|
210
|
+
const [table, ...rest] = col.split('.');
|
|
211
|
+
const field = rest.join('.');
|
|
212
|
+
if (!table ||
|
|
213
|
+
!field ||
|
|
214
|
+
!newTables.some((t) => t.name === table)) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
return {
|
|
219
|
+
table: table || '',
|
|
220
|
+
field: field || '',
|
|
221
|
+
alias: duplicateColumnNames.includes(field)
|
|
222
|
+
? `${table}_${field}`
|
|
223
|
+
: undefined,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
})
|
|
227
|
+
.filter((col) => col !== null);
|
|
228
|
+
onSave(newTables, newColumns);
|
|
128
229
|
}, label: "Select columns" })] })] }));
|
|
129
230
|
}
|
|
130
231
|
const SortableItem = ({ id, label, setSelectedColumns, selectedColumns, SelectColumn, }) => {
|
|
@@ -134,14 +235,10 @@ const SortableItem = ({ id, label, setSelectedColumns, selectedColumns, SelectCo
|
|
|
134
235
|
transition,
|
|
135
236
|
};
|
|
136
237
|
const handleSelect = () => {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
else {
|
|
142
|
-
return [...selectedColumns, id];
|
|
143
|
-
}
|
|
144
|
-
});
|
|
238
|
+
const newSelectedColumns = selectedColumns.includes(id)
|
|
239
|
+
? selectedColumns.filter((column) => column !== id)
|
|
240
|
+
: [...selectedColumns, id];
|
|
241
|
+
setSelectedColumns(newSelectedColumns);
|
|
145
242
|
};
|
|
146
243
|
return ((0, jsx_runtime_1.jsx)("div", { style: { userSelect: 'none', ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(SelectColumn, { isSelected: selectedColumns?.includes(id), setSelected: handleSelect, label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(label), DragHandle: (props) => ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
147
244
|
cursor: 'grab',
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { ButtonComponentProps, SelectComponentProps } from '../UiComponents';
|
|
2
2
|
import { SortPopoverComponentProps } from './ui';
|
|
3
3
|
import { ColumnInternal } from '../../models/Columns';
|
|
4
|
-
export declare const SortSentence: ({ sortField, sortDirection,
|
|
4
|
+
export declare const SortSentence: ({ sortField, sortDirection, columns, handleDelete, setOpenPopover, onSave, popoverTitle, SortPopover, EditPopover, Select, Button, SecondaryButton, disabled, }: {
|
|
5
5
|
sortField: string;
|
|
6
6
|
sortDirection: string;
|
|
7
7
|
columns: ColumnInternal[];
|
|
8
|
-
setIsPending: any;
|
|
9
|
-
setEditPopoverKey: any;
|
|
10
|
-
setActiveEditItem: any;
|
|
11
8
|
setOpenPopover: any;
|
|
12
|
-
keyPrefix?: any;
|
|
13
9
|
handleDelete: any;
|
|
14
10
|
onSave: any;
|
|
15
11
|
popoverTitle?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddSortPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddSortPopover.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAGpB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStD,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"AddSortPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddSortPopover.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAGpB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStD,eAAO,MAAM,YAAY,oKActB;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC;IACpB,YAAY,EAAE,GAAG,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,WAAW,EAAE,GAAG,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,mDA6CA,CAAC;AAEF,eAAO,MAAM,cAAc,+FAUxB;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CAChE,4CAmEA,CAAC"}
|
|
@@ -12,22 +12,15 @@ const SORT_VALUE_TO_LABEL = {
|
|
|
12
12
|
asc: 'ascending',
|
|
13
13
|
desc: 'descending',
|
|
14
14
|
};
|
|
15
|
-
const SortSentence = ({ sortField, sortDirection,
|
|
15
|
+
const SortSentence = ({ sortField, sortDirection, columns, handleDelete, setOpenPopover, onSave, popoverTitle = 'Edit Sort', SortPopover, EditPopover, Select = QuillSelect_1.QuillSelectComponent, Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, disabled = false, }) => {
|
|
16
16
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
17
17
|
const handleSetIsOpen = (isOpen) => {
|
|
18
18
|
setIsOpen(isOpen);
|
|
19
|
-
if (!isOpen) {
|
|
20
|
-
setIsPending(false);
|
|
21
|
-
setActiveEditItem(null);
|
|
22
|
-
}
|
|
23
19
|
};
|
|
24
20
|
const handleClickDelete = (e) => {
|
|
25
21
|
e.stopPropagation(); // don't call onClick handler
|
|
26
|
-
setIsPending(false);
|
|
27
|
-
handleDelete(keyPrefix);
|
|
28
|
-
setActiveEditItem(null);
|
|
29
22
|
setOpenPopover(null);
|
|
30
|
-
|
|
23
|
+
handleDelete();
|
|
31
24
|
};
|
|
32
25
|
if (!sortField) {
|
|
33
26
|
return null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReportBuilderColumn } from '../../models/ReportBuilder';
|
|
2
|
+
interface DraggableColumnsProps {
|
|
3
|
+
columns: ReportBuilderColumn[];
|
|
4
|
+
onColumnOrderChange: (newOrder: ReportBuilderColumn[]) => void;
|
|
5
|
+
DraggableColumnComponent: (props: {
|
|
6
|
+
label: string;
|
|
7
|
+
onDelete: () => void;
|
|
8
|
+
DragHandle: ({ dragIcon }: {
|
|
9
|
+
dragIcon: () => JSX.Element;
|
|
10
|
+
}) => JSX.Element;
|
|
11
|
+
deleteDisabled?: boolean;
|
|
12
|
+
}) => JSX.Element;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
}
|
|
15
|
+
export default function DraggableColumns({ columns, onColumnOrderChange, DraggableColumnComponent, loading, }: DraggableColumnsProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=DraggableColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraggableColumns.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/DraggableColumns.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IAC/D,wBAAwB,EAAE,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;QAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,OAAO,EACP,mBAAmB,EACnB,wBAAwB,EACxB,OAAO,GACR,EAAE,qBAAqB,2CAmFvB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = DraggableColumns;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const core_1 = require("@dnd-kit/core");
|
|
9
|
+
const DraggableItem_1 = __importDefault(require("./DraggableItem"));
|
|
10
|
+
const sortable_1 = require("@dnd-kit/sortable");
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const textProcessing_1 = require("../../utils/textProcessing");
|
|
13
|
+
function DraggableColumns({ columns, onColumnOrderChange, DraggableColumnComponent, loading, }) {
|
|
14
|
+
const sensors = (0, core_1.useSensors)((0, core_1.useSensor)(core_1.PointerSensor), (0, core_1.useSensor)(core_1.KeyboardSensor, {
|
|
15
|
+
coordinateGetter: sortable_1.sortableKeyboardCoordinates,
|
|
16
|
+
}));
|
|
17
|
+
const columnNames = (0, react_1.useMemo)(() => {
|
|
18
|
+
return columns.map((col) => `${col.table}.${col.alias ?? col.field}`);
|
|
19
|
+
}, [columns]);
|
|
20
|
+
// const [orderedColumnNames, setOrderedColumnNames] = useState<string[]>([]);
|
|
21
|
+
const columnNameToLabel = (columnName) => {
|
|
22
|
+
return (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(columnName.split('.').pop() ?? '');
|
|
23
|
+
};
|
|
24
|
+
// When a drag event ends, switch the item order.
|
|
25
|
+
function handleDragEnd(event) {
|
|
26
|
+
const { active, over } = event;
|
|
27
|
+
if (!active || !over)
|
|
28
|
+
return;
|
|
29
|
+
if (active.id !== over.id) {
|
|
30
|
+
const oldIndex = columnNames.findIndex((c) => c.endsWith(active.id));
|
|
31
|
+
const newIndex = columnNames.findIndex((c) => c.endsWith(over.id));
|
|
32
|
+
const newOrder = (0, sortable_1.arrayMove)(columnNames, oldIndex, newIndex);
|
|
33
|
+
const orderToColumns = newOrder
|
|
34
|
+
.map((name) => {
|
|
35
|
+
const [table, field] = name.split('.');
|
|
36
|
+
return columns.find((col) => col.table === table &&
|
|
37
|
+
(col.alias ? col.alias === field : col.field === field));
|
|
38
|
+
})
|
|
39
|
+
.filter((col) => col !== undefined);
|
|
40
|
+
onColumnOrderChange(orderToColumns);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function onDeleteColumn(columnName) {
|
|
44
|
+
const newColumns = columns.filter((col) => `${col.table}.${col.alias ?? col.field}` !== columnName);
|
|
45
|
+
onColumnOrderChange(newColumns);
|
|
46
|
+
}
|
|
47
|
+
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: columnNames, strategy: sortable_1.verticalListSortingStrategy, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
48
|
+
display: 'flex',
|
|
49
|
+
flexDirection: 'column',
|
|
50
|
+
gap: 8,
|
|
51
|
+
}, children: [columnNames.map((name) => ((0, jsx_runtime_1.jsx)(DraggableItem_1.default, { id: name, label: columnNameToLabel(name), onDelete: () => !loading && onDeleteColumn(name), loading: loading, DraggableColumnComponent: DraggableColumnComponent }, name))), columnNames.length > 0 && (0, jsx_runtime_1.jsx)("div", { style: { height: 6 } })] }) }) }));
|
|
52
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface DraggableItemProps {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
onDelete: () => void;
|
|
5
|
+
DraggableColumnComponent: (props: {
|
|
6
|
+
label: string;
|
|
7
|
+
onDelete: () => void;
|
|
8
|
+
DragHandle: ({ dragIcon }: {
|
|
9
|
+
dragIcon: () => JSX.Element;
|
|
10
|
+
}) => JSX.Element;
|
|
11
|
+
deleteDisabled?: boolean;
|
|
12
|
+
}) => JSX.Element;
|
|
13
|
+
loading: boolean;
|
|
14
|
+
}
|
|
15
|
+
export default function DraggableItem({ id, label, onDelete, DraggableColumnComponent, loading, }: DraggableItemProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=DraggableItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraggableItem.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/DraggableItem.tsx"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB,EAAE,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;QAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,EAAE,EACF,KAAK,EACL,QAAQ,EACR,wBAAwB,EACxB,OAAO,GACR,EAAE,kBAAkB,2CA6BpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = DraggableItem;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const sortable_1 = require("@dnd-kit/sortable");
|
|
6
|
+
const utilities_1 = require("@dnd-kit/utilities");
|
|
7
|
+
const textProcessing_1 = require("../../utils/textProcessing");
|
|
8
|
+
function DraggableItem({ id, label, onDelete, DraggableColumnComponent, loading, }) {
|
|
9
|
+
const { attributes, listeners, setNodeRef, transform, transition } = (0, sortable_1.useSortable)({ id: id });
|
|
10
|
+
const style = {
|
|
11
|
+
transform: utilities_1.CSS.Transform.toString(transform),
|
|
12
|
+
transition,
|
|
13
|
+
};
|
|
14
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: { ...style }, ref: setNodeRef, children: (0, jsx_runtime_1.jsx)(DraggableColumnComponent, { label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(label), onDelete: onDelete, DragHandle: (props) => ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
15
|
+
cursor: 'grab',
|
|
16
|
+
}, ...attributes, ...listeners, children: (0, jsx_runtime_1.jsx)(props.dragIcon, {}) })), deleteDisabled: loading }) }));
|
|
17
|
+
}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import { InternalFilter, Operator } from '../../models/Filter';
|
|
2
|
-
import {
|
|
2
|
+
import { UniqueValuesByTable, Table, UniqueValuesByColumn } from '../../models/Tables';
|
|
3
3
|
interface FilterModalProps {
|
|
4
|
-
schema
|
|
5
|
-
|
|
6
|
-
};
|
|
4
|
+
schema: Table[];
|
|
5
|
+
tables?: string[];
|
|
7
6
|
filter?: InternalFilter;
|
|
8
|
-
fieldValuesMap:
|
|
9
|
-
[key: string]: string[];
|
|
10
|
-
} | {
|
|
11
|
-
[key: string]: {
|
|
12
|
-
[key: string]: string[];
|
|
13
|
-
};
|
|
14
|
-
};
|
|
7
|
+
fieldValuesMap: UniqueValuesByColumn | UniqueValuesByTable;
|
|
15
8
|
fieldValuesMapIsLoading?: boolean;
|
|
16
9
|
customOperatorOptions?: OperatorOptionsMap;
|
|
10
|
+
hideTableName?: boolean;
|
|
17
11
|
onSubmitFilter: (filter: InternalFilter) => void;
|
|
18
12
|
onDeleteFilter: () => void;
|
|
19
13
|
ButtonComponent: React.ComponentType<any>;
|
|
@@ -28,6 +22,6 @@ type OperatorOptionsMap = {
|
|
|
28
22
|
/**
|
|
29
23
|
* Modal for adding, editing, and deleting Filters
|
|
30
24
|
*/
|
|
31
|
-
export default function FilterModal({ schema, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element | null;
|
|
25
|
+
export default function FilterModal({ schema, tables, filter, fieldValuesMap, fieldValuesMapIsLoading, customOperatorOptions, hideTableName, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element | null;
|
|
32
26
|
export {};
|
|
33
27
|
//# sourceMappingURL=FilterModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EAId,QAAQ,EAMT,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EAId,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,UAAU,gBAAgB;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,EACZ,oBAAoB,GAClB,mBAAmB,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpD,oBAAoB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAChD;AAQD,KAAK,kBAAkB,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,MAAM,EACN,MAAM,EACN,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,kDAk4BlB"}
|