@quillsql/react 2.11.7 → 2.11.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/BarList.d.ts +1 -0
- package/dist/cjs/BarList.d.ts.map +1 -1
- package/dist/cjs/BarList.js +55 -46
- package/dist/cjs/Chart.d.ts +4 -0
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +25 -19
- package/dist/cjs/ChartBuilder.d.ts +5 -3
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +236 -196
- package/dist/cjs/ChartEditor.d.ts +3 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +17 -2
- package/dist/cjs/Dashboard.d.ts +2 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +4 -4
- package/dist/cjs/PieChart.d.ts +1 -1
- package/dist/cjs/PieChart.d.ts.map +1 -1
- package/dist/cjs/PieChart.js +95 -357
- package/dist/cjs/ReportBuilder.d.ts +11 -3
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +224 -99
- package/dist/cjs/SQLEditor.d.ts +4 -2
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +9 -6
- package/dist/cjs/components/Chart/BarChart.d.ts +2 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +9 -5
- package/dist/cjs/components/Chart/ChartError.js +1 -1
- package/dist/cjs/components/Chart/ChartSkeleton.js +2 -2
- 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 +10 -3
- 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 -1
- package/dist/cjs/components/QuillTable.js +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -2
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +3 -0
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +62 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +3 -2
- package/dist/cjs/components/ReportBuilder/ui.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +11 -3
- package/dist/cjs/components/UiComponents.d.ts +12 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +7 -6
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +47 -56
- package/dist/cjs/utils/aggregate.js +2 -2
- package/dist/cjs/utils/color.d.ts +25 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +164 -1
- package/dist/esm/BarList.d.ts +1 -0
- package/dist/esm/BarList.d.ts.map +1 -1
- package/dist/esm/BarList.js +55 -46
- package/dist/esm/Chart.d.ts +4 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +25 -19
- package/dist/esm/ChartBuilder.d.ts +5 -3
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +234 -195
- package/dist/esm/ChartEditor.d.ts +3 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +19 -4
- package/dist/esm/Dashboard.d.ts +2 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +4 -4
- package/dist/esm/PieChart.d.ts +1 -1
- package/dist/esm/PieChart.d.ts.map +1 -1
- package/dist/esm/PieChart.js +93 -334
- package/dist/esm/ReportBuilder.d.ts +11 -3
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +229 -104
- package/dist/esm/SQLEditor.d.ts +4 -2
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +9 -6
- package/dist/esm/components/Chart/BarChart.d.ts +2 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +9 -5
- package/dist/esm/components/Chart/ChartError.js +1 -1
- package/dist/esm/components/Chart/ChartSkeleton.js +2 -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 +10 -3
- 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 -1
- package/dist/esm/components/QuillTable.js +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -2
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +3 -0
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +57 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +3 -2
- package/dist/esm/components/ReportBuilder/ui.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +10 -3
- package/dist/esm/components/UiComponents.d.ts +12 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +7 -6
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +47 -56
- package/dist/esm/utils/aggregate.js +2 -2
- package/dist/esm/utils/color.d.ts +25 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +160 -0
- package/package.json +1 -1
package/dist/esm/ChartBuilder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
|
|
3
3
|
import { ClientContext, DashboardContext, DashboardFiltersContext, SchemaContext, ThemeContext, } from './Context';
|
|
4
4
|
import { getData, getDataFromCloud } from './utils/dataFetcher';
|
|
@@ -7,7 +7,6 @@ import { PivotModal, generatePivotTable, isDateField, } from './internals/Report
|
|
|
7
7
|
import { PivotCard } from './internals/ReportBuilder/PivotList';
|
|
8
8
|
import Chart from './Chart';
|
|
9
9
|
import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, } from './components/UiComponents';
|
|
10
|
-
import Banner from './components/Banner';
|
|
11
10
|
import { mergeComparisonRange } from './utils/merge';
|
|
12
11
|
import { QuillSelectComponent } from './components/QuillSelect';
|
|
13
12
|
import { removeDoubleQuotes, snakeCaseToTitleCase, } from './utils/textProcessing';
|
|
@@ -82,6 +81,7 @@ export const dateFormatOptions = [
|
|
|
82
81
|
'MMM_dd_yyyy',
|
|
83
82
|
'MMM_dd_hh:mm_ap_pm',
|
|
84
83
|
'hh_ap_pm',
|
|
84
|
+
'date',
|
|
85
85
|
];
|
|
86
86
|
const NUMBER_OPTIONS = [
|
|
87
87
|
{ value: 'whole_number', label: 'whole number' },
|
|
@@ -103,17 +103,22 @@ const formatOptions = [
|
|
|
103
103
|
{ value: 'percent', label: 'percent' },
|
|
104
104
|
{ value: 'string', label: 'string' },
|
|
105
105
|
];
|
|
106
|
-
export
|
|
106
|
+
export function ChartBuilderWithModal(props) {
|
|
107
107
|
const [theme] = useContext(ThemeContext);
|
|
108
|
-
|
|
108
|
+
const Modal = props.Modal ?? MemoizedModal;
|
|
109
|
+
return (_jsx(Modal, { isOpen: props.isOpen, setIsOpen: props.setIsOpen, onClose: () => props.setIsOpen(false), title: props.title || 'Add to dashboard', style: props.horizontalView
|
|
110
|
+
? {
|
|
111
|
+
width: 'calc(100vw - 80px)',
|
|
112
|
+
height: 'calc(100vh - 80px)',
|
|
113
|
+
}
|
|
114
|
+
: {}, theme: theme, children: _jsx(ChartBuilder, { ...props }) }));
|
|
109
115
|
}
|
|
110
|
-
function
|
|
116
|
+
export default function ChartBuilder({ TextInput = QuillTextInput, Select = QuillSelectComponent, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, Header = MemoizedHeader, Label = MemoizedLabel, DeleteButton = MemoizedDeleteButton, Text = MemoizedText, Popover = MemoizedPopover, isOpen, isEditMode = false, horizontalView = false, pivot, setIsOpen, rows, columns, query, queryNoDateColumn, dateRange: dr, formHeaderStyle, formLabelStyle, showTableFormatOptions = false, showDateFieldOptions = false, showAccessControlOptions = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, fields: fieldsProp, dashboardItem = undefined, recommendedPivots: rp = [], createdPivots: cp = [], destinationDashboard, dateColumn, buttonLabel, organizationName, }) {
|
|
111
117
|
const dateRange = dr || [null, null, null];
|
|
112
118
|
const [client] = useContext(ClientContext);
|
|
113
119
|
const [theme] = useContext(ThemeContext);
|
|
114
120
|
const [schema, setSchema] = useContext(SchemaContext);
|
|
115
121
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
116
|
-
const [divWidth, setDivWidth] = useState(0);
|
|
117
122
|
const { dispatch } = useContext(DashboardContext);
|
|
118
123
|
const fields = fieldsProp?.map((field) => ({
|
|
119
124
|
field: field.name,
|
|
@@ -125,29 +130,6 @@ function ChartBuilderForm({ TextInput = QuillTextInput, Select = QuillSelectComp
|
|
|
125
130
|
const deleteRef = useRef(null);
|
|
126
131
|
const modalPadding = 20;
|
|
127
132
|
const deleteButtonMargin = -13;
|
|
128
|
-
useEffect(() => {
|
|
129
|
-
const calculateWidth = () => {
|
|
130
|
-
return ((parentRef.current?.offsetWidth || 0) -
|
|
131
|
-
(deleteRef?.current
|
|
132
|
-
? deleteRef?.current.offsetWidth - deleteButtonMargin
|
|
133
|
-
: 0));
|
|
134
|
-
};
|
|
135
|
-
// Measure the width of the div and update state
|
|
136
|
-
if (parentRef.current) {
|
|
137
|
-
setDivWidth(calculateWidth());
|
|
138
|
-
}
|
|
139
|
-
// Optional: Handle window resize
|
|
140
|
-
const handleResize = () => {
|
|
141
|
-
if (parentRef.current) {
|
|
142
|
-
setDivWidth(calculateWidth());
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
window.addEventListener('resize', handleResize);
|
|
146
|
-
// Cleanup listener
|
|
147
|
-
return () => {
|
|
148
|
-
window.removeEventListener('resize', handleResize);
|
|
149
|
-
};
|
|
150
|
-
}, []);
|
|
151
133
|
// get schema
|
|
152
134
|
useEffect(() => {
|
|
153
135
|
let isSubscribed = true;
|
|
@@ -233,7 +215,7 @@ function ChartBuilderForm({ TextInput = QuillTextInput, Select = QuillSelectComp
|
|
|
233
215
|
const result = await getReferencedTables(client, query, schema);
|
|
234
216
|
setDateFieldOptions(result);
|
|
235
217
|
setTableName(result[0]?.name);
|
|
236
|
-
if (!formData.dateField
|
|
218
|
+
if (!formData.dateField?.table) {
|
|
237
219
|
setFormData({
|
|
238
220
|
...formData,
|
|
239
221
|
dateField: {
|
|
@@ -247,7 +229,7 @@ function ChartBuilderForm({ TextInput = QuillTextInput, Select = QuillSelectComp
|
|
|
247
229
|
}
|
|
248
230
|
};
|
|
249
231
|
fetchReferencedTables();
|
|
250
|
-
}, [query
|
|
232
|
+
}, [query]);
|
|
251
233
|
const defaultDateField = {
|
|
252
234
|
table: dateFieldOptions[0]?.name,
|
|
253
235
|
field: dateFieldOptions[0]?.columns[0]?.name,
|
|
@@ -550,174 +532,231 @@ function ChartBuilderForm({ TextInput = QuillTextInput, Select = QuillSelectComp
|
|
|
550
532
|
if (!schema) {
|
|
551
533
|
return;
|
|
552
534
|
}
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
535
|
+
// if (horizontalView && !isEditMode) {
|
|
536
|
+
// console.log(horizontalView, isEditMode);
|
|
537
|
+
// return;
|
|
538
|
+
// }
|
|
539
|
+
return (_jsx("div", { style: { width: '100%', height: '100%', flexGrow: 1 }, children: _jsxs("div", { id: "quill-chart-modal", style: {
|
|
540
|
+
width: '100%',
|
|
541
|
+
height: '100%',
|
|
542
|
+
maxWidth: '100%',
|
|
543
|
+
display: 'flex',
|
|
544
|
+
padding: modalPadding,
|
|
545
|
+
gap: '20px',
|
|
546
|
+
flexDirection: horizontalView ? 'row' : 'column',
|
|
547
|
+
}, children: [_jsxs("div", { style: {
|
|
548
|
+
display: 'flex',
|
|
549
|
+
flexDirection: 'column',
|
|
550
|
+
gap: '20px',
|
|
551
|
+
...(horizontalView && {
|
|
552
|
+
flexGrow: 1,
|
|
553
|
+
maxWidth: !isOpen ? '100%' : 'calc(100% - 665px - 20px)', // width of left sidebar plus gap
|
|
554
|
+
}),
|
|
555
|
+
}, children: [(!horizontalView || formData.chartType !== 'table') && (_jsx(Chart, { colors: theme.chartColors, config: { ...formData, rows }, containerStyle: {
|
|
556
|
+
width: '100%',
|
|
557
|
+
height: 400,
|
|
558
|
+
...(horizontalView && { flexGrow: 1 }),
|
|
559
|
+
} })),
|
|
560
|
+
// Make sure to display non-pivoted table when using pivot chart
|
|
561
|
+
horizontalView && formData.chartType !== 'table' ? (_jsx(Chart, { config: {
|
|
562
|
+
...formData,
|
|
563
|
+
pivot: undefined,
|
|
564
|
+
chartType: 'table',
|
|
565
|
+
rows,
|
|
566
|
+
rowsPerPage: 20,
|
|
567
|
+
}, containerStyle: {
|
|
568
|
+
height: '100%',
|
|
569
|
+
width: '100%',
|
|
570
|
+
flexGrow: 1,
|
|
571
|
+
} })) : (horizontalView && (_jsx(Chart, { config: {
|
|
572
|
+
...formData,
|
|
573
|
+
chartType: 'table',
|
|
574
|
+
rows,
|
|
575
|
+
rowsPerPage: 20,
|
|
576
|
+
}, containerStyle: {
|
|
577
|
+
height: '100%',
|
|
578
|
+
width: '100%',
|
|
579
|
+
flexGrow: 1,
|
|
580
|
+
} })))] }), (isOpen || !horizontalView) && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
|
|
581
|
+
display: 'flex',
|
|
582
|
+
flexDirection: 'column',
|
|
583
|
+
height: '100%',
|
|
584
|
+
...(horizontalView && {
|
|
585
|
+
minWidth: 665,
|
|
586
|
+
maxWidth: 665,
|
|
587
|
+
width: 665,
|
|
588
|
+
gap: 20,
|
|
589
|
+
}),
|
|
590
|
+
}, children: [_jsxs("div", { style: { overflow: 'auto' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Name" }), _jsx(TextInput, { id: "chart-builder-name", value: formData.name, onChange: (e) => handleChange(e, 'name'), placeholder: "Name", theme: theme })] }), showDashboardDropdown && !destinationDashboard && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Dashboard" }), _jsx(Select, { value: formData.dashboardName || '', onChange: (e) => handleChange(e, 'dashboardName'), options: dashboardOptions.map((elem) => ({
|
|
591
|
+
label: elem.label,
|
|
592
|
+
value: elem.label,
|
|
593
|
+
})), theme: theme })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Chart type" }), _jsx(Select, { value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
|
|
594
|
+
// filter out metric for all pivots
|
|
595
|
+
// filter out bar and pie for row and column pivot
|
|
596
|
+
options: CHART_TYPES.filter((elem) => !((formData.pivot && elem === 'metric') ||
|
|
597
|
+
(formData.pivot &&
|
|
598
|
+
formData.pivot.columnField &&
|
|
599
|
+
(elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })), theme: theme })] })] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
600
|
+
display: 'flex',
|
|
601
|
+
flexDirection: 'column',
|
|
602
|
+
gap: 12,
|
|
603
|
+
marginTop: 6,
|
|
604
|
+
}, children: [_jsx(Header, { children: "Pivot" }), _jsxs("div", { style: { fontFamily: theme?.fontFamily }, children: [_jsx("div", { style: {
|
|
605
|
+
maxWidth: 200,
|
|
606
|
+
// marginTop: 6,
|
|
607
|
+
display: 'flex',
|
|
608
|
+
flexDirection: 'column',
|
|
609
|
+
}, 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: Select, ButtonComponent: Button, PopoverComponent: Popover, LabelComponent: Label, TextComponent: Text, HeaderComponent: Header, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: columns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot }) }), formData.pivot && (_jsx("div", { style: {
|
|
610
|
+
// width: 592,
|
|
611
|
+
paddingRight: 42,
|
|
612
|
+
maxWidth: 750,
|
|
613
|
+
}, children: _jsx(PivotCard, { pivotTable: {
|
|
614
|
+
pivot: formData.pivot,
|
|
615
|
+
rows: selectedPivotTable?.rows,
|
|
616
|
+
columns: selectedPivotTable?.columns,
|
|
617
|
+
}, theme: theme, index: 0, onSelectPivot: () => {
|
|
618
|
+
setIsEdittingPivot(true);
|
|
619
|
+
setShowPivotPopover(true);
|
|
620
|
+
setPivotRowField(formData.pivot?.rowField);
|
|
621
|
+
setPivotColumnField(formData.pivot?.columnField);
|
|
622
|
+
setPivotValueField(formData.pivot?.valueField);
|
|
623
|
+
setPivotAggregation(formData.pivot?.aggregationType);
|
|
624
|
+
setPivotPopUpTitle('Edit Pivot');
|
|
625
|
+
}, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: Button, HeaderComponent: Header, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: Label, TextComponent: Text }) }))] })] }), _jsx("br", {}), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
|
|
629
626
|
display: 'flex',
|
|
630
|
-
flexDirection: '
|
|
631
|
-
gap:
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
:
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
627
|
+
flexDirection: 'column',
|
|
628
|
+
gap: 6,
|
|
629
|
+
marginTop: 6,
|
|
630
|
+
}, children: _jsx(Header, { children: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsxs("div", { children: [_jsx(Label, { children: CHART_TO_LABELS[formData.chartType]?.xAxisLabel }), _jsxs("div", { style: {
|
|
631
|
+
display: 'flex',
|
|
632
|
+
flexDirection: 'row',
|
|
633
|
+
gap: 12,
|
|
634
|
+
}, children: [_jsx(Select, { value: formData.xAxisField, onChange: (e) => handleChange(e, 'xAxisField'), options: formData.pivot
|
|
635
|
+
? [
|
|
636
|
+
{
|
|
637
|
+
label: `Pivot Row (${formData.pivot.rowField})`,
|
|
638
|
+
value: formData.pivot.rowField,
|
|
639
|
+
},
|
|
640
|
+
]
|
|
641
|
+
: fieldOptions.map((elem) => ({
|
|
642
|
+
label: elem.field,
|
|
643
|
+
value: elem.field,
|
|
644
|
+
})), theme: theme }), _jsx(TextInput, { id: "chart-builder-x-axis-label", value: formData.pivot
|
|
645
|
+
? formData.pivot.rowField
|
|
646
|
+
: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e, 'xAxisLabel'), theme: theme }), _jsx(Select, { value: formData.pivot &&
|
|
647
|
+
isDateField(formData.pivot.rowFieldType)
|
|
648
|
+
? 'pivot_date'
|
|
649
|
+
: formData.xAxisFormat, onChange: (e) => handleChange(e, 'xAxisFormat'), options: formData.pivot &&
|
|
650
|
+
isDateField(formData.pivot.rowFieldType)
|
|
651
|
+
? [{ value: 'pivot_date', label: 'date' }]
|
|
652
|
+
: formatOptions, theme: theme })] }, 'xAxisField'), _jsx("br", {})] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(Label, { children: CHART_TO_LABELS[formData.chartType]?.yAxisLabel }), _jsx("div", { style: {
|
|
653
|
+
display: 'flex',
|
|
654
|
+
flexDirection: 'column',
|
|
655
|
+
gap: 10,
|
|
656
|
+
}, children: formData.yAxisFields.map((yAxisField, index) => (_jsxs("div", { style: {
|
|
657
|
+
display: 'flex',
|
|
658
|
+
flexDirection: 'row',
|
|
659
|
+
gap: 12,
|
|
660
|
+
}, children: [_jsx(Select, { value: formData.pivot
|
|
661
|
+
? formData.pivot.valueField
|
|
662
|
+
: yAxisField.field, onChange: (e) => handleChange(e, 'yAxisFields.field', index), theme: theme, options: formData.pivot
|
|
663
|
+
? [
|
|
664
|
+
{
|
|
665
|
+
label: `Pivot Column (${formData.pivot.valueField})`,
|
|
666
|
+
value: formData.pivot.valueField,
|
|
667
|
+
},
|
|
668
|
+
]
|
|
669
|
+
: fieldOptions
|
|
670
|
+
.filter((elem) => {
|
|
671
|
+
return numberFormatOptions.includes(columns.find((col) => col.field === elem.field)?.format || '');
|
|
672
|
+
})
|
|
673
|
+
.map((elem) => ({
|
|
674
|
+
label: elem.field,
|
|
675
|
+
value: elem.field,
|
|
676
|
+
})) }), _jsx(TextInput, { id: "chart-builder-y-axis-label", value: formData.pivot?.valueField || yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'yAxisFields.label', index), theme: theme }), _jsx(Select, { theme: theme, value: formData.pivot
|
|
677
|
+
? !!NUMBER_OPTIONS.find((option) => {
|
|
678
|
+
return (option.value === yAxisField.format);
|
|
679
|
+
})
|
|
680
|
+
? // @ts-ignore
|
|
681
|
+
NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
|
|
682
|
+
: 'whole_number'
|
|
683
|
+
: yAxisField.format, onChange: (e) => handleChange(e, 'yAxisFields.format', index), options: formData.pivot
|
|
684
|
+
? NUMBER_OPTIONS
|
|
685
|
+
: formatOptions }), formData.pivot === null && (_jsx("div", { ref: deleteRef, children: _jsx(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && (_jsxs(_Fragment, { children: [_jsx("br", {}), _jsx(SecondaryButton, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] }))] })), _jsx("br", {})] })), (showTableFormatOptions || formData.chartType === 'table') && (_jsxs("div", { children: [_jsxs("div", { style: {
|
|
686
|
+
display: 'flex',
|
|
687
|
+
flexDirection: 'column',
|
|
688
|
+
gap: 6,
|
|
689
|
+
marginTop: 6,
|
|
690
|
+
}, children: [_jsx(Header, { children: "Table" }), _jsx(Label, { children: "Columns" })] }), _jsx("div", { style: {
|
|
691
|
+
display: 'flex',
|
|
692
|
+
flexDirection: 'column',
|
|
693
|
+
gap: 10,
|
|
694
|
+
}, children: formData.pivot &&
|
|
695
|
+
selectedPivotTable &&
|
|
696
|
+
selectedPivotTable.columns &&
|
|
697
|
+
formData.chartType === 'table'
|
|
698
|
+
? // THIS CASE IF FOR PIVOT TABLES ONLY
|
|
699
|
+
selectedPivotTable.columns.map((column, index) => (_jsxs("div", { style: {
|
|
700
|
+
display: 'flex',
|
|
701
|
+
flexDirection: 'row',
|
|
702
|
+
gap: 12,
|
|
703
|
+
}, children: [_jsx(Select, { theme: theme, value: column.label, onChange: (e) => handleChange(e, 'columns.field', index), options: selectedPivotTable.columns.map((elem) => ({
|
|
704
|
+
label: elem.label,
|
|
705
|
+
value: elem.label,
|
|
706
|
+
})) }), _jsx(TextInput, { id: `chart-builder-column-label-${index}`, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index), theme: theme }), _jsx(Select, { theme: theme, value:
|
|
707
|
+
// The first index use rowField for the rest of them use value fields
|
|
708
|
+
formData.pivot &&
|
|
709
|
+
column.field === formData.pivot.rowField
|
|
710
|
+
? formData.pivot &&
|
|
711
|
+
isDateField(formData.pivot.rowFieldType)
|
|
712
|
+
? 'pivot_date'
|
|
713
|
+
: 'string'
|
|
714
|
+
: formData.pivot?.valueFieldType ||
|
|
715
|
+
'whole_number', onChange: (e) => handleChange(e, 'pivotColumn', index), options: formData.pivot && index === 0
|
|
716
|
+
? isDateField(formData.pivot.rowFieldType)
|
|
717
|
+
? [{ label: 'date', value: 'pivot_date' }]
|
|
718
|
+
: [{ label: 'string', value: 'string' }]
|
|
719
|
+
: [...NUMBER_OPTIONS] })] }, 'column' + index)))
|
|
720
|
+
: formData.columns.map((column, index) => (_jsxs("div", { style: {
|
|
721
|
+
display: 'flex',
|
|
722
|
+
flexDirection: 'row',
|
|
723
|
+
gap: 12,
|
|
724
|
+
}, children: [_jsx(Select, { theme: theme, value: column.field, onChange: (e) => handleChange(e, 'columns.field', index), options: fields.map((elem) => ({
|
|
725
|
+
label: elem.field,
|
|
726
|
+
value: elem.field,
|
|
727
|
+
})) }), _jsx(TextInput, { id: `chart-builder-column-label-${index}`, value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index), theme: theme }), _jsx(Select, { theme: theme, value: column.format, onChange: (e) => handleChange(e, 'columns.format', index), options: formatOptions }), _jsx("div", { ref: deleteRef, children: _jsx(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), _jsx("br", {}), _jsx(SecondaryButton, { onClick: () => handleAddField('columns'), label: "Add column +" }), _jsx("br", {}), _jsx("br", {})] })), showDateFieldOptions && formData.dateField && (_jsxs("div", { style: {
|
|
728
|
+
display: 'flex',
|
|
729
|
+
flexDirection: 'column',
|
|
730
|
+
gap: 6,
|
|
731
|
+
marginTop: 6,
|
|
732
|
+
}, children: [_jsx(Header, { children: "Date field" }), _jsxs("div", { style: {
|
|
666
733
|
display: 'flex',
|
|
667
734
|
flexDirection: 'row',
|
|
668
735
|
gap: 12,
|
|
669
|
-
}, children: [_jsx(Select, { theme: theme, value:
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
}, children: [_jsx(Header, { children: "Date field" }), _jsxs("div", { style: {
|
|
694
|
-
display: 'flex',
|
|
695
|
-
flexDirection: 'row',
|
|
696
|
-
gap: 12,
|
|
697
|
-
// lmao part 2
|
|
698
|
-
}, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Table" }), _jsx(Select, { theme: theme, value: formData.dateField.table, onChange: (e) => handleChange(e, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
|
|
699
|
-
label: elem.name,
|
|
700
|
-
value: elem.name,
|
|
701
|
-
})) })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Field" }), _jsx(Select, { theme: theme, value: removeDoubleQuotes(formData.dateField.field), onChange: (e) => handleChange(e, 'dateField.field'), options: dateFieldOptions
|
|
702
|
-
?.find((elem) => elem.name === formData.dateField.table)
|
|
703
|
-
?.columns?.map((elem) => ({
|
|
704
|
-
label: elem.name,
|
|
705
|
-
value: elem.name,
|
|
706
|
-
})) || [] })] })] }), _jsx("br", {})] })), showAccessControlOptions && (_jsxs("div", { style: {
|
|
707
|
-
display: 'flex',
|
|
708
|
-
flexDirection: 'column',
|
|
709
|
-
gap: 12,
|
|
710
|
-
marginTop: 6,
|
|
711
|
-
}, children: [_jsx(Header, { children: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme, organizationName: organizationName || 'This Organization' }), _jsx("br", {}), _jsx("br", {})] })), _jsxs("div", { style: {
|
|
712
|
-
display: 'flex',
|
|
713
|
-
flexDirection: 'row',
|
|
714
|
-
justifyContent: 'flex-end',
|
|
715
|
-
gap: 10,
|
|
716
|
-
}, children: [dashboardItem && (_jsx(SecondaryButton, { onClick: deleteChart, label: 'Delete' })), _jsx(Button, { onClick: editChart, label: buttonLabel
|
|
717
|
-
? buttonLabel
|
|
718
|
-
: dashboardItem
|
|
719
|
-
? 'Save changes'
|
|
720
|
-
: 'Add to dashboard' })] })] })] }));
|
|
736
|
+
}, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Table" }), _jsx(Select, { theme: theme, value: formData.dateField?.table, onChange: (e) => handleChange(e, 'dateField.table'), options: dateFieldOptions.map((elem) => ({
|
|
737
|
+
label: elem.name,
|
|
738
|
+
value: elem.name,
|
|
739
|
+
})) })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Field" }), _jsx(Select, { theme: theme, value: removeDoubleQuotes(formData.dateField?.field), onChange: (e) => handleChange(e, 'dateField.field'), options: dateFieldOptions
|
|
740
|
+
?.find((elem) => elem.name === formData.dateField?.table)
|
|
741
|
+
?.columns?.map((elem) => ({
|
|
742
|
+
label: elem.name,
|
|
743
|
+
value: elem.name,
|
|
744
|
+
})) || [] })] })] }), _jsx("br", {})] })), showAccessControlOptions && (_jsxs("div", { style: {
|
|
745
|
+
display: 'flex',
|
|
746
|
+
flexDirection: 'column',
|
|
747
|
+
gap: 12,
|
|
748
|
+
marginTop: 6,
|
|
749
|
+
}, children: [_jsx(Header, { children: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme, organizationName: organizationName || 'This Organization' })] }))] }), _jsxs("div", { style: {
|
|
750
|
+
display: 'flex',
|
|
751
|
+
flexDirection: 'row',
|
|
752
|
+
justifyContent: 'flex-end',
|
|
753
|
+
marginTop: 'auto',
|
|
754
|
+
gap: 10,
|
|
755
|
+
}, children: [!horizontalView && dashboardItem && (_jsx(SecondaryButton, { onClick: deleteChart, label: 'Delete' })), _jsx(Button, { onClick: editChart, label: buttonLabel
|
|
756
|
+
? buttonLabel
|
|
757
|
+
: dashboardItem
|
|
758
|
+
? 'Save changes'
|
|
759
|
+
: 'Add to dashboard' })] })] }))] }) }));
|
|
721
760
|
}
|
|
722
761
|
function SegmentedControl({ onChange, value, theme, organizationName, }) {
|
|
723
762
|
return (_jsxs("div", { style: {
|
|
@@ -7,6 +7,7 @@ interface ChartEditorProps {
|
|
|
7
7
|
isEditMode?: boolean;
|
|
8
8
|
chartBuilderTitle?: string;
|
|
9
9
|
chartBuilderButtonLabel?: string;
|
|
10
|
+
onAddToDashboardComplete?: () => void;
|
|
10
11
|
onDelete?: () => void;
|
|
11
12
|
setIsOpen: (isOpen: boolean) => void;
|
|
12
13
|
Select?: (props: SelectComponentProps) => JSX.Element;
|
|
@@ -21,7 +22,8 @@ interface ChartEditorProps {
|
|
|
21
22
|
Popover?: (props: PopoverComponentProps) => JSX.Element;
|
|
22
23
|
destinationDashboard?: string;
|
|
23
24
|
organizationName?: string;
|
|
25
|
+
horizontalView?: boolean;
|
|
24
26
|
}
|
|
25
|
-
export default function ChartEditor({ isOpen, chartId, isEditMode, admin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, organizationName, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export default function ChartEditor({ isOpen, chartId, isEditMode, admin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onAddToDashboardComplete, organizationName, horizontalView, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
26
28
|
export {};
|
|
27
29
|
//# sourceMappingURL=ChartEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"ChartEditor.d.ts","sourceRoot":"","sources":["../../src/ChartEditor.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAKnC,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC/D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,OAAO,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,GAAG,CAAC,OAAO,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,GAAG,CAAC,OAAO,CAAC;IACxD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAa,EACb,oBAAoB,EACpB,iBAAgC,EAChC,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,MAAM,EACN,eAAe,EACf,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,OAAO,GACR,EAAE,gBAAgB,2CA4LlB"}
|