@quillsql/react 2.8.9 → 2.9.0
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/AddToDashboardModal.js +181 -146
- package/dist/BarList.js +44 -36
- package/dist/BarList.js.map +1 -1
- package/dist/Chart.js +119 -87
- package/dist/Chart.js.map +1 -1
- package/dist/ChartBuilder.js +93 -83
- package/dist/ChartBuilder.js.map +1 -1
- package/dist/ChartEditor.js +21 -14
- package/dist/ChartEditor.js.map +1 -1
- package/dist/Context.js +57 -52
- package/dist/Dashboard.js +212 -179
- package/dist/Dashboard.js.map +1 -1
- package/dist/DateRangePicker/Calendar.js +46 -41
- package/dist/DateRangePicker/DateRangePicker.js +61 -32
- package/dist/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerButton.js +17 -14
- package/dist/DateRangePicker/dateRangePickerUtils.js +90 -76
- package/dist/DateRangePicker/index.js +9 -1
- package/dist/PieChart.js +70 -35
- package/dist/QuillProvider.js +7 -4
- package/dist/ReportBuilder.js +129 -120
- package/dist/SQLEditor.js +65 -56
- package/dist/SQLEditor.js.map +1 -1
- package/dist/Table.js +65 -60
- package/dist/Table.js.map +1 -1
- package/dist/TableChart.js +45 -17
- package/dist/TableChart.js.map +1 -1
- package/dist/assets/ArrowDownHeadIcon.js +6 -3
- package/dist/assets/ArrowDownHeadIcon.js.map +1 -1
- package/dist/assets/ArrowDownIcon.js +6 -3
- package/dist/assets/ArrowDownRightIcon.js +6 -3
- package/dist/assets/ArrowLeftHeadIcon.js +6 -3
- package/dist/assets/ArrowRightHeadIcon.js +6 -3
- package/dist/assets/ArrowRightIcon.js +6 -3
- package/dist/assets/ArrowUpHeadIcon.js +6 -3
- package/dist/assets/ArrowUpIcon.js +6 -3
- package/dist/assets/ArrowUpRightIcon.js +6 -3
- package/dist/assets/CalendarIcon.js +6 -3
- package/dist/assets/CalendarNormalIcon.js +6 -3
- package/dist/assets/DoubleArrowLeftHeadIcon.js +6 -3
- package/dist/assets/DoubleArrowRightHeadIcon.js +6 -3
- package/dist/assets/ExclamationFilledIcon.js +6 -3
- package/dist/assets/FilterIcon.js +6 -3
- package/dist/assets/LoadingSpinner.js +6 -3
- package/dist/assets/RefreshIcon.js +6 -3
- package/dist/assets/SearchIcon.js +6 -3
- package/dist/assets/UpLeftArrowsIcon.js +6 -3
- package/dist/assets/XCircleIcon.js +6 -3
- package/dist/assets/XIcon.js +6 -3
- package/dist/assets/index.js +49 -21
- package/dist/components/Banner/index.js +10 -6
- package/dist/components/Banner/index.js.map +1 -0
- package/dist/components/BigModal/BigModal.js +39 -13
- package/dist/components/Dropdown/Dropdown.js +53 -24
- package/dist/components/Dropdown/DropdownItem.js +35 -9
- package/dist/components/Dropdown/index.js +11 -2
- package/dist/components/Modal/Modal.js +39 -13
- package/dist/components/Modal/index.js +9 -1
- package/dist/components/QuillCard.js +13 -8
- package/dist/components/SqlTextEditor.js +11 -4
- package/dist/components/SqlTextEditor.js.map +1 -1
- package/dist/components/UiComponents.js +51 -37
- package/dist/components/UiComponents.js.map +1 -1
- package/dist/components/selectUtils.js +17 -6
- package/dist/contexts/BaseColorContext.js +6 -3
- package/dist/contexts/HoveredValueContext.js +6 -3
- package/dist/contexts/RootStylesContext.js +6 -3
- package/dist/contexts/SelectedValueContext.js +6 -3
- package/dist/contexts/index.js +15 -4
- package/dist/hooks/index.js +15 -4
- package/dist/hooks/useDashboard.js +15 -10
- package/dist/hooks/useInternalState.js +6 -3
- package/dist/hooks/useOnClickOutside.js +6 -3
- package/dist/hooks/useOnWindowResize.js +7 -4
- package/dist/hooks/useQuill.js +16 -11
- package/dist/hooks/useSelectOnKeyDown.js +7 -4
- package/dist/index.js +33 -13
- package/dist/internals/ReportBuilder/PivotList.js +20 -14
- package/dist/internals/ReportBuilder/PivotModal.js +92 -84
- package/dist/internals/ReportBuilder/PivotModal.js.map +1 -1
- package/dist/internals/ReportBuilder/PivotModal.spec.js +73 -70
- package/dist/lib/font.js +6 -2
- package/dist/lib/index.js +20 -3
- package/dist/lib/inputTypes.js +3 -1
- package/dist/lib/utils.js +19 -8
- package/dist/utils/aggregate.js +35 -28
- package/dist/utils/axisFormatter.js +24 -19
- package/dist/utils/axisFormatter.js.map +1 -0
- package/dist/utils/colorToHex.js +5 -1
- package/dist/utils/dataFetcher.js +8 -2
- package/dist/utils/downloadCSV.js +6 -1
- package/dist/utils/valueFormatter.js +24 -19
- package/dist/utils/valueFormatter.js.map +1 -0
- package/dist/utils/valueFormatterCSV.js +24 -19
- package/dist/utils/valueFormatterCSV.js.map +1 -0
- package/package.json +2 -1
package/dist/ChartBuilder.js
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.numberFormatOptions = exports.snakeCaseToTitleCase = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
8
|
// @ts-nocheck
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const Context_1 = require("./Context");
|
|
11
|
+
const dataFetcher_1 = require("./utils/dataFetcher");
|
|
12
|
+
const ReportBuilder_1 = require("./ReportBuilder");
|
|
13
|
+
const PivotModal_1 = require("./internals/ReportBuilder/PivotModal");
|
|
14
|
+
const PivotList_1 = require("./internals/ReportBuilder/PivotList");
|
|
15
|
+
const Chart_1 = __importDefault(require("./Chart"));
|
|
16
|
+
const UiComponents_1 = require("./components/UiComponents");
|
|
17
|
+
const Banner_1 = __importDefault(require("./components/Banner"));
|
|
12
18
|
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
13
|
-
|
|
19
|
+
function snakeCaseToTitleCase(str) {
|
|
14
20
|
if (!str) {
|
|
15
21
|
return str;
|
|
16
22
|
}
|
|
@@ -22,6 +28,7 @@ export function snakeCaseToTitleCase(str) {
|
|
|
22
28
|
: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
23
29
|
.join(' ');
|
|
24
30
|
}
|
|
31
|
+
exports.snakeCaseToTitleCase = snakeCaseToTitleCase;
|
|
25
32
|
const POSTGRES_DATE_TYPES = [
|
|
26
33
|
'timestamp',
|
|
27
34
|
'date',
|
|
@@ -33,7 +40,7 @@ async function getReferencedTables(client, sqlQuery, dbTables) {
|
|
|
33
40
|
// const parser = new Parser();
|
|
34
41
|
const tables = [];
|
|
35
42
|
const withAliases = [];
|
|
36
|
-
const resp = await getDataFromCloud(client, `astify`, { query: sqlQuery });
|
|
43
|
+
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, `astify`, { query: sqlQuery });
|
|
37
44
|
let ast = resp.ast;
|
|
38
45
|
ast = ast.length ? ast[0] : ast;
|
|
39
46
|
if (ast.with && ast.with.length) {
|
|
@@ -67,7 +74,7 @@ const AGGREGATION_TYPES = [
|
|
|
67
74
|
{ label: 'count', value: 'count' },
|
|
68
75
|
{ label: 'average', value: 'avg' },
|
|
69
76
|
];
|
|
70
|
-
|
|
77
|
+
exports.numberFormatOptions = [
|
|
71
78
|
'whole_number',
|
|
72
79
|
'one_decimal_place',
|
|
73
80
|
'two_decimal_places',
|
|
@@ -91,29 +98,30 @@ const formatOptions = [
|
|
|
91
98
|
{ value: 'percent', label: 'percent' },
|
|
92
99
|
{ value: 'string', label: 'string' },
|
|
93
100
|
];
|
|
94
|
-
|
|
95
|
-
const [theme] = useContext(ThemeContext);
|
|
96
|
-
return (
|
|
101
|
+
function ChartBuilder(props) {
|
|
102
|
+
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
103
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: props.Modal ? ((0, jsx_runtime_1.jsx)(props.Modal, { isOpen: props.isOpen, setIsOpen: props.setIsOpen, title: props.title || 'Add to dashboard', onClose: () => props.setIsOpen(false), theme: theme, children: (0, jsx_runtime_1.jsx)(ChartBuilderForm, { ...props }) })) : ((0, jsx_runtime_1.jsx)(UiComponents_1.MemoizedModal, { setIsOpen: props.setIsOpen, isOpen: props.isOpen, onClose: () => props.setIsOpen(false), title: props.title || 'Add to dashboard', theme: theme, children: (0, jsx_runtime_1.jsx)(ChartBuilderForm, { ...props }) })) }));
|
|
97
104
|
}
|
|
98
|
-
|
|
105
|
+
exports.default = ChartBuilder;
|
|
106
|
+
function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select = UiComponents_1.MemoizedSelect, Button = UiComponents_1.MemoizedButton, SecondaryButton = UiComponents_1.MemoizedSecondaryButton, Header = UiComponents_1.MemoizedHeader, Label = UiComponents_1.MemoizedLabel, DeleteButton = UiComponents_1.MemoizedDeleteButton, Text = UiComponents_1.MemoizedText, Modal = UiComponents_1.MemoizedModal, Popover = UiComponents_1.MemoizedPopover, isOpen, isEditMode, 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, }) {
|
|
99
107
|
const dateRange = dr || [null, null, null];
|
|
100
|
-
const [client] = useContext(ClientContext);
|
|
101
|
-
const [theme] = useContext(ThemeContext);
|
|
102
|
-
const [schema, setSchema] = useContext(SchemaContext);
|
|
103
|
-
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
104
|
-
const [divWidth, setDivWidth] = useState(0);
|
|
105
|
-
const { dispatch } = useContext(DashboardContext);
|
|
108
|
+
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
109
|
+
const [theme] = (0, react_1.useContext)(Context_1.ThemeContext);
|
|
110
|
+
const [schema, setSchema] = (0, react_1.useContext)(Context_1.SchemaContext);
|
|
111
|
+
const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
|
|
112
|
+
const [divWidth, setDivWidth] = (0, react_1.useState)(0);
|
|
113
|
+
const { dispatch } = (0, react_1.useContext)(Context_1.DashboardContext);
|
|
106
114
|
const fields = fieldsProp?.map((field) => ({
|
|
107
115
|
field: field.name,
|
|
108
|
-
type: getPostgresBasicType(field),
|
|
116
|
+
type: (0, ReportBuilder_1.getPostgresBasicType)(field),
|
|
109
117
|
format: field.format,
|
|
110
118
|
label: field.name,
|
|
111
119
|
})) || [];
|
|
112
|
-
const parentRef = useRef();
|
|
113
|
-
const deleteRef = useRef();
|
|
120
|
+
const parentRef = (0, react_1.useRef)();
|
|
121
|
+
const deleteRef = (0, react_1.useRef)();
|
|
114
122
|
const modalPadding = 20;
|
|
115
123
|
const deleteButtonMargin = -13;
|
|
116
|
-
useEffect(() => {
|
|
124
|
+
(0, react_1.useEffect)(() => {
|
|
117
125
|
const calculateWidth = () => {
|
|
118
126
|
return (parentRef.current.offsetWidth -
|
|
119
127
|
(deleteRef?.current
|
|
@@ -137,11 +145,11 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
137
145
|
};
|
|
138
146
|
}, []);
|
|
139
147
|
// get schema
|
|
140
|
-
useEffect(() => {
|
|
148
|
+
(0, react_1.useEffect)(() => {
|
|
141
149
|
let isSubscribed = true;
|
|
142
150
|
async function getSchema() {
|
|
143
151
|
if (!schema || !schema.length) {
|
|
144
|
-
const resp = await getDataFromCloud(client, `schema2/${client.publicKey}/`, null, 'GET');
|
|
152
|
+
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, `schema2/${client.publicKey}/`, null, 'GET');
|
|
145
153
|
if (isSubscribed) {
|
|
146
154
|
setSchema(resp.tables);
|
|
147
155
|
}
|
|
@@ -155,11 +163,11 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
155
163
|
};
|
|
156
164
|
}, [schema]);
|
|
157
165
|
// get dashboards
|
|
158
|
-
const [dashboardOptions, setDashboardOptions] = useState([]);
|
|
159
|
-
const [defaultDashboardName, setDefaultDashboardName] = useState(destinationDashboard ||
|
|
166
|
+
const [dashboardOptions, setDashboardOptions] = (0, react_1.useState)([]);
|
|
167
|
+
const [defaultDashboardName, setDefaultDashboardName] = (0, react_1.useState)(destinationDashboard ||
|
|
160
168
|
dashboardItem?.dashboardName ||
|
|
161
169
|
dashboardOptions[0]?.label);
|
|
162
|
-
useEffect(() => {
|
|
170
|
+
(0, react_1.useEffect)(() => {
|
|
163
171
|
if (!destinationDashboard &&
|
|
164
172
|
!dashboardItem &&
|
|
165
173
|
dashboardOptions &&
|
|
@@ -167,31 +175,31 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
167
175
|
setDefaultDashboardName(dashboardOptions[0]?.label);
|
|
168
176
|
}
|
|
169
177
|
}, [dashboardOptions]);
|
|
170
|
-
useEffect(() => {
|
|
178
|
+
(0, react_1.useEffect)(() => {
|
|
171
179
|
async function getDashNames() {
|
|
172
|
-
const resp = await getDataFromCloud(client, `dashnames/${client.publicKey}/`, null, 'GET');
|
|
180
|
+
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, `dashnames/${client.publicKey}/`, null, 'GET');
|
|
173
181
|
setDashboardOptions(resp.dashboardNames
|
|
174
182
|
.filter((elem) => elem !== null)
|
|
175
183
|
.map((key) => ({ label: key, value: key })));
|
|
176
184
|
}
|
|
177
185
|
getDashNames();
|
|
178
186
|
}, []);
|
|
179
|
-
const [showPivotPopover, setShowPivotPopover] = useState(false);
|
|
180
|
-
const [isEdittingPivot, setIsEdittingPivot] = useState(false);
|
|
181
|
-
const [selectedPivotIndex, setSelectedPivotIndex] = useState(-1);
|
|
182
|
-
const [tableName, setTableName] = useState(null);
|
|
187
|
+
const [showPivotPopover, setShowPivotPopover] = (0, react_1.useState)(false);
|
|
188
|
+
const [isEdittingPivot, setIsEdittingPivot] = (0, react_1.useState)(false);
|
|
189
|
+
const [selectedPivotIndex, setSelectedPivotIndex] = (0, react_1.useState)(-1);
|
|
190
|
+
const [tableName, setTableName] = (0, react_1.useState)(null);
|
|
183
191
|
const selectedTable = schema?.find((t) => t.displayName === tableName);
|
|
184
|
-
const [pivotPopUpTitle, setPivotPopUpTitle] = useState('Add Pivot');
|
|
185
|
-
const [createdPivots, setCreatedPivots] = useState(pivot ? [pivot] : dashboardItem?.pivot ? [dashboardItem.pivot] : cp);
|
|
186
|
-
const [recommendedPivots, setRecommendedPivots] = useState(rp);
|
|
187
|
-
const [pivotRowField, setPivotRowField] = useState(undefined);
|
|
188
|
-
const [pivotColumnField, setPivotColumnField] = useState(undefined);
|
|
189
|
-
const [pivotValueField, setPivotValueField] = useState(undefined);
|
|
190
|
-
const [pivotAggregation, setPivotAggregation] = useState(undefined);
|
|
192
|
+
const [pivotPopUpTitle, setPivotPopUpTitle] = (0, react_1.useState)('Add Pivot');
|
|
193
|
+
const [createdPivots, setCreatedPivots] = (0, react_1.useState)(pivot ? [pivot] : dashboardItem?.pivot ? [dashboardItem.pivot] : cp);
|
|
194
|
+
const [recommendedPivots, setRecommendedPivots] = (0, react_1.useState)(rp);
|
|
195
|
+
const [pivotRowField, setPivotRowField] = (0, react_1.useState)(undefined);
|
|
196
|
+
const [pivotColumnField, setPivotColumnField] = (0, react_1.useState)(undefined);
|
|
197
|
+
const [pivotValueField, setPivotValueField] = (0, react_1.useState)(undefined);
|
|
198
|
+
const [pivotAggregation, setPivotAggregation] = (0, react_1.useState)(undefined);
|
|
191
199
|
// initial state is the fields array passed in, but can eventually be changed to be the pivot fields
|
|
192
|
-
const [fieldOptions, setFieldOptions] = useState(fields);
|
|
193
|
-
const [dateFieldOptions, setDateFieldOptions] = useState([]);
|
|
194
|
-
useEffect(() => {
|
|
200
|
+
const [fieldOptions, setFieldOptions] = (0, react_1.useState)(fields);
|
|
201
|
+
const [dateFieldOptions, setDateFieldOptions] = (0, react_1.useState)([]);
|
|
202
|
+
(0, react_1.useEffect)(() => {
|
|
195
203
|
const fetchReferencedTables = async () => {
|
|
196
204
|
if (!query) {
|
|
197
205
|
return;
|
|
@@ -216,7 +224,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
216
224
|
table: dateFieldOptions[0]?.name,
|
|
217
225
|
field: dateFieldOptions[0]?.columns[0]?.name,
|
|
218
226
|
};
|
|
219
|
-
const firstNumberColumn = columns?.find((col) => numberFormatOptions.includes(col.format));
|
|
227
|
+
const firstNumberColumn = columns?.find((col) => exports.numberFormatOptions.includes(col.format));
|
|
220
228
|
const formEmptyState = {
|
|
221
229
|
name: '',
|
|
222
230
|
dashboardName: dashboardOptions?.[0]?.label,
|
|
@@ -243,13 +251,13 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
243
251
|
// date labels for pivots should be treated like strings since they are
|
|
244
252
|
// formatted in generatePivotTable
|
|
245
253
|
const yAxisIsDate = pivot.columnField
|
|
246
|
-
? isDateField(pivot.columnFieldType)
|
|
254
|
+
? (0, PivotModal_1.isDateField)(pivot.columnFieldType)
|
|
247
255
|
: false;
|
|
248
256
|
return {
|
|
249
257
|
pivot,
|
|
250
258
|
chartType: 'column',
|
|
251
259
|
xAxisField: pivot.rowField,
|
|
252
|
-
xAxisFormat: isDateField(pivot.rowFieldType)
|
|
260
|
+
xAxisFormat: (0, PivotModal_1.isDateField)(pivot.rowFieldType)
|
|
253
261
|
? 'string'
|
|
254
262
|
: columns.find((col) => col.field === pivot.rowField)?.format ||
|
|
255
263
|
'whole_number',
|
|
@@ -266,12 +274,12 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
266
274
|
],
|
|
267
275
|
};
|
|
268
276
|
};
|
|
269
|
-
const [formData, setFormData] = useState(pivot
|
|
277
|
+
const [formData, setFormData] = (0, react_1.useState)(pivot
|
|
270
278
|
? { ...formEmptyState, ...pivotFormData(pivot) }
|
|
271
279
|
: dashboardItem || formEmptyState);
|
|
272
|
-
const selectedPivotTable = useMemo(() => {
|
|
280
|
+
const selectedPivotTable = (0, react_1.useMemo)(() => {
|
|
273
281
|
if (formData.pivot && rows) {
|
|
274
|
-
return generatePivotTable(formData.pivot, rows, dateRange);
|
|
282
|
+
return (0, PivotModal_1.generatePivotTable)(formData.pivot, rows, dateRange);
|
|
275
283
|
}
|
|
276
284
|
else {
|
|
277
285
|
return {};
|
|
@@ -404,7 +412,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
404
412
|
customerId: customerId,
|
|
405
413
|
}
|
|
406
414
|
: { clientId: publicKey }).toString();
|
|
407
|
-
const resp = await getDataFromCloud(client, `deletedash/${publicKey}/${customerId}/?${searchParams}`, cloudBody);
|
|
415
|
+
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, `deletedash/${publicKey}/${customerId}/?${searchParams}`, cloudBody);
|
|
408
416
|
if (resp) {
|
|
409
417
|
if (onDelete) {
|
|
410
418
|
onDelete();
|
|
@@ -413,7 +421,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
413
421
|
setIsOpen(false);
|
|
414
422
|
setIsSubmitting(false);
|
|
415
423
|
};
|
|
416
|
-
const editChart = async (
|
|
424
|
+
const editChart = async (_e) => {
|
|
417
425
|
if (isSubmitting) {
|
|
418
426
|
return;
|
|
419
427
|
}
|
|
@@ -432,6 +440,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
432
440
|
: { dashboardName: defaultDashboardName }),
|
|
433
441
|
...(dashboardItem ? { dashboardItemId: dashboardItem._id } : {}),
|
|
434
442
|
query: queryNoDateColumn || query,
|
|
443
|
+
queryString: queryNoDateColumn || query,
|
|
435
444
|
pivot: formData.pivot,
|
|
436
445
|
};
|
|
437
446
|
if (cloudBody['rows']) {
|
|
@@ -453,7 +462,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
453
462
|
customerId: customerId,
|
|
454
463
|
}
|
|
455
464
|
: { clientId: publicKey }).toString();
|
|
456
|
-
const resp = await getData(client, `dashedit2?${searchParams}`, 'same-origin', hostedBody, cloudBody);
|
|
465
|
+
const resp = await (0, dataFetcher_1.getData)(client, `dashedit2?${searchParams}`, 'same-origin', hostedBody, cloudBody);
|
|
457
466
|
if (resp) {
|
|
458
467
|
dispatch({
|
|
459
468
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
@@ -474,7 +483,7 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
474
483
|
if (!schema) {
|
|
475
484
|
return;
|
|
476
485
|
}
|
|
477
|
-
return (
|
|
486
|
+
return ((0, jsx_runtime_1.jsxs)("div", { id: "quill-chart-modal", style: { padding: modalPadding }, children: [isEditMode && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Banner_1.default, { dashboardItemName: dashboardItem.name, dashboardName: dashboardItem.dashboardName, style: {
|
|
478
487
|
position: 'fixed',
|
|
479
488
|
top: 0,
|
|
480
489
|
left: 0,
|
|
@@ -486,13 +495,13 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
486
495
|
return;
|
|
487
496
|
dispatch({ type: 'SET_ACTIVE_QUERY', payload: '' });
|
|
488
497
|
dispatch({ type: 'SET_ACTIVE_EDIT_ITEM', payload: null });
|
|
489
|
-
} }),
|
|
498
|
+
} }), (0, jsx_runtime_1.jsxs)("style", { children: [" ", `#quill-modal-header { padding-top: 41px; }`, " "] })] })), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Chart_1.default, { config: { ...formData, rows }, colors: theme.chartColors, containerStyle: {
|
|
490
499
|
width: formData.chartType === 'table' ? 640 : 'calc(100% - 24px)',
|
|
491
500
|
height: 300,
|
|
492
|
-
} }) }),
|
|
501
|
+
} }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 20 } }), (0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Name" }), (0, jsx_runtime_1.jsx)(TextInput, { value: formData.name, onChange: (e) => handleChange(e, 'name'), placeholder: "Name" })] }), showDashboardDropdown && !destinationDashboard && ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Dashboard" }), (0, jsx_runtime_1.jsx)(Select, { label: 'Dashboard', value: formData.dashboardName, onChange: (e) => handleChange(e, 'dashboardName'), options: dashboardOptions.map((elem) => ({
|
|
493
502
|
label: elem.label,
|
|
494
503
|
value: elem.label,
|
|
495
|
-
})) })] })),
|
|
504
|
+
})) })] })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Chart type" }), (0, jsx_runtime_1.jsx)(Select, { label: 'Chart Type', value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
|
|
496
505
|
// filter out metric for all pivots
|
|
497
506
|
// filter out bar and pie for row and column pivot
|
|
498
507
|
options: CHART_TYPES.filter((elem) => !firstNumberColumn
|
|
@@ -500,21 +509,21 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
500
509
|
: !((formData.pivot && elem === 'metric') ||
|
|
501
510
|
(formData.pivot &&
|
|
502
511
|
formData.pivot.columnField &&
|
|
503
|
-
(elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }),
|
|
512
|
+
(elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
504
513
|
display: 'flex',
|
|
505
514
|
flexDirection: 'column',
|
|
506
515
|
gap: 12,
|
|
507
516
|
marginTop: 6,
|
|
508
|
-
}, children: [
|
|
517
|
+
}, children: [(0, jsx_runtime_1.jsx)(Header, { children: "Pivot" }), (0, jsx_runtime_1.jsxs)("div", { style: { fontFamily: theme?.fontFamily }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
509
518
|
maxWidth: 200,
|
|
510
519
|
// marginTop: 6,
|
|
511
520
|
display: 'flex',
|
|
512
521
|
flexDirection: 'column',
|
|
513
|
-
}, children:
|
|
522
|
+
}, children: (0, jsx_runtime_1.jsx)(PivotModal_1.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 && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
514
523
|
// width: 592,
|
|
515
524
|
paddingRight: deleteRef?.current ? 42 : 0,
|
|
516
525
|
maxWidth: 750,
|
|
517
|
-
}, children:
|
|
526
|
+
}, children: (0, jsx_runtime_1.jsx)("div", { style: { width: divWidth }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: {
|
|
518
527
|
pivot: formData.pivot,
|
|
519
528
|
rows: selectedPivotTable?.rows,
|
|
520
529
|
columns: selectedPivotTable?.columns,
|
|
@@ -526,23 +535,23 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
526
535
|
setPivotValueField(formData.pivot?.valueField);
|
|
527
536
|
setPivotAggregation(formData.pivot?.aggregationType);
|
|
528
537
|
setPivotPopUpTitle('Edit Pivot');
|
|
529
|
-
}, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: Button, HeaderComponent: Header, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: Label, TextComponent: Text }) }) }))] })] }),
|
|
538
|
+
}, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: Button, HeaderComponent: Header, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: Label, TextComponent: Text }) }) }))] })] }), (0, jsx_runtime_1.jsx)("br", {}), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
530
539
|
display: 'flex',
|
|
531
540
|
flexDirection: 'column',
|
|
532
541
|
gap: 6,
|
|
533
542
|
marginTop: 6,
|
|
534
|
-
}, children: [
|
|
543
|
+
}, children: [(0, jsx_runtime_1.jsx)(Header, { children: "Chart" }), (0, jsx_runtime_1.jsx)(Label, { children: "X-axis" })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [(0, jsx_runtime_1.jsx)(Select, { label: 'X-axis Field', value: formData.xAxisField, onChange: (e) => handleChange(e, 'xAxisField'), disabled: formData.pivot !== null, options: fieldOptions.map((elem) => ({
|
|
535
544
|
label: formData.pivot
|
|
536
545
|
? `pivot row (${elem.field})`
|
|
537
546
|
: elem.field,
|
|
538
547
|
value: elem.field,
|
|
539
|
-
})) }),
|
|
548
|
+
})) }), (0, jsx_runtime_1.jsx)(TextInput, { value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(Select, { label: 'X-axis Format', value: formData.xAxisFormat, onChange: (e) => handleChange(e, 'xAxisFormat'), options: formatOptions })] }, 'xAxisField0'), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(Label, { children: "Y-axis" }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [(0, jsx_runtime_1.jsx)(Select, { label: 'Y-axis Field', value: yAxisField.field, onChange: (e) => handleChange(e, 'yAxisFields.field', index), disabled: formData.pivot !== null, options: [
|
|
540
549
|
{ label: 'Select', value: '' },
|
|
541
550
|
...fieldOptions
|
|
542
551
|
.filter((elem) => {
|
|
543
552
|
return (formData.chartType === 'table' ||
|
|
544
553
|
formData.pivot ||
|
|
545
|
-
numberFormatOptions.includes(columns.find((col) => col.field === elem.field)
|
|
554
|
+
exports.numberFormatOptions.includes(columns.find((col) => col.field === elem.field)
|
|
546
555
|
?.format));
|
|
547
556
|
})
|
|
548
557
|
.map((elem) => ({
|
|
@@ -551,28 +560,28 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
551
560
|
: elem.field,
|
|
552
561
|
value: elem.field,
|
|
553
562
|
})),
|
|
554
|
-
] }),
|
|
563
|
+
] }), (0, jsx_runtime_1.jsx)(TextInput, { value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'yAxisFields.label', index) }), (0, jsx_runtime_1.jsx)(Select, { label: 'Y-axis Format', value: yAxisField.format, onChange: (e) => handleChange(e, 'yAxisFields.format', index), options: [{ label: 'Select', value: '' }, ...formatOptions] }), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, children: (0, jsx_runtime_1.jsx)(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))) }), formData.pivot === null && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" })] })), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {})] })), (showTableFormatOptions || formData.chartType === 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
555
564
|
display: 'flex',
|
|
556
565
|
flexDirection: 'column',
|
|
557
566
|
gap: 6,
|
|
558
567
|
marginTop: 6,
|
|
559
|
-
}, children: [
|
|
568
|
+
}, children: [(0, jsx_runtime_1.jsx)(Header, { children: "Table" }), (0, jsx_runtime_1.jsx)(Label, { children: "Columns" })] }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: formData.columns.map((column, index) => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [(0, jsx_runtime_1.jsx)(Select, { label: 'Column Field', value: column.field, onChange: (e) => handleChange(e, 'columns.field', index), options: [
|
|
560
569
|
{ label: 'Select', value: '' },
|
|
561
570
|
...fields.map((elem) => ({
|
|
562
571
|
label: elem.field,
|
|
563
572
|
value: elem.field,
|
|
564
573
|
})),
|
|
565
|
-
] }),
|
|
574
|
+
] }), (0, jsx_runtime_1.jsx)(TextInput, { name: "label", value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index) }), (0, jsx_runtime_1.jsx)(Select, { label: 'Column Format', value: column.format, onChange: (e) => handleChange(e, 'columns.format', index), options: [{ label: 'Select', value: '' }, ...formatOptions] }), (0, jsx_runtime_1.jsx)("div", { ref: deleteRef, children: (0, jsx_runtime_1.jsx)(DeleteButton, { style: { marginLeft: deleteButtonMargin }, onClick: () => handleRemoveField('columns', index) }) })] }, 'column' + index))) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: () => handleAddField('columns'), label: "Add column +" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {})] })), showDateFieldOptions && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
566
575
|
display: 'flex',
|
|
567
576
|
flexDirection: 'column',
|
|
568
577
|
gap: 6,
|
|
569
578
|
marginTop: 6,
|
|
570
|
-
}, children: [
|
|
579
|
+
}, children: [(0, jsx_runtime_1.jsx)(Header, { children: "Date field" }), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
571
580
|
display: 'flex',
|
|
572
581
|
flexDirection: 'row',
|
|
573
582
|
gap: 12,
|
|
574
583
|
// lmao part 2
|
|
575
|
-
}, children: [
|
|
584
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Table" }), (0, jsx_runtime_1.jsx)(Select, { label: 'Date Table', value: formData.dateField.table, onChange: (e) => handleChange(e, 'dateField.table'), options: [
|
|
576
585
|
{
|
|
577
586
|
label: 'Select',
|
|
578
587
|
value: '',
|
|
@@ -581,29 +590,29 @@ function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSele
|
|
|
581
590
|
label: elem.name,
|
|
582
591
|
value: elem.name,
|
|
583
592
|
})),
|
|
584
|
-
] })] }),
|
|
593
|
+
] })] }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(Label, { children: "Field" }), (0, jsx_runtime_1.jsx)(Select, { label: 'Date Field', value: formData.dateField.field, onChange: (e) => handleChange(e, 'dateField.field'), options: dateFieldOptions
|
|
585
594
|
?.find((elem) => elem.name === formData.dateField.table)
|
|
586
595
|
?.columns?.map((elem) => ({
|
|
587
596
|
label: elem.name,
|
|
588
597
|
value: elem.name,
|
|
589
|
-
})) || [] })] })] }),
|
|
598
|
+
})) || [] })] })] }), (0, jsx_runtime_1.jsx)("br", {})] })), showAccessControlOptions && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
590
599
|
display: 'flex',
|
|
591
600
|
flexDirection: 'column',
|
|
592
601
|
gap: 12,
|
|
593
602
|
marginTop: 6,
|
|
594
|
-
}, children: [
|
|
603
|
+
}, children: [(0, jsx_runtime_1.jsx)(Header, { children: "Organization access" }), (0, jsx_runtime_1.jsx)(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {})] })), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
595
604
|
display: 'flex',
|
|
596
605
|
flexDirection: 'row',
|
|
597
606
|
justifyContent: 'flex-end',
|
|
598
607
|
gap: 10,
|
|
599
|
-
}, children: [dashboardItem && (
|
|
608
|
+
}, children: [dashboardItem && ((0, jsx_runtime_1.jsx)(SecondaryButton, { onClick: deleteChart, label: 'Delete' })), (0, jsx_runtime_1.jsx)(Button, { onClick: editChart, label: buttonLabel
|
|
600
609
|
? buttonLabel
|
|
601
610
|
: dashboardItem
|
|
602
611
|
? 'Save changes'
|
|
603
612
|
: 'Add to dashboard' })] })] })] }));
|
|
604
613
|
}
|
|
605
614
|
function SegmentedControl({ onChange, value, theme }) {
|
|
606
|
-
return (
|
|
615
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
607
616
|
display: 'flex',
|
|
608
617
|
flexDirection: 'row',
|
|
609
618
|
alignItems: 'center',
|
|
@@ -611,7 +620,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
611
620
|
maxWidth: 418,
|
|
612
621
|
padding: 4,
|
|
613
622
|
borderRadius: 6,
|
|
614
|
-
}, children: [
|
|
623
|
+
}, children: [(0, jsx_runtime_1.jsxs)("button", { className: "quill-tab", onClick: () => onChange(true), style: {
|
|
615
624
|
border: value === true ? '1px solid #E7E7E7' : '1px solid transparent',
|
|
616
625
|
outline: 'none',
|
|
617
626
|
width: '100%',
|
|
@@ -624,7 +633,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
624
633
|
fontWeight: value === true ? 600 : 500,
|
|
625
634
|
fontSize: 14,
|
|
626
635
|
fontFamily: theme?.fontFamily,
|
|
627
|
-
}, children: [
|
|
636
|
+
}, children: [(0, jsx_runtime_1.jsx)("style", { children: `
|
|
628
637
|
.quill-tab {
|
|
629
638
|
background-color: ${value === true ? 'white' : 'transparent'};
|
|
630
639
|
}
|
|
@@ -634,7 +643,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
634
643
|
.quill-tab:active {
|
|
635
644
|
background-color: "rgba(56, 65, 81, 0.15)";
|
|
636
645
|
}
|
|
637
|
-
` }), 'All Organizations'] }),
|
|
646
|
+
` }), 'All Organizations'] }), (0, jsx_runtime_1.jsxs)("button", { className: "quill-tab2", onClick: () => onChange(false), style: {
|
|
638
647
|
border: value === false ? '1px solid #E7E7E7' : '1px solid transparent',
|
|
639
648
|
boxShadow: value === false
|
|
640
649
|
? '0px 1px 4px 0px rgba(56, 65, 81, 0.08)'
|
|
@@ -647,7 +656,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
647
656
|
fontWeight: value === false ? 600 : 500,
|
|
648
657
|
fontSize: 14,
|
|
649
658
|
fontFamily: theme?.fontFamily,
|
|
650
|
-
}, children: [
|
|
659
|
+
}, children: [(0, jsx_runtime_1.jsx)("style", { children: `
|
|
651
660
|
.quill-tab2 {
|
|
652
661
|
background-color: ${value === false ? 'white' : 'transparent'};
|
|
653
662
|
}
|
|
@@ -662,3 +671,4 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
662
671
|
}
|
|
663
672
|
` }), 'This Organization'] })] }));
|
|
664
673
|
}
|
|
674
|
+
//# sourceMappingURL=ChartBuilder.js.map
|