@quillsql/react 2.11.9 → 2.11.12
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/BarList.d.ts +2 -1
- package/dist/cjs/BarList.d.ts.map +1 -1
- package/dist/cjs/BarList.js +9 -3
- package/dist/cjs/Chart.d.ts +11 -5
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +57 -20
- package/dist/cjs/ChartBuilder.d.ts +16 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +423 -281
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +1 -0
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +5 -19
- package/dist/cjs/PieChart.d.ts.map +1 -1
- package/dist/cjs/PieChart.js +2 -1
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +15 -1
- package/dist/cjs/ReportBuilder.d.ts +4 -3
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +76 -45
- package/dist/cjs/SQLEditor.d.ts +2 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +60 -90
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +10 -3
- package/dist/cjs/components/Chart/LineChart.d.ts +3 -4
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +32 -15
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +0 -3
- package/dist/cjs/components/Dashboard/DashboardSection.js +4 -4
- package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +8 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +12 -3
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts +12 -1
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +105 -9
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +78 -3
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +3 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +5 -4
- package/dist/cjs/components/ReportBuilder/ast.d.ts +4 -0
- package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ast.js +10 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts +4 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +45 -13
- package/dist/cjs/components/ReportBuilder/pivot.d.ts +3 -0
- package/dist/cjs/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +3 -2
- package/dist/cjs/components/ReportBuilder/util.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +48 -1
- package/dist/cjs/components/UiComponents.d.ts +3 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +4 -4
- package/dist/cjs/hooks/useQuill.js +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +65 -62
- package/dist/cjs/utils/axisFormatter.js +74 -30
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +10 -0
- package/dist/cjs/utils/getDomain.d.ts.map +1 -1
- package/dist/cjs/utils/getDomain.js +22 -4
- package/dist/cjs/utils/valueFormatter.d.ts +2 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/BarList.d.ts +2 -1
- package/dist/esm/BarList.d.ts.map +1 -1
- package/dist/esm/BarList.js +9 -3
- package/dist/esm/Chart.d.ts +11 -5
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +57 -20
- package/dist/esm/ChartBuilder.d.ts +16 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +421 -280
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +1 -0
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +5 -19
- package/dist/esm/PieChart.d.ts.map +1 -1
- package/dist/esm/PieChart.js +2 -1
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +16 -2
- package/dist/esm/ReportBuilder.d.ts +4 -3
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +80 -49
- package/dist/esm/SQLEditor.d.ts +2 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +61 -91
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +10 -3
- package/dist/esm/components/Chart/LineChart.d.ts +3 -4
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +32 -15
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +0 -3
- package/dist/esm/components/Dashboard/DashboardSection.js +4 -4
- package/dist/esm/components/Dashboard/DashboardSectionContainer.js +1 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts +8 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +13 -4
- package/dist/esm/components/Dashboard/MetricComponent.d.ts +12 -1
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +101 -8
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +74 -2
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +3 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +6 -5
- package/dist/esm/components/ReportBuilder/ast.d.ts +4 -0
- package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ast.js +8 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts +4 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +45 -13
- package/dist/esm/components/ReportBuilder/pivot.d.ts +3 -0
- package/dist/esm/components/ReportBuilder/pivot.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +3 -2
- package/dist/esm/components/ReportBuilder/util.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +46 -0
- package/dist/esm/components/UiComponents.d.ts +3 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +4 -4
- package/dist/esm/hooks/useQuill.js +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +65 -62
- package/dist/esm/utils/axisFormatter.js +74 -30
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +10 -0
- package/dist/esm/utils/getDomain.d.ts.map +1 -1
- package/dist/esm/utils/getDomain.js +22 -4
- package/dist/esm/utils/valueFormatter.d.ts +2 -1
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/BarList.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { type ColorMapType } from './Chart';
|
|
2
3
|
interface YAxisField {
|
|
3
4
|
label: string;
|
|
4
5
|
field: string;
|
|
@@ -14,7 +15,7 @@ export interface BarListProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
14
15
|
containerStyle: any;
|
|
15
16
|
xAxisFormat: string;
|
|
16
17
|
colors?: string[];
|
|
17
|
-
colorMap?:
|
|
18
|
+
colorMap?: ColorMapType;
|
|
18
19
|
theme: any;
|
|
19
20
|
}
|
|
20
21
|
export declare function hexToRgbaWith10PercentAlpha(hex: any): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BarList.d.ts","sourceRoot":"","sources":["../../src/BarList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"BarList.d.ts","sourceRoot":"","sources":["../../src/BarList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAcxC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB5C,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;CACZ;AAYD,wBAAgB,2BAA2B,CAAC,GAAG,KAAA,UAW9C;AAED,QAAA,MAAM,OAAO,qFAwdX,CAAC;AAEH,eAAe,OAAO,CAAC"}
|
package/dist/cjs/BarList.js
CHANGED
|
@@ -130,7 +130,9 @@ const BarList = react_1.default.forwardRef((props, ref) => {
|
|
|
130
130
|
marginBottom: '8px',
|
|
131
131
|
width: `${widths[idx]}%`,
|
|
132
132
|
transition: showAnimation ? 'all 2s' : '',
|
|
133
|
-
backgroundColor: (colorMap &&
|
|
133
|
+
backgroundColor: (colorMap &&
|
|
134
|
+
colorMap[xAxisField] &&
|
|
135
|
+
colorMap[xAxisField]['primary']) ??
|
|
134
136
|
hexToRgbaWith10PercentAlpha(colors[0]),
|
|
135
137
|
boxSizing: 'content-box',
|
|
136
138
|
}, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
@@ -157,7 +159,9 @@ const BarList = react_1.default.forwardRef((props, ref) => {
|
|
|
157
159
|
marginBottom: '8px',
|
|
158
160
|
width: `${widths2[idx]}%`,
|
|
159
161
|
transition: showAnimation ? 'all 2s' : '',
|
|
160
|
-
backgroundColor: (colorMap &&
|
|
162
|
+
backgroundColor: (colorMap &&
|
|
163
|
+
colorMap[xAxisField] &&
|
|
164
|
+
colorMap[xAxisField]['primary']) ??
|
|
161
165
|
hexToRgbaWith10PercentAlpha(colors[1]),
|
|
162
166
|
boxSizing: 'content-box',
|
|
163
167
|
}, children: (0, jsx_runtime_1.jsx)("div", { style: {
|
|
@@ -235,7 +239,9 @@ const BarList = react_1.default.forwardRef((props, ref) => {
|
|
|
235
239
|
width: `${widths[idx]}%`,
|
|
236
240
|
transition: showAnimation ? 'all 2s' : '',
|
|
237
241
|
boxSizing: 'content-box',
|
|
238
|
-
backgroundColor: (colorMap &&
|
|
242
|
+
backgroundColor: (colorMap &&
|
|
243
|
+
colorMap[xAxisField] &&
|
|
244
|
+
colorMap[xAxisField]['primary']) ??
|
|
239
245
|
hexToRgbaWith10PercentAlpha(colors[0]),
|
|
240
246
|
display: 'flex',
|
|
241
247
|
alignItems: 'center',
|
package/dist/cjs/Chart.d.ts
CHANGED
|
@@ -11,13 +11,9 @@ interface BaseChartProps {
|
|
|
11
11
|
hideYAxis?: boolean;
|
|
12
12
|
hideCartesianGrid?: boolean;
|
|
13
13
|
dashedComparison?: boolean;
|
|
14
|
-
customPrimaryColor?: string;
|
|
15
|
-
customComparisonColor?: string;
|
|
16
14
|
dateRangeFilterDisabled?: boolean;
|
|
17
15
|
singlePointStyle?: 'dot' | 'line';
|
|
18
|
-
mapColorsToFields?: (_dashboardItem: DashboardItem, _theme: QuillTheme) =>
|
|
19
|
-
[key: string]: string;
|
|
20
|
-
};
|
|
16
|
+
mapColorsToFields?: (_dashboardItem: DashboardItem, _theme: QuillTheme) => ColorMapType;
|
|
21
17
|
}
|
|
22
18
|
interface WithChartId extends BaseChartProps {
|
|
23
19
|
chartId: string;
|
|
@@ -46,6 +42,16 @@ interface WithConfig extends BaseChartProps {
|
|
|
46
42
|
}
|
|
47
43
|
type ChartProps = WithChartId | WithConfig;
|
|
48
44
|
export declare function didFiltersChange(dashboardItem: any, filters: any): boolean;
|
|
45
|
+
export type ColorMapType = {
|
|
46
|
+
[key: string]: {
|
|
47
|
+
primary: string;
|
|
48
|
+
comparison?: string;
|
|
49
|
+
primaryGradientStart?: string;
|
|
50
|
+
primaryGradientStop?: string;
|
|
51
|
+
comparisonGradientStart?: string;
|
|
52
|
+
comparisonGradientStop?: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
49
55
|
declare const Chart: (data: ChartProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
56
|
export default Chart;
|
|
51
57
|
//# sourceMappingURL=Chart.d.ts.map
|
package/dist/cjs/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,CAClB,cAAc,EAAE,aAAa,EAC7B,MAAM,EAAE,UAAU,KACf,YAAY,CAAC;CACnB;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AA+D3C,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,WAQhE;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAaF,QAAA,MAAM,KAAK,SAAU,UAAU,4CAqC9B,CAAC;AAkiBF,eAAe,KAAK,CAAC"}
|
package/dist/cjs/Chart.js
CHANGED
|
@@ -85,7 +85,7 @@ function fallbackMapColorsToFields(_dashboardItem, _theme) {
|
|
|
85
85
|
}
|
|
86
86
|
const Chart = (data) => {
|
|
87
87
|
if ('config' in data) {
|
|
88
|
-
return ((0, jsx_runtime_1.jsx)(ChartDisplay, { ...data, loading: Boolean(!data.config), isComparison: Boolean(data?.config?.compareRows?.length) }));
|
|
88
|
+
return ((0, jsx_runtime_1.jsx)(ChartDisplay, { ...data, error: data.config.rows ? undefined : 'No rows found', loading: Boolean(!data.config), isComparison: Boolean(data?.config?.compareRows?.length) }));
|
|
89
89
|
}
|
|
90
90
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
91
91
|
const chartColors = (0, react_1.useMemo)(() => {
|
|
@@ -95,24 +95,25 @@ const Chart = (data) => {
|
|
|
95
95
|
? theme.chartColors
|
|
96
96
|
: ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
|
|
97
97
|
}, [data.colors]);
|
|
98
|
-
return ((0, jsx_runtime_1.jsx)(ChartUpdater, { chartId: data.chartId, containerStyle: data.containerStyle, colors: chartColors, theme: theme, isAnimationActive: data.isAnimationActive, hideXAxis: data.hideXAxis, hideYAxis: data.hideYAxis, hideCartesianGrid: data.hideCartesianGrid, dashedComparison: data.dashedComparison, dateRangeFilterDisabled: data.dateRangeFilterDisabled,
|
|
98
|
+
return ((0, jsx_runtime_1.jsx)(ChartUpdater, { chartId: data.chartId, containerStyle: data.containerStyle, colors: chartColors, theme: theme, isAnimationActive: data.isAnimationActive, hideXAxis: data.hideXAxis, hideYAxis: data.hideYAxis, hideCartesianGrid: data.hideCartesianGrid, dashedComparison: data.dashedComparison, dateRangeFilterDisabled: data.dateRangeFilterDisabled, singlePointStyle: data.singlePointStyle ?? 'dot', mapColorsToFields: data.mapColorsToFields ?? fallbackMapColorsToFields }));
|
|
99
99
|
};
|
|
100
|
-
const ChartUpdater = ({ colors, chartId, containerStyle, theme, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, dashedComparison, dateRangeFilterDisabled,
|
|
100
|
+
const ChartUpdater = ({ colors, chartId, containerStyle, theme, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, dashedComparison, dateRangeFilterDisabled, singlePointStyle, mapColorsToFields, }) => {
|
|
101
101
|
const { dispatch, dashboard } = (0, react_1.useContext)(Context_1.DashboardContext);
|
|
102
102
|
const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
|
|
103
103
|
const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
|
|
104
104
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
105
|
+
const [error, setError] = (0, react_1.useState)(undefined);
|
|
105
106
|
const [isComparison, setIsComparison] = (0, react_1.useState)(false);
|
|
106
107
|
const [colorMap, setColorMap] = (0, react_1.useState)({});
|
|
107
108
|
const [client, _] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
108
109
|
(0, react_1.useEffect)(() => {
|
|
109
110
|
async function getChartOptions() {
|
|
111
|
+
setLoading(true);
|
|
110
112
|
if (!didFiltersChange(dashboard[chartId], dashboardFilters)) {
|
|
111
113
|
setLoading(false);
|
|
112
114
|
return;
|
|
113
115
|
}
|
|
114
116
|
try {
|
|
115
|
-
setLoading(true);
|
|
116
117
|
// Remove extra fields on each filter so we don't confuse the backend.
|
|
117
118
|
const allowDateRange = !dateRangeFilterDisabled;
|
|
118
119
|
const minimalFilters = Object.values(dashboardFilters).length
|
|
@@ -142,6 +143,7 @@ const ChartUpdater = ({ colors, chartId, containerStyle, theme, isAnimationActiv
|
|
|
142
143
|
id: chartId,
|
|
143
144
|
filters: minimalFilters,
|
|
144
145
|
};
|
|
146
|
+
setError(undefined);
|
|
145
147
|
const resp = await (0, dataFetcher_1.getData)(client, 'itempost', 'omit', hostedBody, cloudBody);
|
|
146
148
|
if (resp && resp.name !== 'error' && !resp.errorMessage) {
|
|
147
149
|
setIsComparison(!!resp.compareRows?.length);
|
|
@@ -158,6 +160,9 @@ const ChartUpdater = ({ colors, chartId, containerStyle, theme, isAnimationActiv
|
|
|
158
160
|
setColorMap(mapColorsToFields(dashboardItem, theme));
|
|
159
161
|
}
|
|
160
162
|
}
|
|
163
|
+
else {
|
|
164
|
+
setError(resp?.errorMessage);
|
|
165
|
+
}
|
|
161
166
|
setLoading(false);
|
|
162
167
|
}
|
|
163
168
|
catch (e) {
|
|
@@ -168,9 +173,9 @@ const ChartUpdater = ({ colors, chartId, containerStyle, theme, isAnimationActiv
|
|
|
168
173
|
setInitialLoad(false);
|
|
169
174
|
getChartOptions();
|
|
170
175
|
}, [dashboardFilters, client, chartId]);
|
|
171
|
-
return ((0, jsx_runtime_1.jsx)(ChartDisplay, { config: dashboard[chartId], colors: colors, containerStyle: containerStyle, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, dashedComparison: dashedComparison, singlePointStyle: singlePointStyle,
|
|
176
|
+
return ((0, jsx_runtime_1.jsx)(ChartDisplay, { config: dashboard[chartId], colors: colors, containerStyle: containerStyle, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, dashedComparison: dashedComparison, singlePointStyle: singlePointStyle, isAnimationActive: isAnimationActive, isComparison: isComparison, loading: loading || initialLoad, error: error, colorMap: colorMap }));
|
|
172
177
|
};
|
|
173
|
-
const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, dashedComparison,
|
|
178
|
+
const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, dashedComparison, isAnimationActive, loading = false, error = undefined, isComparison = false, singlePointStyle = 'dot', colorMap, }) => {
|
|
174
179
|
const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
|
|
175
180
|
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
176
181
|
const chartColors = (0, react_1.useMemo)(() => {
|
|
@@ -208,13 +213,11 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
208
213
|
? (0, PivotModal_1.generatePivotTableYAxis)(pivot, pivotTable.columns, yAxisFields?.[0]?.format)
|
|
209
214
|
: null;
|
|
210
215
|
}, [pivotTable, config?.yAxisFields]);
|
|
211
|
-
if (
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return (0, jsx_runtime_1.jsx)(ChartError_1.default, { containerStyle: containerStyle });
|
|
217
|
-
}
|
|
216
|
+
if (error) {
|
|
217
|
+
return (0, jsx_runtime_1.jsx)(ChartError_1.default, { containerStyle: containerStyle });
|
|
218
|
+
}
|
|
219
|
+
else if (!config || loading) {
|
|
220
|
+
return (0, jsx_runtime_1.jsx)(ChartSkeleton_1.default, { containerStyle: containerStyle });
|
|
218
221
|
}
|
|
219
222
|
// TODO: Figure out if we can use ?? to coalesce these into the variable.
|
|
220
223
|
const chartTypes = [config?.chartType];
|
|
@@ -292,17 +295,37 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
292
295
|
(key.startsWith('comparison_') &&
|
|
293
296
|
Boolean(row[key.replace('comparison_', '')]))));
|
|
294
297
|
if (chartTypes.includes('column')) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
+
// Autofill the column chart with an empty column if there are no rows
|
|
299
|
+
let barChartData = data;
|
|
300
|
+
if (dateFilter && (!data || data.length === 0)) {
|
|
301
|
+
const xAxis = config.xAxisField;
|
|
302
|
+
const yAxis = yAxisFields[0]?.field;
|
|
303
|
+
barChartData = [{ [xAxis]: '', [yAxis]: '0' }];
|
|
304
|
+
}
|
|
305
|
+
return ((0, jsx_runtime_1.jsx)(BarChart_1.default, { colors: chartColors, theme: theme, isStacked: isPivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields, data: barChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, colorMap: colorMap }));
|
|
298
306
|
}
|
|
299
307
|
if (chartTypes.includes('metric')) {
|
|
300
308
|
const data = config; // THIS SHOULD ACCOUNT FOR PIVOT TABLES IN THE FUTURE
|
|
301
|
-
const isComparison = data.rows
|
|
309
|
+
const isComparison = data.rows?.length > 0 &&
|
|
302
310
|
Object.keys(data.rows[0]).includes(`comparison_${data.xAxisField}`);
|
|
303
311
|
const primaryMetricLabel = data?.filtersApplied?.date_range?.preset?.label;
|
|
304
312
|
const comparisonKey = data?.filtersApplied?.date_range?.comparisonRange?.value;
|
|
305
313
|
const comparisonLabel = dateRangePickerUtils_1.COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
|
|
314
|
+
if (data.rows?.length === 0 || data.rows[0][data.xAxisField] === null) {
|
|
315
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
316
|
+
display: 'flex',
|
|
317
|
+
flex: '1 0 auto',
|
|
318
|
+
height: containerStyle?.height || '100%',
|
|
319
|
+
margin: 'auto',
|
|
320
|
+
justifyContent: 'center',
|
|
321
|
+
alignItems: 'center',
|
|
322
|
+
fontSize: 13,
|
|
323
|
+
color: theme.secondaryTextColor,
|
|
324
|
+
maxWidth: '100%',
|
|
325
|
+
width: '100%',
|
|
326
|
+
...containerStyle,
|
|
327
|
+
}, children: "No results" }));
|
|
328
|
+
}
|
|
306
329
|
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
307
330
|
fontFamily: theme?.fontFamily,
|
|
308
331
|
fontSize: 32,
|
|
@@ -324,7 +347,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
324
347
|
gap: 4,
|
|
325
348
|
alignItems: 'baseline',
|
|
326
349
|
marginRight: 'auto',
|
|
327
|
-
}, children: [(0, jsx_runtime_1.jsx)("span", { children: data.rows
|
|
350
|
+
}, children: [(0, jsx_runtime_1.jsx)("span", { children: data.rows?.length > 0 &&
|
|
328
351
|
(0, valueFormatter_1.valueFormatter)({
|
|
329
352
|
value: data.rows[0][data.xAxisField] ?? 0,
|
|
330
353
|
field: data.xAxisField,
|
|
@@ -355,7 +378,7 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
355
378
|
fontWeight: '500',
|
|
356
379
|
fontFamily: theme?.fontFamily,
|
|
357
380
|
color: theme?.secondaryTextColor,
|
|
358
|
-
}, children: data.rows
|
|
381
|
+
}, children: data.rows?.length > 0 &&
|
|
359
382
|
(0, valueFormatter_1.valueFormatter)({
|
|
360
383
|
value: data.rows[0][`comparison_${data.xAxisField}`] ?? 0,
|
|
361
384
|
field: data.xAxisField,
|
|
@@ -377,6 +400,20 @@ const ChartDisplay = ({ config, colors, containerStyle, hideXAxis, hideYAxis, hi
|
|
|
377
400
|
? 'in ' + comparisonLabel.toLowerCase()
|
|
378
401
|
: 'previous period' })] }))] }));
|
|
379
402
|
}
|
|
380
|
-
|
|
403
|
+
// Autofill the line chart with two zero values, so they form a line at 0.0
|
|
404
|
+
// when there are no rows on the config.
|
|
405
|
+
let lineChartData = data;
|
|
406
|
+
if (dateFilter && (!data || data.length === 0)) {
|
|
407
|
+
const xAxis = config.xAxisField;
|
|
408
|
+
const yAxis = yAxisFields[0]?.field;
|
|
409
|
+
const format = config.columns.find((c) => c.field === xAxis).format;
|
|
410
|
+
const startDate = (0, valueFormatter_2.quillFormat)({ value: dateFilter?.startDate, format });
|
|
411
|
+
const endDate = (0, valueFormatter_2.quillFormat)({ value: dateFilter?.endDate, format });
|
|
412
|
+
lineChartData = [
|
|
413
|
+
{ [xAxis]: startDate, [yAxis]: '0' },
|
|
414
|
+
{ [xAxis]: endDate, [yAxis]: '0' },
|
|
415
|
+
];
|
|
416
|
+
}
|
|
417
|
+
return ((0, jsx_runtime_1.jsx)(LineChart_1.default, { colors: chartColors, colorMap: colorMap, yAxisFields: yAxisFields, data: lineChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, dashedComparison: dashedComparison, singlePointStyle: singlePointStyle }));
|
|
381
418
|
};
|
|
382
419
|
exports.default = Chart;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { QuillTheme } from './QuillProvider';
|
|
2
3
|
import { Pivot } from './internals/ReportBuilder/PivotModal';
|
|
3
4
|
import { SelectComponentProps, TextInputComponentProps, ButtonComponentProps, ModalComponentProps, HeaderProps, LabelProps, TextProps, DeleteButtonProps, MemoizedPopoverProps } from './components/UiComponents';
|
|
4
5
|
import { Column } from './models/Tables';
|
|
@@ -35,6 +36,13 @@ interface ChartBuilderProps {
|
|
|
35
36
|
onDelete?: () => void;
|
|
36
37
|
fields?: Field[];
|
|
37
38
|
pivot?: Pivot;
|
|
39
|
+
pivotData?: {
|
|
40
|
+
rows: any[];
|
|
41
|
+
columns: {
|
|
42
|
+
label: string;
|
|
43
|
+
field: string;
|
|
44
|
+
}[];
|
|
45
|
+
};
|
|
38
46
|
dateRange?: (string | Date)[];
|
|
39
47
|
dashboardItem?: any;
|
|
40
48
|
recommendedPivots?: Pivot[];
|
|
@@ -47,6 +55,13 @@ interface ChartBuilderProps {
|
|
|
47
55
|
organizationName?: string;
|
|
48
56
|
}
|
|
49
57
|
export declare function ChartBuilderWithModal(props: ChartBuilderProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
-
export default function ChartBuilder({ TextInput, Select, Button, SecondaryButton, Header, Label, DeleteButton, Text, Popover, isOpen, isEditMode, horizontalView, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, formHeaderStyle, formLabelStyle, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, showDashboardDropdown, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem, recommendedPivots: rp, createdPivots: cp, destinationDashboard, dateColumn, buttonLabel, organizationName, }: ChartBuilderProps): import("react/jsx-runtime").JSX.Element | undefined;
|
|
58
|
+
export default function ChartBuilder({ TextInput, Select, Button, SecondaryButton, Header, Label, DeleteButton, Text, Popover, isOpen, isEditMode, horizontalView, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, formHeaderStyle, formLabelStyle, showTableFormatOptions, showDateFieldOptions, showAccessControlOptions, showDashboardDropdown, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem, recommendedPivots: rp, createdPivots: cp, destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, }: ChartBuilderProps): import("react/jsx-runtime").JSX.Element | undefined;
|
|
59
|
+
export declare function DashboardFilterModal({ isOpen, setIsOpen, override, theme, issues, }: {
|
|
60
|
+
isOpen: boolean;
|
|
61
|
+
setIsOpen: (e: boolean) => void;
|
|
62
|
+
override: () => void;
|
|
63
|
+
theme: QuillTheme;
|
|
64
|
+
issues: string[];
|
|
65
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
51
66
|
export {};
|
|
52
67
|
//# sourceMappingURL=ChartBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../../src/ChartBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../../src/ChartBuilder.tsx"],"names":[],"mappings":"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"}
|