@quillsql/react 2.12.30 → 2.12.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts +6 -37
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +86 -327
- package/dist/cjs/ChartBuilder.d.ts +12 -49
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +68 -36
- package/dist/cjs/ChartEditor.d.ts +1 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +11 -7
- package/dist/cjs/Context.d.ts +4 -1
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +10 -4
- package/dist/cjs/Dashboard.d.ts +61 -114
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +261 -30
- package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePicker.js +0 -26
- package/dist/cjs/ReportBuilder.d.ts +1 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +62 -97
- package/dist/cjs/SQLEditor.d.ts +2 -2
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +10 -5
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +41 -43
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +12 -1
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +25 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +7 -7
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +64 -28
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +1 -30
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +16 -1
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +4 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +10 -2
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +94 -70
- package/dist/cjs/components/ReportBuilder/convert.d.ts +7 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +53 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts +6 -6
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +6 -22
- package/dist/cjs/components/UiComponents.d.ts +26 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +97 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +19 -3
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -0
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/models/Columns.d.ts +2 -1
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +15 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +9 -1
- package/dist/cjs/models/Report.d.ts +10 -23
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +37 -2
- package/dist/cjs/utils/columnProcessing.d.ts +2 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +54 -1
- package/dist/cjs/utils/dashboard.d.ts +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +3 -56
- package/dist/cjs/utils/dataProcessing.d.ts +4 -2
- package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/dataProcessing.js +18 -1
- package/dist/cjs/utils/dates.d.ts +2 -1
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +23 -1
- package/dist/cjs/utils/filterProcessing.d.ts +7 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +100 -13
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +7 -1
- package/dist/cjs/utils/report.d.ts +4 -1
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +94 -7
- package/dist/cjs/utils/tableProcessing.d.ts +1 -1
- package/dist/esm/Chart.d.ts +6 -37
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +87 -329
- package/dist/esm/ChartBuilder.d.ts +12 -49
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +68 -33
- package/dist/esm/ChartEditor.d.ts +1 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +11 -7
- package/dist/esm/Context.d.ts +4 -1
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +9 -3
- package/dist/esm/Dashboard.d.ts +61 -114
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +263 -32
- package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePicker.js +0 -26
- package/dist/esm/ReportBuilder.d.ts +1 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +64 -99
- package/dist/esm/SQLEditor.d.ts +2 -2
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +11 -6
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +42 -44
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +13 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +26 -2
- package/dist/esm/components/Dashboard/DataLoader.d.ts +7 -7
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +65 -29
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +1 -30
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +16 -1
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +5 -2
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +10 -2
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +94 -70
- package/dist/esm/components/ReportBuilder/convert.d.ts +7 -2
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +51 -0
- package/dist/esm/components/ReportBuilder/convert.uspec.js +280 -13
- package/dist/esm/components/ReportBuilder/ui.d.ts +6 -6
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +6 -22
- package/dist/esm/components/UiComponents.d.ts +26 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +95 -3
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +19 -3
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -0
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/models/Columns.d.ts +2 -1
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +15 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +8 -0
- package/dist/esm/models/Report.d.ts +10 -23
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/test-utils/constants.d.ts +56 -0
- package/dist/esm/test-utils/constants.d.ts.map +1 -0
- package/dist/esm/test-utils/constants.js +271 -0
- package/dist/esm/test-utils/generators.d.ts +4 -0
- package/dist/esm/test-utils/generators.d.ts.map +1 -0
- package/dist/esm/test-utils/generators.js +37 -0
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +38 -3
- package/dist/esm/utils/astFilterProcessing.uspec.js +153 -5
- package/dist/esm/utils/columnProcessing.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +52 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/columnProcessing.uspec.js +65 -0
- package/dist/esm/utils/dashboard.d.ts +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +3 -56
- package/dist/esm/utils/dataProcessing.d.ts +4 -2
- package/dist/esm/utils/dataProcessing.d.ts.map +1 -1
- package/dist/esm/utils/dataProcessing.js +16 -0
- package/dist/esm/utils/dataProcessing.uspec.js +1 -0
- package/dist/esm/utils/dates.d.ts +2 -1
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +21 -0
- package/dist/esm/utils/filterProcessing.d.ts +7 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +97 -12
- package/dist/esm/utils/filterProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/filterProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/filterProcessing.uspec.js +245 -0
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +7 -1
- package/dist/esm/utils/report.d.ts +4 -1
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +92 -6
- package/dist/esm/utils/report.uspec.d.ts +2 -0
- package/dist/esm/utils/report.uspec.d.ts.map +1 -0
- package/dist/esm/utils/report.uspec.js +66 -0
- package/dist/esm/utils/tableProcessing.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,40 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// @ts-nocheck
|
|
3
3
|
import { Area, CartesianGrid, ComposedChart as ReChartsAreaChart, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
|
|
4
|
-
import { valueFormatter } from '../../utils/valueFormatter';
|
|
4
|
+
import { DATE_FORMAT_TYPES, quillFormat, valueFormatter, } from '../../utils/valueFormatter';
|
|
5
5
|
import { axisFormatter } from '../../utils/axisFormatter';
|
|
6
6
|
import { selectColor } from '../../utils/color';
|
|
7
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
|
+
function createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat) {
|
|
12
|
+
let lineChartData = [];
|
|
13
|
+
if (dateFilter &&
|
|
14
|
+
DATE_FORMAT_TYPES.includes(xAxisFormat || '') &&
|
|
15
|
+
(!lineChartData || lineChartData.length === 0)) {
|
|
16
|
+
const xAxis = xAxisField || '';
|
|
17
|
+
const yAxis = yAxisFields[0]?.field;
|
|
18
|
+
const startDate = quillFormat({
|
|
19
|
+
value: dateFilter?.startDate,
|
|
20
|
+
format: xAxisFormat,
|
|
21
|
+
});
|
|
22
|
+
const endDate = quillFormat({
|
|
23
|
+
value: dateFilter?.endDate,
|
|
24
|
+
format: xAxisFormat,
|
|
25
|
+
});
|
|
26
|
+
lineChartData = [
|
|
27
|
+
{ [xAxis]: startDate, [yAxis]: '0' },
|
|
28
|
+
{ [xAxis]: endDate, [yAxis]: '0' },
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
return lineChartData;
|
|
32
|
+
}
|
|
11
33
|
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, onClickChartElement = () => { }, dateFilter, }) {
|
|
12
34
|
const [formattedData, setFormattedData] = useState(data);
|
|
13
35
|
useEffect(() => {
|
|
14
36
|
if (!data || data.length === 0) {
|
|
37
|
+
setFormattedData(createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat));
|
|
15
38
|
return;
|
|
16
39
|
}
|
|
17
40
|
let newData = [...data];
|
|
@@ -31,7 +54,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
|
|
|
31
54
|
}
|
|
32
55
|
setFormattedData(newData);
|
|
33
56
|
}, [data]);
|
|
34
|
-
if (!
|
|
57
|
+
if (!formattedData || formattedData.length === 0) {
|
|
35
58
|
return (_jsx("div", { style: {
|
|
36
59
|
display: 'flex',
|
|
37
60
|
flex: '1 0 auto',
|
|
@@ -57,6 +80,7 @@ export default function LineChart({ colors, colorMap = {}, yAxisFields, data, co
|
|
|
57
80
|
key = 'comparisonGradientStart';
|
|
58
81
|
if (index === 0 && gradient === 'stop')
|
|
59
82
|
key = 'comparisonGradientStop';
|
|
83
|
+
// @ts-ignore
|
|
60
84
|
return colorMap[field][key];
|
|
61
85
|
}
|
|
62
86
|
return undefined; // use the default colors from the theme
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { QuillReport } from '../../
|
|
2
|
+
import { QuillReport } from '../../models/Report';
|
|
3
3
|
import { QuillTheme } from '../../QuillProvider';
|
|
4
4
|
export type DataLoaderChildProps = {
|
|
5
5
|
isLoading: boolean;
|
|
@@ -9,10 +9,10 @@ export type DataLoaderChildProps = {
|
|
|
9
9
|
field: string;
|
|
10
10
|
direction: string;
|
|
11
11
|
}) => void;
|
|
12
|
-
data
|
|
12
|
+
data: QuillReport;
|
|
13
13
|
};
|
|
14
|
-
export default function DataLoader({
|
|
15
|
-
|
|
14
|
+
export default function DataLoader({ item, children, filters, }: {
|
|
15
|
+
item: any;
|
|
16
16
|
filters?: any;
|
|
17
17
|
children: ({ isLoading, error, onPageChange, onSortChange, data, }: DataLoaderChildProps) => JSX.Element;
|
|
18
18
|
}): JSX.Element;
|
|
@@ -29,11 +29,11 @@ type ColorMapType = {
|
|
|
29
29
|
export type ChartDataLoaderChildProps = {
|
|
30
30
|
isLoading: boolean;
|
|
31
31
|
error?: string;
|
|
32
|
-
data
|
|
32
|
+
data: QuillReport;
|
|
33
33
|
dateBucket?: string;
|
|
34
34
|
};
|
|
35
|
-
export declare const ChartDataLoader: ({
|
|
36
|
-
|
|
35
|
+
export declare const ChartDataLoader: ({ item, children, dateBucket, additionalProcessing, filters, }: {
|
|
36
|
+
item: any;
|
|
37
37
|
dateBucket?: string | undefined;
|
|
38
38
|
mapColorsToFields?: ((_report: QuillReport, _theme: QuillTheme) => ColorMapType) | undefined;
|
|
39
39
|
additionalProcessing?: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,WAAW,EAAuB,MAAM,
|
|
1
|
+
{"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAmCjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACzC,GAAG,GAAG,CAAC,OAAO,CA4Id;AAED,KAAK,YAAY,GAAG;IAClB,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;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,eAAO,MAAM,eAAe;UAOpB,GAAG;;mCAGE,WAAW,UACZ,UAAU,KACf,YAAY;2BACM,GAAG;cAChB,GAAG;wDAMV,yBAAyB,KAAK,WAAW;MAC1C,WAsEH,CAAC"}
|
|
@@ -2,17 +2,37 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useContext, useEffect, useState } from 'react';
|
|
3
3
|
import { didFiltersChange } from '../../Chart';
|
|
4
4
|
import { ClientContext, CustomFieldContext, DashboardContext, } from '../../Context';
|
|
5
|
-
import { fetchReport } from '../../utils/report';
|
|
5
|
+
import { convertInternalReportToReport, EMPTY_REPORT, fetchReport, } from '../../utils/report';
|
|
6
6
|
import { shouldFetchMore, DEFAULT_PAGINATION, shouldSortInMemory, } from '../../utils/paginationProcessing';
|
|
7
7
|
import { fetchTableByReport } from '../../utils/tableProcessing';
|
|
8
|
-
|
|
8
|
+
const constructReportFromItem = (item) => {
|
|
9
|
+
return {
|
|
10
|
+
...EMPTY_REPORT,
|
|
11
|
+
id: item._id,
|
|
12
|
+
name: item.name,
|
|
13
|
+
dashboardName: item.dashboardName,
|
|
14
|
+
rows: [],
|
|
15
|
+
columns: [],
|
|
16
|
+
chartType: item.chartType,
|
|
17
|
+
dateField: item.dateField,
|
|
18
|
+
pivot: item.pivot,
|
|
19
|
+
xAxisLabel: item.xAxisLabel,
|
|
20
|
+
xAxisField: item.xAxisField,
|
|
21
|
+
xAxisFormat: item.xAxisFormat,
|
|
22
|
+
yAxisFields: item.yAxisFields,
|
|
23
|
+
order: item.order,
|
|
24
|
+
compareRows: item.compareRows,
|
|
25
|
+
filtersApplied: item.filtersApplied,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export default function DataLoader({ item, children, filters, }) {
|
|
9
29
|
const [client] = useContext(ClientContext);
|
|
10
|
-
const
|
|
30
|
+
const [dashboard, dispatch] = useContext(DashboardContext);
|
|
11
31
|
const [customFields] = useContext(CustomFieldContext);
|
|
12
32
|
const [loading, setLoading] = useState(false);
|
|
13
33
|
const [error, setError] = useState(undefined);
|
|
14
34
|
const [previousPage, setPreviousPage] = useState(0);
|
|
15
|
-
const [report, setReport] = useState(dashboard[
|
|
35
|
+
const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
|
|
16
36
|
const [additionalProcessing, setAdditionProcessing] = useState({
|
|
17
37
|
page: DEFAULT_PAGINATION,
|
|
18
38
|
});
|
|
@@ -33,7 +53,7 @@ export default function DataLoader({ id, children, filters, }) {
|
|
|
33
53
|
}
|
|
34
54
|
};
|
|
35
55
|
const onSortChange = (sort) => {
|
|
36
|
-
if (shouldSortInMemory(DEFAULT_PAGINATION, report.rowCount, report.pivot)) {
|
|
56
|
+
if (shouldSortInMemory(DEFAULT_PAGINATION, report.rowCount, !!report.pivot)) {
|
|
37
57
|
return;
|
|
38
58
|
}
|
|
39
59
|
const updatedProcessing = { page: DEFAULT_PAGINATION, sort };
|
|
@@ -54,7 +74,11 @@ export default function DataLoader({ id, children, filters, }) {
|
|
|
54
74
|
if (resetRows) {
|
|
55
75
|
tempRows = paginatedRows.rows;
|
|
56
76
|
}
|
|
57
|
-
|
|
77
|
+
const convertedReport = convertInternalReportToReport({
|
|
78
|
+
...report,
|
|
79
|
+
rows: tempRows,
|
|
80
|
+
});
|
|
81
|
+
setReport(convertedReport);
|
|
58
82
|
setAdditionProcessing(updatedProcessing);
|
|
59
83
|
setTimeout(() => {
|
|
60
84
|
setLoading(false);
|
|
@@ -67,70 +91,81 @@ export default function DataLoader({ id, children, filters, }) {
|
|
|
67
91
|
}
|
|
68
92
|
};
|
|
69
93
|
const fetchReportHelper = async (useReportTask = true, processing) => {
|
|
70
|
-
if (
|
|
94
|
+
if (dashboard[item._id] &&
|
|
95
|
+
!didFiltersChange(dashboard[item._id], filters) &&
|
|
71
96
|
!loading &&
|
|
72
|
-
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
!dashboard[item._id].triggerReload) {
|
|
73
99
|
setLoading(false);
|
|
74
|
-
|
|
100
|
+
const convertedReport = convertInternalReportToReport(
|
|
101
|
+
// @ts-ignore
|
|
102
|
+
dashboard[item._id]);
|
|
103
|
+
setReport(convertedReport);
|
|
75
104
|
return;
|
|
76
105
|
}
|
|
77
106
|
setLoading(true);
|
|
78
|
-
const { report, error } = await fetchReport(
|
|
107
|
+
const { report, error } = await fetchReport(item._id, client, useReportTask, filters, processing, undefined, customFields);
|
|
79
108
|
dispatch({
|
|
80
109
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
81
|
-
id:
|
|
110
|
+
id: item._id,
|
|
82
111
|
data: { ...report, triggerReload: false },
|
|
83
112
|
});
|
|
84
|
-
|
|
113
|
+
const convertedReport = convertInternalReportToReport(report);
|
|
114
|
+
setReport(convertedReport);
|
|
85
115
|
setAdditionProcessing(processing);
|
|
86
116
|
setError(error);
|
|
87
117
|
setLoading(false);
|
|
88
118
|
};
|
|
89
119
|
useEffect(() => {
|
|
90
120
|
fetchReportHelper(true, additionalProcessing);
|
|
91
|
-
}, [filters,
|
|
121
|
+
}, [filters, item._id]);
|
|
92
122
|
useEffect(() => {
|
|
93
|
-
|
|
123
|
+
// @ts-ignore
|
|
124
|
+
if (dashboard[item._id] && dashboard[item._id].triggerReload) {
|
|
94
125
|
fetchReportHelper(true, additionalProcessing);
|
|
95
126
|
}
|
|
96
|
-
}, [dashboard[
|
|
127
|
+
}, [dashboard[item._id]]);
|
|
97
128
|
return (_jsx(_Fragment, { children: children({
|
|
98
129
|
isLoading: loading,
|
|
99
130
|
error,
|
|
100
131
|
onPageChange,
|
|
101
132
|
onSortChange,
|
|
102
|
-
data: report
|
|
133
|
+
data: report,
|
|
103
134
|
}) }));
|
|
104
135
|
}
|
|
105
136
|
// The same data-loader pattern as above, but with special logic for charts
|
|
106
137
|
// At some point these may be able to get merged into one function.
|
|
107
|
-
export const ChartDataLoader = ({
|
|
108
|
-
const
|
|
138
|
+
export const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, filters, }) => {
|
|
139
|
+
const [dashboard, dispatch] = useContext(DashboardContext);
|
|
109
140
|
const [initialLoad, setInitialLoad] = useState(true);
|
|
110
141
|
const [loading, setLoading] = useState(false);
|
|
111
142
|
const [error, setError] = useState(undefined);
|
|
112
143
|
const [localDateBucket, setLocalDateBucket] = useState(undefined);
|
|
113
144
|
const [localAdditionalProcessing, setLocalAdditionalProcessing] = useState();
|
|
114
|
-
const [report, setReport] = useState(dashboard[
|
|
145
|
+
const [report, setReport] = useState(dashboard[item._id] ?? constructReportFromItem(item));
|
|
115
146
|
const [client] = useContext(ClientContext);
|
|
116
147
|
const [customFields] = useContext(CustomFieldContext);
|
|
117
148
|
const fetchReportHelper = async (useReportTask = true) => {
|
|
118
|
-
|
|
119
|
-
|
|
149
|
+
const tempReport = dashboard[item._id];
|
|
150
|
+
if (tempReport &&
|
|
151
|
+
!didFiltersChange(tempReport, filters) &&
|
|
152
|
+
!tempReport.triggerReload &&
|
|
120
153
|
dateBucket === localDateBucket &&
|
|
121
154
|
additionalProcessing?.last === localAdditionalProcessing?.last) {
|
|
122
155
|
setLoading(false);
|
|
123
|
-
|
|
156
|
+
const convertedReport = convertInternalReportToReport(tempReport);
|
|
157
|
+
setReport(convertedReport);
|
|
124
158
|
return;
|
|
125
159
|
}
|
|
126
160
|
setLoading(true);
|
|
127
|
-
const { report, error } = await fetchReport(
|
|
161
|
+
const { report, error } = await fetchReport(item._id, client, useReportTask, filters, additionalProcessing, dateBucket, customFields);
|
|
128
162
|
dispatch({
|
|
129
163
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
130
|
-
id:
|
|
164
|
+
id: item._id,
|
|
131
165
|
data: { ...report, triggerReload: false },
|
|
132
166
|
});
|
|
133
|
-
|
|
167
|
+
const convertedReport = convertInternalReportToReport(report);
|
|
168
|
+
setReport(convertedReport);
|
|
134
169
|
setLocalDateBucket(dateBucket);
|
|
135
170
|
setLocalAdditionalProcessing(additionalProcessing);
|
|
136
171
|
setError(error);
|
|
@@ -139,15 +174,16 @@ export const ChartDataLoader = ({ id, children, dateBucket, additionalProcessing
|
|
|
139
174
|
useEffect(() => {
|
|
140
175
|
setInitialLoad(false);
|
|
141
176
|
fetchReportHelper();
|
|
142
|
-
}, [filters,
|
|
177
|
+
}, [filters, item._id, dateBucket, additionalProcessing]);
|
|
143
178
|
useEffect(() => {
|
|
144
|
-
|
|
179
|
+
const tempReport = dashboard[item._id];
|
|
180
|
+
if (tempReport && tempReport.triggerReload) {
|
|
145
181
|
fetchReportHelper();
|
|
146
182
|
}
|
|
147
|
-
}, [dashboard[
|
|
183
|
+
}, [dashboard[item._id]]);
|
|
148
184
|
return children({
|
|
149
185
|
isLoading: loading || initialLoad,
|
|
150
|
-
data: report
|
|
186
|
+
data: report,
|
|
151
187
|
error,
|
|
152
188
|
dateBucket,
|
|
153
189
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"MetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/MetricComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAgOhC"}
|
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
3
2
|
import { COMPARISON_OPTIONS } from '../../DateRangePicker/dateRangePickerUtils';
|
|
4
|
-
import { valueFormatter } from '../../utils/valueFormatter';
|
|
5
3
|
import ChartError from '../Chart/ChartError';
|
|
6
4
|
import ChartSkeleton from '../Chart/ChartSkeleton';
|
|
7
5
|
import { useTheme } from '../../hooks';
|
|
8
|
-
import { usePivot } from '../../hooks/useQuill';
|
|
9
6
|
export default function QuillMetricComponent({ report, onClick, error, isLoading, }) {
|
|
10
7
|
const theme = useTheme();
|
|
11
8
|
const dateFilter = report?.filtersApplied?.find((filter) => filter.filterType == 'date_range');
|
|
12
|
-
const [rows, setRows] = useState(report?.rows ?? []);
|
|
13
|
-
const pivotData = usePivot(report.id);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
if (pivotData.data) {
|
|
16
|
-
setRows(pivotData.data.rows);
|
|
17
|
-
}
|
|
18
|
-
else if (report?.rows) {
|
|
19
|
-
setRows(report.rows);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
setRows([]);
|
|
23
|
-
}
|
|
24
|
-
}, [pivotData?.data?.rows, report?.rows]);
|
|
25
9
|
const primaryMetricLabel = report?.filtersApplied?.date_range?.preset?.label;
|
|
26
10
|
const comparisonKey = report?.filtersApplied?.date_range?.comparisonRange?.value;
|
|
27
11
|
const comparisonLabel = COMPARISON_OPTIONS.find((opt) => opt.value === comparisonKey)?.text;
|
|
@@ -30,6 +14,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
30
14
|
boxSizing: 'content-box',
|
|
31
15
|
borderRadius: 8,
|
|
32
16
|
paddingBottom: isLoading ? 0 : 30,
|
|
17
|
+
width: '100%',
|
|
33
18
|
}, children: _jsx("div", { style: {
|
|
34
19
|
width: '100%',
|
|
35
20
|
height: '100%',
|
|
@@ -50,7 +35,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
50
35
|
justifyContent: 'space-between',
|
|
51
36
|
boxSizing: 'content-box',
|
|
52
37
|
paddingBottom: 5,
|
|
53
|
-
}, children: [_jsx("div", { style: {
|
|
38
|
+
}, children: [onClick && (_jsx("div", { style: {
|
|
54
39
|
fontFamily: theme.fontFamily,
|
|
55
40
|
color: theme.primaryTextColor,
|
|
56
41
|
boxSizing: 'content-box',
|
|
@@ -62,7 +47,7 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
62
47
|
display: 'block',
|
|
63
48
|
maxWidth: '100%',
|
|
64
49
|
overflow: 'hidden',
|
|
65
|
-
}, children: report?.name }), onClick && report?.name ? (_jsx("div", { style: {
|
|
50
|
+
}, children: report?.name })), onClick && report?.name ? (_jsx("div", { style: {
|
|
66
51
|
fontFamily: theme.fontFamily,
|
|
67
52
|
color: theme.primaryTextColor,
|
|
68
53
|
boxSizing: 'content-box',
|
|
@@ -75,7 +60,8 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
75
60
|
}, children: 'view report →' })) : null] }), isLoading ? (_jsx(ChartSkeleton, { containerStyle: {
|
|
76
61
|
maxHeight: '78px',
|
|
77
62
|
height: '100%',
|
|
78
|
-
} })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : rows?.length === 0 ||
|
|
63
|
+
} })) : error ? (_jsx("div", { children: _jsx(ChartError, { errorMessage: error }) })) : report.rows?.length === 0 ||
|
|
64
|
+
report.rows[0][report.xAxisField] === null ? (_jsx("div", { style: {
|
|
79
65
|
display: 'flex',
|
|
80
66
|
flex: '1 0 auto',
|
|
81
67
|
height: '100%',
|
|
@@ -112,19 +98,9 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
112
98
|
gap: 4,
|
|
113
99
|
alignItems: 'baseline',
|
|
114
100
|
marginRight: 'auto',
|
|
115
|
-
}, children: [_jsx("span", { children: rows.length > 0 &&
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
field: report.xAxisField,
|
|
119
|
-
fields: [
|
|
120
|
-
{
|
|
121
|
-
field: report.xAxisField,
|
|
122
|
-
format: report.xAxisFormat,
|
|
123
|
-
label: report.xAxisLabel,
|
|
124
|
-
_id: report.id || 'dummy',
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
}) }), dateFilter?.comparison && (_jsx("span", { style: {
|
|
101
|
+
}, children: [_jsx("span", { children: (report.rows.length > 0 &&
|
|
102
|
+
report.rows[0][report.xAxisField]) ??
|
|
103
|
+
0 }), dateFilter?.comparison && (_jsx("span", { style: {
|
|
128
104
|
fontSize: 13,
|
|
129
105
|
fontWeight: '500',
|
|
130
106
|
fontFamily: theme?.fontFamily,
|
|
@@ -143,19 +119,9 @@ export default function QuillMetricComponent({ report, onClick, error, isLoading
|
|
|
143
119
|
fontWeight: '500',
|
|
144
120
|
fontFamily: theme?.fontFamily,
|
|
145
121
|
color: theme?.secondaryTextColor,
|
|
146
|
-
}, children: rows.length > 0 &&
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
field: report.xAxisField,
|
|
150
|
-
fields: [
|
|
151
|
-
{
|
|
152
|
-
field: report.xAxisField,
|
|
153
|
-
format: report.xAxisFormat,
|
|
154
|
-
label: report.xAxisLabel,
|
|
155
|
-
_id: report.id || 'dummy',
|
|
156
|
-
},
|
|
157
|
-
],
|
|
158
|
-
}) }), _jsx("span", { style: {
|
|
122
|
+
}, children: (report.rows.length > 0 &&
|
|
123
|
+
report.rows[0][`comparison_${report.xAxisField}`]) ??
|
|
124
|
+
0 }), _jsx("span", { style: {
|
|
159
125
|
fontSize: 13,
|
|
160
126
|
fontWeight: '500',
|
|
161
127
|
fontFamily: theme?.fontFamily,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { QuillReport } from '../../
|
|
2
|
+
import { QuillReport } from '../../models/Report';
|
|
3
3
|
export default function QuillTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }: {
|
|
4
4
|
report: QuillReport;
|
|
5
5
|
onClick?: (report: QuillReport) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"TableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TableComponent.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrE,GAAG,GAAG,CAAC,OAAO,CAwGd"}
|
|
@@ -1,48 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import QuillTable from '../QuillTable';
|
|
4
|
-
import { quillFormat } from '../../utils/valueFormatter';
|
|
5
4
|
import ChartSkeleton from '../Chart/ChartSkeleton';
|
|
6
5
|
import ChartError from '../Chart/ChartError';
|
|
7
6
|
import { useTheme } from '../../hooks';
|
|
8
7
|
import { useExport } from '../../hooks/useExport';
|
|
9
|
-
import { usePivot } from '../../hooks/useQuill';
|
|
10
8
|
export default function QuillTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }) {
|
|
11
9
|
const theme = useTheme();
|
|
12
10
|
const [initialLoad, setInitialLoad] = useState(true);
|
|
13
11
|
const { downloadCSV } = useExport(report?.id);
|
|
14
|
-
const pivotData = usePivot(report.id);
|
|
15
|
-
const [rows, setRows] = useState(report?.rows ?? []);
|
|
16
|
-
const [columns, setColumns] = useState(report?.columns ?? report?.yAxisFields ?? []);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (!report.rows || !report.columns) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (report.pivot !== null && pivotData.data) {
|
|
22
|
-
setRows(pivotData.data.rows);
|
|
23
|
-
setColumns(pivotData.data.columns);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
setRows(report?.rows ?? []);
|
|
27
|
-
setColumns(report?.columns ?? report?.yAxisFields ?? []);
|
|
28
|
-
}
|
|
29
|
-
}, [pivotData, report]);
|
|
30
12
|
useEffect(() => {
|
|
31
13
|
if (!isLoading) {
|
|
32
14
|
setInitialLoad(false);
|
|
33
15
|
}
|
|
34
16
|
}, [isLoading]);
|
|
35
|
-
const formattedRows = rows.map((row) => {
|
|
36
|
-
return columns.reduce((formattedRow, column) => {
|
|
37
|
-
// Apply the format function to each field in the row
|
|
38
|
-
const formattedValue = quillFormat({
|
|
39
|
-
value: row[column.field],
|
|
40
|
-
format: column.format,
|
|
41
|
-
});
|
|
42
|
-
formattedRow[column.field] = formattedValue;
|
|
43
|
-
return formattedRow;
|
|
44
|
-
}, {});
|
|
45
|
-
});
|
|
46
17
|
return (_jsxs("div", { style: { cursor: 'pointer' }, onClick: () => onClick && onClick(report), children: [_jsxs("div", { style: {
|
|
47
18
|
display: 'flex',
|
|
48
19
|
flexDirection: 'row',
|
|
@@ -78,7 +49,7 @@ export default function QuillTableComponent({ report, onClick, isLoading, error,
|
|
|
78
49
|
} })) : error ? (_jsx("div", { style: {
|
|
79
50
|
width: '100%',
|
|
80
51
|
height: '400px',
|
|
81
|
-
}, children: _jsx(ChartError, { errorMessage: error }) })) : (_jsx(QuillTable, { isLoading: isLoading, rows:
|
|
52
|
+
}, children: _jsx(ChartError, { errorMessage: error }) })) : (_jsx(QuillTable, { isLoading: isLoading, rows: report.rows ?? [], rowCount: rowCount, columns: report.columns, rowsPerPage: 10, containerStyle: {
|
|
82
53
|
width: '100%',
|
|
83
54
|
height: '400px',
|
|
84
55
|
}, downloadCSV: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"QuillMultiSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillMultiSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAiC3D;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,GACN,EAAE,yBAAyB,2CAqS3B;AAED,eAAO,MAAM,gBAAgB;WAKpB,MAAM;kBACC,MAAM,KAAK,IAAI;iBAChB,MAAM;6CAwDpB,CAAC"}
|
|
@@ -2,6 +2,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useOnClickOutside } from '../hooks';
|
|
3
3
|
import React, { useContext, useEffect, useRef, useState, } from 'react';
|
|
4
4
|
import { ThemeContext } from '../Context';
|
|
5
|
+
/**
|
|
6
|
+
* Helper function for displaying option labels
|
|
7
|
+
*/
|
|
8
|
+
function displaySelectedOptionLabels({ options, value, }) {
|
|
9
|
+
if (!value || !value.length) {
|
|
10
|
+
return 'Select';
|
|
11
|
+
}
|
|
12
|
+
const matchingOptions = options.filter((elem) => value.includes(elem.value));
|
|
13
|
+
if (!matchingOptions.length) {
|
|
14
|
+
return 'Select';
|
|
15
|
+
}
|
|
16
|
+
return matchingOptions
|
|
17
|
+
.map((elem) => elem.label)
|
|
18
|
+
.join(', ');
|
|
19
|
+
}
|
|
5
20
|
/**
|
|
6
21
|
* A robust select component that implements the new minimal Select interface.
|
|
7
22
|
*/
|
|
@@ -100,7 +115,7 @@ export function QuillMultiSelectComponentWithCombo({ options, width, onChange, l
|
|
|
100
115
|
width: '100%',
|
|
101
116
|
textAlign: 'left',
|
|
102
117
|
zIndex: 1,
|
|
103
|
-
}, children:
|
|
118
|
+
}, children: displaySelectedOptionLabels({ options, value }) }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true", "data-slot": "icon", height: 20, width: 20, style: { minHeight: 20, minWidth: 20 }, children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) })] }), showModal && (_jsxs("div", { ref: modalRef, style: {
|
|
104
119
|
position: 'absolute',
|
|
105
120
|
width: '100%',
|
|
106
121
|
display: 'flex',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"QuillSelectWithCombo.d.ts","sourceRoot":"","sources":["../../../src/components/QuillSelectWithCombo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAYtD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,GACN,EAAE,oBAAoB,2CAoPtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useOnClickOutside } from '../hooks';
|
|
3
|
-
import React, { useContext, useRef, useState } from 'react';
|
|
3
|
+
import React, { useContext, useEffect, useRef, useState, } from 'react';
|
|
4
4
|
import { ThemeContext } from '../Context';
|
|
5
5
|
import { ListboxTextInput } from './QuillMultiSelectWithCombo';
|
|
6
6
|
/**
|
|
@@ -11,8 +11,11 @@ export function QuillSelectComponentWithCombo({ options, value, width, onChange,
|
|
|
11
11
|
const [showModal, setShowModal] = useState(false);
|
|
12
12
|
const modalRef = useRef(null);
|
|
13
13
|
const [searchQuery, setSearchQuery] = React.useState('');
|
|
14
|
-
const [filteredItems, setFilteredItems] = React.useState(
|
|
14
|
+
const [filteredItems, setFilteredItems] = React.useState([]);
|
|
15
15
|
useOnClickOutside(modalRef, () => setShowModal(false));
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
setFilteredItems(options.slice(0, 20));
|
|
18
|
+
}, [options]);
|
|
16
19
|
const handleSearchChange = (value) => {
|
|
17
20
|
setSearchQuery(value);
|
|
18
21
|
const curFilteredItems = value === ''
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { Filter } from '../../models/Filter';
|
|
2
|
+
import { Filter, Operator } from '../../models/Filter';
|
|
3
3
|
interface FilterModalProps {
|
|
4
4
|
schema: any;
|
|
5
5
|
filter?: Filter;
|
|
6
6
|
fieldValuesMap: {
|
|
7
7
|
[key: string]: string[];
|
|
8
|
+
} | {
|
|
9
|
+
[key: string]: {
|
|
10
|
+
[key: string]: string[];
|
|
11
|
+
};
|
|
8
12
|
};
|
|
13
|
+
customOperatorOptions?: OperatorOptionsMap;
|
|
9
14
|
onSubmitFilter: (filter: Filter) => void;
|
|
10
15
|
onDeleteFilter: () => void;
|
|
11
16
|
ButtonComponent: React.ComponentType<any>;
|
|
@@ -14,9 +19,12 @@ interface FilterModalProps {
|
|
|
14
19
|
SecondaryButtonComponent?: React.ComponentType<any>;
|
|
15
20
|
MultiSelectComponent: React.ComponentType<any>;
|
|
16
21
|
}
|
|
22
|
+
type OperatorOptionsMap = {
|
|
23
|
+
[key: string]: Operator[];
|
|
24
|
+
};
|
|
17
25
|
/**
|
|
18
26
|
* Modal for adding, editing, and deleting Filters
|
|
19
27
|
*/
|
|
20
|
-
export default function FilterModal({ schema, filter, fieldValuesMap, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export default function FilterModal({ schema, filter, fieldValuesMap, customOperatorOptions, onSubmitFilter, onDeleteFilter, ButtonComponent, SelectComponent, TextInputComponent, SecondaryButtonComponent, MultiSelectComponent, }: FilterModalProps): import("react/jsx-runtime").JSX.Element;
|
|
21
29
|
export {};
|
|
22
30
|
//# sourceMappingURL=FilterModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"FilterModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/FilterModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EACL,MAAM,EAIN,QAAQ,EAOT,MAAM,qBAAqB,CAAC;AAM7B,UAAU,gBAAgB;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EACZ;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GACzB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IACnD,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAC3C,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpD,oBAAoB,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAChD;AAQD,KAAK,kBAAkB,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACrB,EAAE,gBAAgB,2CAwvBlB"}
|