@quillsql/react 2.8.8 → 2.8.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/AddToDashboardModal.js +146 -181
- package/dist/BarList.js +36 -44
- package/dist/Chart.d.ts +0 -5
- package/dist/Chart.d.ts.map +1 -1
- package/dist/Chart.js +94 -276
- package/dist/ChartBuilder.d.ts +1 -0
- package/dist/ChartBuilder.d.ts.map +1 -1
- package/dist/ChartBuilder.js +96 -93
- package/dist/ChartEditor.d.ts +2 -1
- package/dist/ChartEditor.d.ts.map +1 -1
- package/dist/ChartEditor.js +14 -21
- package/dist/Context.js +52 -57
- package/dist/Dashboard.d.ts.map +1 -1
- package/dist/Dashboard.js +181 -213
- package/dist/DateRangePicker/Calendar.js +41 -46
- package/dist/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/DateRangePicker/DateRangePicker.js +33 -62
- package/dist/DateRangePicker/DateRangePickerButton.js +14 -17
- package/dist/DateRangePicker/dateRangePickerUtils.js +76 -90
- package/dist/DateRangePicker/index.js +1 -9
- package/dist/PieChart.js +35 -70
- package/dist/QuillProvider.js +4 -7
- package/dist/ReportBuilder.js +120 -129
- package/dist/SQLEditor.d.ts +5 -1
- package/dist/SQLEditor.d.ts.map +1 -1
- package/dist/SQLEditor.js +82 -89
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +64 -66
- package/dist/TableChart.js +17 -45
- package/dist/assets/ArrowDownHeadIcon.js +3 -6
- package/dist/assets/ArrowDownIcon.js +3 -6
- package/dist/assets/ArrowDownRightIcon.js +3 -6
- package/dist/assets/ArrowLeftHeadIcon.js +3 -6
- package/dist/assets/ArrowRightHeadIcon.js +3 -6
- package/dist/assets/ArrowRightIcon.js +3 -6
- package/dist/assets/ArrowUpHeadIcon.js +3 -6
- package/dist/assets/ArrowUpIcon.js +3 -6
- package/dist/assets/ArrowUpRightIcon.js +3 -6
- package/dist/assets/CalendarIcon.js +3 -6
- package/dist/assets/CalendarNormalIcon.js +3 -6
- package/dist/assets/DoubleArrowLeftHeadIcon.js +3 -6
- package/dist/assets/DoubleArrowRightHeadIcon.js +3 -6
- package/dist/assets/ExclamationFilledIcon.js +3 -6
- package/dist/assets/FilterIcon.js +3 -6
- package/dist/assets/LoadingSpinner.js +3 -6
- package/dist/assets/RefreshIcon.js +3 -6
- package/dist/assets/SearchIcon.js +3 -6
- package/dist/assets/UpLeftArrowsIcon.js +3 -6
- package/dist/assets/XCircleIcon.js +3 -6
- package/dist/assets/XIcon.js +3 -6
- package/dist/assets/index.js +21 -49
- package/dist/components/Banner/index.d.ts +3 -0
- package/dist/components/Banner/index.d.ts.map +1 -0
- package/dist/components/Banner/index.js +24 -0
- package/dist/components/BigModal/BigModal.js +13 -39
- package/dist/components/Dropdown/Dropdown.js +24 -53
- package/dist/components/Dropdown/DropdownItem.js +9 -35
- package/dist/components/Dropdown/index.js +2 -11
- package/dist/components/Modal/Modal.js +13 -39
- package/dist/components/Modal/index.js +1 -9
- package/dist/components/QuillCard.js +8 -13
- package/dist/components/ReportBuilder/ColumnSelector.d.ts +19 -0
- package/dist/components/ReportBuilder/ColumnSelector.d.ts.map +1 -0
- package/dist/components/ReportBuilder/ColumnSelector.js +87 -0
- package/dist/components/SqlTextEditor.d.ts.map +1 -1
- package/dist/components/SqlTextEditor.js +30 -13
- package/dist/components/UiComponents.d.ts.map +1 -1
- package/dist/components/UiComponents.js +40 -53
- package/dist/components/selectUtils.js +6 -17
- package/dist/contexts/BaseColorContext.js +3 -6
- package/dist/contexts/HoveredValueContext.js +3 -6
- package/dist/contexts/RootStylesContext.js +3 -6
- package/dist/contexts/SelectedValueContext.js +3 -6
- package/dist/contexts/index.js +4 -15
- package/dist/hooks/index.js +4 -15
- package/dist/hooks/useDashboard.js +10 -15
- package/dist/hooks/useInternalState.js +3 -6
- package/dist/hooks/useOnClickOutside.js +3 -6
- package/dist/hooks/useOnWindowResize.js +4 -7
- package/dist/hooks/useQuill.js +11 -16
- package/dist/hooks/useSelectOnKeyDown.js +4 -7
- package/dist/index.js +13 -33
- package/dist/internals/ReportBuilder/PivotList.js +14 -20
- package/dist/internals/ReportBuilder/PivotModal.d.ts +2 -2
- package/dist/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/internals/ReportBuilder/PivotModal.js +116 -119
- package/dist/internals/ReportBuilder/PivotModal.spec.js +70 -73
- package/dist/lib/font.js +2 -6
- package/dist/lib/index.js +3 -20
- package/dist/lib/inputTypes.js +1 -3
- package/dist/lib/utils.js +8 -19
- package/dist/test-data/tables.d.ts +2 -0
- package/dist/test-data/tables.d.ts.map +1 -0
- package/dist/test-data/tables.js +621 -0
- package/dist/utils/aggregate.js +28 -35
- package/dist/utils/axisFormatter.d.ts +20 -0
- package/dist/utils/axisFormatter.d.ts.map +1 -0
- package/dist/utils/axisFormatter.js +185 -0
- package/dist/utils/colorToHex.js +1 -5
- package/dist/utils/dataFetcher.js +2 -8
- package/dist/utils/downloadCSV.js +1 -6
- package/dist/utils/schema.d.ts +22 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +134 -0
- package/dist/utils/textFormatting.d.ts +4 -0
- package/dist/utils/textFormatting.d.ts.map +1 -0
- package/dist/utils/textFormatting.js +38 -0
- package/dist/utils/valueFormatter.d.ts +17 -0
- package/dist/utils/valueFormatter.d.ts.map +1 -0
- package/dist/utils/valueFormatter.js +166 -0
- package/dist/utils/valueFormatterCSV.d.ts +17 -0
- package/dist/utils/valueFormatterCSV.d.ts.map +1 -0
- package/dist/utils/valueFormatterCSV.js +90 -0
- package/package.json +1 -2
package/dist/ChartBuilder.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../src/ChartBuilder.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAUhF,OAAO,EACL,KAAK,EAIN,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,iBAAiB,EAUjB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartBuilder.d.ts","sourceRoot":"","sources":["../src/ChartBuilder.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAUhF,OAAO,EACL,KAAK,EAIN,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,iBAAiB,EAUjB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAenC,wBAAgB,oBAAoB,CAAC,GAAG,KAAA,OAavC;AA0DD,eAAO,MAAM,mBAAmB,UAM/B,CAAC;AAoBF,UAAU,iBAAiB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,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,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACtC,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4B5D"}
|
package/dist/ChartBuilder.js
CHANGED
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
|
|
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");
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
2
|
// @ts-nocheck
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
3
|
+
import { useEffect, useRef, useState, useContext, useMemo } from 'react';
|
|
4
|
+
import { ClientContext, DashboardContext, SchemaContext, ThemeContext, } from './Context';
|
|
5
|
+
import { getData, getDataFromCloud } from './utils/dataFetcher';
|
|
6
|
+
import { getPostgresBasicType } from './ReportBuilder';
|
|
7
|
+
import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
|
|
8
|
+
import { PivotCard } from './internals/ReportBuilder/PivotList';
|
|
9
|
+
import Chart from './Chart';
|
|
10
|
+
import { MemoizedModal, MemoizedTextInput, MemoizedSelect, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, } from './components/UiComponents';
|
|
11
|
+
import Banner from './components/Banner';
|
|
17
12
|
const CHART_TYPES = ['column', 'line', 'table', 'metric', 'bar', 'pie'];
|
|
18
|
-
function snakeCaseToTitleCase(str) {
|
|
13
|
+
export function snakeCaseToTitleCase(str) {
|
|
19
14
|
if (!str) {
|
|
20
15
|
return str;
|
|
21
16
|
}
|
|
@@ -27,7 +22,6 @@ function snakeCaseToTitleCase(str) {
|
|
|
27
22
|
: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
28
23
|
.join(' ');
|
|
29
24
|
}
|
|
30
|
-
exports.snakeCaseToTitleCase = snakeCaseToTitleCase;
|
|
31
25
|
const POSTGRES_DATE_TYPES = [
|
|
32
26
|
'timestamp',
|
|
33
27
|
'date',
|
|
@@ -39,7 +33,7 @@ async function getReferencedTables(client, sqlQuery, dbTables) {
|
|
|
39
33
|
// const parser = new Parser();
|
|
40
34
|
const tables = [];
|
|
41
35
|
const withAliases = [];
|
|
42
|
-
const resp = await
|
|
36
|
+
const resp = await getDataFromCloud(client, `astify`, { query: sqlQuery });
|
|
43
37
|
let ast = resp.ast;
|
|
44
38
|
ast = ast.length ? ast[0] : ast;
|
|
45
39
|
if (ast.with && ast.with.length) {
|
|
@@ -73,7 +67,7 @@ const AGGREGATION_TYPES = [
|
|
|
73
67
|
{ label: 'count', value: 'count' },
|
|
74
68
|
{ label: 'average', value: 'avg' },
|
|
75
69
|
];
|
|
76
|
-
|
|
70
|
+
export const numberFormatOptions = [
|
|
77
71
|
'whole_number',
|
|
78
72
|
'one_decimal_place',
|
|
79
73
|
'two_decimal_places',
|
|
@@ -97,30 +91,29 @@ const formatOptions = [
|
|
|
97
91
|
{ value: 'percent', label: 'percent' },
|
|
98
92
|
{ value: 'string', label: 'string' },
|
|
99
93
|
];
|
|
100
|
-
function ChartBuilder(props) {
|
|
101
|
-
const [theme] =
|
|
102
|
-
return ((
|
|
94
|
+
export default function ChartBuilder(props) {
|
|
95
|
+
const [theme] = useContext(ThemeContext);
|
|
96
|
+
return (_jsx(_Fragment, { children: props.Modal ? (_jsx(props.Modal, { isOpen: props.isOpen, setIsOpen: props.setIsOpen, title: props.title || 'Add to dashboard', onClose: () => props.setIsOpen(false), theme: theme, children: _jsx(ChartBuilderForm, { ...props }) })) : (_jsx(MemoizedModal, { setIsOpen: props.setIsOpen, isOpen: props.isOpen, onClose: () => props.setIsOpen(false), title: props.title || 'Add to dashboard', theme: theme, children: _jsx(ChartBuilderForm, { ...props }) })) }));
|
|
103
97
|
}
|
|
104
|
-
|
|
105
|
-
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, 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, }) {
|
|
98
|
+
function ChartBuilderForm({ TextInput = MemoizedTextInput, Select = MemoizedSelect, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, Header = MemoizedHeader, Label = MemoizedLabel, DeleteButton = MemoizedDeleteButton, Text = MemoizedText, Modal = MemoizedModal, Popover = 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, }) {
|
|
106
99
|
const dateRange = dr || [null, null, null];
|
|
107
|
-
const [client] =
|
|
108
|
-
const [theme] =
|
|
109
|
-
const [schema, setSchema] =
|
|
110
|
-
const [isSubmitting, setIsSubmitting] =
|
|
111
|
-
const [divWidth, setDivWidth] =
|
|
112
|
-
const { dispatch } =
|
|
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);
|
|
113
106
|
const fields = fieldsProp?.map((field) => ({
|
|
114
107
|
field: field.name,
|
|
115
|
-
type:
|
|
108
|
+
type: getPostgresBasicType(field),
|
|
116
109
|
format: field.format,
|
|
117
110
|
label: field.name,
|
|
118
111
|
})) || [];
|
|
119
|
-
const parentRef =
|
|
120
|
-
const deleteRef =
|
|
112
|
+
const parentRef = useRef();
|
|
113
|
+
const deleteRef = useRef();
|
|
121
114
|
const modalPadding = 20;
|
|
122
115
|
const deleteButtonMargin = -13;
|
|
123
|
-
|
|
116
|
+
useEffect(() => {
|
|
124
117
|
const calculateWidth = () => {
|
|
125
118
|
return (parentRef.current.offsetWidth -
|
|
126
119
|
(deleteRef?.current
|
|
@@ -144,11 +137,11 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
144
137
|
};
|
|
145
138
|
}, []);
|
|
146
139
|
// get schema
|
|
147
|
-
|
|
140
|
+
useEffect(() => {
|
|
148
141
|
let isSubscribed = true;
|
|
149
142
|
async function getSchema() {
|
|
150
143
|
if (!schema || !schema.length) {
|
|
151
|
-
const resp = await
|
|
144
|
+
const resp = await getDataFromCloud(client, `schema2/${client.publicKey}/`, null, 'GET');
|
|
152
145
|
if (isSubscribed) {
|
|
153
146
|
setSchema(resp.tables);
|
|
154
147
|
}
|
|
@@ -162,11 +155,11 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
162
155
|
};
|
|
163
156
|
}, [schema]);
|
|
164
157
|
// get dashboards
|
|
165
|
-
const [dashboardOptions, setDashboardOptions] =
|
|
166
|
-
const [defaultDashboardName, setDefaultDashboardName] =
|
|
158
|
+
const [dashboardOptions, setDashboardOptions] = useState([]);
|
|
159
|
+
const [defaultDashboardName, setDefaultDashboardName] = useState(destinationDashboard ||
|
|
167
160
|
dashboardItem?.dashboardName ||
|
|
168
161
|
dashboardOptions[0]?.label);
|
|
169
|
-
|
|
162
|
+
useEffect(() => {
|
|
170
163
|
if (!destinationDashboard &&
|
|
171
164
|
!dashboardItem &&
|
|
172
165
|
dashboardOptions &&
|
|
@@ -174,31 +167,31 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
174
167
|
setDefaultDashboardName(dashboardOptions[0]?.label);
|
|
175
168
|
}
|
|
176
169
|
}, [dashboardOptions]);
|
|
177
|
-
|
|
170
|
+
useEffect(() => {
|
|
178
171
|
async function getDashNames() {
|
|
179
|
-
const resp = await
|
|
172
|
+
const resp = await getDataFromCloud(client, `dashnames/${client.publicKey}/`, null, 'GET');
|
|
180
173
|
setDashboardOptions(resp.dashboardNames
|
|
181
174
|
.filter((elem) => elem !== null)
|
|
182
175
|
.map((key) => ({ label: key, value: key })));
|
|
183
176
|
}
|
|
184
177
|
getDashNames();
|
|
185
178
|
}, []);
|
|
186
|
-
const [showPivotPopover, setShowPivotPopover] =
|
|
187
|
-
const [isEdittingPivot, setIsEdittingPivot] =
|
|
188
|
-
const [selectedPivotIndex, setSelectedPivotIndex] =
|
|
189
|
-
const [tableName, setTableName] =
|
|
179
|
+
const [showPivotPopover, setShowPivotPopover] = useState(false);
|
|
180
|
+
const [isEdittingPivot, setIsEdittingPivot] = useState(false);
|
|
181
|
+
const [selectedPivotIndex, setSelectedPivotIndex] = useState(-1);
|
|
182
|
+
const [tableName, setTableName] = useState(null);
|
|
190
183
|
const selectedTable = schema?.find((t) => t.displayName === tableName);
|
|
191
|
-
const [pivotPopUpTitle, setPivotPopUpTitle] =
|
|
192
|
-
const [createdPivots, setCreatedPivots] =
|
|
193
|
-
const [recommendedPivots, setRecommendedPivots] =
|
|
194
|
-
const [pivotRowField, setPivotRowField] =
|
|
195
|
-
const [pivotColumnField, setPivotColumnField] =
|
|
196
|
-
const [pivotValueField, setPivotValueField] =
|
|
197
|
-
const [pivotAggregation, setPivotAggregation] =
|
|
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);
|
|
198
191
|
// initial state is the fields array passed in, but can eventually be changed to be the pivot fields
|
|
199
|
-
const [fieldOptions, setFieldOptions] =
|
|
200
|
-
const [dateFieldOptions, setDateFieldOptions] =
|
|
201
|
-
|
|
192
|
+
const [fieldOptions, setFieldOptions] = useState(fields);
|
|
193
|
+
const [dateFieldOptions, setDateFieldOptions] = useState([]);
|
|
194
|
+
useEffect(() => {
|
|
202
195
|
const fetchReferencedTables = async () => {
|
|
203
196
|
if (!query) {
|
|
204
197
|
return;
|
|
@@ -223,7 +216,7 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
223
216
|
table: dateFieldOptions[0]?.name,
|
|
224
217
|
field: dateFieldOptions[0]?.columns[0]?.name,
|
|
225
218
|
};
|
|
226
|
-
const firstNumberColumn = columns?.find((col) =>
|
|
219
|
+
const firstNumberColumn = columns?.find((col) => numberFormatOptions.includes(col.format));
|
|
227
220
|
const formEmptyState = {
|
|
228
221
|
name: '',
|
|
229
222
|
dashboardName: dashboardOptions?.[0]?.label,
|
|
@@ -250,13 +243,13 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
250
243
|
// date labels for pivots should be treated like strings since they are
|
|
251
244
|
// formatted in generatePivotTable
|
|
252
245
|
const yAxisIsDate = pivot.columnField
|
|
253
|
-
?
|
|
246
|
+
? isDateField(pivot.columnFieldType)
|
|
254
247
|
: false;
|
|
255
248
|
return {
|
|
256
249
|
pivot,
|
|
257
250
|
chartType: 'column',
|
|
258
251
|
xAxisField: pivot.rowField,
|
|
259
|
-
xAxisFormat:
|
|
252
|
+
xAxisFormat: isDateField(pivot.rowFieldType)
|
|
260
253
|
? 'string'
|
|
261
254
|
: columns.find((col) => col.field === pivot.rowField)?.format ||
|
|
262
255
|
'whole_number',
|
|
@@ -273,12 +266,12 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
273
266
|
],
|
|
274
267
|
};
|
|
275
268
|
};
|
|
276
|
-
const [formData, setFormData] =
|
|
269
|
+
const [formData, setFormData] = useState(pivot
|
|
277
270
|
? { ...formEmptyState, ...pivotFormData(pivot) }
|
|
278
271
|
: dashboardItem || formEmptyState);
|
|
279
|
-
const selectedPivotTable =
|
|
272
|
+
const selectedPivotTable = useMemo(() => {
|
|
280
273
|
if (formData.pivot && rows) {
|
|
281
|
-
return
|
|
274
|
+
return generatePivotTable(formData.pivot, rows, dateRange);
|
|
282
275
|
}
|
|
283
276
|
else {
|
|
284
277
|
return {};
|
|
@@ -396,7 +389,6 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
396
389
|
};
|
|
397
390
|
const handleSubmit = (e) => {
|
|
398
391
|
e.preventDefault();
|
|
399
|
-
console.log(formData);
|
|
400
392
|
};
|
|
401
393
|
const deleteChart = async () => {
|
|
402
394
|
if (!dashboardItem._id || !client) {
|
|
@@ -412,7 +404,7 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
412
404
|
customerId: customerId,
|
|
413
405
|
}
|
|
414
406
|
: { clientId: publicKey }).toString();
|
|
415
|
-
const resp = await
|
|
407
|
+
const resp = await getDataFromCloud(client, `deletedash/${publicKey}/${customerId}/?${searchParams}`, cloudBody);
|
|
416
408
|
if (resp) {
|
|
417
409
|
if (onDelete) {
|
|
418
410
|
onDelete();
|
|
@@ -422,13 +414,11 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
422
414
|
setIsSubmitting(false);
|
|
423
415
|
};
|
|
424
416
|
const editChart = async ({}) => {
|
|
425
|
-
console.log(isSubmitting);
|
|
426
417
|
if (isSubmitting) {
|
|
427
418
|
return;
|
|
428
419
|
}
|
|
429
420
|
setIsSubmitting(true);
|
|
430
421
|
const { publicKey, customerId } = client;
|
|
431
|
-
console.log(client);
|
|
432
422
|
if (!client) {
|
|
433
423
|
return;
|
|
434
424
|
}
|
|
@@ -444,6 +434,9 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
444
434
|
query: queryNoDateColumn || query,
|
|
445
435
|
pivot: formData.pivot,
|
|
446
436
|
};
|
|
437
|
+
if (cloudBody['rows']) {
|
|
438
|
+
delete cloudBody['rows'];
|
|
439
|
+
}
|
|
447
440
|
// add orgId: customerId if present for hostedBody
|
|
448
441
|
// set defaultDateField if date field not present
|
|
449
442
|
const hostedBody = {
|
|
@@ -460,8 +453,7 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
460
453
|
customerId: customerId,
|
|
461
454
|
}
|
|
462
455
|
: { clientId: publicKey }).toString();
|
|
463
|
-
const resp = await
|
|
464
|
-
console.log(`RESP: ${resp}`);
|
|
456
|
+
const resp = await getData(client, `dashedit2?${searchParams}`, 'same-origin', hostedBody, cloudBody);
|
|
465
457
|
if (resp) {
|
|
466
458
|
dispatch({
|
|
467
459
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
@@ -482,13 +474,25 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
482
474
|
if (!schema) {
|
|
483
475
|
return;
|
|
484
476
|
}
|
|
485
|
-
return ((
|
|
477
|
+
return (_jsxs("div", { id: "quill-chart-modal", style: { padding: modalPadding }, children: [isEditMode && (_jsxs(_Fragment, { children: [_jsx(Banner, { dashboardItemName: dashboardItem.name, dashboardName: dashboardItem.dashboardName, style: {
|
|
478
|
+
position: 'fixed',
|
|
479
|
+
top: 0,
|
|
480
|
+
left: 0,
|
|
481
|
+
right: 0,
|
|
482
|
+
margin: 0,
|
|
483
|
+
}, onExit: () => {
|
|
484
|
+
const msg = 'Are you sure you want to exit edit mode? Your changes will not be saved.';
|
|
485
|
+
if (!confirm(msg))
|
|
486
|
+
return;
|
|
487
|
+
dispatch({ type: 'SET_ACTIVE_QUERY', payload: '' });
|
|
488
|
+
dispatch({ type: 'SET_ACTIVE_EDIT_ITEM', payload: null });
|
|
489
|
+
} }), _jsxs("style", { children: [" ", `#quill-modal-header { padding-top: 41px; }`, " "] })] })), _jsx("div", { children: _jsx(Chart, { config: { ...formData, rows }, colors: theme.chartColors, containerStyle: {
|
|
486
490
|
width: formData.chartType === 'table' ? 640 : 'calc(100% - 24px)',
|
|
487
491
|
height: 300,
|
|
488
|
-
} }) }), (
|
|
492
|
+
} }) }), _jsx("div", { style: { height: 20 } }), _jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, 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, { value: formData.name, onChange: (e) => handleChange(e, 'name'), placeholder: "Name" })] }), showDashboardDropdown && !destinationDashboard && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Dashboard" }), _jsx(Select, { label: 'Dashboard', value: formData.dashboardName, onChange: (e) => handleChange(e, 'dashboardName'), options: dashboardOptions.map((elem) => ({
|
|
489
493
|
label: elem.label,
|
|
490
494
|
value: elem.label,
|
|
491
|
-
})) })] })), (
|
|
495
|
+
})) })] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Chart type" }), _jsx(Select, { label: 'Chart Type', value: formData.chartType, onChange: (e) => handleChange(e, 'chartType'),
|
|
492
496
|
// filter out metric for all pivots
|
|
493
497
|
// filter out bar and pie for row and column pivot
|
|
494
498
|
options: CHART_TYPES.filter((elem) => !firstNumberColumn
|
|
@@ -496,21 +500,21 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
496
500
|
: !((formData.pivot && elem === 'metric') ||
|
|
497
501
|
(formData.pivot &&
|
|
498
502
|
formData.pivot.columnField &&
|
|
499
|
-
(elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), (
|
|
503
|
+
(elem === 'bar' || elem === 'pie')))).map((elem) => ({ label: elem, value: elem })) })] })] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
500
504
|
display: 'flex',
|
|
501
505
|
flexDirection: 'column',
|
|
502
506
|
gap: 12,
|
|
503
507
|
marginTop: 6,
|
|
504
|
-
}, children: [(
|
|
508
|
+
}, children: [_jsx(Header, { children: "Pivot" }), _jsxs("div", { style: { fontFamily: theme?.fontFamily }, children: [_jsx("div", { style: {
|
|
505
509
|
maxWidth: 200,
|
|
506
510
|
// marginTop: 6,
|
|
507
511
|
display: 'flex',
|
|
508
512
|
flexDirection: 'column',
|
|
509
|
-
}, children: (
|
|
513
|
+
}, 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: {
|
|
510
514
|
// width: 592,
|
|
511
515
|
paddingRight: deleteRef?.current ? 42 : 0,
|
|
512
516
|
maxWidth: 750,
|
|
513
|
-
}, children: (
|
|
517
|
+
}, children: _jsx("div", { style: { width: divWidth }, children: _jsx(PivotCard, { pivotTable: {
|
|
514
518
|
pivot: formData.pivot,
|
|
515
519
|
rows: selectedPivotTable?.rows,
|
|
516
520
|
columns: selectedPivotTable?.columns,
|
|
@@ -522,23 +526,23 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
522
526
|
setPivotValueField(formData.pivot?.valueField);
|
|
523
527
|
setPivotAggregation(formData.pivot?.aggregationType);
|
|
524
528
|
setPivotPopUpTitle('Edit Pivot');
|
|
525
|
-
}, selectedPivotIndex: -1, onEditPivot: () => { }, ButtonComponent: Button, HeaderComponent: Header, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: Label, TextComponent: Text }) }) }))] })] }), (
|
|
529
|
+
}, 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: [_jsxs("div", { style: {
|
|
526
530
|
display: 'flex',
|
|
527
531
|
flexDirection: 'column',
|
|
528
532
|
gap: 6,
|
|
529
533
|
marginTop: 6,
|
|
530
|
-
}, children: [(
|
|
534
|
+
}, children: [_jsx(Header, { children: "Chart" }), _jsx(Label, { children: "X-axis" })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsx(Select, { label: 'X-axis Field', value: formData.xAxisField, onChange: (e) => handleChange(e, 'xAxisField'), disabled: formData.pivot !== null, options: fieldOptions.map((elem) => ({
|
|
531
535
|
label: formData.pivot
|
|
532
536
|
? `pivot row (${elem.field})`
|
|
533
537
|
: elem.field,
|
|
534
538
|
value: elem.field,
|
|
535
|
-
})) }), (
|
|
539
|
+
})) }), _jsx(TextInput, { value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e, 'xAxisLabel') }), _jsx(Select, { label: 'X-axis Format', value: formData.xAxisFormat, onChange: (e) => handleChange(e, 'xAxisFormat'), options: formatOptions })] }, 'xAxisField0'), _jsx("br", {}), _jsx(Label, { children: "Y-axis" }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: formData.yAxisFields.map((yAxisField, index) => (_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsx(Select, { label: 'Y-axis Field', value: yAxisField.field, onChange: (e) => handleChange(e, 'yAxisFields.field', index), disabled: formData.pivot !== null, options: [
|
|
536
540
|
{ label: 'Select', value: '' },
|
|
537
541
|
...fieldOptions
|
|
538
542
|
.filter((elem) => {
|
|
539
543
|
return (formData.chartType === 'table' ||
|
|
540
544
|
formData.pivot ||
|
|
541
|
-
|
|
545
|
+
numberFormatOptions.includes(columns.find((col) => col.field === elem.field)
|
|
542
546
|
?.format));
|
|
543
547
|
})
|
|
544
548
|
.map((elem) => ({
|
|
@@ -547,28 +551,28 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
547
551
|
: elem.field,
|
|
548
552
|
value: elem.field,
|
|
549
553
|
})),
|
|
550
|
-
] }), (
|
|
554
|
+
] }), _jsx(TextInput, { value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'yAxisFields.label', index) }), _jsx(Select, { label: 'Y-axis Format', value: yAxisField.format, onChange: (e) => handleChange(e, 'yAxisFields.format', index), options: [{ label: 'Select', value: '' }, ...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", {}), _jsx("br", {})] })), (showTableFormatOptions || formData.chartType === 'table') && (_jsxs("div", { children: [_jsxs("div", { style: {
|
|
551
555
|
display: 'flex',
|
|
552
556
|
flexDirection: 'column',
|
|
553
557
|
gap: 6,
|
|
554
558
|
marginTop: 6,
|
|
555
|
-
}, children: [(
|
|
559
|
+
}, children: [_jsx(Header, { children: "Table" }), _jsx(Label, { children: "Columns" })] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: formData.columns.map((column, index) => (_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 12 }, children: [_jsx(Select, { label: 'Column Field', value: column.field, onChange: (e) => handleChange(e, 'columns.field', index), options: [
|
|
556
560
|
{ label: 'Select', value: '' },
|
|
557
561
|
...fields.map((elem) => ({
|
|
558
562
|
label: elem.field,
|
|
559
563
|
value: elem.field,
|
|
560
564
|
})),
|
|
561
|
-
] }), (
|
|
565
|
+
] }), _jsx(TextInput, { name: "label", value: column.label, placeholder: "Column Label", onChange: (e) => handleChange(e, 'columns.label', index) }), _jsx(Select, { label: 'Column Format', value: column.format, onChange: (e) => handleChange(e, 'columns.format', index), options: [{ label: 'Select', value: '' }, ...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 && (_jsxs("div", { style: {
|
|
562
566
|
display: 'flex',
|
|
563
567
|
flexDirection: 'column',
|
|
564
568
|
gap: 6,
|
|
565
569
|
marginTop: 6,
|
|
566
|
-
}, children: [(
|
|
570
|
+
}, children: [_jsx(Header, { children: "Date field" }), _jsxs("div", { style: {
|
|
567
571
|
display: 'flex',
|
|
568
572
|
flexDirection: 'row',
|
|
569
573
|
gap: 12,
|
|
570
574
|
// lmao part 2
|
|
571
|
-
}, children: [(
|
|
575
|
+
}, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Table" }), _jsx(Select, { label: 'Date Table', value: formData.dateField.table, onChange: (e) => handleChange(e, 'dateField.table'), options: [
|
|
572
576
|
{
|
|
573
577
|
label: 'Select',
|
|
574
578
|
value: '',
|
|
@@ -577,29 +581,29 @@ function ChartBuilderForm({ TextInput = UiComponents_1.MemoizedTextInput, Select
|
|
|
577
581
|
label: elem.name,
|
|
578
582
|
value: elem.name,
|
|
579
583
|
})),
|
|
580
|
-
] })] }), (
|
|
584
|
+
] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx(Label, { children: "Field" }), _jsx(Select, { label: 'Date Field', value: formData.dateField.field, onChange: (e) => handleChange(e, 'dateField.field'), options: dateFieldOptions
|
|
581
585
|
?.find((elem) => elem.name === formData.dateField.table)
|
|
582
586
|
?.columns?.map((elem) => ({
|
|
583
587
|
label: elem.name,
|
|
584
588
|
value: elem.name,
|
|
585
|
-
})) || [] })] })] }), (
|
|
589
|
+
})) || [] })] })] }), _jsx("br", {})] })), showAccessControlOptions && (_jsxs("div", { style: {
|
|
586
590
|
display: 'flex',
|
|
587
591
|
flexDirection: 'column',
|
|
588
592
|
gap: 12,
|
|
589
593
|
marginTop: 6,
|
|
590
|
-
}, children: [(
|
|
594
|
+
}, children: [_jsx(Header, { children: "Organization access" }), _jsx(SegmentedControl, { onChange: (e) => handleChange(e, 'template'), value: formData.template, theme: theme }), _jsx("br", {}), _jsx("br", {})] })), _jsxs("div", { style: {
|
|
591
595
|
display: 'flex',
|
|
592
596
|
flexDirection: 'row',
|
|
593
597
|
justifyContent: 'flex-end',
|
|
594
598
|
gap: 10,
|
|
595
|
-
}, children: [dashboardItem && ((
|
|
599
|
+
}, children: [dashboardItem && (_jsx(SecondaryButton, { onClick: deleteChart, label: 'Delete' })), _jsx(Button, { onClick: editChart, label: buttonLabel
|
|
596
600
|
? buttonLabel
|
|
597
601
|
: dashboardItem
|
|
598
602
|
? 'Save changes'
|
|
599
603
|
: 'Add to dashboard' })] })] })] }));
|
|
600
604
|
}
|
|
601
605
|
function SegmentedControl({ onChange, value, theme }) {
|
|
602
|
-
return ((
|
|
606
|
+
return (_jsxs("div", { style: {
|
|
603
607
|
display: 'flex',
|
|
604
608
|
flexDirection: 'row',
|
|
605
609
|
alignItems: 'center',
|
|
@@ -607,7 +611,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
607
611
|
maxWidth: 418,
|
|
608
612
|
padding: 4,
|
|
609
613
|
borderRadius: 6,
|
|
610
|
-
}, children: [(
|
|
614
|
+
}, children: [_jsxs("button", { className: "quill-tab", onClick: () => onChange(true), style: {
|
|
611
615
|
border: value === true ? '1px solid #E7E7E7' : '1px solid transparent',
|
|
612
616
|
outline: 'none',
|
|
613
617
|
width: '100%',
|
|
@@ -620,7 +624,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
620
624
|
fontWeight: value === true ? 600 : 500,
|
|
621
625
|
fontSize: 14,
|
|
622
626
|
fontFamily: theme?.fontFamily,
|
|
623
|
-
}, children: [(
|
|
627
|
+
}, children: [_jsx("style", { children: `
|
|
624
628
|
.quill-tab {
|
|
625
629
|
background-color: ${value === true ? 'white' : 'transparent'};
|
|
626
630
|
}
|
|
@@ -630,7 +634,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
630
634
|
.quill-tab:active {
|
|
631
635
|
background-color: "rgba(56, 65, 81, 0.15)";
|
|
632
636
|
}
|
|
633
|
-
` }), 'All Organizations'] }), (
|
|
637
|
+
` }), 'All Organizations'] }), _jsxs("button", { className: "quill-tab2", onClick: () => onChange(false), style: {
|
|
634
638
|
border: value === false ? '1px solid #E7E7E7' : '1px solid transparent',
|
|
635
639
|
boxShadow: value === false
|
|
636
640
|
? '0px 1px 4px 0px rgba(56, 65, 81, 0.08)'
|
|
@@ -643,7 +647,7 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
643
647
|
fontWeight: value === false ? 600 : 500,
|
|
644
648
|
fontSize: 14,
|
|
645
649
|
fontFamily: theme?.fontFamily,
|
|
646
|
-
}, children: [(
|
|
650
|
+
}, children: [_jsx("style", { children: `
|
|
647
651
|
.quill-tab2 {
|
|
648
652
|
background-color: ${value === false ? 'white' : 'transparent'};
|
|
649
653
|
}
|
|
@@ -658,4 +662,3 @@ function SegmentedControl({ onChange, value, theme }) {
|
|
|
658
662
|
}
|
|
659
663
|
` }), 'This Organization'] })] }));
|
|
660
664
|
}
|
|
661
|
-
//# sourceMappingURL=ChartBuilder.js.map
|
package/dist/ChartEditor.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ interface ChartEditorProps {
|
|
|
4
4
|
isOpen: boolean;
|
|
5
5
|
chartId: string;
|
|
6
6
|
admin?: boolean;
|
|
7
|
+
isEditMode?: boolean;
|
|
7
8
|
chartBuilderTitle?: string;
|
|
8
9
|
chartBuilderButtonLabel?: string;
|
|
9
10
|
onDelete?: () => void;
|
|
@@ -20,6 +21,6 @@ interface ChartEditorProps {
|
|
|
20
21
|
Popover?: (props: PopoverComponentProps) => JSX.Element;
|
|
21
22
|
destinationDashboard?: string;
|
|
22
23
|
}
|
|
23
|
-
export default function ChartEditor({ isOpen, chartId, admin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default function ChartEditor({ isOpen, chartId, isEditMode, admin, destinationDashboard, chartBuilderTitle, chartBuilderButtonLabel, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }: ChartEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
24
25
|
export {};
|
|
25
26
|
//# sourceMappingURL=ChartEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,EACtB,MAAM,2BAA2B,CAAC;AAGnC,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,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;CAC/B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,OAAO,EACP,KAAa,EACb,oBAAoB,EACpB,iBAAgC,EAChC,uBAAuB,EACvB,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,
|
|
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,EACtB,MAAM,2BAA2B,CAAC;AAGnC,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,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;CAC/B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAa,EACb,oBAAoB,EACpB,iBAAgC,EAChC,uBAAuB,EACvB,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,2CA6GlB"}
|
package/dist/ChartEditor.js
CHANGED
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
|
|
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
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
2
|
// @ts-nocheck
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function ChartEditor({ isOpen, chartId, admin = false, destinationDashboard, chartBuilderTitle = 'Edit chart', chartBuilderButtonLabel, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }) {
|
|
13
|
-
const { dispatch, dashboard } =
|
|
14
|
-
const { dashboardFilters } =
|
|
15
|
-
const [client, _] =
|
|
16
|
-
const [dashboardItem, setDashboardItem] =
|
|
17
|
-
const [isLoading, setIsLoading] =
|
|
3
|
+
import { useContext, useEffect, useState } from 'react';
|
|
4
|
+
import ChartBuilder from './ChartBuilder';
|
|
5
|
+
import { DashboardContext, DashboardFiltersContext, ClientContext, } from './Context';
|
|
6
|
+
import { getData } from './utils/dataFetcher';
|
|
7
|
+
export default function ChartEditor({ isOpen, chartId, isEditMode, admin = false, destinationDashboard, chartBuilderTitle = 'Edit chart', chartBuilderButtonLabel, onDelete, setIsOpen, Select, TextInput, Button, SecondaryButton, Header, Label, Text, DeleteButton, Modal, Popover, }) {
|
|
8
|
+
const { dispatch, dashboard } = useContext(DashboardContext);
|
|
9
|
+
const { dashboardFilters } = useContext(DashboardFiltersContext);
|
|
10
|
+
const [client, _] = useContext(ClientContext);
|
|
11
|
+
const [dashboardItem, setDashboardItem] = useState(dashboard?.[chartId]);
|
|
12
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
18
13
|
const dateFilter = Object.values(dashboardFilters).find((filter) => filter.filterType == 'date_range');
|
|
19
14
|
const dateRange = dateFilter?.startDate
|
|
20
15
|
? [dateFilter?.startDate, dateFilter?.endDate, null]
|
|
21
16
|
: [null, null, null];
|
|
22
|
-
|
|
17
|
+
useEffect(() => {
|
|
23
18
|
let isSubscribed = true;
|
|
24
19
|
async function getChartOptions() {
|
|
25
20
|
if (isSubscribed && !isLoading) {
|
|
@@ -45,7 +40,7 @@ function ChartEditor({ isOpen, chartId, admin = false, destinationDashboard, cha
|
|
|
45
40
|
id: chartId,
|
|
46
41
|
filters: [],
|
|
47
42
|
};
|
|
48
|
-
const resp = await
|
|
43
|
+
const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody);
|
|
49
44
|
if (resp) {
|
|
50
45
|
setDashboardItem(resp);
|
|
51
46
|
dispatch({
|
|
@@ -71,7 +66,5 @@ function ChartEditor({ isOpen, chartId, admin = false, destinationDashboard, cha
|
|
|
71
66
|
isSubscribed = false;
|
|
72
67
|
};
|
|
73
68
|
}, [client, chartId]);
|
|
74
|
-
return ((
|
|
69
|
+
return (_jsx("div", { children: dashboardItem && (_jsx(ChartBuilder, { dashboardItem: dashboardItem, rows: dashboardItem.rows, columns: dashboardItem.columns, fields: dashboardItem.fields, query: dashboardItem.queryString, isOpen: isOpen, isEditMode: isEditMode, setIsOpen: setIsOpen, showTableFormatOptions: admin, showDateFieldOptions: admin, showAccessControlOptions: admin, showDashboardDropdown: admin, destinationDashboard: destinationDashboard, dateRange: dateRange, Select: Select, TextInput: TextInput, Button: Button, SecondaryButton: SecondaryButton, Header: Header, Label: Label, Text: Text, DeleteButton: DeleteButton, Modal: Modal, Popover: Popover, onDelete: onDelete, title: chartBuilderTitle, buttonLabel: chartBuilderButtonLabel })) }));
|
|
75
70
|
}
|
|
76
|
-
exports.default = ChartEditor;
|
|
77
|
-
//# sourceMappingURL=ChartEditor.js.map
|