@quillsql/react 2.12.27 → 2.12.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +40 -21
- package/dist/cjs/ChartBuilder.d.ts +38 -4
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +66 -25
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +66 -26
- package/dist/cjs/Context.d.ts +1 -19
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +32 -83
- package/dist/cjs/Dashboard.d.ts +6 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +79 -50
- package/dist/cjs/ReportBuilder.d.ts +10 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +331 -99
- package/dist/cjs/SQLEditor.d.ts +10 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +122 -29
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +21 -11
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +5 -4
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +61 -20
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +7 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +16 -2
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +2 -14
- package/dist/cjs/components/QuillTable.d.ts +2 -2
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +7 -5
- package/dist/cjs/components/UiComponents.d.ts +3 -3
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +4 -4
- 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 +18 -4
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +16 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +179 -105
- package/dist/cjs/utils/columnProcessing.d.ts +1 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +8 -1
- package/dist/cjs/utils/constants.d.ts +2 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -0
- package/dist/cjs/utils/constants.js +4 -0
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +26 -96
- package/dist/cjs/utils/dataFetcher.d.ts +1 -1
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +63 -15
- package/dist/cjs/utils/dates.d.ts +9 -0
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +43 -1
- package/dist/cjs/utils/logging.d.ts +2 -0
- package/dist/cjs/utils/logging.d.ts.map +1 -0
- package/dist/cjs/utils/logging.js +10 -0
- package/dist/cjs/utils/monacoAutocomplete.d.ts +20 -0
- package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/cjs/utils/monacoAutocomplete.js +145 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +6 -0
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/cjs/utils/pivotConstructor.js +140 -0
- package/dist/cjs/utils/queryConstructor.d.ts +5 -2
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +149 -53
- package/dist/cjs/utils/queryConstructor.uspec.d.ts +2 -0
- package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +1 -0
- package/dist/cjs/utils/queryConstructor.uspec.js +225 -0
- package/dist/cjs/utils/tableProcessing.d.ts +23 -0
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +125 -2
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +40 -21
- package/dist/esm/ChartBuilder.d.ts +38 -4
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +64 -24
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +66 -26
- package/dist/esm/Context.d.ts +1 -19
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +32 -82
- package/dist/esm/Dashboard.d.ts +6 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +80 -51
- package/dist/esm/ReportBuilder.d.ts +10 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +333 -101
- package/dist/esm/SQLEditor.d.ts +10 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +123 -30
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +21 -11
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +5 -4
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +61 -20
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +7 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts +16 -2
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +2 -14
- package/dist/esm/components/QuillTable.d.ts +2 -2
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +7 -5
- package/dist/esm/components/UiComponents.d.ts +3 -3
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +4 -4
- 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 +19 -5
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +16 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +177 -105
- package/dist/esm/utils/columnProcessing.d.ts +1 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +6 -0
- package/dist/esm/utils/constants.d.ts +2 -0
- package/dist/esm/utils/constants.d.ts.map +1 -0
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +27 -97
- package/dist/esm/utils/dataFetcher.d.ts +1 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +63 -15
- package/dist/esm/utils/dates.d.ts +9 -0
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +39 -0
- package/dist/esm/utils/logging.d.ts +2 -0
- package/dist/esm/utils/logging.d.ts.map +1 -0
- package/dist/esm/utils/logging.js +6 -0
- package/dist/esm/utils/monacoAutocomplete.d.ts +20 -0
- package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/esm/utils/monacoAutocomplete.js +140 -0
- package/dist/esm/utils/pivotConstructor.d.ts +6 -0
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/esm/utils/pivotConstructor.js +136 -0
- package/dist/esm/utils/queryConstructor.d.ts +5 -2
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +145 -52
- package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
- package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
- package/dist/esm/utils/queryConstructor.uspec.js +223 -0
- package/dist/esm/utils/tableProcessing.d.ts +23 -0
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +122 -2
- package/package.json +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
package/dist/esm/ChartBuilder.js
CHANGED
|
@@ -15,6 +15,7 @@ import { quillFormat } from './utils/valueFormatter';
|
|
|
15
15
|
import { convertColumnInfoToColumnInternal, convertFieldTypeToJSType, } from './utils/columnProcessing';
|
|
16
16
|
import { createTableNameToTableAliasMap, getColumnsByTableFromASTAndSchema, getSelectFromAST, } from './utils/astProcessing';
|
|
17
17
|
import { getSchemaInfoWithCustomFields } from './utils/schema';
|
|
18
|
+
import { getDateBucketFromRange } from './utils/dates';
|
|
18
19
|
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
19
20
|
const POSTGRES_DATE_TYPES = [
|
|
20
21
|
'timestamp',
|
|
@@ -49,6 +50,30 @@ function getPivotMetricOptions(pivot) {
|
|
|
49
50
|
];
|
|
50
51
|
}
|
|
51
52
|
}
|
|
53
|
+
export function createInitialFormData(columns) {
|
|
54
|
+
const firstNumberColumn = columns?.find((col) => numberFormatOptions.includes(col.format));
|
|
55
|
+
const formEmptyState = {
|
|
56
|
+
name: 'My Chart',
|
|
57
|
+
columns: columns.map((col) => {
|
|
58
|
+
return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
|
|
59
|
+
}),
|
|
60
|
+
xAxisField: columns?.[0]?.field || '',
|
|
61
|
+
xAxisFormat: columns?.[0]?.format || '',
|
|
62
|
+
yAxisFields: [
|
|
63
|
+
{
|
|
64
|
+
field: firstNumberColumn?.field || columns?.[0]?.field || '',
|
|
65
|
+
label: '',
|
|
66
|
+
format: firstNumberColumn?.format || columns?.[0]?.field || '',
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
xAxisLabel: '',
|
|
70
|
+
chartType: firstNumberColumn ? 'line' : 'table',
|
|
71
|
+
pivot: null,
|
|
72
|
+
dateField: { table: '', field: '' },
|
|
73
|
+
template: false,
|
|
74
|
+
};
|
|
75
|
+
return formEmptyState;
|
|
76
|
+
}
|
|
52
77
|
function getChartTypeOptions(formData) {
|
|
53
78
|
if (formData.pivot && !formData.pivot.rowField) {
|
|
54
79
|
return CHART_TYPES.filter((elem) => elem === 'metric' || elem === 'table').map((elem) => ({
|
|
@@ -235,7 +260,7 @@ export function ChartBuilderWithModal(props) {
|
|
|
235
260
|
* ### Chart Builder API
|
|
236
261
|
* @see https://docs.quillsql.com/components/chart-builder
|
|
237
262
|
*/
|
|
238
|
-
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, report = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, onSortChange, onPageChange,
|
|
263
|
+
export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, isOpen, isHorizontalView = true, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, report = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, pivotData, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, pivotRecommendationsEnabled = true, onSortChange, onPageChange, rowCount, isLoading, isComparison, onClickChartElement, }) {
|
|
239
264
|
const dateRange = dr;
|
|
240
265
|
const [client] = useContext(ClientContext);
|
|
241
266
|
const [theme] = useContext(ThemeContext);
|
|
@@ -336,6 +361,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
336
361
|
const [dashboardOptions, setDashboardOptions] = useState([]);
|
|
337
362
|
const [defaultDashboardName, setDefaultDashboardName] = useState(destinationDashboard || report?.dashboardName || '');
|
|
338
363
|
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
364
|
+
const [chartRows, setChartRows] = useState(rows);
|
|
339
365
|
const specificDashboardFilter = useMemo(() => {
|
|
340
366
|
return dashboardFilters.filter((f) => f && defaultDashboardName === f.dashboardName);
|
|
341
367
|
}, [dashboardFilters]);
|
|
@@ -539,7 +565,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
539
565
|
}
|
|
540
566
|
setFormData({
|
|
541
567
|
...curFormData,
|
|
542
|
-
dashboardName: report
|
|
568
|
+
dashboardName: report && report.dashboardName
|
|
543
569
|
? report?.dashboardName
|
|
544
570
|
: dashboardOptions[0]?.label,
|
|
545
571
|
template: isTemplate,
|
|
@@ -548,26 +574,29 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
548
574
|
}
|
|
549
575
|
getFormData();
|
|
550
576
|
}, []);
|
|
551
|
-
const selectedPivotTable =
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
577
|
+
const [selectedPivotTable, setSelectedPivotTable] = useState(pivotData || undefined);
|
|
578
|
+
const fetchPivotData = async (pivot, uniqueValues, overrideDateRange) => {
|
|
579
|
+
if (pivot && rows) {
|
|
580
|
+
setInitialLoad(false);
|
|
581
|
+
const dateFilter = report
|
|
582
|
+
? report.filtersApplied.find((filter) => {
|
|
583
|
+
return filter.filterType === 'date_range';
|
|
584
|
+
})
|
|
585
|
+
: undefined;
|
|
586
|
+
let dateBucket = undefined;
|
|
587
|
+
if (overrideDateRange) {
|
|
588
|
+
dateBucket = getDateBucketFromRange(overrideDateRange);
|
|
563
589
|
}
|
|
590
|
+
setSelectedPivotTable(await generatePivotTable(pivot, rows, overrideDateRange ?? dateRange, isComparison ?? false, -1, dateFilter ? dateFilter.comparisonRange : undefined, dateBucket, report, client, uniqueValues));
|
|
564
591
|
}
|
|
565
592
|
else {
|
|
566
|
-
|
|
593
|
+
setSelectedPivotTable(undefined);
|
|
567
594
|
}
|
|
568
|
-
}
|
|
595
|
+
};
|
|
569
596
|
const formattedRows = useMemo(() => {
|
|
570
|
-
if (selectedPivotTable &&
|
|
597
|
+
if (selectedPivotTable &&
|
|
598
|
+
selectedPivotTable.columns &&
|
|
599
|
+
formData.chartType === 'table') {
|
|
571
600
|
const columns = selectedPivotTable.columns;
|
|
572
601
|
columns.forEach((col, index) => {
|
|
573
602
|
// ADD THE RIGHT FIELD TYPE FOR THE VALUE COLUMNS
|
|
@@ -687,7 +716,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
687
716
|
setFormData({ ...formData, [fieldName]: value });
|
|
688
717
|
}
|
|
689
718
|
};
|
|
690
|
-
const handleAddPivot = (pivot) => {
|
|
719
|
+
const handleAddPivot = async (pivot, uniqueValues, dateRange, pivotData) => {
|
|
691
720
|
const newPivotFormData = pivotFormData(pivot);
|
|
692
721
|
// Only keep the old chart type if the shapes of the pivots are the same
|
|
693
722
|
// since the valid chart types for some pivots might have changed (eg. going
|
|
@@ -697,6 +726,15 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
697
726
|
Boolean(formData.pivot?.columnField) === Boolean(pivot.columnField);
|
|
698
727
|
const isNewChartType = formData.chartType !== newPivotFormData.chartType;
|
|
699
728
|
const keepOldChartType = isNewChartType && isPivotSameShape;
|
|
729
|
+
if (pivotData) {
|
|
730
|
+
setSelectedPivotTable({
|
|
731
|
+
rows: pivotData.rows,
|
|
732
|
+
columns: pivotData.columns,
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
await fetchPivotData(pivot, uniqueValues, dateRange);
|
|
737
|
+
}
|
|
700
738
|
setFormData((formData) => ({
|
|
701
739
|
...formData,
|
|
702
740
|
...newPivotFormData,
|
|
@@ -712,6 +750,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
712
750
|
dashboardName: formData.dashboardName,
|
|
713
751
|
pivot: null,
|
|
714
752
|
});
|
|
753
|
+
setSelectedPivotTable(undefined);
|
|
715
754
|
};
|
|
716
755
|
const handleAddField = (fieldName) => {
|
|
717
756
|
if (fieldName === 'columns') {
|
|
@@ -930,9 +969,10 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
930
969
|
}, children: [((!isHorizontalView && windowWidth >= 1200) ||
|
|
931
970
|
formData.chartType !== 'table') && (_jsx(Chart, { colors: theme.chartColors, config: {
|
|
932
971
|
...formData,
|
|
933
|
-
rows:
|
|
972
|
+
rows: chartRows,
|
|
934
973
|
pivotRows: selectedPivotTable?.rows || undefined,
|
|
935
974
|
pivotColumns: selectedPivotTable?.columns || undefined,
|
|
975
|
+
rowCount,
|
|
936
976
|
}, hideDateRangeFilter: hideDateRangeFilter, containerStyle: {
|
|
937
977
|
width: '100%',
|
|
938
978
|
height: formData.chartType === 'metric'
|
|
@@ -954,13 +994,13 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
954
994
|
onPageChange && onPageChange(page);
|
|
955
995
|
}, onSortChange: (sort) => {
|
|
956
996
|
onSortChange && onSortChange(sort);
|
|
957
|
-
},
|
|
997
|
+
}, rowCount: rowCount, isLoading: isLoading })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
958
998
|
? selectedPivotTable.columns
|
|
959
999
|
: formData.columns, onPageChange: (page) => {
|
|
960
1000
|
onPageChange && onPageChange(page);
|
|
961
1001
|
}, onSortChange: (sort) => {
|
|
962
1002
|
onSortChange && onSortChange(sort);
|
|
963
|
-
},
|
|
1003
|
+
}, rowCount: rowCount, isLoading: isLoading })) }))] }), isOpen && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
964
1004
|
display: 'flex',
|
|
965
1005
|
flexDirection: 'column',
|
|
966
1006
|
gap: 20,
|
|
@@ -993,7 +1033,7 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
993
1033
|
// marginTop: 6,
|
|
994
1034
|
display: 'flex',
|
|
995
1035
|
flexDirection: 'column',
|
|
996
|
-
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled }) }), formData.pivot && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: {
|
|
1036
|
+
}, children: _jsx(PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report }) }), formData.pivot && selectedPivotTable && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: {
|
|
997
1037
|
pivot: formData.pivot,
|
|
998
1038
|
rows: selectedPivotTable?.rows,
|
|
999
1039
|
columns: selectedPivotTable?.columns,
|
|
@@ -1053,13 +1093,13 @@ export default function ChartBuilder({ TextInputComponent = QuillTextInput, Sele
|
|
|
1053
1093
|
onPageChange && onPageChange(page);
|
|
1054
1094
|
}, onSortChange: (sort) => {
|
|
1055
1095
|
onSortChange && onSortChange(sort);
|
|
1056
|
-
},
|
|
1096
|
+
}, rowCount: rowCount, isLoading: isLoading })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
|
|
1057
1097
|
? selectedPivotTable.columns
|
|
1058
1098
|
: formData.columns, onPageChange: (page) => {
|
|
1059
1099
|
onPageChange && onPageChange(page);
|
|
1060
1100
|
}, onSortChange: (sort) => {
|
|
1061
1101
|
onSortChange && onSortChange(sort);
|
|
1062
|
-
},
|
|
1102
|
+
}, rowCount: rowCount, isLoading: isLoading })) })), showTableFormatOptions && (_jsxs("div", { children: [_jsxs("div", { style: {
|
|
1063
1103
|
display: 'flex',
|
|
1064
1104
|
flexDirection: 'column',
|
|
1065
1105
|
}, children: [_jsx(HeaderComponent, { label: "Table" }), _jsx(SubHeaderComponent, { label: "Columns" })] }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EACZ,SAAS,EAMV,MAAM,OAAO,CAAC;AAsBf,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/ChartEditor.js
CHANGED
|
@@ -9,6 +9,8 @@ import { mergeComparisonRange } from './utils/merge';
|
|
|
9
9
|
import { QuillCard } from './components/QuillCard';
|
|
10
10
|
import { processFilterErrorList } from './utils/errorProcessing';
|
|
11
11
|
import { cleanDashboardItem } from './utils/dashboard';
|
|
12
|
+
import { getPaginatedRows } from './utils/tableProcessing';
|
|
13
|
+
import { MAX_COLUMN_ROWS_LIMIT } from './utils/constants';
|
|
12
14
|
/**
|
|
13
15
|
* ### Quill Chart Editor
|
|
14
16
|
*
|
|
@@ -47,10 +49,10 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
47
49
|
dashboard?.[reportId].dashboardName === f.dashboardName);
|
|
48
50
|
}, [dashboardFilters]);
|
|
49
51
|
const [client, _] = useContext(ClientContext);
|
|
50
|
-
const [
|
|
52
|
+
const [report, setReport] = useState(dashboard?.[reportId]);
|
|
51
53
|
const [isLoading, setIsLoading] = useState(false);
|
|
52
54
|
const [additionalProcessing, setAdditionalProcessing] = useState({});
|
|
53
|
-
const [
|
|
55
|
+
const [rowCount, setRowCount] = useState(undefined);
|
|
54
56
|
const [previousPage, setPreviousPage] = useState(0);
|
|
55
57
|
const [customFields] = useContext(CustomFieldContext);
|
|
56
58
|
const dateFilter = Object.values(specificDashboardFilter).find((filter) => filter.filterType == 'date_range');
|
|
@@ -75,24 +77,57 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
75
77
|
};
|
|
76
78
|
}, []);
|
|
77
79
|
const onPageChange = (page) => {
|
|
78
|
-
if (
|
|
79
|
-
(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
if (report?.rowCount) {
|
|
81
|
+
if ((previousPage < page.currentPage &&
|
|
82
|
+
(page.currentPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT ===
|
|
83
|
+
0) ||
|
|
84
|
+
(previousPage > page.currentPage &&
|
|
85
|
+
(previousPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT === 0)) {
|
|
86
|
+
updateTableRows({ page });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
if ((previousPage < page.currentPage &&
|
|
91
|
+
(page.currentPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT ===
|
|
92
|
+
0) ||
|
|
93
|
+
(previousPage > page.currentPage &&
|
|
94
|
+
(previousPage * page.rowsPerPage) % MAX_COLUMN_ROWS_LIMIT === 0)) {
|
|
95
|
+
getChartOptions({ page });
|
|
96
|
+
}
|
|
85
97
|
}
|
|
86
98
|
setPreviousPage(page.currentPage);
|
|
87
99
|
};
|
|
88
100
|
const onSortChange = (sort) => {
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
if (report.chartType === 'table' && report.pivot) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (report?.rowCount) {
|
|
105
|
+
setPreviousPage(0);
|
|
106
|
+
updateTableRows({ sort, page: { currentPage: 0, rowsPerPage: 20 } });
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
getChartOptions({ sort, page: { currentPage: 0, rowsPerPage: 20 } });
|
|
93
110
|
setPreviousPage(0);
|
|
94
111
|
}
|
|
95
112
|
};
|
|
113
|
+
const updateTableRows = async (processing) => {
|
|
114
|
+
if (!isLoading) {
|
|
115
|
+
setIsLoading(true);
|
|
116
|
+
try {
|
|
117
|
+
const updatedProcessing = { ...additionalProcessing, ...processing };
|
|
118
|
+
let paginatedRows = await getPaginatedRows(report, client, updatedProcessing, specificDashboardFilter, customFields);
|
|
119
|
+
setReport({ ...report, rows: paginatedRows });
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
setIsLoading(false);
|
|
122
|
+
}, 200);
|
|
123
|
+
setAdditionalProcessing(updatedProcessing);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
console.log('Error fetching chart: ', e);
|
|
127
|
+
setIsLoading(false);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
96
131
|
const getChartOptions = async (processing) => {
|
|
97
132
|
if (!isLoading) {
|
|
98
133
|
setIsLoading(true);
|
|
@@ -139,10 +174,10 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
139
174
|
mergeComparisonRange(resp);
|
|
140
175
|
if (resp.chartType === 'table' && resp.compareRows[0]) {
|
|
141
176
|
if (resp.compareRows[0]?.count) {
|
|
142
|
-
|
|
177
|
+
setRowCount(resp.compareRows[0]?.count);
|
|
143
178
|
}
|
|
144
179
|
else if (resp.compareRows[0]?.COUNT) {
|
|
145
|
-
|
|
180
|
+
setRowCount(resp.compareRows[0]?.COUNT);
|
|
146
181
|
}
|
|
147
182
|
}
|
|
148
183
|
}
|
|
@@ -151,11 +186,11 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
151
186
|
filtersApplied: specificDashboardFilter,
|
|
152
187
|
};
|
|
153
188
|
const cleanedReport = await cleanDashboardItem(curDashboardItem, specificDashboardFilter);
|
|
154
|
-
|
|
189
|
+
setReport({ ...report, ...cleanedReport });
|
|
155
190
|
dispatch({
|
|
156
191
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
157
192
|
id: reportId,
|
|
158
|
-
data: { ...
|
|
193
|
+
data: { ...report, ...cleanedReport },
|
|
159
194
|
});
|
|
160
195
|
}
|
|
161
196
|
setTimeout(() => {
|
|
@@ -171,27 +206,32 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
171
206
|
};
|
|
172
207
|
useEffect(() => {
|
|
173
208
|
let isSubscribed = true;
|
|
174
|
-
if (!
|
|
209
|
+
if (!report) {
|
|
175
210
|
getChartOptions();
|
|
176
211
|
}
|
|
177
212
|
else {
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
|
|
213
|
+
if (report.chartType === 'table' && report.pivot) {
|
|
214
|
+
// USE PIVOT ROW COUNT WHEN TABLE AND PIVOT
|
|
215
|
+
setRowCount(undefined);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
setRowCount(report.rowCount ?? report.rows.length);
|
|
181
219
|
}
|
|
182
220
|
}
|
|
183
221
|
return () => {
|
|
184
222
|
isSubscribed = false;
|
|
185
223
|
};
|
|
186
224
|
}, [client, reportId]);
|
|
187
|
-
if (!
|
|
225
|
+
if (!report) {
|
|
188
226
|
return _jsx("div", {});
|
|
189
227
|
}
|
|
190
228
|
return (_jsx("div", { ref: parentRef, style: { height: '100%' }, children: _jsx(ModalComponent, { isOpen: isOpen, setIsOpen: setIsOpen, title: chartBuilderTitle || 'Add to dashboard',
|
|
191
229
|
// For isHorizontalView, use full viewport size minus 80px for padding,
|
|
192
230
|
// otherwise use the default layout method of the modal (contents).
|
|
193
|
-
width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: _jsx(ChartBuilder, { report:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
231
|
+
width: isHorizontalView ? modalWidth : undefined, height: isHorizontalView ? modalHeight : undefined, children: _jsx(ChartBuilder, { report: report, rows: report.rows, columns: report.columns, query: report.queryString, pivot: report.pivot, isOpen: isOpen, isComparison: dateFilter?.comparisonRange, isLoading: isLoading, setIsOpen: setIsOpen, showTableFormatOptions: isAdmin, showDateFieldOptions: isAdmin, showAccessControlOptions: isAdmin, showDashboardDropdown: isAdmin, destinationDashboard: destinationDashboard, onAddToDashboardComplete: onAddToDashboardComplete, dateRange: dateRange, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, HeaderComponent: HeaderComponent, SubHeaderComponent: SubHeaderComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, DeleteButtonComponent: DeleteButtonComponent, CardComponent: CardComponent, ModalComponent: ModalComponent, isHorizontalView: isHorizontalView, PopoverComponent: PopoverComponent, TableComponent: TableComponent, ChartBuilderInputRowContainer: ChartBuilderInputRowContainer, ChartBuilderInputColumnContainer: ChartBuilderInputColumnContainer, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, ErrorMessageComponent: ErrorMessageComponent, LoadingComponent: LoadingComponent, onDelete: onDelete, title: chartBuilderTitle, buttonLabel: chartBuilderButtonLabel, organizationName: organizationName, hideSubmitButton: hideSubmitButton, hideDeleteButton: hideDeleteButton, FormContainer: ChartBuilderFormContainer, onPageChange: onPageChange, onSortChange: onSortChange, rowCount: rowCount, onClickChartElement: onClickChartElement, pivotData: report.pivotColumns
|
|
232
|
+
? {
|
|
233
|
+
rows: report.pivotRows || [],
|
|
234
|
+
columns: report.pivotColumns,
|
|
235
|
+
}
|
|
236
|
+
: undefined }) }) }));
|
|
197
237
|
}
|
package/dist/esm/Context.d.ts
CHANGED
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare const DateFilterContext: React.Context<any>;
|
|
3
2
|
export declare const SchemaContext: React.Context<any>;
|
|
4
3
|
export declare const CustomFieldContext: React.Context<any>;
|
|
5
|
-
export declare const ColumnsContext: React.Context<any>;
|
|
6
|
-
export declare const RowsContext: React.Context<any>;
|
|
7
|
-
export declare const SelectedSidebarIndexContext: React.Context<any>;
|
|
8
|
-
export declare const HistoryContext: React.Context<any>;
|
|
9
|
-
export declare const SavedQueriesContext: React.Context<any>;
|
|
10
|
-
export declare const SaveQueryModalStatusContext: React.Context<any>;
|
|
11
|
-
export declare const EditorQueryContext: React.Context<any>;
|
|
12
4
|
export declare const ThemeContext: React.Context<any>;
|
|
13
5
|
export declare const ClientContext: React.Context<any>;
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const ActiveVisualizationContext: React.Context<any>;
|
|
16
|
-
export declare const QueryResultsLoadingContext: React.Context<any>;
|
|
17
|
-
export declare const EditVisualizationModalVisibleContext: React.Context<any>;
|
|
18
|
-
export declare const ReportBuilderQueryContext: React.Context<any>;
|
|
19
|
-
export declare const SavedReportsQueryContext: React.Context<any>;
|
|
6
|
+
export declare const DashboardDataContext: React.Context<any>;
|
|
20
7
|
export declare const DashboardContext: React.Context<any>;
|
|
21
8
|
export declare const DashboardFiltersContext: React.Context<any>;
|
|
22
9
|
export declare const ReportFiltersContext: React.Context<any>;
|
|
23
|
-
export declare const ChartDateFiltersContext: React.Context<any>;
|
|
24
|
-
export declare const useChartDateFilters: () => {
|
|
25
|
-
getChartDateFilterById: (id: string) => any;
|
|
26
|
-
setChartDateFilter: (id: string, dateFilter: any) => void;
|
|
27
|
-
};
|
|
28
10
|
export declare const ContextProvider: ({ children, initialTheme, publicKey, environment, authToken, customerId, userId, queryEndpoint, queryHeaders, withCredentials, }: any) => import("react/jsx-runtime").JSX.Element | null;
|
|
29
11
|
//# sourceMappingURL=Context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../src/Context.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../src/Context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAK9E,eAAO,MAAM,aAAa,oBAAwC,CAAC;AACnE,eAAO,MAAM,kBAAkB,oBAAwC,CAAC;AACxE,eAAO,MAAM,YAAY,oBAA0C,CAAC;AACpE,eAAO,MAAM,aAAa,oBAA0C,CAAC;AACrE,eAAO,MAAM,oBAAoB,oBAAwC,CAAC;AAC1E,eAAO,MAAM,gBAAgB,oBAAwC,CAAC;AACtE,eAAO,MAAM,uBAAuB,oBAAwC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,oBAAwC,CAAC;AAmF1E,eAAO,MAAM,eAAe,qIAWzB,GAAG,mDAwLL,CAAC"}
|
package/dist/esm/Context.js
CHANGED
|
@@ -1,55 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, createContext, useEffect, useReducer
|
|
2
|
+
import { useState, createContext, useEffect, useReducer } from 'react';
|
|
3
3
|
import { getCustomFieldInfo } from './utils/schema';
|
|
4
4
|
const dummySetter = () => { };
|
|
5
|
-
export const DateFilterContext = createContext([[], dummySetter]);
|
|
6
5
|
export const SchemaContext = createContext([[], dummySetter]);
|
|
7
6
|
export const CustomFieldContext = createContext([[], dummySetter]);
|
|
8
|
-
export const ColumnsContext = createContext([null, dummySetter]);
|
|
9
|
-
export const RowsContext = createContext([null, dummySetter]);
|
|
10
|
-
export const SelectedSidebarIndexContext = createContext([0, dummySetter]);
|
|
11
|
-
export const HistoryContext = createContext([[], dummySetter]);
|
|
12
|
-
export const SavedQueriesContext = createContext([[], dummySetter]);
|
|
13
|
-
export const SaveQueryModalStatusContext = createContext([
|
|
14
|
-
'HIDDEN',
|
|
15
|
-
dummySetter,
|
|
16
|
-
]);
|
|
17
|
-
export const EditorQueryContext = createContext(['', dummySetter]);
|
|
18
7
|
export const ThemeContext = createContext([null, dummySetter]);
|
|
19
8
|
export const ClientContext = createContext([null, dummySetter]);
|
|
20
|
-
export const
|
|
21
|
-
false,
|
|
22
|
-
dummySetter,
|
|
23
|
-
]);
|
|
24
|
-
export const ActiveVisualizationContext = createContext([
|
|
25
|
-
null,
|
|
26
|
-
dummySetter,
|
|
27
|
-
]);
|
|
28
|
-
export const QueryResultsLoadingContext = createContext([
|
|
29
|
-
false,
|
|
30
|
-
dummySetter,
|
|
31
|
-
]);
|
|
32
|
-
export const EditVisualizationModalVisibleContext = createContext([
|
|
33
|
-
false,
|
|
34
|
-
dummySetter,
|
|
35
|
-
]);
|
|
36
|
-
export const ReportBuilderQueryContext = createContext(['', dummySetter]);
|
|
37
|
-
export const SavedReportsQueryContext = createContext(['', dummySetter]);
|
|
9
|
+
export const DashboardDataContext = createContext([{}, dummySetter]);
|
|
38
10
|
export const DashboardContext = createContext([{}, dummySetter]);
|
|
39
11
|
export const DashboardFiltersContext = createContext([[], dummySetter]);
|
|
40
12
|
export const ReportFiltersContext = createContext([{}, dummySetter]);
|
|
41
|
-
export const ChartDateFiltersContext = createContext([{}, dummySetter]);
|
|
42
|
-
export const useChartDateFilters = () => {
|
|
43
|
-
const { chartDateFilters, setChartDateFilters } = useContext(ChartDateFiltersContext);
|
|
44
|
-
const getChartDateFilterById = (id) => chartDateFilters[id];
|
|
45
|
-
const setChartDateFilter = (id, dateFilter) => {
|
|
46
|
-
setChartDateFilters((prev) => ({ ...prev, [id]: dateFilter }));
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
49
|
-
getChartDateFilterById,
|
|
50
|
-
setChartDateFilter,
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
13
|
const dashboardReducer = (state, action) => {
|
|
54
14
|
switch (action.type) {
|
|
55
15
|
case 'UPDATE_DASHBOARD_ITEM':
|
|
@@ -71,6 +31,27 @@ const dashboardReducer = (state, action) => {
|
|
|
71
31
|
return state;
|
|
72
32
|
}
|
|
73
33
|
};
|
|
34
|
+
const dashboardDataReducer = (state, action) => {
|
|
35
|
+
switch (action.type) {
|
|
36
|
+
case 'UPDATE_DASHBOARD':
|
|
37
|
+
return {
|
|
38
|
+
...state,
|
|
39
|
+
[action.id]: {
|
|
40
|
+
...state[action.id],
|
|
41
|
+
...action.data,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
case 'ADD_DASHBOARD':
|
|
45
|
+
return {
|
|
46
|
+
...state,
|
|
47
|
+
[action.id]: action.data,
|
|
48
|
+
};
|
|
49
|
+
case 'CLEAR_DASHBOARD':
|
|
50
|
+
return {};
|
|
51
|
+
default:
|
|
52
|
+
return state;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
74
55
|
const reportFiltersReducer = (state, action) => {
|
|
75
56
|
switch (action.type) {
|
|
76
57
|
case 'UPDATE_REPORT_FILTER':
|
|
@@ -105,23 +86,10 @@ const dashboardFiltersReducer = (state, action) => {
|
|
|
105
86
|
export const ContextProvider = ({ children, initialTheme, publicKey, environment, authToken, customerId, userId, queryEndpoint, queryHeaders, withCredentials, }) => {
|
|
106
87
|
const [client, setClient] = useState(null);
|
|
107
88
|
const [theme, setTheme] = useState(null);
|
|
108
|
-
const [columns, setColumns] = useState(null);
|
|
109
|
-
const [rows, setRows] = useState(null);
|
|
110
89
|
const [schema, setSchema] = useState([]);
|
|
111
90
|
const [customFields, setCustomFields] = useState(null);
|
|
112
|
-
const [selectedSidebarIndex, setSelectedSidebarIndex] = useState(0);
|
|
113
|
-
const [history, setHistory] = useState([]);
|
|
114
|
-
const [savedQueries, setSavedQueries] = useState([]);
|
|
115
|
-
// REPORT_BUILDER, SQL_EDITOR, HIDDEN
|
|
116
|
-
const [saveQueryModalStatus, setSaveQueryModalStatus] = useState('HIDDEN');
|
|
117
|
-
const [editorQuery, setEditorQuery] = useState('');
|
|
118
|
-
const [savedReportsQuery, setSavedReportsQuery] = useState('');
|
|
119
|
-
const [reportBuilderQuery, setReportBuilderQuery] = useState('');
|
|
120
|
-
const [createVisualizationModalVisible, setCreateVisualizationModalVisible] = useState(false);
|
|
121
|
-
const [activeVisualization, setActiveVisualization] = useState(null);
|
|
122
|
-
const [queryResultsLoading, setQueryResultsLoading] = useState(false);
|
|
123
|
-
const [editVisualizationModalVisible, setEditVisualizationModalVisible] = useState(false);
|
|
124
91
|
const [dashboard, dispatch] = useReducer(dashboardReducer, {});
|
|
92
|
+
const [dashboardData, dashboardDataDispatch] = useReducer(dashboardDataReducer, {});
|
|
125
93
|
const [dashboardFilters, dashboardFiltersDispatch] = useReducer(dashboardFiltersReducer, []);
|
|
126
94
|
const [reportFilters, reportFiltersDispatch] = useReducer(reportFiltersReducer, {});
|
|
127
95
|
const customFieldHelper = async (client) => {
|
|
@@ -242,32 +210,14 @@ export const ContextProvider = ({ children, initialTheme, publicKey, environment
|
|
|
242
210
|
dispatch({ type: 'CLEAR_DASHBOARD' });
|
|
243
211
|
}
|
|
244
212
|
}, [customerId, environment]);
|
|
245
|
-
if (!theme
|
|
213
|
+
if (!theme) {
|
|
246
214
|
return null;
|
|
247
215
|
}
|
|
248
|
-
return (_jsx(ClientContext.Provider, { value: [client, setClient], children: _jsx(ThemeContext.Provider, { value: [theme, setTheme], children: _jsx(SchemaContext.Provider, { value: [schema, setSchema], children: _jsx(CustomFieldContext.Provider, { value: [customFields, setCustomFields], children: _jsx(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
queryResultsLoading,
|
|
256
|
-
setQueryResultsLoading,
|
|
257
|
-
], children: _jsx(EditVisualizationModalVisibleContext.Provider, { value: [
|
|
258
|
-
editVisualizationModalVisible,
|
|
259
|
-
setEditVisualizationModalVisible,
|
|
260
|
-
], children: _jsx(ReportBuilderQueryContext.Provider, { value: [
|
|
261
|
-
reportBuilderQuery,
|
|
262
|
-
setReportBuilderQuery,
|
|
263
|
-
], children: _jsx(SavedReportsQueryContext.Provider, { value: [
|
|
264
|
-
savedReportsQuery,
|
|
265
|
-
setSavedReportsQuery,
|
|
266
|
-
], children: _jsx(DashboardContext.Provider, { value: { dashboard, dispatch }, children: _jsx(DashboardFiltersContext.Provider, { value: {
|
|
267
|
-
dashboardFilters,
|
|
268
|
-
dashboardFiltersDispatch,
|
|
269
|
-
}, children: _jsx(ReportFiltersContext.Provider, { value: {
|
|
270
|
-
reportFilters,
|
|
271
|
-
reportFiltersDispatch,
|
|
272
|
-
}, children: children }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
|
|
216
|
+
return (_jsx(ClientContext.Provider, { value: [client, setClient], children: _jsx(ThemeContext.Provider, { value: [theme, setTheme], children: _jsx(SchemaContext.Provider, { value: [schema, setSchema], children: _jsx(CustomFieldContext.Provider, { value: [customFields, setCustomFields], children: _jsx(DashboardContext.Provider, { value: { dashboard, dispatch }, children: _jsx(DashboardDataContext.Provider, { value: { dashboardData, dashboardDataDispatch }, children: _jsx(DashboardFiltersContext.Provider, { value: {
|
|
217
|
+
dashboardFilters,
|
|
218
|
+
dashboardFiltersDispatch,
|
|
219
|
+
}, children: _jsx(ReportFiltersContext.Provider, { value: {
|
|
220
|
+
reportFilters,
|
|
221
|
+
reportFiltersDispatch,
|
|
222
|
+
}, children: children }) }) }) }) }) }) }) }));
|
|
273
223
|
};
|
package/dist/esm/Dashboard.d.ts
CHANGED
|
@@ -131,6 +131,10 @@ export interface QuillReportInternal extends QuillReport {
|
|
|
131
131
|
/** The label to use for this yAxis. */
|
|
132
132
|
label: string;
|
|
133
133
|
}[];
|
|
134
|
+
/** Table row count */
|
|
135
|
+
rowCount?: number;
|
|
136
|
+
/** An array of queries that are used to construct the unprocessed report */
|
|
137
|
+
itemQuery?: string[];
|
|
134
138
|
}
|
|
135
139
|
/**
|
|
136
140
|
* Props for the Quill Dashboard component.
|
|
@@ -159,11 +163,12 @@ export interface DashboardProps {
|
|
|
159
163
|
onClickChartElement?: (data: any) => void;
|
|
160
164
|
}) => JSX.Element;
|
|
161
165
|
/** A component that wraps a dashboard item for 'table' chart types. */
|
|
162
|
-
TableComponent?: ({ report, onClick, isLoading, error, onPageChange, onSortChange, }: {
|
|
166
|
+
TableComponent?: ({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }: {
|
|
163
167
|
report: QuillReport;
|
|
164
168
|
onClick?: (report: QuillReport) => void;
|
|
165
169
|
isLoading?: boolean;
|
|
166
170
|
error?: string;
|
|
171
|
+
rowCount?: number;
|
|
167
172
|
onPageChange?: (page: {
|
|
168
173
|
currentPage: number;
|
|
169
174
|
rowsPerPage: number;
|