@quillsql/react 2.11.16 → 2.11.18
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 +109 -42
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +44 -18
- package/dist/cjs/ChartBuilder.d.ts +204 -30
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +124 -63
- package/dist/cjs/ChartEditor.d.ts +123 -19
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +47 -15
- package/dist/cjs/Dashboard.d.ts +148 -91
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +51 -159
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +5 -2
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -1
- package/dist/cjs/QuillProvider.d.ts +105 -2
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +59 -0
- package/dist/cjs/ReportBuilder.d.ts +194 -42
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +563 -416
- package/dist/cjs/SQLEditor.d.ts +160 -23
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +36 -30
- package/dist/cjs/Table.d.ts +119 -15
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +37 -6
- package/dist/cjs/TableChart.d.ts.map +1 -1
- package/dist/cjs/TableChart.js +0 -194
- package/dist/cjs/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
- package/dist/cjs/components/Chart/BarList.d.ts.map +1 -0
- package/dist/cjs/{BarList.js → components/Chart/BarList.js} +1 -1
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -3
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +3 -3
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -0
- package/dist/cjs/{PieChart.js → components/Chart/PieChart.js} +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts +2 -1
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +6 -7
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +22 -0
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/DashboardFilter.js +75 -0
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts +2 -12
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +39 -17
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +2 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +6 -9
- package/dist/cjs/components/QuillCard.d.ts +2 -7
- package/dist/cjs/components/QuillCard.d.ts.map +1 -1
- package/dist/cjs/components/QuillCard.js +15 -9
- package/dist/cjs/components/QuillSelect.d.ts +4 -1
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +13 -8
- package/dist/cjs/components/QuillTable.d.ts +16 -2
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +4 -4
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts +9 -3
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +10 -6
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +13 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +5 -15
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +21 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +15 -17
- package/dist/cjs/components/ReportBuilder/bigDateMap.js +1 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts +3 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +60 -21
- package/dist/cjs/components/ReportBuilder/operators.d.ts +15 -10
- package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/operators.js +23 -10
- package/dist/cjs/components/ReportBuilder/pivot.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts +82 -18
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +55 -103
- package/dist/cjs/components/ReportBuilder/util.d.ts +10 -4
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +124 -71
- package/dist/cjs/components/UiComponents.d.ts +81 -87
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +76 -103
- package/dist/cjs/hooks/index.d.ts +1 -0
- package/dist/cjs/hooks/index.d.ts.map +1 -1
- package/dist/cjs/hooks/index.js +3 -1
- package/dist/cjs/hooks/useTheme.d.ts +7 -0
- package/dist/cjs/hooks/useTheme.d.ts.map +1 -0
- package/dist/cjs/hooks/useTheme.js +12 -0
- package/dist/cjs/index.d.ts +10 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +5 -2
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +21 -21
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +30 -14
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +77 -52
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +2 -0
- package/dist/cjs/utils/parserBigQuery.d.ts +6 -0
- package/dist/cjs/utils/parserBigQuery.d.ts.map +1 -0
- package/dist/cjs/utils/parserBigQuery.js +60 -0
- package/dist/cjs/utils/parserPostgres.d.ts +3 -0
- package/dist/cjs/utils/parserPostgres.d.ts.map +1 -0
- package/dist/cjs/utils/parserPostgres.js +42 -0
- package/dist/esm/Chart.d.ts +109 -42
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +45 -19
- package/dist/esm/ChartBuilder.d.ts +204 -30
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +124 -63
- package/dist/esm/ChartEditor.d.ts +123 -19
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +51 -19
- package/dist/esm/Dashboard.d.ts +148 -91
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +54 -160
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +21 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +6 -3
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -1
- package/dist/esm/QuillProvider.d.ts +105 -2
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +59 -0
- package/dist/esm/ReportBuilder.d.ts +194 -42
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +566 -419
- package/dist/esm/SQLEditor.d.ts +160 -23
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +36 -30
- package/dist/esm/Table.d.ts +119 -15
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +38 -7
- package/dist/esm/TableChart.d.ts.map +1 -1
- package/dist/esm/TableChart.js +0 -194
- package/dist/esm/{BarList.d.ts → components/Chart/BarList.d.ts} +1 -1
- package/dist/esm/components/Chart/BarList.d.ts.map +1 -0
- package/dist/esm/{BarList.js → components/Chart/BarList.js} +1 -1
- package/dist/esm/components/Chart/LineChart.d.ts +2 -3
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +3 -3
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -0
- package/dist/esm/{PieChart.js → components/Chart/PieChart.js} +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts +2 -1
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +5 -6
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +22 -0
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/DashboardFilter.js +71 -0
- package/dist/esm/components/Dashboard/DataLoader.d.ts +1 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts +2 -12
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +39 -17
- package/dist/esm/components/Dashboard/TableComponent.d.ts +2 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +6 -9
- package/dist/esm/components/QuillCard.d.ts +2 -7
- package/dist/esm/components/QuillCard.d.ts.map +1 -1
- package/dist/esm/components/QuillCard.js +15 -9
- package/dist/esm/components/QuillSelect.d.ts +4 -1
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +14 -9
- package/dist/esm/components/QuillTable.d.ts +16 -2
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +4 -4
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts +9 -3
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +10 -6
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +13 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +5 -15
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +21 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +17 -19
- package/dist/esm/components/ReportBuilder/bigDateMap.js +1 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts +3 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +51 -13
- package/dist/esm/components/ReportBuilder/operators.d.ts +15 -10
- package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/operators.js +23 -10
- package/dist/esm/components/ReportBuilder/pivot.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts +82 -18
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +53 -101
- package/dist/esm/components/ReportBuilder/util.d.ts +10 -4
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +114 -67
- package/dist/esm/components/UiComponents.d.ts +81 -87
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +71 -102
- package/dist/esm/hooks/index.d.ts +1 -0
- package/dist/esm/hooks/index.d.ts.map +1 -1
- package/dist/esm/hooks/index.js +1 -0
- package/dist/esm/hooks/useTheme.d.ts +7 -0
- package/dist/esm/hooks/useTheme.d.ts.map +1 -0
- package/dist/esm/hooks/useTheme.js +10 -0
- package/dist/esm/index.d.ts +10 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +5 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +21 -21
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +30 -14
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +77 -52
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +2 -0
- package/dist/esm/utils/parserBigQuery.d.ts +6 -0
- package/dist/esm/utils/parserBigQuery.d.ts.map +1 -0
- package/dist/esm/utils/parserBigQuery.js +52 -0
- package/dist/esm/utils/parserPostgres.d.ts +3 -0
- package/dist/esm/utils/parserPostgres.d.ts.map +1 -0
- package/dist/esm/utils/parserPostgres.js +37 -0
- package/package.json +1 -1
- package/dist/cjs/BarList.d.ts.map +0 -1
- package/dist/cjs/PieChart.d.ts.map +0 -1
- package/dist/esm/BarList.d.ts.map +0 -1
- package/dist/esm/PieChart.d.ts.map +0 -1
- /package/dist/cjs/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
- /package/dist/esm/{PieChart.d.ts → components/Chart/PieChart.d.ts} +0 -0
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AddFilterPopover = exports.TagWrapper = exports.
|
|
6
|
+
exports.AddFilterPopover = exports.TagWrapper = exports.QuillLimitPopover = exports.QuillSortPopover = exports.QuillFilterPopover = exports.EditPopover = exports.QuillTableLoadingState = exports.QuillButtonLoadingState = exports.QuillDraggableColumn = exports.QuillSelectColumn = exports.QuillHandleButton = exports.CustomContainer = exports.QuillSidebar = exports.QuillSidebarHeading = exports.QuillTag = exports.QuillReportBuilderTable = exports.QuillSecondaryButton = exports.QuillButton = void 0;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_1 = require("react");
|
|
9
9
|
const UiComponents_1 = require("../UiComponents");
|
|
@@ -60,6 +60,7 @@ const QuillSecondaryButton = ({ children, ...props }) => {
|
|
|
60
60
|
}, children: children }));
|
|
61
61
|
};
|
|
62
62
|
exports.QuillSecondaryButton = QuillSecondaryButton;
|
|
63
|
+
// TODO: remove this, I think it is unused.
|
|
63
64
|
const QuillReportBuilderTable = ({ rows, columns, error, ...props }) => {
|
|
64
65
|
const reformattedColumns = columns.map((c) => ({ label: c, field: c }));
|
|
65
66
|
return ((0, jsx_runtime_1.jsx)("div", { style: { height: '100%', overflow: 'auto' }, children: (0, jsx_runtime_1.jsx)(QuillTable_1.default, { rows: rows, columns: reformattedColumns, rowsPerPage: 10, showDownloadCSVButton: rows?.length > 0, downloadCSV: () => (0, csv_1.downloadCSV)({ rows, fields: reformattedColumns, name: 'my_report' }), emptyStateLabel: error || 'No results', ...props }) }));
|
|
@@ -105,22 +106,20 @@ exports.QuillTag = (0, react_1.forwardRef)(({ label, onClick, children, onClickD
|
|
|
105
106
|
}, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: theme?.secondaryButtonColor || 'currentColor', style: { width: 16, height: 16 }, children: (0, jsx_runtime_1.jsx)("path", { d: "M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z" }) }) }) }))] }));
|
|
106
107
|
});
|
|
107
108
|
// A heading element in the sidebar (eg. "Filters")
|
|
108
|
-
const QuillSidebarHeading = ({ label }) => (
|
|
109
|
+
const QuillSidebarHeading = ({ label, }) => (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedHeader, { label: label });
|
|
109
110
|
exports.QuillSidebarHeading = QuillSidebarHeading;
|
|
110
|
-
// A sub-heading element in the sidebar (eg. "Filters")
|
|
111
|
-
const QuillSidebarSubHeading = ({ label }) => ((0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedLabel, { children: label }));
|
|
112
|
-
exports.QuillSidebarSubHeading = QuillSidebarSubHeading;
|
|
113
111
|
// The gray thing on the left.
|
|
114
|
-
|
|
112
|
+
const QuillSidebar = ({ children }) => ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
115
113
|
overflowX: 'visible',
|
|
116
114
|
padding: '12px',
|
|
117
115
|
width: '25%',
|
|
118
116
|
height: '100%',
|
|
119
117
|
maxWidth: '300px',
|
|
120
118
|
boxSizing: 'border-box',
|
|
121
|
-
},
|
|
119
|
+
}, children: children }));
|
|
120
|
+
exports.QuillSidebar = QuillSidebar;
|
|
122
121
|
// A big wrapper around the main content (ie. Input, Button, and Table)
|
|
123
|
-
|
|
122
|
+
const CustomContainer = ({ children }) => ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
124
123
|
position: 'sticky',
|
|
125
124
|
top: 0,
|
|
126
125
|
display: 'flex',
|
|
@@ -133,61 +132,8 @@ exports.CustomContainer = (0, react_1.forwardRef)(({ children, ...props }, forwa
|
|
|
133
132
|
width: '75%',
|
|
134
133
|
height: '100%',
|
|
135
134
|
boxSizing: 'border-box',
|
|
136
|
-
},
|
|
137
|
-
|
|
138
|
-
const handleOnChange = (value) => {
|
|
139
|
-
if (!onChange)
|
|
140
|
-
return;
|
|
141
|
-
const option = props.options.find((opt) => opt.value === value);
|
|
142
|
-
if (option) {
|
|
143
|
-
onChange(option.value);
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
return (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedSelect, { ...props, onChange: handleOnChange });
|
|
147
|
-
};
|
|
148
|
-
exports.QuillSelect = QuillSelect;
|
|
149
|
-
function MemoizedPopover({ onClose, children, style = {}, trigger, isOpen, }) {
|
|
150
|
-
const modalRef = (0, react_1.useRef)(null);
|
|
151
|
-
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
152
|
-
(0, react_1.useEffect)(() => {
|
|
153
|
-
const listener = (event) => {
|
|
154
|
-
if (modalRef?.current && !modalRef?.current?.contains(event.target)) {
|
|
155
|
-
onClose(event);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
document.addEventListener('mousedown', listener);
|
|
159
|
-
return () => {
|
|
160
|
-
document.removeEventListener('mousedown', listener);
|
|
161
|
-
};
|
|
162
|
-
}, [modalRef, onClose]);
|
|
163
|
-
return ((0, jsx_runtime_1.jsxs)("div", { children: [trigger, isOpen && ((0, jsx_runtime_1.jsx)("div", { id: "quill-popover-modal", ref: modalRef, style: { position: 'relative' }, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
164
|
-
background: theme?.backgroundColor || 'white',
|
|
165
|
-
position: 'absolute',
|
|
166
|
-
boxShadow: '0px 1px 12px 0px rgba(56, 65, 81, 0.1)',
|
|
167
|
-
border: theme
|
|
168
|
-
? `${theme.borderWidth || 1}px solid ${theme.borderColor || '#e7e7e7'}`
|
|
169
|
-
: '1px solid #e7e7e7',
|
|
170
|
-
boxSizing: 'content-box',
|
|
171
|
-
zIndex: 999,
|
|
172
|
-
top: 12,
|
|
173
|
-
borderRadius: 6,
|
|
174
|
-
padding: 20,
|
|
175
|
-
...style,
|
|
176
|
-
}, children: children }) }))] }));
|
|
177
|
-
}
|
|
178
|
-
exports.MemoizedPopover = MemoizedPopover;
|
|
179
|
-
exports.QuillPopover = (0, react_1.forwardRef)(({ children, trigger, isOpen, onClose = () => { }, title = undefined }, ref) => {
|
|
180
|
-
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
181
|
-
return ((0, jsx_runtime_1.jsxs)(MemoizedPopover, { isOpen: isOpen, onClose: onClose, trigger: trigger, parentRef: ref, ref: ref, children: [title && ((0, jsx_runtime_1.jsx)("h1", { style: {
|
|
182
|
-
fontWeight: '600',
|
|
183
|
-
fontSize: 18,
|
|
184
|
-
margin: 0,
|
|
185
|
-
textAlign: 'left',
|
|
186
|
-
marginBottom: 5,
|
|
187
|
-
color: theme?.primaryTextColor,
|
|
188
|
-
fontFamily: theme?.fontFamily,
|
|
189
|
-
}, children: title })), children] }));
|
|
190
|
-
});
|
|
135
|
+
}, children: children }));
|
|
136
|
+
exports.CustomContainer = CustomContainer;
|
|
191
137
|
// The six-dot grab-handle icon.
|
|
192
138
|
const QuillHandleButton = () => {
|
|
193
139
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
@@ -233,7 +179,7 @@ const QuillHandleButton = () => {
|
|
|
233
179
|
} })] })] }));
|
|
234
180
|
};
|
|
235
181
|
exports.QuillHandleButton = QuillHandleButton;
|
|
236
|
-
const QuillSelectColumn = ({ label,
|
|
182
|
+
const QuillSelectColumn = ({ label, isSelected, setSelected, DragHandle, }) => {
|
|
237
183
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
238
184
|
return ((0, jsx_runtime_1.jsxs)("div", { title: label, style: {
|
|
239
185
|
boxShadow: '0px 1px 4px #e2e8f005',
|
|
@@ -245,13 +191,13 @@ const QuillSelectColumn = ({ label, selected, setSelected, children, }) => {
|
|
|
245
191
|
display: 'flex',
|
|
246
192
|
alignItems: 'center',
|
|
247
193
|
backgroundColor: theme?.backgroundColor || 'white',
|
|
248
|
-
}, children: [(0, jsx_runtime_1.jsx)(
|
|
194
|
+
}, children: [(0, jsx_runtime_1.jsx)(DragHandle, { dragIcon: exports.QuillHandleButton }), (0, jsx_runtime_1.jsxs)("label", { style: {
|
|
249
195
|
display: 'flex',
|
|
250
196
|
gap: 2,
|
|
251
197
|
whiteSpace: 'nowrap',
|
|
252
198
|
textOverflow: 'ellipsis',
|
|
253
199
|
overflow: 'hidden',
|
|
254
|
-
}, children: [(0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedCheckbox, {
|
|
200
|
+
}, children: [(0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedCheckbox, { isChecked: isSelected, onChange: () => setSelected() }), (0, jsx_runtime_1.jsx)("span", { style: {
|
|
255
201
|
marginLeft: 6,
|
|
256
202
|
display: 'block',
|
|
257
203
|
whiteSpace: 'nowrap',
|
|
@@ -262,8 +208,10 @@ const QuillSelectColumn = ({ label, selected, setSelected, children, }) => {
|
|
|
262
208
|
}, children: (0, textProcessing_1.snakeCaseToTitleCase)(label) })] })] }));
|
|
263
209
|
};
|
|
264
210
|
exports.QuillSelectColumn = QuillSelectColumn;
|
|
265
|
-
|
|
266
|
-
|
|
211
|
+
/**
|
|
212
|
+
* A draggable card with a grab-handle and a column name
|
|
213
|
+
*/
|
|
214
|
+
const QuillDraggableColumn = ({ label, onDelete, DragHandle, }) => {
|
|
267
215
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
268
216
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
269
217
|
boxShadow: '0px 1px 4px #e2e8f005',
|
|
@@ -272,13 +220,14 @@ const QuillDraggableColumn = ({ label, children, onDelete }) => {
|
|
|
272
220
|
display: 'flex',
|
|
273
221
|
alignItems: 'center',
|
|
274
222
|
backgroundColor: theme?.backgroundColor || 'white',
|
|
275
|
-
}, children: [(0, jsx_runtime_1.jsx)(
|
|
223
|
+
}, children: [(0, jsx_runtime_1.jsx)(DragHandle, { dragIcon: exports.QuillHandleButton }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
276
224
|
marginLeft: 2,
|
|
277
225
|
marginRight: 'auto',
|
|
278
226
|
fontSize: 14,
|
|
279
227
|
display: 'block',
|
|
280
228
|
whiteSpace: 'nowrap',
|
|
281
229
|
textOverflow: 'ellipsis',
|
|
230
|
+
overflow: 'hidden',
|
|
282
231
|
fontFamily: theme?.fontFamily,
|
|
283
232
|
}, children: label }), (0, jsx_runtime_1.jsx)("button", { onClick: onDelete, style: {
|
|
284
233
|
paddingRight: 4,
|
|
@@ -299,11 +248,6 @@ const QuillTableLoadingState = () => {
|
|
|
299
248
|
return ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', margin: 'auto' }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.LoadingSpinner, {}) }));
|
|
300
249
|
};
|
|
301
250
|
exports.QuillTableLoadingState = QuillTableLoadingState;
|
|
302
|
-
exports.DEFAULT_TAB_OPTIONS = [
|
|
303
|
-
{ label: 'or', value: 'OR' },
|
|
304
|
-
{ label: 'and', value: 'AND' },
|
|
305
|
-
];
|
|
306
|
-
exports.QuillTabs = (0, react_1.forwardRef)(({ options = exports.DEFAULT_TAB_OPTIONS, ...props }, ref) => ((0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedTabs, { ref: ref, options: options, ...props })));
|
|
307
251
|
const EditPopover = ({ onSave, onDelete, Button, renderNode, activeEditItem, }) => {
|
|
308
252
|
const handleOnClick = () => {
|
|
309
253
|
if (!(0, util_1.allNumericNodesValidInTree)(activeEditItem)) {
|
|
@@ -325,41 +269,48 @@ const EditPopover = ({ onSave, onDelete, Button, renderNode, activeEditItem, })
|
|
|
325
269
|
}, children: [(0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedSecondaryButton, { onClick: onDelete, label: "Delete" }), (0, jsx_runtime_1.jsx)(Button, { onClick: handleOnClick, label: "Save" })] })] }));
|
|
326
270
|
};
|
|
327
271
|
exports.EditPopover = EditPopover;
|
|
328
|
-
const QuillFilterPopover = ({ filterLabel,
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
}, children: popoverChildren }));
|
|
272
|
+
const QuillFilterPopover = ({ filterLabel, onClickDelete, popoverTitle, popoverChildren, isOpen, setIsOpen, }) => {
|
|
273
|
+
const handleSetIsOpen = (isOpen) => {
|
|
274
|
+
setIsOpen(isOpen);
|
|
275
|
+
};
|
|
276
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(exports.QuillTag, { label: filterLabel, onClickDelete: onClickDelete, onClick: () => setIsOpen(!isOpen) }), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedPopover, { isOpen: isOpen, setIsOpen: handleSetIsOpen, popoverTitle: popoverTitle, popoverChildren: popoverChildren })] }));
|
|
334
277
|
};
|
|
335
278
|
exports.QuillFilterPopover = QuillFilterPopover;
|
|
336
|
-
const QuillSortPopover = ({
|
|
337
|
-
return ((0, jsx_runtime_1.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
setIsOpen(false);
|
|
341
|
-
}, children: popoverChildren }));
|
|
279
|
+
const QuillSortPopover = ({ sortLabel, onClickDelete, popoverTitle, popoverChildren, isOpen, setIsOpen, }) => {
|
|
280
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(exports.QuillTag, { label: sortLabel, onClickDelete: onClickDelete, onClick: () => {
|
|
281
|
+
setIsOpen(!isOpen);
|
|
282
|
+
} }), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedPopover, { isOpen: isOpen, popoverTitle: popoverTitle, setIsOpen: setIsOpen, popoverChildren: popoverChildren })] }));
|
|
342
283
|
};
|
|
343
284
|
exports.QuillSortPopover = QuillSortPopover;
|
|
344
|
-
const
|
|
285
|
+
const QuillLimitPopover = ({ limitLabel, onClickDelete, popoverTitle, popoverChildren, isOpen, setIsOpen, }) => {
|
|
286
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(exports.QuillTag, { label: limitLabel, onClickDelete: onClickDelete, onClick: () => {
|
|
287
|
+
setIsOpen(!isOpen);
|
|
288
|
+
} }), (0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedPopover, { isOpen: isOpen, popoverTitle: popoverTitle, setIsOpen: setIsOpen, popoverChildren: popoverChildren })] }));
|
|
289
|
+
};
|
|
290
|
+
exports.QuillLimitPopover = QuillLimitPopover;
|
|
291
|
+
const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, renderNode, children, }) => {
|
|
345
292
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
293
|
+
const onOpen = () => {
|
|
294
|
+
setActiveEditItem(getByKey(formData, keyPrefix));
|
|
295
|
+
setActivePath(keyPrefix);
|
|
296
|
+
setIsPending(true);
|
|
297
|
+
setEditPopoverKey(keyPrefix);
|
|
298
|
+
setCheckboxes(getByKey(formData, keyPrefix));
|
|
299
|
+
};
|
|
300
|
+
const onClose = () => {
|
|
301
|
+
setEditPopoverKey(null);
|
|
302
|
+
setIsPending(false);
|
|
303
|
+
setActiveEditItem(null);
|
|
304
|
+
setActivePath(null);
|
|
305
|
+
setOpenPopover(null);
|
|
306
|
+
clearCheckboxes();
|
|
307
|
+
};
|
|
346
308
|
(0, react_1.useEffect)(() => {
|
|
347
309
|
if (isOpen) {
|
|
348
|
-
|
|
349
|
-
setActiveEditItem(getByKey(formData, keyPrefix));
|
|
350
|
-
setActivePath(keyPrefix);
|
|
351
|
-
setIsPending(true);
|
|
352
|
-
setEditPopoverKey(keyPrefix);
|
|
353
|
-
setCheckboxes(getByKey(formData, keyPrefix));
|
|
310
|
+
onOpen();
|
|
354
311
|
}
|
|
355
312
|
else {
|
|
356
|
-
|
|
357
|
-
setEditPopoverKey(null);
|
|
358
|
-
setIsPending(false);
|
|
359
|
-
setActiveEditItem(null);
|
|
360
|
-
setActivePath(null);
|
|
361
|
-
setOpenPopover(null);
|
|
362
|
-
clearCheckboxes();
|
|
313
|
+
onClose();
|
|
363
314
|
}
|
|
364
315
|
}, [isOpen]);
|
|
365
316
|
if (isCard && isRow) {
|
|
@@ -373,7 +324,7 @@ const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, active
|
|
|
373
324
|
setEditPopoverKey(null);
|
|
374
325
|
clearCheckboxes();
|
|
375
326
|
};
|
|
376
|
-
return ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' }, children: (0, jsx_runtime_1.jsx)(FilterPopover, { isOpen: editPopoverKey === keyPrefix, popoverTitle: "Edit Filter", filterLabel: children,
|
|
327
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: { width: '100%' }, children: (0, jsx_runtime_1.jsx)(FilterPopover, { isOpen: editPopoverKey === keyPrefix, popoverTitle: "Edit Filter", filterLabel: children, onClickDelete: handleClickDelete, setIsOpen: setIsOpen, popoverChildren: (0, jsx_runtime_1.jsx)(EditPopover, { Button: Button, renderNode: renderNode, activeEditItem: activeEditItem, onSave: () => {
|
|
377
328
|
if ((0, util_1.isNodeEmptyCollection)(activeEditItem)) {
|
|
378
329
|
setIsPending(false);
|
|
379
330
|
setActiveEditItem(null);
|
|
@@ -381,7 +332,7 @@ const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, active
|
|
|
381
332
|
setOpenPopover(null);
|
|
382
333
|
setEditPopoverKey(null);
|
|
383
334
|
handleDelete(keyPrefix);
|
|
384
|
-
|
|
335
|
+
setIsOpen(false);
|
|
385
336
|
clearCheckboxes();
|
|
386
337
|
}
|
|
387
338
|
else {
|
|
@@ -391,6 +342,7 @@ const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, active
|
|
|
391
342
|
setActiveEditItem(null);
|
|
392
343
|
setActivePath(null);
|
|
393
344
|
setOpenPopover(null);
|
|
345
|
+
setIsOpen(false);
|
|
394
346
|
clearCheckboxes();
|
|
395
347
|
}
|
|
396
348
|
}, onDelete: () => {
|
|
@@ -399,8 +351,8 @@ const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, active
|
|
|
399
351
|
setActivePath(null);
|
|
400
352
|
setOpenPopover(null);
|
|
401
353
|
setEditPopoverKey(null);
|
|
354
|
+
setIsOpen(false);
|
|
402
355
|
handleDelete(keyPrefix);
|
|
403
|
-
fetchSqlQuery();
|
|
404
356
|
clearCheckboxes();
|
|
405
357
|
} }) }) })); // Make sure to close the <Tag> correctly
|
|
406
358
|
}
|
|
@@ -21,11 +21,15 @@ export declare function formatDateComparisonNode(node: any): string | null;
|
|
|
21
21
|
export declare function getInTheCurrentIntervalSentence(node: any, databaseType: string): string | null;
|
|
22
22
|
export declare function getInTheLastIntervalSentence(node: any, databaseType: string): string | null;
|
|
23
23
|
export declare function getInThePreviousIntervalSentence(node: any, databaseType: string): string | null;
|
|
24
|
+
export declare function getIsEqualsSentence(node: any, databaseType: string): string | null;
|
|
25
|
+
export declare function getIsAfterSentence(node: any, databaseType: string): string | null;
|
|
26
|
+
export declare function getIsBeforeSentence(node: any, databaseType: string): string | null;
|
|
24
27
|
export declare const isInTheLastInterval: (node: any, databaseType: string) => boolean;
|
|
25
|
-
export declare const
|
|
28
|
+
export declare const isAfter: (node: any, databaseType: string) => boolean | undefined;
|
|
29
|
+
export declare const isBefore: (node: any, databaseType: string) => boolean | undefined;
|
|
26
30
|
export declare const isTheCurrentInterval: (node: any, databaseType: string) => boolean;
|
|
31
|
+
export declare const isEquals: (node: any, databaseType: string) => boolean;
|
|
27
32
|
export declare const isThePreviousInterval: (node: any, databaseType: string) => any;
|
|
28
|
-
export declare const isTheCurrentIntervalBigQuery: (node: any) => boolean;
|
|
29
33
|
/**
|
|
30
34
|
* Returns whether this node is the root of a binary expression
|
|
31
35
|
* where the left child is a string but really should be
|
|
@@ -56,7 +60,7 @@ export declare function tryConvertDateEquality(node: any, databaseType?: string)
|
|
|
56
60
|
* Returns whether this node is an equality of a date column with a
|
|
57
61
|
* date trunc.
|
|
58
62
|
*/
|
|
59
|
-
export declare const isDateTruncEquals: (node: any) => boolean;
|
|
63
|
+
export declare const isDateTruncEquals: (node: any, databaseType?: string) => boolean;
|
|
60
64
|
/**
|
|
61
65
|
* Returns whether this node is an equality of a date column with extract.
|
|
62
66
|
*/
|
|
@@ -73,6 +77,8 @@ export declare const getDateFilterInfo: (node: any) => {
|
|
|
73
77
|
intervalType: any;
|
|
74
78
|
intervalPaths: any;
|
|
75
79
|
};
|
|
76
|
-
export declare function removeNonSelectedTableReferences(ast: any, table: string): any;
|
|
80
|
+
export declare function removeNonSelectedTableReferences(ast: any, table: string, columns: string[]): any;
|
|
77
81
|
export declare function allNumericNodesValidInTree(node: any): boolean;
|
|
82
|
+
export declare function isIdColumn(columnName?: string): boolean | "" | undefined;
|
|
83
|
+
export declare function getCustomSentence(node: any, databaseType: string): string | null;
|
|
78
84
|
//# sourceMappingURL=util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// A collection of reusable, pure, utility functions for the Report Builder.
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.allNumericNodesValidInTree = exports.removeNonSelectedTableReferences = exports.getDateFilterInfo = exports.trimEndS = exports.deepCopy = exports.getPostgresBasicType = exports.showNodeAsRow = exports.isExtractEquals = exports.isDateTruncEquals = exports.tryConvertDateEquality = exports.extractSuffixToString = exports.dateTruncSuffixToString = exports.newUTCDate = exports.isColumnComparison = exports.
|
|
4
|
+
exports.getCustomSentence = exports.isIdColumn = exports.allNumericNodesValidInTree = exports.removeNonSelectedTableReferences = exports.getDateFilterInfo = exports.trimEndS = exports.deepCopy = exports.getPostgresBasicType = exports.showNodeAsRow = exports.isExtractEquals = exports.isDateTruncEquals = exports.tryConvertDateEquality = exports.extractSuffixToString = exports.dateTruncSuffixToString = exports.newUTCDate = exports.isColumnComparison = exports.isThePreviousInterval = exports.isEquals = exports.isTheCurrentInterval = exports.isBefore = exports.isAfter = exports.isInTheLastInterval = exports.getIsBeforeSentence = exports.getIsAfterSentence = exports.getIsEqualsSentence = exports.getInThePreviousIntervalSentence = exports.getInTheLastIntervalSentence = exports.getInTheCurrentIntervalSentence = exports.formatDateComparisonNode = exports.areObjectsEqualish = exports.isColumnDateish = exports.generateColumnExpr = exports.isColumnReferenceish = exports.isDateTrunc = exports.hasTopLevelOrBoolean = exports.isTopLevelBoolean = exports.isNodeEmptyCollection = void 0;
|
|
5
5
|
const date_fns_1 = require("date-fns");
|
|
6
6
|
const bigDateMap_1 = require("./bigDateMap");
|
|
7
7
|
const textProcessing_1 = require("../../utils/textProcessing");
|
|
8
|
+
const parserBigQuery_1 = require("../../utils/parserBigQuery");
|
|
9
|
+
const parserPostgres_1 = require("../../utils/parserPostgres");
|
|
8
10
|
/**
|
|
9
11
|
* A node that is "in" or "not in" where none of the variants are selected.
|
|
10
12
|
*/
|
|
@@ -147,7 +149,7 @@ const BIG_QUERY_DAY_TO_INTERVAL_MAP = {
|
|
|
147
149
|
};
|
|
148
150
|
function getInTheLastIntervalSentence(node, databaseType) {
|
|
149
151
|
if (databaseType === 'BigQuery') {
|
|
150
|
-
const dateColumn = (0, textProcessing_1.snakeCaseToTitleCase)(node.left.column);
|
|
152
|
+
const dateColumn = (0, textProcessing_1.snakeCaseToTitleCase)(node.left.column || node.left.args.value[0].columns || '');
|
|
151
153
|
const amount = node.right.args.value[1].expr.value;
|
|
152
154
|
let unit = node.right.args.value[1].unit.toLowerCase();
|
|
153
155
|
if (unit.includes('*')) {
|
|
@@ -167,70 +169,92 @@ function getInThePreviousIntervalSentence(node, databaseType) {
|
|
|
167
169
|
return null;
|
|
168
170
|
}
|
|
169
171
|
exports.getInThePreviousIntervalSentence = getInThePreviousIntervalSentence;
|
|
172
|
+
function getIsEqualsSentence(node, databaseType) {
|
|
173
|
+
if (databaseType === 'BigQuery') {
|
|
174
|
+
const dateColumn = (0, textProcessing_1.snakeCaseToTitleCase)(node.left.args.value[1].column);
|
|
175
|
+
const type = node.right.args.value[1].column.toLowerCase();
|
|
176
|
+
const value = node.right.args.value[0].value;
|
|
177
|
+
// using date-fns can I parse the date to short month year
|
|
178
|
+
const date = new Date(value);
|
|
179
|
+
if (type === 'year') {
|
|
180
|
+
return `${dateColumn} is in ${(0, date_fns_1.format)((0, date_fns_1.addMinutes)(date, date.getTimezoneOffset()), 'yyyy')}`;
|
|
181
|
+
}
|
|
182
|
+
else if (type === 'month') {
|
|
183
|
+
return `${dateColumn} is in ${(0, date_fns_1.format)((0, date_fns_1.addMinutes)(date, date.getTimezoneOffset()), 'MMM yyyy')}`;
|
|
184
|
+
}
|
|
185
|
+
else if (type === 'quarter') {
|
|
186
|
+
return `${dateColumn} is in ${(0, date_fns_1.format)((0, date_fns_1.addMinutes)(date, date.getTimezoneOffset()), 'QQQ yyyy')}`;
|
|
187
|
+
}
|
|
188
|
+
return `${dateColumn} is in the ${type} of ${value}`;
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
exports.getIsEqualsSentence = getIsEqualsSentence;
|
|
193
|
+
function getIsAfterSentence(node, databaseType) {
|
|
194
|
+
if (databaseType === 'BigQuery') {
|
|
195
|
+
const dateColumn = (0, textProcessing_1.snakeCaseToTitleCase)(node.left?.column || node.left?.args?.value[0]?.columns || '');
|
|
196
|
+
const value = node.right?.value || node.right?.args?.value[0]?.value || '';
|
|
197
|
+
if (!dateColumn || !value) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return `${dateColumn} is after ${value}`;
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
exports.getIsAfterSentence = getIsAfterSentence;
|
|
205
|
+
function getIsBeforeSentence(node, databaseType) {
|
|
206
|
+
if (databaseType === 'BigQuery') {
|
|
207
|
+
const dateColumn = (0, textProcessing_1.snakeCaseToTitleCase)(node.left?.column || node.left?.args?.value[0]?.columns || '');
|
|
208
|
+
const value = node.right?.value || node.right?.args?.value[0]?.value || '';
|
|
209
|
+
if (!dateColumn || !value) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
return `${dateColumn} is before ${value}`;
|
|
213
|
+
}
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
exports.getIsBeforeSentence = getIsBeforeSentence;
|
|
170
217
|
// "created_at" >= date_trunc ('year', CURRENT_DATE) - INTERVAL '1 year'
|
|
171
218
|
// or
|
|
172
219
|
// "created_at" >= CURRENT_DATE - INTERVAL '1 year'
|
|
173
220
|
// in the last year aka one interval from today
|
|
174
221
|
const isInTheLastInterval = (node, databaseType) => {
|
|
175
222
|
if (databaseType && databaseType.toLowerCase() === 'bigquery') {
|
|
176
|
-
return (0,
|
|
223
|
+
return (0, parserBigQuery_1.isInTheLastIntervalBigQuery)(node);
|
|
177
224
|
}
|
|
178
|
-
|
|
179
|
-
node.left.type === 'column_ref' &&
|
|
180
|
-
node.right.type === 'binary_expr' &&
|
|
181
|
-
node.right.operator === '-' &&
|
|
182
|
-
node.right.left.type === 'function' &&
|
|
183
|
-
node.right.left.name.toLowerCase() === 'date_trunc' &&
|
|
184
|
-
node.right.left.args.value[0].type === 'single_quote_string' &&
|
|
185
|
-
node.right.left.args.value[1].type === 'function' &&
|
|
186
|
-
['current_date', 'now'].includes(node.right.left.args.value[1].name.toLowerCase()) &&
|
|
187
|
-
node.right.right.type.toLowerCase() === 'interval' &&
|
|
188
|
-
node.right.right.expr.type === 'single_quote_string';
|
|
189
|
-
const noDateTrunc = ['>=', '>'].includes(node.operator) &&
|
|
190
|
-
node.left.type === 'column_ref' &&
|
|
191
|
-
node.right.type === 'binary_expr' &&
|
|
192
|
-
node.right.operator === '-' &&
|
|
193
|
-
node.right.left.type === 'function' &&
|
|
194
|
-
['current_date', 'now'].includes(node.right.left.name.toLowerCase()) &&
|
|
195
|
-
node.right.right.type.toLowerCase() === 'interval' &&
|
|
196
|
-
node.right.right.expr.type === 'single_quote_string';
|
|
197
|
-
return isOutsideOfDateTrunc || noDateTrunc;
|
|
225
|
+
return (0, parserPostgres_1.isInTheLastIntervalPostgres)(node);
|
|
198
226
|
};
|
|
199
227
|
exports.isInTheLastInterval = isInTheLastInterval;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return isOutsideOfDateTrunc;
|
|
228
|
+
const isAfter = (node, databaseType) => {
|
|
229
|
+
if (databaseType && databaseType.toLowerCase() === 'bigquery') {
|
|
230
|
+
return (0, parserBigQuery_1.isAfterBigQuery)(node);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
exports.isAfter = isAfter;
|
|
234
|
+
const isBefore = (node, databaseType) => {
|
|
235
|
+
if (databaseType && databaseType.toLowerCase() === 'bigquery') {
|
|
236
|
+
return (0, parserBigQuery_1.isBeforeBigQuery)(node);
|
|
237
|
+
}
|
|
211
238
|
};
|
|
212
|
-
exports.
|
|
239
|
+
exports.isBefore = isBefore;
|
|
213
240
|
// "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
|
|
214
241
|
// this year
|
|
215
242
|
const isTheCurrentInterval = (node, databaseType) => {
|
|
216
243
|
if (databaseType && databaseType.toLowerCase() === 'bigquery') {
|
|
217
|
-
return (0,
|
|
244
|
+
return (0, parserBigQuery_1.isTheCurrentIntervalBigQuery)(node);
|
|
218
245
|
}
|
|
219
|
-
|
|
220
|
-
(node.left.operator === '=' || node.left.type === 'double_quote_string') &&
|
|
221
|
-
node.right.operator === '=' &&
|
|
222
|
-
node.right.name &&
|
|
223
|
-
node.right.name.toLowerCase() === 'date_trunc' &&
|
|
224
|
-
node.args.value[0].type === 'single_quote_string' &&
|
|
225
|
-
node.args.value[1].type === 'binary_expr' &&
|
|
226
|
-
node.args.value[1].operator === '-' &&
|
|
227
|
-
node.args.value[1].left.type === 'function' &&
|
|
228
|
-
['now', 'current_date'].includes(node.args.value[1].left.name.toLowerCase()) &&
|
|
229
|
-
node.args.value[1].right.type === 'interval' &&
|
|
230
|
-
node.args.value[1].right.expr.type === 'single_quote_string';
|
|
231
|
-
return isInsideOfDateTrunc;
|
|
246
|
+
return (0, parserPostgres_1.isTheCurrentIntervalPostgres)(node);
|
|
232
247
|
};
|
|
233
248
|
exports.isTheCurrentInterval = isTheCurrentInterval;
|
|
249
|
+
// "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
|
|
250
|
+
// this year
|
|
251
|
+
const isEquals = (node, databaseType) => {
|
|
252
|
+
if (databaseType && databaseType.toLowerCase() === 'bigquery') {
|
|
253
|
+
return (0, parserBigQuery_1.isEqualsBigQuery)(node);
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
};
|
|
257
|
+
exports.isEquals = isEquals;
|
|
234
258
|
const isThePreviousInterval = (node, databaseType) => {
|
|
235
259
|
const isInsideOfDateTrunc = ['='].includes(node.operator) &&
|
|
236
260
|
node.left.name &&
|
|
@@ -238,23 +262,12 @@ const isThePreviousInterval = (node, databaseType) => {
|
|
|
238
262
|
node.left.type === 'function' &&
|
|
239
263
|
node.right.name &&
|
|
240
264
|
node.right.name.toLowerCase() === 'timestamp_trunc' &&
|
|
241
|
-
node.right.args.value[0]
|
|
265
|
+
node.right.args.value[0]?.name?.toLowerCase() === 'timestamp_sub' &&
|
|
242
266
|
node.right.args.value[0].args.value[0].name.toLowerCase() ===
|
|
243
267
|
'current_timestamp';
|
|
244
268
|
return isInsideOfDateTrunc;
|
|
245
269
|
};
|
|
246
270
|
exports.isThePreviousInterval = isThePreviousInterval;
|
|
247
|
-
const isTheCurrentIntervalBigQuery = (node) => {
|
|
248
|
-
const isInsideOfDateTrunc = ['='].includes(node.operator) &&
|
|
249
|
-
node.left.type === 'function' &&
|
|
250
|
-
node.left.name &&
|
|
251
|
-
node.left.name.toLowerCase() === 'timestamp_trunc' &&
|
|
252
|
-
node.right.type === 'function' &&
|
|
253
|
-
node.right.name.toLowerCase() === 'timestamp_trunc' &&
|
|
254
|
-
node.right.args.value[0].name.toLowerCase() === 'current_timestamp';
|
|
255
|
-
return isInsideOfDateTrunc;
|
|
256
|
-
};
|
|
257
|
-
exports.isTheCurrentIntervalBigQuery = isTheCurrentIntervalBigQuery;
|
|
258
271
|
/**
|
|
259
272
|
* Returns whether this node is the root of a binary expression
|
|
260
273
|
* where the left child is a string but really should be
|
|
@@ -379,7 +392,7 @@ function extractSuffixToString(node) {
|
|
|
379
392
|
}
|
|
380
393
|
exports.extractSuffixToString = extractSuffixToString;
|
|
381
394
|
function tryConvertDateEquality(node, databaseType) {
|
|
382
|
-
if ((0, exports.isDateTruncEquals)(node)) {
|
|
395
|
+
if ((0, exports.isDateTruncEquals)(node, databaseType)) {
|
|
383
396
|
const columnNode = node.left.args.value[1];
|
|
384
397
|
const columnName = columnNode.column ?? columnNode.value;
|
|
385
398
|
const cleanColumnName = (0, textProcessing_1.snakeCaseToTitleCase)(columnName.replaceAll('_at', ''));
|
|
@@ -400,7 +413,7 @@ exports.tryConvertDateEquality = tryConvertDateEquality;
|
|
|
400
413
|
* Returns whether this node is an equality of a date column with a
|
|
401
414
|
* date trunc.
|
|
402
415
|
*/
|
|
403
|
-
const isDateTruncEquals = (node) => {
|
|
416
|
+
const isDateTruncEquals = (node, databaseType) => {
|
|
404
417
|
return (node.type === 'binary_expr' &&
|
|
405
418
|
node.operator === '=' &&
|
|
406
419
|
(0, exports.isDateTrunc)(node.left) &&
|
|
@@ -659,18 +672,29 @@ function getNodeTable(node) {
|
|
|
659
672
|
return null;
|
|
660
673
|
}
|
|
661
674
|
// Recursively remove filters that don't apply to the given table
|
|
662
|
-
function removeNonSelectedTableFilters(node, table) {
|
|
675
|
+
function removeNonSelectedTableFilters(node, table, columns) {
|
|
663
676
|
if (node.left.type !== 'binary_expr') {
|
|
664
677
|
const referencedTable = getNodeTable(node.left);
|
|
665
|
-
|
|
678
|
+
const referencedColumn = node.left.column ||
|
|
679
|
+
node.left.value ||
|
|
680
|
+
node.left.args?.value[0]?.column ||
|
|
681
|
+
node.left.args?.value[0]?.value;
|
|
682
|
+
if ((referencedTable && referencedTable !== table) ||
|
|
683
|
+
!columns.includes(referencedColumn)) {
|
|
666
684
|
return null;
|
|
667
685
|
}
|
|
668
686
|
else {
|
|
687
|
+
if (node.left.value) {
|
|
688
|
+
node.left.column = node.left.value;
|
|
689
|
+
}
|
|
690
|
+
else if (node.left.args?.value[0].value) {
|
|
691
|
+
node.left.args.value[0].column = node.left.args.value[0].value;
|
|
692
|
+
}
|
|
669
693
|
return node;
|
|
670
694
|
}
|
|
671
695
|
}
|
|
672
|
-
node.left = removeNonSelectedTableFilters(node.left, table);
|
|
673
|
-
node.right = removeNonSelectedTableFilters(node.right, table);
|
|
696
|
+
node.left = removeNonSelectedTableFilters(node.left, table, columns);
|
|
697
|
+
node.right = removeNonSelectedTableFilters(node.right, table, columns);
|
|
674
698
|
if (node.left && node.right) {
|
|
675
699
|
return node;
|
|
676
700
|
}
|
|
@@ -684,14 +708,13 @@ function removeNonSelectedTableFilters(node, table) {
|
|
|
684
708
|
return null;
|
|
685
709
|
}
|
|
686
710
|
}
|
|
687
|
-
function removeNonSelectedTableReferences(ast, table) {
|
|
711
|
+
function removeNonSelectedTableReferences(ast, table, columns) {
|
|
688
712
|
ast.columns = ast.columns.filter((col) => {
|
|
689
713
|
return col.table === table || col.expr.table === table || !col.expr.table;
|
|
690
714
|
});
|
|
691
715
|
if (!ast.where)
|
|
692
716
|
return ast;
|
|
693
|
-
ast.where = removeNonSelectedTableFilters(ast.where, table);
|
|
694
|
-
console.log(ast);
|
|
717
|
+
ast.where = removeNonSelectedTableFilters(ast.where, table, columns);
|
|
695
718
|
return ast;
|
|
696
719
|
}
|
|
697
720
|
exports.removeNonSelectedTableReferences = removeNonSelectedTableReferences;
|
|
@@ -700,7 +723,6 @@ function allNumericNodesValidInTree(node) {
|
|
|
700
723
|
return true;
|
|
701
724
|
if (node.type === 'number') {
|
|
702
725
|
const value = parseFloat(node.value);
|
|
703
|
-
console.log(node.value, value);
|
|
704
726
|
if (Number.isNaN(value)) {
|
|
705
727
|
return false;
|
|
706
728
|
}
|
|
@@ -714,3 +736,34 @@ function allNumericNodesValidInTree(node) {
|
|
|
714
736
|
return isLeftValid && isRightValid;
|
|
715
737
|
}
|
|
716
738
|
exports.allNumericNodesValidInTree = allNumericNodesValidInTree;
|
|
739
|
+
function isIdColumn(columnName) {
|
|
740
|
+
return (columnName &&
|
|
741
|
+
(columnName.toLowerCase() === 'id' ||
|
|
742
|
+
columnName.toLowerCase().endsWith('_id') ||
|
|
743
|
+
columnName.endsWith('Id')));
|
|
744
|
+
}
|
|
745
|
+
exports.isIdColumn = isIdColumn;
|
|
746
|
+
// This function determines if a node is a custom node type.
|
|
747
|
+
// This will parse out date filters and some numeric filters that are unique (between).
|
|
748
|
+
function getCustomSentence(node, databaseType) {
|
|
749
|
+
if ((0, exports.isTheCurrentInterval)(node, databaseType)) {
|
|
750
|
+
return getInTheCurrentIntervalSentence(node, databaseType);
|
|
751
|
+
}
|
|
752
|
+
else if ((0, exports.isInTheLastInterval)(node, databaseType)) {
|
|
753
|
+
return getInTheLastIntervalSentence(node, databaseType);
|
|
754
|
+
}
|
|
755
|
+
else if ((0, exports.isAfter)(node, databaseType)) {
|
|
756
|
+
return getIsAfterSentence(node, databaseType);
|
|
757
|
+
}
|
|
758
|
+
else if ((0, exports.isBefore)(node, databaseType)) {
|
|
759
|
+
return getIsBeforeSentence(node, databaseType);
|
|
760
|
+
}
|
|
761
|
+
else if ((0, exports.isThePreviousInterval)(node, databaseType)) {
|
|
762
|
+
return getInThePreviousIntervalSentence(node, databaseType);
|
|
763
|
+
}
|
|
764
|
+
else if ((0, exports.isEquals)(node, databaseType)) {
|
|
765
|
+
return getIsEqualsSentence(node, databaseType);
|
|
766
|
+
}
|
|
767
|
+
return null;
|
|
768
|
+
}
|
|
769
|
+
exports.getCustomSentence = getCustomSentence;
|