@quillsql/react 2.11.28 → 2.11.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts +4 -0
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +20 -7
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +81 -48
- package/dist/cjs/Dashboard.js +2 -2
- package/dist/cjs/ReportBuilder.d.ts +22 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +562 -527
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +19 -11
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +1 -2
- package/dist/cjs/hooks/useDashboard.d.ts +1 -1
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +4 -4
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +28 -0
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -0
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +58 -0
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +3 -1
- package/dist/cjs/utils/astProcessing.d.ts +23 -0
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +241 -1
- package/dist/cjs/utils/tableProcessing.d.ts +1 -0
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +16 -1
- package/dist/esm/Chart.d.ts +4 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +20 -7
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +81 -48
- package/dist/esm/Dashboard.js +2 -2
- package/dist/esm/ReportBuilder.d.ts +22 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +563 -528
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +19 -11
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +1 -2
- package/dist/esm/hooks/useDashboard.d.ts +1 -1
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +4 -4
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +28 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.js +55 -0
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -1
- package/dist/esm/utils/astProcessing.d.ts +23 -0
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +231 -0
- package/dist/esm/utils/tableProcessing.d.ts +1 -0
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +14 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { type ColorMapType } from '../../Chart';
|
|
3
|
-
export default function LineChart({ colors, colorMap, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, hideHorizontalCartesianGrid, hideVerticalCartesianGrid, hideSubsequentXAxisTicks, cartesianGridLineStyle, comparisonLineStyle, }: {
|
|
3
|
+
export default function LineChart({ colors, colorMap, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, hideHorizontalCartesianGrid, hideVerticalCartesianGrid, hideSubsequentXAxisTicks, cartesianGridLineStyle, comparisonLineStyle, cartesianGridLineColor, }: {
|
|
4
4
|
colors?: string[];
|
|
5
5
|
colorMap?: ColorMapType;
|
|
6
6
|
yAxisFields: any[];
|
|
@@ -21,5 +21,6 @@ export default function LineChart({ colors, colorMap, yAxisFields, data, contain
|
|
|
21
21
|
hideSubsequentXAxisTicks: boolean;
|
|
22
22
|
cartesianGridLineStyle: 'solid' | 'dashed';
|
|
23
23
|
comparisonLineStyle: 'solid' | 'dashed';
|
|
24
|
+
cartesianGridLineColor?: string;
|
|
24
25
|
}): import("react/jsx-runtime").JSX.Element;
|
|
25
26
|
//# sourceMappingURL=LineChart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/LineChart.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,QAAa,EACb,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,2BAAmC,EACnC,yBAAgC,EAChC,wBAAgC,EAChC,sBAAgC,EAChC,mBAA6B,
|
|
1
|
+
{"version":3,"file":"LineChart.d.ts","sourceRoot":"","sources":["../../../../src/components/Chart/LineChart.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,QAAa,EACb,WAAW,EACX,IAAI,EACJ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,iBAAwB,EACxB,SAAiB,EACjB,SAAiB,EACjB,iBAAyB,EACzB,2BAAmC,EACnC,yBAAgC,EAChC,wBAAgC,EAChC,sBAAgC,EAChC,mBAA6B,EAC7B,sBAAsB,GACvB,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,GAAG,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2BAA2B,EAAE,OAAO,CAAC;IACrC,yBAAyB,EAAE,OAAO,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,2CA8PA"}
|
|
@@ -8,7 +8,7 @@ import ChartTooltip from '../../components/Chart/ChartTooltip';
|
|
|
8
8
|
import getDomain from '../../utils/getDomain';
|
|
9
9
|
import { useEffect, useState } from 'react';
|
|
10
10
|
import { hashCode } from '../../utils/crypto';
|
|
11
|
-
export default function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, hideHorizontalCartesianGrid = false, hideVerticalCartesianGrid = true, hideSubsequentXAxisTicks = false, cartesianGridLineStyle = 'solid', comparisonLineStyle = 'solid', }) {
|
|
11
|
+
export default function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, hideHorizontalCartesianGrid = false, hideVerticalCartesianGrid = true, hideSubsequentXAxisTicks = false, cartesianGridLineStyle = 'solid', comparisonLineStyle = 'solid', cartesianGridLineColor, }) {
|
|
12
12
|
const [formattedData, setFormattedData] = useState([]);
|
|
13
13
|
useEffect(() => {
|
|
14
14
|
if (!data || data.length === 0) {
|
|
@@ -46,28 +46,36 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
|
|
|
46
46
|
}
|
|
47
47
|
// Allows the users to override the color scheme on a per-chart basis.
|
|
48
48
|
const getCustomColor = (index, field, gradient) => {
|
|
49
|
-
let key = index === 0 ? '
|
|
49
|
+
let key = index === 0 ? 'comparison' : 'primary';
|
|
50
50
|
field = field.replace('comparison_', '');
|
|
51
51
|
if (colorMap && colorMap[field]) {
|
|
52
|
-
if (index ===
|
|
52
|
+
if (index === 1 && gradient === 'start')
|
|
53
53
|
key = 'primaryGradientStart';
|
|
54
|
-
if (index ===
|
|
54
|
+
if (index === 1 && gradient === 'stop')
|
|
55
55
|
key = 'primaryGradientStop';
|
|
56
|
-
if (index ===
|
|
56
|
+
if (index === 0 && gradient === 'start')
|
|
57
57
|
key = 'comparisonGradientStart';
|
|
58
|
-
if (index ===
|
|
58
|
+
if (index === 0 && gradient === 'stop')
|
|
59
59
|
key = 'comparisonGradientStop';
|
|
60
60
|
return colorMap[field][key];
|
|
61
61
|
}
|
|
62
62
|
return undefined; // use the default colors from the theme
|
|
63
63
|
};
|
|
64
|
-
|
|
64
|
+
const numComparisons = yAxisFields.reduce((sum, x) => {
|
|
65
|
+
if (x.field?.startsWith('comparison_'))
|
|
66
|
+
return sum + 1;
|
|
67
|
+
return sum;
|
|
68
|
+
}, 0);
|
|
69
|
+
return (_jsx("div", { style: { ...containerStyle }, className: className, children: _jsx(ResponsiveContainer, { width: "100%", height: '100%', children: _jsxs(ReChartsAreaChart, { data: formattedData, children: [!hideCartesianGrid && (_jsx(CartesianGrid, { horizontal: !hideHorizontalCartesianGrid, vertical: !hideVerticalCartesianGrid, stroke: cartesianGridLineColor ?? '#e5e7eb', strokeDasharray: cartesianGridLineStyle === 'dashed' ? '5 5' : undefined })), _jsx(XAxis, { dataKey: xAxisField, hide: hideXAxis, tick: { transform: 'translate(0, 6)' }, style: {
|
|
65
70
|
fontSize: '12px',
|
|
66
71
|
fontFamily: theme?.chartLabelFontFamily ||
|
|
67
72
|
theme?.fontFamily ||
|
|
68
73
|
'Inter; Helvetica',
|
|
69
74
|
color: theme?.chartLabelColor || '#666666',
|
|
70
|
-
},
|
|
75
|
+
}, tickLine: false, axisLine: false, minTickGap: 5, tickFormatter: (tick, i) => {
|
|
76
|
+
// Don't display subsequent ticks when hideSubXAxisTicks is true
|
|
77
|
+
if (hideSubsequentXAxisTicks && i !== 0)
|
|
78
|
+
return '';
|
|
71
79
|
return axisFormatter({
|
|
72
80
|
value: tick,
|
|
73
81
|
field: xAxisField,
|
|
@@ -112,7 +120,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
|
|
|
112
120
|
// hash the color stops so they're stable, valid html ids
|
|
113
121
|
const gradientStart = getCustomColor(index, elem.field, 'start') ??
|
|
114
122
|
getCustomColor(index, elem.field) ??
|
|
115
|
-
selectColor(elem, colors, index);
|
|
123
|
+
selectColor(elem, colors, index - numComparisons);
|
|
116
124
|
const gradientStop = getCustomColor(index, elem.field, 'stop') ?? '#00000000';
|
|
117
125
|
const uniqueId = `gradient_${hashCode(gradientStart)}_${hashCode(gradientStop)}`;
|
|
118
126
|
return (_jsx("defs", { children: _jsxs("linearGradient", { id: uniqueId, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "5%", stopColor: gradientStart, stopOpacity: 0.4 }), _jsx("stop", { offset: "95%", stopColor: gradientStop, stopOpacity: 0 })] }) }, `defs_${uniqueId}_${index}`));
|
|
@@ -120,11 +128,11 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
|
|
|
120
128
|
yAxisFields.map((elem, index) => {
|
|
121
129
|
const gradientStart = hashCode(getCustomColor(index, elem.field, 'start') ??
|
|
122
130
|
getCustomColor(index, elem.field) ??
|
|
123
|
-
selectColor(elem, colors, index));
|
|
131
|
+
selectColor(elem, colors, index - numComparisons));
|
|
124
132
|
const gradientStop = hashCode(getCustomColor(index, elem.field, 'stop') ?? '#00000000');
|
|
125
133
|
const uniqueId = `gradient_${gradientStart}_${gradientStop}`;
|
|
126
134
|
return (_jsx(Area, { name: elem.label, type: "linear", dataKey: elem.field, stroke: getCustomColor(index, elem.field) ??
|
|
127
|
-
selectColor(elem, colors, index), fill: `url(#${uniqueId})`, strokeWidth: 2, dot: false, strokeDasharray: comparison && comparisonLineStyle === 'dashed' && index > 0
|
|
135
|
+
selectColor(elem, colors, index - numComparisons), fill: `url(#${uniqueId})`, strokeWidth: 2, dot: false, strokeDasharray: comparison && comparisonLineStyle === 'dashed' && index > 0
|
|
128
136
|
? '5 5'
|
|
129
137
|
: undefined, isAnimationActive: isAnimationActive }, elem.field));
|
|
130
138
|
})] }) }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components/UiComponents.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components/UiComponents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
// @ts-nocheck
|
|
3
2
|
import { useContext, useEffect, useRef, } from 'react';
|
|
4
3
|
import { XIcon } from '../assets';
|
|
5
4
|
import { ThemeContext } from '../Context';
|
|
@@ -250,6 +249,7 @@ export const MemoizedPopover = ({ isOpen, setIsOpen, triggerLabel, popoverTitle
|
|
|
250
249
|
export function MemoizedModal({ isOpen, setIsOpen, title, children, width, height, }) {
|
|
251
250
|
const [theme] = useContext(ThemeContext);
|
|
252
251
|
if (!isOpen) {
|
|
252
|
+
// @ts-ignore
|
|
253
253
|
return null;
|
|
254
254
|
}
|
|
255
255
|
return (_jsxs(_Fragment, { children: [_jsx("div", { style: {
|
|
@@ -410,7 +410,6 @@ export const QuillColumnSearchEmptyState = () => {
|
|
|
410
410
|
export const QuillLoadingComponent = () => {
|
|
411
411
|
const theme = useTheme();
|
|
412
412
|
return (_jsxs("div", { style: {
|
|
413
|
-
background: theme.backgroundColor,
|
|
414
413
|
width: 250,
|
|
415
414
|
minWidth: 250,
|
|
416
415
|
height: '100%',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,kBAAmB,MAAM
|
|
1
|
+
{"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,kBAAmB,MAAM;;;;qCASF,MAAM;CAiDrD,CAAC"}
|
|
@@ -9,10 +9,10 @@ export const useDashboard = (dashboardName) => {
|
|
|
9
9
|
const [error, setError] = useState(null);
|
|
10
10
|
const [data, setData] = useState(null);
|
|
11
11
|
const [client] = useContext(ClientContext);
|
|
12
|
-
const handleReload = () => {
|
|
13
|
-
getDashboards();
|
|
12
|
+
const handleReload = (overrideDashboardName) => {
|
|
13
|
+
getDashboards(overrideDashboardName ?? dashboardName);
|
|
14
14
|
};
|
|
15
|
-
async function getDashboards() {
|
|
15
|
+
async function getDashboards(dashboardName) {
|
|
16
16
|
if (dashboardName === null || dashboardName === undefined)
|
|
17
17
|
return;
|
|
18
18
|
setIsLoading(true);
|
|
@@ -44,7 +44,7 @@ export const useDashboard = (dashboardName) => {
|
|
|
44
44
|
setIsLoading(false);
|
|
45
45
|
}
|
|
46
46
|
useEffect(() => {
|
|
47
|
-
getDashboards();
|
|
47
|
+
getDashboards(dashboardName);
|
|
48
48
|
}, [dashboardName, client]);
|
|
49
49
|
return { data, isLoading, error, reload: handleReload };
|
|
50
50
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Column } from '../../models/Columns';
|
|
3
|
+
interface PivotFormProps {
|
|
4
|
+
pivotRowField: any;
|
|
5
|
+
setPivotRowField: any;
|
|
6
|
+
pivotColumnField: any;
|
|
7
|
+
setPivotColumnField: any;
|
|
8
|
+
pivotValueField: any;
|
|
9
|
+
setPivotValueField: any;
|
|
10
|
+
pivotAggregation: any;
|
|
11
|
+
setPivotAggregation: any;
|
|
12
|
+
columns: Column[];
|
|
13
|
+
uniqueValues?: any;
|
|
14
|
+
onDelete: any;
|
|
15
|
+
SecondaryButtonComponent: (props: {
|
|
16
|
+
onClick: () => void;
|
|
17
|
+
label: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
icon?: ReactNode;
|
|
20
|
+
}) => JSX.Element;
|
|
21
|
+
SelectComponent: any;
|
|
22
|
+
PivotColumnContainer?: (props: {
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
}) => JSX.Element;
|
|
25
|
+
}
|
|
26
|
+
export default function PivotForm({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, columns, uniqueValues, onDelete, SecondaryButtonComponent, SelectComponent, PivotColumnContainer, }: PivotFormProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=PivotForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PivotForm.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotForm.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAQ9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAI9C,UAAU,cAAc;IACtB,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC;IACd,wBAAwB,EAAE,CAAC,KAAK,EAAE;QAChC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,SAAS,CAAC;KAClB,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;CACxE;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,wBAAwB,EACxB,eAAe,EACf,oBAAgD,GACjD,EAAE,cAAc,2CAmGhB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { QuillPivotColumnContainer, } from '../../components/UiComponents';
|
|
4
|
+
import { snakeCaseToTitleCase } from '../../utils/textProcessing';
|
|
5
|
+
import { numberFormatOptions } from '../../ChartBuilder';
|
|
6
|
+
import { getPossiblePivotFieldOptions } from '../../utils/pivotProcessing';
|
|
7
|
+
export default function PivotForm({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, columns, uniqueValues, onDelete, SecondaryButtonComponent, SelectComponent, PivotColumnContainer = QuillPivotColumnContainer, }) {
|
|
8
|
+
const [allowedColumnFields, setAllowedColumnFields] = useState([]);
|
|
9
|
+
const [allowedRowFields, setAllowedRowFields] = useState([]);
|
|
10
|
+
const [allowedValueFields, setAllowedValueFields] = useState([]);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const possibleColumns = getPossiblePivotFieldOptions(columns, uniqueValues);
|
|
13
|
+
setAllowedRowFields(possibleColumns.rowFields);
|
|
14
|
+
setAllowedColumnFields(possibleColumns.columnFields);
|
|
15
|
+
setAllowedValueFields(possibleColumns.valueFields);
|
|
16
|
+
}, [columns, uniqueValues]);
|
|
17
|
+
return (_jsxs(PivotColumnContainer, { children: [_jsx(SelectComponent, { id: "pivot-row-field", label: "Row field", value: pivotRowField, onChange: (e) => {
|
|
18
|
+
setPivotRowField(e.target.value === '' ? undefined : e.target.value);
|
|
19
|
+
}, options: allowedRowFields.map((field) => {
|
|
20
|
+
return {
|
|
21
|
+
label: snakeCaseToTitleCase(field),
|
|
22
|
+
value: field,
|
|
23
|
+
};
|
|
24
|
+
}), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Column field", value: pivotColumnField, onChange: (e) => {
|
|
25
|
+
setPivotColumnField(e.target.value === '' ? undefined : e.target.value);
|
|
26
|
+
}, options: allowedColumnFields.map((field) => {
|
|
27
|
+
return {
|
|
28
|
+
label: snakeCaseToTitleCase(field),
|
|
29
|
+
value: field,
|
|
30
|
+
};
|
|
31
|
+
}), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Value field", value: pivotValueField, onChange: (e) => {
|
|
32
|
+
setPivotValueField(e.target.value === '' ? undefined : e.target.value);
|
|
33
|
+
}, options: allowedValueFields.map((field) => {
|
|
34
|
+
return {
|
|
35
|
+
label: snakeCaseToTitleCase(field),
|
|
36
|
+
value: field,
|
|
37
|
+
};
|
|
38
|
+
}), width: 200 }), _jsx(SelectComponent, { id: "pivot-row-field", label: "Aggregation type", value: pivotAggregation, onChange: (e) => {
|
|
39
|
+
if (e.target.value !== 'count' &&
|
|
40
|
+
pivotValueField &&
|
|
41
|
+
!numberFormatOptions.includes(columns.find((col) => col.field === pivotValueField)
|
|
42
|
+
.format)) {
|
|
43
|
+
setPivotValueField(null);
|
|
44
|
+
}
|
|
45
|
+
setPivotAggregation(e.target.value === '' ? undefined : e.target.value);
|
|
46
|
+
}, options: [
|
|
47
|
+
...['sum', 'average', 'count', 'max', 'min'].map((option) => {
|
|
48
|
+
return { label: option, value: option };
|
|
49
|
+
}),
|
|
50
|
+
], width: 200 }), _jsx("div", { style: {
|
|
51
|
+
display: 'flex',
|
|
52
|
+
alignItems: 'flex-start',
|
|
53
|
+
flexDirection: 'column',
|
|
54
|
+
}, children: _jsx(SecondaryButtonComponent, { onClick: onDelete, label: "Delete Pivot" }) })] }));
|
|
55
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -208,6 +208,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
|
|
|
208
208
|
setPopUpTitle('Add pivot');
|
|
209
209
|
};
|
|
210
210
|
const onEditPivot = (pivot, index) => {
|
|
211
|
+
setIsLoading(false);
|
|
211
212
|
setPivotRowField(pivot.rowField);
|
|
212
213
|
setPivotColumnField(pivot.columnField);
|
|
213
214
|
setPivotValueField(pivot.valueField);
|
|
@@ -292,6 +293,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
|
|
|
292
293
|
allowedValueFields,
|
|
293
294
|
]);
|
|
294
295
|
const pivotFieldChange = async (field, value) => {
|
|
296
|
+
setErrors([]);
|
|
295
297
|
setIsLoading(true);
|
|
296
298
|
const pivot = {
|
|
297
299
|
rowField: pivotRowField,
|
|
@@ -385,7 +387,7 @@ export const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField,
|
|
|
385
387
|
}, children: [isLoading && _jsx(LoadingComponent, {}), samplePivotTable && !isLoading && (_jsx("div", { style: {
|
|
386
388
|
width: pivotCardWidth,
|
|
387
389
|
minHeight: 160,
|
|
388
|
-
}, children: _jsx(PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight:
|
|
390
|
+
}, children: _jsx(PivotCard, { pivotTable: samplePivotTable, theme: theme, index: 0, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: ButtonComponent, showEdit: false, clickable: false, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, CardComponent: CardComponent, onSelectPivot: () => { }, onClose: () => {
|
|
389
391
|
setPivotAggregation(null);
|
|
390
392
|
setPivotRowField(null);
|
|
391
393
|
setPivotValueField(null);
|
|
@@ -1,3 +1,26 @@
|
|
|
1
1
|
import { Column } from '../models/Columns';
|
|
2
|
+
export declare function getSelectFromAST(ast: any): any;
|
|
2
3
|
export declare function processStarColumn(ast: any, columns: Column[]): any;
|
|
4
|
+
export declare function recursiveSearchByKey(node: any, searchKey: string): any;
|
|
5
|
+
export declare function recursiveSearchByKeys(node: any, searchKeys: string[]): any;
|
|
6
|
+
export declare function createTableNameToTableAliasMap(ast: any): {
|
|
7
|
+
[key: string]: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function getColumnsByTableName(ast: any, tableName: string): {
|
|
10
|
+
columns: {
|
|
11
|
+
field: string;
|
|
12
|
+
}[];
|
|
13
|
+
name: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function processApostrophe(node: any, searchKeys: string[]): any;
|
|
16
|
+
export declare function recursiveSearchByKeysFindAllOccurances(node: any, searchKeys: string[], results: any[]): any;
|
|
17
|
+
export declare function getColumnAndTableInfo(tableAliasMap: {
|
|
18
|
+
[alias: string]: string;
|
|
19
|
+
}, column: any, schemaInfo: any): {
|
|
20
|
+
tableName: string;
|
|
21
|
+
columnName: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
export declare function getColumnsByTableFromASTAndSchema(ast: any, tables: any, tableAliasMap: any): {
|
|
24
|
+
[table: string]: string[];
|
|
25
|
+
};
|
|
3
26
|
//# sourceMappingURL=astProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAe5D"}
|
|
1
|
+
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,OAQxC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAe5D;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAgBtE;AAGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAgB1E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,GAAG;;EA2BtD;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAahD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CActE;AAED,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,GAAG,EAAE,GACb,GAAG,CAYL;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,GAAG,GACd;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgCvD;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,GAAG,GACjB;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAoG/B"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
export function getSelectFromAST(ast) {
|
|
2
|
+
if (Array.isArray(ast)) {
|
|
3
|
+
return ast[0];
|
|
4
|
+
}
|
|
5
|
+
else if (ast.select) {
|
|
6
|
+
return ast.select;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return ast;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
1
12
|
export function processStarColumn(ast, columns) {
|
|
2
13
|
if (ast.columns === '*') {
|
|
3
14
|
ast.columns = columns.map((column) => {
|
|
@@ -14,3 +25,223 @@ export function processStarColumn(ast, columns) {
|
|
|
14
25
|
}
|
|
15
26
|
return ast;
|
|
16
27
|
}
|
|
28
|
+
// a useful function to search for a specific keywork and return the value
|
|
29
|
+
export function recursiveSearchByKey(node, searchKey) {
|
|
30
|
+
let result = undefined;
|
|
31
|
+
if (!node || typeof node !== 'object') {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (node[searchKey]) {
|
|
35
|
+
return node[searchKey];
|
|
36
|
+
}
|
|
37
|
+
const keys = Object.keys(node);
|
|
38
|
+
for (const key of keys) {
|
|
39
|
+
result = recursiveSearchByKey(node[key], searchKey);
|
|
40
|
+
if (result) {
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
// If the object has all the requested keys, return the object
|
|
47
|
+
export function recursiveSearchByKeys(node, searchKeys) {
|
|
48
|
+
let result = undefined;
|
|
49
|
+
if (!node || typeof node !== 'object') {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const nodeKeys = Object.keys(node);
|
|
53
|
+
if (searchKeys.every((key) => nodeKeys.includes(key))) {
|
|
54
|
+
return node;
|
|
55
|
+
}
|
|
56
|
+
for (const key of nodeKeys) {
|
|
57
|
+
result = recursiveSearchByKeys(node[key], searchKeys);
|
|
58
|
+
if (result) {
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
export function createTableNameToTableAliasMap(ast) {
|
|
65
|
+
const tableNameToTableAliasMap = {};
|
|
66
|
+
if (ast.from) {
|
|
67
|
+
for (const table of ast.from) {
|
|
68
|
+
const tableObject = recursiveSearchByKeys(table, ['table', 'as']);
|
|
69
|
+
if (tableObject.as) {
|
|
70
|
+
tableNameToTableAliasMap[tableObject.as] = tableObject.table;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
tableNameToTableAliasMap[tableObject.table] = tableObject.table;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (ast.with) {
|
|
78
|
+
for (const withStmt of ast.with) {
|
|
79
|
+
if (withStmt.stmt.ast.from) {
|
|
80
|
+
for (const table of withStmt.stmt.ast.from) {
|
|
81
|
+
const tableObject = recursiveSearchByKeys(table, ['table', 'as']);
|
|
82
|
+
if (tableObject.as) {
|
|
83
|
+
tableNameToTableAliasMap[tableObject.as] = tableObject.table;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
tableNameToTableAliasMap[tableObject.table] = tableObject.table;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return tableNameToTableAliasMap;
|
|
93
|
+
}
|
|
94
|
+
export function getColumnsByTableName(ast, tableName) {
|
|
95
|
+
const tableNameToTableAliasMap = createTableNameToTableAliasMap(ast);
|
|
96
|
+
const columns = [];
|
|
97
|
+
ast.columns.forEach((col) => {
|
|
98
|
+
const columnInfo = recursiveSearchByKeys(col, ['table', 'column']);
|
|
99
|
+
if (columnInfo.table === tableName ||
|
|
100
|
+
columnInfo.table === tableNameToTableAliasMap[tableName]) {
|
|
101
|
+
columns.push({ field: columnInfo.column });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return { columns, name: tableName };
|
|
105
|
+
}
|
|
106
|
+
export function processApostrophe(node, searchKeys) {
|
|
107
|
+
if (!node || typeof node !== 'object') {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const nodeKeys = Object.keys(node);
|
|
111
|
+
if (searchKeys.every((key) => nodeKeys.includes(key))) {
|
|
112
|
+
if (node.type === 'single_quote_string') {
|
|
113
|
+
node.value = node.value.replace("''", "'").replace("\\'", "'");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (const key of nodeKeys) {
|
|
117
|
+
processApostrophe(node[key], searchKeys);
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
export function recursiveSearchByKeysFindAllOccurances(node, searchKeys, results) {
|
|
122
|
+
if (!node || typeof node !== 'object') {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const nodeKeys = Object.keys(node);
|
|
126
|
+
if (searchKeys.every((key) => nodeKeys.includes(key))) {
|
|
127
|
+
return results.push(node);
|
|
128
|
+
}
|
|
129
|
+
for (const key of nodeKeys) {
|
|
130
|
+
recursiveSearchByKeysFindAllOccurances(node[key], searchKeys, results);
|
|
131
|
+
}
|
|
132
|
+
return results;
|
|
133
|
+
}
|
|
134
|
+
export function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
|
|
135
|
+
let columnsInfo = recursiveSearchByKeys(column, ['table', 'column']);
|
|
136
|
+
if (!columnsInfo) {
|
|
137
|
+
const quoteStringColumn = recursiveSearchByKeys(column, ['type', 'value']);
|
|
138
|
+
columnsInfo = { table: null, column: quoteStringColumn.value };
|
|
139
|
+
}
|
|
140
|
+
let columnName = columnsInfo.column;
|
|
141
|
+
if (typeof columnsInfo.column !== 'string') {
|
|
142
|
+
columnName = columnsInfo.column.expr.value;
|
|
143
|
+
}
|
|
144
|
+
let tableName = '';
|
|
145
|
+
if (columnsInfo.table) {
|
|
146
|
+
tableName = tableAliasMap[columnsInfo.table];
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// If there is no column name search through the schemaInfo to find an accurate table name
|
|
150
|
+
const tableNames = Object.values(tableAliasMap);
|
|
151
|
+
for (const table of tableNames) {
|
|
152
|
+
const tableInfo = schemaInfo.find((tableInfo) => tableInfo.name === table);
|
|
153
|
+
const columnNames = tableInfo.columns.map((column) => column.name);
|
|
154
|
+
if (columnNames.includes(columnName)) {
|
|
155
|
+
tableName = table;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// const tableName = columnsInfo.table
|
|
161
|
+
// ? tableAliasMap[columnsInfo.table]
|
|
162
|
+
// : //@ts-ignore
|
|
163
|
+
// tableAliasMap[Object.keys(tableAliasMap)[0]];
|
|
164
|
+
return { tableName, columnName };
|
|
165
|
+
}
|
|
166
|
+
export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
|
|
167
|
+
let referencedColumns = {};
|
|
168
|
+
if (ast.columns === '*' || ast.columns[0].expr.column === '*') {
|
|
169
|
+
// Be sure to select everything from stars
|
|
170
|
+
const tableList = ast.from.map((table) => recursiveSearchByKey(table, 'table'));
|
|
171
|
+
tableList.forEach((table) => {
|
|
172
|
+
const tableInfo = tables.find((tableInfo) => tableInfo.name === table);
|
|
173
|
+
if (tableInfo) {
|
|
174
|
+
if (!referencedColumns[table]) {
|
|
175
|
+
referencedColumns[table] = [];
|
|
176
|
+
}
|
|
177
|
+
referencedColumns[table] = tableInfo.columns.map((column) => column.name || '');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// look through all the columns
|
|
183
|
+
ast.columns.forEach((column) => {
|
|
184
|
+
const result = getColumnAndTableInfo(tableAliasMap, column, tables);
|
|
185
|
+
if (!result || !result.tableName)
|
|
186
|
+
return;
|
|
187
|
+
if (!referencedColumns[result.tableName]) {
|
|
188
|
+
referencedColumns[result.tableName] = [];
|
|
189
|
+
}
|
|
190
|
+
// @ts-ignore
|
|
191
|
+
referencedColumns[result.tableName].push(result.columnName);
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
// Look through every join reference
|
|
195
|
+
if (ast.from) {
|
|
196
|
+
const allColumnReferncesInFrom = recursiveSearchByKeysFindAllOccurances(ast.from, ['column', 'table'], []);
|
|
197
|
+
allColumnReferncesInFrom.forEach((column) => {
|
|
198
|
+
const result = getColumnAndTableInfo(tableAliasMap, column, tables);
|
|
199
|
+
if (!result || !result.tableName)
|
|
200
|
+
return;
|
|
201
|
+
if (!referencedColumns[result.tableName]) {
|
|
202
|
+
referencedColumns[result.tableName] = [];
|
|
203
|
+
}
|
|
204
|
+
// @ts-ignore
|
|
205
|
+
referencedColumns[result.tableName].push(result.columnName);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
// Look through the where's
|
|
209
|
+
if (ast.where) {
|
|
210
|
+
let allColumnReferncesInWhere = recursiveSearchByKeysFindAllOccurances(ast.where, ['column', 'table'], []);
|
|
211
|
+
allColumnReferncesInWhere.forEach((column) => {
|
|
212
|
+
const result = getColumnAndTableInfo(tableAliasMap, column, tables);
|
|
213
|
+
if (!result || !result.tableName || !result.columnName)
|
|
214
|
+
return;
|
|
215
|
+
if (!referencedColumns[result.tableName]) {
|
|
216
|
+
referencedColumns[result.tableName] = [];
|
|
217
|
+
}
|
|
218
|
+
// @ts-ignore
|
|
219
|
+
referencedColumns[result.tableName].push(result.columnName);
|
|
220
|
+
});
|
|
221
|
+
// NEED TO SEARCH FOR ALL DOUBLE QUOTE STRINGS AS WELL
|
|
222
|
+
allColumnReferncesInWhere = recursiveSearchByKeysFindAllOccurances(ast.where, ['type', 'value'], []);
|
|
223
|
+
allColumnReferncesInWhere.forEach((column) => {
|
|
224
|
+
if (column.type === 'double_quote_string') {
|
|
225
|
+
let tableName = '';
|
|
226
|
+
const tableNames = Object.values(tableAliasMap);
|
|
227
|
+
for (const table of tableNames) {
|
|
228
|
+
const tableInfo = tables.find((tableInfo) => tableInfo.name === table);
|
|
229
|
+
const columnNames = tableInfo.columns.map((column) => column.name);
|
|
230
|
+
if (columnNames.includes(column.value)) {
|
|
231
|
+
tableName = table;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (!referencedColumns[tableName]) {
|
|
236
|
+
referencedColumns[tableName] = [];
|
|
237
|
+
}
|
|
238
|
+
// @ts-ignore
|
|
239
|
+
referencedColumns[tableName].push(column.value);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
for (const table in referencedColumns) {
|
|
244
|
+
referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
|
|
245
|
+
}
|
|
246
|
+
return referencedColumns;
|
|
247
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Column } from '../models/Columns';
|
|
2
|
+
export declare const hasColumnAlias: (columns: Column[], referencedColumns: string[]) => boolean;
|
|
2
3
|
export declare const getUniqueValuesByColumns: (columns: Column[], query: string, rows: any, client: any) => Promise<{
|
|
3
4
|
[column: string]: {
|
|
4
5
|
[value: string]: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tableProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/tableProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,eAAO,MAAM,wBAAwB,YAC1B,MAAM,EAAE,SACV,MAAM,QACP,GAAG,UACD,GAAG;;;;
|
|
1
|
+
{"version":3,"file":"tableProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/tableProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,eAAO,MAAM,cAAc,YAChB,MAAM,EAAE,qBACE,MAAM,EAAE,KAC1B,OAUF,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,MAAM,EAAE,SACV,MAAM,QACP,GAAG,UACD,GAAG;;;;SA2DZ,CAAC"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { getData } from './dataFetcher';
|
|
2
2
|
import { generateDistinctQuery } from './queryConstructor';
|
|
3
|
+
export const hasColumnAlias = (columns, referencedColumns) => {
|
|
4
|
+
if (!referencedColumns) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
for (const column of columns) {
|
|
8
|
+
if (!referencedColumns.includes(column.field)) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
};
|
|
3
14
|
export const getUniqueValuesByColumns = async (columns, query, rows, client) => {
|
|
4
15
|
const stringNames = columns.map((column) => column.field);
|
|
5
16
|
const uniqueValues = {};
|
|
@@ -36,6 +47,9 @@ export const getUniqueValuesByColumns = async (columns, query, rows, client) =>
|
|
|
36
47
|
else {
|
|
37
48
|
const distinctValueQuery = generateDistinctQuery(stringNames, query);
|
|
38
49
|
const distinctStrings = await fetchDistinctStrings(distinctValueQuery, client);
|
|
50
|
+
if (!distinctStrings) {
|
|
51
|
+
return {};
|
|
52
|
+
}
|
|
39
53
|
for (const column of distinctStrings) {
|
|
40
54
|
uniqueValues[column.column] = column.values;
|
|
41
55
|
}
|