@quillsql/react 2.12.38 → 2.12.40
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/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +2 -2
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +2 -0
- package/dist/cjs/Dashboard.d.ts +35 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +72 -72
- package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/ChartComponent.js +1 -0
- package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts +12 -0
- package/dist/cjs/components/Dashboard/DashboardTemplate.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/DashboardTemplate.js +69 -0
- package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts +4 -0
- package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/TemplateChartComponent.js +23 -0
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts +4 -0
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/TemplateMetricComponent.js +23 -0
- package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts +15 -0
- package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/TemplateTableComponent.js +23 -0
- package/dist/cjs/components/Dashboard/util.d.ts +6 -0
- package/dist/cjs/components/Dashboard/util.d.ts.map +1 -0
- package/dist/cjs/components/Dashboard/util.js +85 -0
- package/dist/cjs/components/UiComponents.d.ts +1 -23
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +67 -25
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +7 -5
- package/dist/cjs/models/Report.d.ts +4 -0
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/constants.d.ts +1 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +2 -0
- package/dist/cjs/utils/dates.d.ts +1 -1
- package/dist/cjs/utils/filterProcessing.d.ts +1 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +5 -2
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +5 -2
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +2 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +2 -2
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +2 -0
- package/dist/esm/Dashboard.d.ts +35 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +73 -73
- package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/ChartComponent.js +1 -0
- package/dist/esm/components/Dashboard/DashboardTemplate.d.ts +12 -0
- package/dist/esm/components/Dashboard/DashboardTemplate.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/DashboardTemplate.js +63 -0
- package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts +4 -0
- package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/TemplateChartComponent.js +17 -0
- package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts +4 -0
- package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/TemplateMetricComponent.js +17 -0
- package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts +15 -0
- package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/TemplateTableComponent.js +17 -0
- package/dist/esm/components/Dashboard/util.d.ts +6 -0
- package/dist/esm/components/Dashboard/util.d.ts.map +1 -0
- package/dist/esm/components/Dashboard/util.js +80 -0
- package/dist/esm/components/UiComponents.d.ts +1 -23
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +65 -23
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +7 -5
- package/dist/esm/models/Report.d.ts +4 -0
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +2 -0
- package/dist/esm/utils/dates.d.ts +1 -1
- package/dist/esm/utils/filterProcessing.d.ts +1 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +5 -2
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +5 -2
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +2 -1
- package/package.json +1 -1
package/dist/esm/Dashboard.d.ts
CHANGED
|
@@ -65,6 +65,36 @@ export interface DashboardProps {
|
|
|
65
65
|
direction: string;
|
|
66
66
|
}) => void;
|
|
67
67
|
}) => JSX.Element;
|
|
68
|
+
/** A component (to be used in a template) that wraps a dashboard item for 'metric' chart types. */
|
|
69
|
+
TemplateMetricComponent?: ({ report, onClick, isLoading, error, }: {
|
|
70
|
+
report: QuillReport;
|
|
71
|
+
onClick?: (report: QuillReport) => void;
|
|
72
|
+
isLoading?: boolean;
|
|
73
|
+
error?: string;
|
|
74
|
+
}) => JSX.Element;
|
|
75
|
+
/** A component (to be used in a template) that wraps a dashboard item for non-table, non-metric chart types. */
|
|
76
|
+
TemplateChartComponent?: ({ report, onClick, isLoading, error, dateBucket, children, onClickChartElement, }: {
|
|
77
|
+
report: QuillReport;
|
|
78
|
+
onClick?: (report: QuillReport) => void;
|
|
79
|
+
isLoading?: boolean;
|
|
80
|
+
error?: string;
|
|
81
|
+
children?: ReactNode;
|
|
82
|
+
dateBucket?: string;
|
|
83
|
+
onClickChartElement?: (data: any) => void;
|
|
84
|
+
}) => JSX.Element;
|
|
85
|
+
/** A component (to be used in a template) that wraps a dashboard item for 'table' chart types. */
|
|
86
|
+
TemplateTableComponent?: ({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }: {
|
|
87
|
+
report: QuillReport;
|
|
88
|
+
onClick?: (report: QuillReport) => void;
|
|
89
|
+
isLoading?: boolean;
|
|
90
|
+
error?: string;
|
|
91
|
+
rowCount?: number;
|
|
92
|
+
onPageChange?: (page: number) => void;
|
|
93
|
+
onSortChange?: (sort: {
|
|
94
|
+
field: string;
|
|
95
|
+
direction: string;
|
|
96
|
+
}) => void;
|
|
97
|
+
}) => JSX.Element;
|
|
68
98
|
/** A select component. */
|
|
69
99
|
SelectComponent?: ({ label, value, options, onChange, width, }: {
|
|
70
100
|
value: string;
|
|
@@ -108,8 +138,8 @@ export interface DashboardProps {
|
|
|
108
138
|
filterLabel: string;
|
|
109
139
|
onClickDelete: (e: React.MouseEvent<HTMLElement>) => void;
|
|
110
140
|
}) => JSX.Element;
|
|
111
|
-
/** A modal
|
|
112
|
-
|
|
141
|
+
/** A modal component */
|
|
142
|
+
ModalComponent?: (props: {
|
|
113
143
|
children: ReactNode;
|
|
114
144
|
isOpen: boolean;
|
|
115
145
|
title: string;
|
|
@@ -243,6 +273,8 @@ export interface DashboardProps {
|
|
|
243
273
|
};
|
|
244
274
|
/** Flag for displaying admin errors */
|
|
245
275
|
hideAdminErrors?: boolean;
|
|
276
|
+
/** Template dashboard */
|
|
277
|
+
templateDashboardName?: string;
|
|
246
278
|
}
|
|
247
279
|
/**
|
|
248
280
|
* ### Quill Dashboard
|
|
@@ -275,5 +307,5 @@ export interface DashboardProps {
|
|
|
275
307
|
* ### API Reference
|
|
276
308
|
* @see https://docs.quillsql.com/components/dashboard
|
|
277
309
|
*/
|
|
278
|
-
export default function Dashboard({ name, hidden, SelectComponent, MultiSelectComponent,
|
|
310
|
+
export default function Dashboard({ name, hidden, SelectComponent, MultiSelectComponent, ModalComponent, ButtonComponent, SecondaryButtonComponent, FilterTagComponent, PopoverComponent, TextInputComponent, EmptyDashboardComponent, DateRangePickerComponent, MetricComponent, ChartComponent, TableComponent, TemplateMetricComponent, TemplateChartComponent, TemplateTableComponent, DashboardSectionComponent, DashboardSectionContainerComponent, FilterContainerComponent, DashboardLoadingComponent, ErrorComponent, onClickReport, onChangeLoading, hideFilters, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, containerStyle, className, chartContainerStyle, filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors, templateDashboardName, }: DashboardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
279
311
|
//# sourceMappingURL=Dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/Dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAIZ,aAAa,EACb,SAAS,EACT,WAAW,EACZ,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/Dashboard.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/Dashboard.js
CHANGED
|
@@ -9,11 +9,12 @@ import DashboardSectionContainer from './components/Dashboard/DashboardSectionCo
|
|
|
9
9
|
import QuillMetricComponent from './components/Dashboard/MetricComponent';
|
|
10
10
|
import QuillTableComponent from './components/Dashboard/TableComponent';
|
|
11
11
|
import QuillChartComponent from './components/Dashboard/ChartComponent';
|
|
12
|
+
import QuillTemplateChartComponent from './components/Dashboard/TemplateChartComponent';
|
|
12
13
|
import DashboardSection from './components/Dashboard/DashboardSection';
|
|
13
14
|
import { styleToProps } from './utils/styles';
|
|
14
15
|
import { QuillDateRangePicker } from './DateRangePicker/QuillDateRangePicker';
|
|
15
16
|
import DataLoader, { ChartDataLoader, } from './components/Dashboard/DataLoader';
|
|
16
|
-
import { QuillEmptyDashboardComponent, QuillFilterContainerComponent, QuillLoadingDashboardComponent,
|
|
17
|
+
import { QuillEmptyDashboardComponent, QuillFilterContainerComponent, QuillLoadingDashboardComponent, QuillModalComponent, MemoizedButton, MemoizedSecondaryButton, QuillTextInput, MemoizedPopover, QuillErrorMessageComponent, } from './components/UiComponents';
|
|
17
18
|
import { DashboardFilter } from './components/Dashboard/DashboardFilter';
|
|
18
19
|
import { BoolOperator, FieldTypes, NullOperator, NumberOperator, StringOperator, } from './models/Filter';
|
|
19
20
|
import { QuillMultiSelectComponentWithCombo } from './components/QuillMultiSelectWithCombo';
|
|
@@ -26,6 +27,9 @@ import { filterSentence, getType } from './utils/filterProcessing';
|
|
|
26
27
|
import { QuillChartErrorWithAction } from './components/Chart/ChartError';
|
|
27
28
|
import { FilterPopoverWrapper, QuillFilterPopover, } from './components/ReportBuilder/ui';
|
|
28
29
|
import FilterModal from './components/ReportBuilder/FilterModal';
|
|
30
|
+
import QuillTemplateMetricComponent from './components/Dashboard/TemplateMetricComponent';
|
|
31
|
+
import QuillTemplateTableComponent from './components/Dashboard/TemplateTableComponent';
|
|
32
|
+
import QuillDashboardTemplate from './components/Dashboard/DashboardTemplate';
|
|
29
33
|
const defaultChartContainerStyles = {
|
|
30
34
|
display: 'flex',
|
|
31
35
|
width: '100%',
|
|
@@ -63,7 +67,7 @@ const defaultChartContainerStyles = {
|
|
|
63
67
|
* ### API Reference
|
|
64
68
|
* @see https://docs.quillsql.com/components/dashboard
|
|
65
69
|
*/
|
|
66
|
-
export default function Dashboard({ name, hidden = false, SelectComponent = QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectComponentWithCombo,
|
|
70
|
+
export default function Dashboard({ name, hidden = false, SelectComponent = QuillSelectComponentWithCombo, MultiSelectComponent = QuillMultiSelectComponentWithCombo, ModalComponent = QuillModalComponent, ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, FilterTagComponent = QuillFilterPopover, PopoverComponent = MemoizedPopover, TextInputComponent = QuillTextInput, EmptyDashboardComponent = QuillEmptyDashboardComponent, DateRangePickerComponent = QuillDateRangePicker, MetricComponent = QuillMetricComponent, ChartComponent = QuillChartComponent, TableComponent = QuillTableComponent, TemplateMetricComponent = QuillTemplateMetricComponent, TemplateChartComponent = QuillTemplateChartComponent, TemplateTableComponent = QuillTemplateTableComponent, DashboardSectionComponent = DashboardSection, DashboardSectionContainerComponent = DashboardSectionContainer, FilterContainerComponent = QuillFilterContainerComponent, DashboardLoadingComponent = QuillLoadingDashboardComponent, ErrorComponent = QuillChartErrorWithAction, onClickReport, onChangeLoading, hideFilters, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, comparisonLineStyle = 'solid', containerStyle, className, chartContainerStyle = defaultChartContainerStyles, filters, onClickChartElement, dateBucket, additionalProcessing, hideAdminErrors = true, templateDashboardName, }) {
|
|
67
71
|
const [dashboard] = useContext(DashboardContext);
|
|
68
72
|
const { isLoading: isDataLoading, data, reload, } = useDashboard(name);
|
|
69
73
|
const [dashboardSections, setDashboardSections] = useState(null);
|
|
@@ -85,8 +89,12 @@ export default function Dashboard({ name, hidden = false, SelectComponent = Quil
|
|
|
85
89
|
const [filterListIsOpen, setFilterListIsOpen] = useState(false);
|
|
86
90
|
const [filterListAddFilterPopoverIsOpen, setFilterListAddFilterPopoverIsOpen,] = useState(false);
|
|
87
91
|
const [uniqueCounter, setUniqueCounter] = useState(0);
|
|
88
|
-
const
|
|
89
|
-
|
|
92
|
+
const userFilters = appliedFilters
|
|
93
|
+
.map((filter, index) => {
|
|
94
|
+
return { filter, index };
|
|
95
|
+
})
|
|
96
|
+
.filter((filter) => filter.filter.isUserFilter);
|
|
97
|
+
const adminFilters = appliedFilters.filter((filter) => !filter.isUserFilter);
|
|
90
98
|
const customOperatorOptions = {
|
|
91
99
|
[FieldTypes.Numeric]: [
|
|
92
100
|
NumberOperator.EqualTo,
|
|
@@ -159,12 +167,6 @@ export default function Dashboard({ name, hidden = false, SelectComponent = Quil
|
|
|
159
167
|
};
|
|
160
168
|
fetchData();
|
|
161
169
|
}, [referencedTables]);
|
|
162
|
-
useEffect(() => {
|
|
163
|
-
setUserFilters([...appliedFilters.filter((filter) => filter.isUserFilter)]);
|
|
164
|
-
setAdminFilters([
|
|
165
|
-
...appliedFilters.filter((filter) => !filter.isUserFilter),
|
|
166
|
-
]);
|
|
167
|
-
}, [appliedFilters]);
|
|
168
170
|
const getUniqueStringValues = async (columns, tableName) => {
|
|
169
171
|
const convertedStringColumns = columns
|
|
170
172
|
.filter((column) => {
|
|
@@ -548,80 +550,78 @@ export default function Dashboard({ name, hidden = false, SelectComponent = Quil
|
|
|
548
550
|
const tables = (section) => dashboardSections[section]
|
|
549
551
|
.filter(({ chartType }) => chartType === 'table')
|
|
550
552
|
.sort(sortByOrdering);
|
|
551
|
-
if (hidden || isLoading) {
|
|
553
|
+
if (hidden || isLoading || !dashboardSections) {
|
|
552
554
|
return (_jsx(DashboardLoadingComponent, { containerStyle: containerStyle, chartContainerStyle: chartContainerStyle }));
|
|
553
555
|
}
|
|
554
|
-
if (
|
|
556
|
+
if (Object.keys(dashboardSections).length == 0) {
|
|
555
557
|
if (initialLoad || isLoading)
|
|
556
558
|
return null;
|
|
557
559
|
return _jsx(EmptyDashboardComponent, {});
|
|
558
560
|
}
|
|
559
|
-
return (_jsxs("div", { className: className, ...styleToProps(containerStyle), children: [
|
|
561
|
+
return (_jsxs("div", { className: className, ...styleToProps(containerStyle), children: [data &&
|
|
562
|
+
data.customFiltersEnabled &&
|
|
563
|
+
filterSchemaIsLoaded &&
|
|
560
564
|
!hideAdminErrors &&
|
|
561
565
|
!hideFilters &&
|
|
566
|
+
data &&
|
|
567
|
+
data.customFiltersEnabled &&
|
|
562
568
|
filterSchema &&
|
|
563
|
-
filterSchema.columns.length === 0 && (_jsx("div", { style: { marginBottom: 10 }, children: _jsx(QuillErrorMessageComponent, { errorMessage: "Warning: No custom filter options because there are no common views among the charts in the dashboard" }) })), !hideFilters && (_jsxs(FilterContainerComponent, { children: [adminFilters.map((filter, index) => (_jsx(DashboardFilter, { filter: filter, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))), _jsxs("div", { style: {
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
display: 'flex',
|
|
576
|
-
flexDirection: 'column',
|
|
577
|
-
alignItems: 'start',
|
|
578
|
-
}, children: [userFilters.map((filter, index) => (_jsx(FilterPopoverWrapper, { schema: filterSchema, filter: {
|
|
579
|
-
name: filter.name,
|
|
580
|
-
type: filter.type,
|
|
581
|
-
field: filter.field,
|
|
582
|
-
operator: filter.operator,
|
|
583
|
-
value: filter.value,
|
|
584
|
-
}, filterLabel: filter ? filterSentence(filter) : '', index: index, fieldValuesMap: fieldValuesMap, customOperatorOptions: customOperatorOptions, FilterTagComponent: FilterTagComponent, FilterModal: FilterModal, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (newFilter) => {
|
|
585
|
-
const updatedFilter = getUserFilter(newFilter, filter._id, filter);
|
|
586
|
-
const updateIndex = appliedFilters.findIndex((val) => {
|
|
587
|
-
return val._id === filter._id;
|
|
588
|
-
});
|
|
589
|
-
dashboardFiltersDispatch({
|
|
590
|
-
type: 'UPDATE_DASHBOARD_FILTER',
|
|
591
|
-
id: updatedFilter._id,
|
|
592
|
-
data: updateFilter,
|
|
593
|
-
});
|
|
594
|
-
setAppliedFilters([
|
|
595
|
-
...appliedFilters.slice(0, updateIndex),
|
|
596
|
-
updatedFilter,
|
|
597
|
-
...appliedFilters.slice(updateIndex + 1),
|
|
598
|
-
]);
|
|
599
|
-
}, handleFilterDelete: () => {
|
|
600
|
-
const deleteIndex = appliedFilters.findIndex((val) => {
|
|
601
|
-
return val._id === filter._id;
|
|
602
|
-
});
|
|
603
|
-
dashboardFiltersDispatch({
|
|
604
|
-
type: 'DELETE_DASHBOARD_FILTER',
|
|
605
|
-
id: appliedFilters[deleteIndex]._id,
|
|
606
|
-
});
|
|
607
|
-
setAppliedFilters([
|
|
608
|
-
...appliedFilters.slice(0, deleteIndex),
|
|
609
|
-
...appliedFilters.slice(deleteIndex + 1),
|
|
610
|
-
]);
|
|
611
|
-
}, containerStyle: { width: 300, marginBottom: 10 } }, `userFilter_${index}`))), _jsxs("div", { style: {
|
|
569
|
+
filterSchema.columns.length === 0 && (_jsx("div", { style: { marginBottom: 10 }, children: _jsx(QuillErrorMessageComponent, { errorMessage: "Warning: No custom filter options because there are no common views among the charts in the dashboard" }) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center' }, children: [!hideFilters && (_jsxs(FilterContainerComponent, { children: [adminFilters.map((filter, index) => (_jsx(DashboardFilter, { filter: filter, onChangeFilter: updateFilter, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))), _jsxs("div", { style: {
|
|
570
|
+
display: 'flex',
|
|
571
|
+
flexDirection: 'column',
|
|
572
|
+
}, children: [data && data.customFiltersEnabled && (_jsx(SecondaryButtonComponent, { onClick: () => {
|
|
573
|
+
if (fieldValuesIsLoaded) {
|
|
574
|
+
setAddFilterPopoverIsOpen(true);
|
|
575
|
+
setFilterListIsOpen(false);
|
|
576
|
+
}
|
|
577
|
+
}, label: `Add Filter` })), _jsx(PopoverComponent, { isOpen: addFilterPopoverIsOpen, setIsOpen: setAddFilterPopoverIsOpen, popoverTitle: "Add Filter", popoverChildren: _jsx(FilterModal, { schema: filterSchema, fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
|
|
578
|
+
setAddFilterPopoverIsOpen(false);
|
|
579
|
+
updateUserFilter(filter, appliedFilters.length);
|
|
580
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] }), userFilters.length > 0 && (_jsx(ModalComponent, { triggerLabel: `Filters${userFilters.length > 0 ? ` (${userFilters.length})` : ''}`, isOpen: filterListIsOpen, setIsOpen: setFilterListIsOpen, title: "Filters", children: _jsxs("div", { style: {
|
|
612
581
|
display: 'flex',
|
|
613
582
|
flexDirection: 'column',
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
583
|
+
alignItems: 'start',
|
|
584
|
+
}, children: [userFilters.map(({ filter, index }) => (_jsx(FilterPopoverWrapper, { schema: filterSchema, filter: {
|
|
585
|
+
name: filter.name,
|
|
586
|
+
type: filter.type,
|
|
587
|
+
field: filter.field,
|
|
588
|
+
operator: filter.operator,
|
|
589
|
+
value: filter.value,
|
|
590
|
+
}, filterLabel: filter ? filterSentence(filter) : '', index: index, fieldValuesMap: fieldValuesMap, customOperatorOptions: customOperatorOptions, FilterTagComponent: FilterTagComponent, FilterModal: FilterModal, ButtonComponent: ButtonComponent, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, TextInputComponent: TextInputComponent, MultiSelectComponent: MultiSelectComponent, handleFilterSave: (newFilter) => {
|
|
591
|
+
const updatedFilter = getUserFilter(newFilter, filter._id, filter);
|
|
592
|
+
dashboardFiltersDispatch({
|
|
593
|
+
type: 'UPDATE_DASHBOARD_FILTER',
|
|
594
|
+
id: updatedFilter._id,
|
|
595
|
+
data: updateFilter,
|
|
596
|
+
});
|
|
597
|
+
setAppliedFilters([
|
|
598
|
+
...appliedFilters.slice(0, index),
|
|
599
|
+
updatedFilter,
|
|
600
|
+
...appliedFilters.slice(index + 1),
|
|
601
|
+
]);
|
|
602
|
+
}, handleFilterDelete: () => {
|
|
603
|
+
dashboardFiltersDispatch({
|
|
604
|
+
type: 'DELETE_DASHBOARD_FILTER',
|
|
605
|
+
id: appliedFilters[index]._id,
|
|
606
|
+
});
|
|
607
|
+
setAppliedFilters([
|
|
608
|
+
...appliedFilters.slice(0, index),
|
|
609
|
+
...appliedFilters.slice(index + 1),
|
|
610
|
+
]);
|
|
611
|
+
}, containerStyle: { width: 300, marginBottom: 10 } }, `userFilter_${index}_${filter ? filterSentence(filter) : ''}`))), _jsxs("div", { style: {
|
|
612
|
+
display: 'flex',
|
|
613
|
+
flexDirection: 'column',
|
|
614
|
+
}, children: [_jsx(SecondaryButtonComponent, { onClick: () => {
|
|
615
|
+
if (fieldValuesIsLoaded) {
|
|
616
|
+
setFilterListAddFilterPopoverIsOpen(true);
|
|
617
|
+
}
|
|
618
|
+
}, label: `Add Filter` }), _jsx(PopoverComponent, { isOpen: filterListAddFilterPopoverIsOpen, setIsOpen: setFilterListAddFilterPopoverIsOpen, popoverTitle: "Add Filter", popoverChildren: _jsx(FilterModal, { schema: filterSchema, fieldValuesMap: fieldValuesMap, onSubmitFilter: (filter) => {
|
|
619
|
+
setFilterListAddFilterPopoverIsOpen(false);
|
|
620
|
+
setFilterListIsOpen(false);
|
|
621
|
+
const id = uniqueCounter;
|
|
622
|
+
setUniqueCounter(uniqueCounter + 1);
|
|
623
|
+
updateUserFilter(filter, id);
|
|
624
|
+
}, onDeleteFilter: () => { }, ButtonComponent: ButtonComponent, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, TextInputComponent: TextInputComponent }), containerStyle: { position: 'relative', top: 10 } })] })] }) }))] })), templateDashboardName && (_jsx(QuillDashboardTemplate, { name: templateDashboardName, originDashboard: name, client: client, appliedFilters: appliedFilters, ModalComponent: ModalComponent, TemplateChartComponent: TemplateChartComponent, TemplateMetricComponent: TemplateMetricComponent, TemplateTableComponent: TemplateTableComponent, ButtonComponent: SecondaryButtonComponent }))] }), Object.keys(dashboardSections)
|
|
625
625
|
.sort(function (a, b) {
|
|
626
626
|
return a.length - b.length;
|
|
627
627
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/ChartComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"ChartComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/ChartComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAuGhC"}
|
|
@@ -6,6 +6,7 @@ export default function QuillChartComponent({ report, onClick, children, isLoadi
|
|
|
6
6
|
return (_jsx("div", { onClick: () => onClick && onClick(report), style: {
|
|
7
7
|
cursor: 'pointer',
|
|
8
8
|
boxSizing: 'content-box',
|
|
9
|
+
height: '100%',
|
|
9
10
|
minHeight: 400,
|
|
10
11
|
borderRadius: 8,
|
|
11
12
|
}, children: _jsx("div", { style: {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export default function QuillDashboardTemplate({ name, originDashboard, client, appliedFilters, ModalComponent, TemplateChartComponent, TemplateMetricComponent, TemplateTableComponent, ButtonComponent, }: {
|
|
2
|
+
name: string;
|
|
3
|
+
originDashboard: string;
|
|
4
|
+
client: any;
|
|
5
|
+
appliedFilters: any;
|
|
6
|
+
ModalComponent: any;
|
|
7
|
+
TemplateChartComponent: any;
|
|
8
|
+
TemplateMetricComponent: any;
|
|
9
|
+
TemplateTableComponent: any;
|
|
10
|
+
ButtonComponent: any;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
//# sourceMappingURL=DashboardTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardTemplate.tsx"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,IAAI,EACJ,eAAe,EACf,MAAM,EACN,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,GAChB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC;IACpB,sBAAsB,EAAE,GAAG,CAAC;IAC5B,uBAAuB,EAAE,GAAG,CAAC;IAC7B,sBAAsB,EAAE,GAAG,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC;CACtB,kDAyGA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState } from 'react';
|
|
3
|
+
import { addTemplatesToDashboard, validateTemplatesAgainstFilters, } from './util';
|
|
4
|
+
import { useDashboard } from '../../hooks/useDashboard';
|
|
5
|
+
import { DashboardDataContext } from '../../Context';
|
|
6
|
+
import Dashboard from '../../Dashboard';
|
|
7
|
+
export default function QuillDashboardTemplate({ name, originDashboard, client, appliedFilters, ModalComponent, TemplateChartComponent, TemplateMetricComponent, TemplateTableComponent, ButtonComponent, }) {
|
|
8
|
+
const { isLoading, data } = useDashboard(name ?? '');
|
|
9
|
+
const { dashboardData, dashboardDataDispatch } = useContext(DashboardDataContext);
|
|
10
|
+
const [addItemModalIsOpen, setAddItemModalIsOpen] = useState(false);
|
|
11
|
+
const [selectedTemplates, setSelectedTemplates] = useState([]);
|
|
12
|
+
const [selectingTemplate, setSelectingTemplate] = useState(false);
|
|
13
|
+
const [submittingTemplate, setSubmittingTemplate] = useState(false);
|
|
14
|
+
const templateSections = data?.sections;
|
|
15
|
+
const onSubmitTemplates = async () => {
|
|
16
|
+
setSubmittingTemplate(true);
|
|
17
|
+
// validate that filters don't conflict
|
|
18
|
+
const { valid, error } = validateTemplatesAgainstFilters(appliedFilters, selectedTemplates);
|
|
19
|
+
if (!valid) {
|
|
20
|
+
alert(error);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
setAddItemModalIsOpen(false);
|
|
24
|
+
const newTemplates = selectedTemplates;
|
|
25
|
+
setSelectedTemplates([]);
|
|
26
|
+
const newData = await addTemplatesToDashboard(originDashboard, newTemplates, client, dashboardData);
|
|
27
|
+
console.log('updating context with', newData);
|
|
28
|
+
if (newData) {
|
|
29
|
+
// Dispatch the action to update the dashboard state
|
|
30
|
+
dashboardDataDispatch({
|
|
31
|
+
type: 'UPDATE_DASHBOARD',
|
|
32
|
+
id: originDashboard,
|
|
33
|
+
data: newData,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
setSubmittingTemplate(false);
|
|
38
|
+
};
|
|
39
|
+
return data ? (_jsxs(ModalComponent, { isOpen: addItemModalIsOpen, setIsOpen: setAddItemModalIsOpen, triggerLabel: "Add Items To Dashboard", title: "Add Items To Dashboard", children: [_jsx("div", { style: {
|
|
40
|
+
overflow: 'scroll',
|
|
41
|
+
}, children: _jsx(Dashboard, { name: name, ChartComponent: TemplateChartComponent, TableComponent: TemplateTableComponent, MetricComponent: TemplateMetricComponent, onClickReport: (report) => {
|
|
42
|
+
if (!selectingTemplate) {
|
|
43
|
+
setSelectingTemplate(true);
|
|
44
|
+
if (selectedTemplates.some((template) => template._id === report._id)) {
|
|
45
|
+
setSelectedTemplates(selectedTemplates.filter((template) => template._id !== report._id));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
setSelectedTemplates([...selectedTemplates, report]);
|
|
49
|
+
}
|
|
50
|
+
setSelectingTemplate(false);
|
|
51
|
+
}
|
|
52
|
+
}, hideFilters: true }) }), _jsx("div", { style: {
|
|
53
|
+
display: 'flex',
|
|
54
|
+
justifyContent: 'flex-end',
|
|
55
|
+
flexDirection: 'row',
|
|
56
|
+
marginTop: '20px',
|
|
57
|
+
width: '100%',
|
|
58
|
+
}, children: _jsx(ButtonComponent, { disabled: isLoading || !templateSections, label: 'Add to dashboard', onClick: () => {
|
|
59
|
+
if (!submittingTemplate) {
|
|
60
|
+
onSubmitTemplates();
|
|
61
|
+
}
|
|
62
|
+
} }) })] })) : null;
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateChartComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TemplateChartComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,EAClD,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAyBhC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import QuillChartComponent from './ChartComponent';
|
|
4
|
+
export default function QuillTemplateChartComponent({ report, onClick, children, isLoading, }) {
|
|
5
|
+
const [isSelected, setIsSelected] = useState(false);
|
|
6
|
+
return (_jsx("div", { onClick: () => {
|
|
7
|
+
if (onClick) {
|
|
8
|
+
setIsSelected(!isSelected);
|
|
9
|
+
onClick(report);
|
|
10
|
+
}
|
|
11
|
+
}, style: {
|
|
12
|
+
backgroundColor: isSelected ? 'lightgrey' : 'white',
|
|
13
|
+
borderRadius: '15px',
|
|
14
|
+
padding: '10px',
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
}, children: _jsx(QuillChartComponent, { report: report, children: children, isLoading: isLoading }) }));
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateMetricComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TemplateMetricComponent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAAC,EACnD,MAAM,EACN,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAyBhC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import QuillMetricComponent from './MetricComponent';
|
|
4
|
+
export default function QuillTemplateMetricComponent({ report, onClick, children, isLoading, }) {
|
|
5
|
+
const [isSelected, setIsSelected] = useState(false);
|
|
6
|
+
return (_jsx("div", { onClick: () => {
|
|
7
|
+
if (onClick) {
|
|
8
|
+
setIsSelected(!isSelected);
|
|
9
|
+
onClick(report);
|
|
10
|
+
}
|
|
11
|
+
}, style: {
|
|
12
|
+
backgroundColor: isSelected ? 'lightgrey' : 'white',
|
|
13
|
+
borderRadius: '15px',
|
|
14
|
+
padding: '10px',
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
}, children: _jsx(QuillMetricComponent, { report: report, children: children, isLoading: isLoading }) }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { QuillReport } from '../../models/Report';
|
|
3
|
+
export default function QuillTemplateTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }: {
|
|
4
|
+
report: QuillReport;
|
|
5
|
+
onClick?: (report: QuillReport) => void;
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
rowCount?: number;
|
|
9
|
+
onPageChange?: (page: number) => void;
|
|
10
|
+
onSortChange?: (sort: {
|
|
11
|
+
field: string;
|
|
12
|
+
direction: string;
|
|
13
|
+
}) => void;
|
|
14
|
+
}): JSX.Element;
|
|
15
|
+
//# sourceMappingURL=TemplateTableComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateTableComponent.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/TemplateTableComponent.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,EAClD,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,CA4Bd"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import QuillTableComponent from './TableComponent';
|
|
4
|
+
export default function QuillTemplateTableComponent({ report, onClick, isLoading, error, rowCount, onPageChange, onSortChange, }) {
|
|
5
|
+
const [isSelected, setIsSelected] = useState(false);
|
|
6
|
+
return (_jsx("div", { onClick: () => {
|
|
7
|
+
if (onClick) {
|
|
8
|
+
setIsSelected(!isSelected);
|
|
9
|
+
onClick(report);
|
|
10
|
+
}
|
|
11
|
+
}, style: {
|
|
12
|
+
backgroundColor: isSelected ? 'lightgrey' : 'white',
|
|
13
|
+
borderRadius: '15px',
|
|
14
|
+
padding: '10px',
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
}, children: _jsx(QuillTableComponent, { report: report, isLoading: isLoading, error: error, rowCount: rowCount, onPageChange: onPageChange, onSortChange: onSortChange }) }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function validateTemplatesAgainstFilters(filters: any[], templates: any[]): {
|
|
2
|
+
valid: boolean;
|
|
3
|
+
error: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function addTemplatesToDashboard(name: any, newTemplates: any[], client: any, dashboardData: any): Promise<any>;
|
|
6
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/util.ts"],"names":[],"mappings":"AAEA,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,GAAG,EAAE,EACd,SAAS,EAAE,GAAG,EAAE,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiCnC;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,GAAG,EAAE,EACnB,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,GAAG,GACjB,OAAO,CAAC,GAAG,CAAC,CAiDd"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { getData } from '../../utils/dataFetcher';
|
|
2
|
+
export function validateTemplatesAgainstFilters(filters, templates) {
|
|
3
|
+
let error = '';
|
|
4
|
+
filters.every((filter) => {
|
|
5
|
+
if (filter.filterType === 'date_range') {
|
|
6
|
+
templates.every((template) => {
|
|
7
|
+
if (!template.dateField?.field) {
|
|
8
|
+
error = `Please remove the date filter or unselect ${template.name}`;
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return true;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
templates.every((template) => {
|
|
16
|
+
if (!template.referencedTables?.includes(filter.table)) {
|
|
17
|
+
error = `Please remove filters on ${filter.table} or unselect ${template.name}`;
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (error !== '') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
if (error === '') {
|
|
31
|
+
return { valid: true, error };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return { valid: false, error };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function addTemplatesToDashboard(name, newTemplates, client, dashboardData) {
|
|
38
|
+
try {
|
|
39
|
+
const { publicKey, customerId } = client;
|
|
40
|
+
const hostedBody = {
|
|
41
|
+
metadata: {
|
|
42
|
+
dashboardName: name,
|
|
43
|
+
task: 'add-from-template',
|
|
44
|
+
clientId: publicKey,
|
|
45
|
+
orgId: customerId || '*',
|
|
46
|
+
templateReportIds: newTemplates.map((template) => template._id),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const resp = await getData(client, ``, // no cloud fallback
|
|
50
|
+
'omit', hostedBody, null);
|
|
51
|
+
if (resp.success && resp.newItems && resp.newItems.length > 0) {
|
|
52
|
+
const newData = {
|
|
53
|
+
newQueries: {
|
|
54
|
+
...(dashboardData[name]?.newQueries ?? []),
|
|
55
|
+
...resp.newItems.reduce((acc, item) => {
|
|
56
|
+
acc[item._id] = item;
|
|
57
|
+
return acc;
|
|
58
|
+
}, {}),
|
|
59
|
+
},
|
|
60
|
+
sections: {
|
|
61
|
+
...dashboardData[name].sections,
|
|
62
|
+
'': [
|
|
63
|
+
...(dashboardData[name]?.sections?.[''] ?? []),
|
|
64
|
+
...resp.newItems.map((item) => ({
|
|
65
|
+
...item,
|
|
66
|
+
id: item._id,
|
|
67
|
+
})),
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
return newData;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Error while updating dashboard:', error);
|
|
79
|
+
}
|
|
80
|
+
}
|