@quillsql/admin 1.6.0 → 1.6.1
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/Admin.d.ts.map +1 -1
- package/dist/cjs/Admin.js +24 -11
- package/dist/cjs/AdminProvider.d.ts +2 -1
- package/dist/cjs/AdminProvider.d.ts.map +1 -1
- package/dist/cjs/AdminProvider.js +13 -24
- package/dist/cjs/api/ConnectionClient.d.ts +8 -0
- package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
- package/dist/cjs/api/ConnectionClient.js +42 -8
- package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
- package/dist/cjs/components/DashboardSelectPopover.js +20 -3
- package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
- package/dist/cjs/components/DropDownMenuWithLabel.js +4 -35
- package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
- package/dist/cjs/components/EmptyDashboardComponent/index.js +11 -9
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +2 -2
- package/dist/cjs/components/SegmentedControl.d.ts +4 -2
- package/dist/cjs/components/SegmentedControl.d.ts.map +1 -1
- package/dist/cjs/components/SegmentedControl.js +22 -16
- package/dist/cjs/components/SqlTextEditor.d.ts +9 -1
- package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
- package/dist/cjs/components/SqlTextEditor.js +60 -12
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +11 -2
- package/dist/cjs/constants/dataTypes.d.ts +2 -0
- package/dist/cjs/constants/dataTypes.d.ts.map +1 -0
- package/dist/cjs/constants/dataTypes.js +21 -0
- package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
- package/dist/cjs/forms/client_onboard/ConnectDatabase.js +9 -17
- package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
- package/dist/cjs/forms/client_onboard/CreateSqlViews.js +24 -11
- package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +4 -1
- package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
- package/dist/cjs/forms/sql_views/CreateEditSqlView.js +87 -36
- package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
- package/dist/cjs/modals/EditFiltersModal.js +13 -3
- package/dist/cjs/modals/NewDashboardModal.js +2 -2
- package/dist/cjs/modals/PromoteDashModal.js +2 -2
- package/dist/cjs/modals/PromoteViewModal.d.ts +2 -1
- package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
- package/dist/cjs/modals/PromoteViewModal.js +46 -36
- package/dist/cjs/primitives/TextInputPrimitive.d.ts +1 -0
- package/dist/cjs/primitives/TextInputPrimitive.d.ts.map +1 -1
- package/dist/cjs/primitives/TextInputPrimitive.js +35 -20
- package/dist/cjs/public_components/CreateEnvironment.d.ts +2 -1
- package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
- package/dist/cjs/public_components/CreateEnvironment.js +4 -1
- package/dist/cjs/public_components/DashboardBuilder.d.ts.map +1 -1
- package/dist/cjs/public_components/DashboardBuilder.js +67 -156
- package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
- package/dist/cjs/public_components/DashboardManager.js +72 -73
- package/dist/cjs/public_components/SQLViewManager.d.ts +1 -0
- package/dist/cjs/public_components/SQLViewManager.d.ts.map +1 -1
- package/dist/cjs/public_components/SQLViewManager.js +216 -40
- package/dist/cjs/utils/astProcessing.d.ts +2 -0
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/astProcessing.js +41 -0
- package/dist/cjs/utils/astProcessing.uspec.d.ts +2 -0
- package/dist/cjs/utils/astProcessing.uspec.d.ts.map +1 -0
- package/dist/cjs/utils/astProcessing.uspec.js +26 -0
- package/dist/cjs/utils/columnProcessing.d.ts +3 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
- package/dist/cjs/utils/columnProcessing.js +42 -0
- package/dist/cjs/utils/dataEditor.d.ts +2 -2
- package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
- package/dist/cjs/utils/dataEditor.js +4 -2
- package/dist/cjs/utils/databases.d.ts +0 -1
- package/dist/cjs/utils/databases.d.ts.map +1 -1
- package/dist/cjs/utils/databases.js +5 -6
- package/dist/cjs/utils/monacoAutocomplete.d.ts +21 -0
- package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/cjs/utils/monacoAutocomplete.js +250 -0
- package/dist/cjs/utils/schema.d.ts +5 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +129 -0
- package/dist/esm/Admin.d.ts.map +1 -1
- package/dist/esm/Admin.js +24 -11
- package/dist/esm/AdminProvider.d.ts +2 -1
- package/dist/esm/AdminProvider.d.ts.map +1 -1
- package/dist/esm/AdminProvider.js +13 -24
- package/dist/esm/api/ConnectionClient.d.ts +8 -0
- package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
- package/dist/esm/api/ConnectionClient.js +42 -8
- package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
- package/dist/esm/components/DashboardSelectPopover.js +20 -3
- package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
- package/dist/esm/components/DropDownMenuWithLabel.js +4 -35
- package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
- package/dist/esm/components/EmptyDashboardComponent/index.js +11 -9
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +2 -2
- package/dist/esm/components/SegmentedControl.d.ts +4 -2
- package/dist/esm/components/SegmentedControl.d.ts.map +1 -1
- package/dist/esm/components/SegmentedControl.js +22 -16
- package/dist/esm/components/SqlTextEditor.d.ts +9 -1
- package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
- package/dist/esm/components/SqlTextEditor.js +59 -11
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +12 -3
- package/dist/esm/constants/dataTypes.d.ts +2 -0
- package/dist/esm/constants/dataTypes.d.ts.map +1 -0
- package/dist/esm/constants/dataTypes.js +18 -0
- package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
- package/dist/esm/forms/client_onboard/ConnectDatabase.js +9 -17
- package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +1 -1
- package/dist/esm/forms/client_onboard/CreateSqlViews.js +25 -12
- package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +4 -1
- package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +1 -1
- package/dist/esm/forms/sql_views/CreateEditSqlView.js +87 -36
- package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
- package/dist/esm/modals/EditFiltersModal.js +13 -3
- package/dist/esm/modals/NewDashboardModal.js +2 -2
- package/dist/esm/modals/PromoteDashModal.js +2 -2
- package/dist/esm/modals/PromoteViewModal.d.ts +2 -1
- package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
- package/dist/esm/modals/PromoteViewModal.js +50 -40
- package/dist/esm/primitives/TextInputPrimitive.d.ts +1 -0
- package/dist/esm/primitives/TextInputPrimitive.d.ts.map +1 -1
- package/dist/esm/primitives/TextInputPrimitive.js +33 -21
- package/dist/esm/public_components/CreateEnvironment.d.ts +2 -1
- package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
- package/dist/esm/public_components/CreateEnvironment.js +4 -1
- package/dist/esm/public_components/DashboardBuilder.d.ts.map +1 -1
- package/dist/esm/public_components/DashboardBuilder.js +68 -157
- package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
- package/dist/esm/public_components/DashboardManager.js +73 -74
- package/dist/esm/public_components/SQLViewManager.d.ts +1 -0
- package/dist/esm/public_components/SQLViewManager.d.ts.map +1 -1
- package/dist/esm/public_components/SQLViewManager.js +216 -42
- package/dist/esm/utils/astProcessing.d.ts +2 -0
- package/dist/esm/utils/astProcessing.d.ts.map +1 -0
- package/dist/esm/utils/astProcessing.js +37 -0
- package/dist/esm/utils/astProcessing.uspec.d.ts +2 -0
- package/dist/esm/utils/astProcessing.uspec.d.ts.map +1 -0
- package/dist/esm/utils/astProcessing.uspec.js +24 -0
- package/dist/esm/utils/columnProcessing.d.ts +3 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
- package/dist/esm/utils/columnProcessing.js +37 -0
- package/dist/esm/utils/dataEditor.d.ts +2 -2
- package/dist/esm/utils/dataEditor.d.ts.map +1 -1
- package/dist/esm/utils/dataEditor.js +4 -2
- package/dist/esm/utils/databases.d.ts +0 -1
- package/dist/esm/utils/databases.d.ts.map +1 -1
- package/dist/esm/utils/databases.js +5 -6
- package/dist/esm/utils/monacoAutocomplete.d.ts +21 -0
- package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/esm/utils/monacoAutocomplete.js +245 -0
- package/dist/esm/utils/schema.d.ts +5 -0
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +126 -1
- package/package.json +3 -2
|
@@ -50,6 +50,7 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
|
|
|
50
50
|
reader.readAsText(file);
|
|
51
51
|
};
|
|
52
52
|
const testConnectionAndFormClient = async () => {
|
|
53
|
+
setShowError(false);
|
|
53
54
|
const connectionString = formConnectionString(databaseConnectionDetails);
|
|
54
55
|
const result = await testConnectionString(connectionString, databaseConnectionDetails.type, clientId);
|
|
55
56
|
if (result.success) {
|
|
@@ -164,28 +165,19 @@ export default function ConnectDatabase({ containerStyle, header1Style, header2S
|
|
|
164
165
|
...databaseConnectionDetails,
|
|
165
166
|
[key]: e.target.value,
|
|
166
167
|
});
|
|
167
|
-
}, value: value, disabled: key === 'type' })] }, key));
|
|
168
|
-
}) }) })] })) : (_jsx("div", { style: { minWidth: 790 }, children:
|
|
168
|
+
}, value: value, disabled: key === 'type', password: key === 'password' ? true : false })] }, key));
|
|
169
|
+
}) }) })] })) : (_jsx("div", { style: { minWidth: 790 }, children: _jsx("div", { id: "database-details-form", style: {
|
|
169
170
|
display: 'grid',
|
|
170
171
|
gridTemplateColumns: 'repeat(1, 1fr)',
|
|
171
172
|
gap: '20px',
|
|
172
173
|
justifyContent: 'space-between',
|
|
173
174
|
marginTop: '16px',
|
|
174
|
-
}, children:
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
companyTag: e.target.value,
|
|
181
|
-
});
|
|
182
|
-
setCompanyTag(e.target.value);
|
|
183
|
-
}, value: companyTag })] }), _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Submit File" }), _jsxs("div", { children: [_jsx("input", { type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", ref: myInputRef }), _jsxs("div", { style: {
|
|
184
|
-
display: 'flex',
|
|
185
|
-
flexDirection: 'row',
|
|
186
|
-
gap: 12,
|
|
187
|
-
alignItems: 'center',
|
|
188
|
-
}, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] })] }) })), _jsxs("div", { style: {
|
|
175
|
+
}, children: _jsxs("div", { children: [_jsx("h2", { style: { ...header2Style, fontWeight: '600' }, children: "Service Account Json" }), _jsxs("div", { children: [_jsx("input", { type: "file", accept: ".json", onChange: handleFileChange, style: { display: 'none' }, id: "fileInput", ref: myInputRef }), _jsxs("div", { style: {
|
|
176
|
+
display: 'flex',
|
|
177
|
+
flexDirection: 'row',
|
|
178
|
+
gap: 12,
|
|
179
|
+
alignItems: 'center',
|
|
180
|
+
}, children: [_jsx(ButtonPrimitive, { onClick: handleButtonClick, label: 'Upload JSON' }), _jsx("span", { style: { ...header2Style, fontWeight: '600' }, children: fileLabel })] })] })] }) }) })), _jsxs("div", { style: {
|
|
189
181
|
width: '100%',
|
|
190
182
|
display: 'flex',
|
|
191
183
|
justifyContent: 'space-between',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateSqlViews.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateSqlViews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateSqlViews.d.ts","sourceRoot":"","sources":["../../../../src/forms/client_onboard/CreateSqlViews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAW3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQvD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;CACZ,2CA+aA;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,2CAkDA"}
|
|
@@ -5,7 +5,9 @@ import { createSQLView, getQueryFromAiWithConnection, getSqlViewData, } from '..
|
|
|
5
5
|
import SqlViewTile from '../../components/SqlViewTile';
|
|
6
6
|
import SqlTextEditor from '../../components/SqlTextEditor';
|
|
7
7
|
import { SchemaListComponent, Table } from '@quillsql/react';
|
|
8
|
-
import { LoadingSpinner
|
|
8
|
+
import { LoadingSpinner } from '../../components/UiComponents';
|
|
9
|
+
import { getDuplicateColumns } from '../../public_components/SQLViewManager';
|
|
10
|
+
import { processColumnReference } from '../../utils/columnProcessing';
|
|
9
11
|
export default function CreateSQLViews({ containerStyle, header1Style, header2Style, columnsByTable, environmentDetails, allSchemaInfo, domainName, completeOnboarding, clientId, state, }) {
|
|
10
12
|
const [selectedTable, setSelectedTable] = useState(undefined);
|
|
11
13
|
const [queryInfo, setQueryInfo] = useState({
|
|
@@ -42,12 +44,14 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
42
44
|
};
|
|
43
45
|
const handleClickSchemaItem = async (event) => {
|
|
44
46
|
const name = event.target.textContent;
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
+
if (!name) {
|
|
48
|
+
return;
|
|
47
49
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
const newQuery = `SELECT * FROM ${processColumnReference(name, environmentDetails?.type)};`;
|
|
51
|
+
if (!queryInfo.query || queryInfo.query.length === 0) {
|
|
52
|
+
setQueryInfo({ name: queryInfo.name, query: newQuery });
|
|
50
53
|
}
|
|
54
|
+
await navigator.clipboard.writeText(newQuery);
|
|
51
55
|
};
|
|
52
56
|
useEffect(() => {
|
|
53
57
|
window.scrollTo({
|
|
@@ -59,6 +63,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
59
63
|
...containerStyle,
|
|
60
64
|
display: 'flex',
|
|
61
65
|
flexDirection: 'column',
|
|
66
|
+
minWidth: 900,
|
|
62
67
|
}, id: "create-sql-view", children: [_jsxs("div", { style: {
|
|
63
68
|
padding: 20,
|
|
64
69
|
paddingBottom: 12,
|
|
@@ -87,10 +92,11 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
87
92
|
setDisplayedTableData(columnsByTable.filter((table) => table.tableName
|
|
88
93
|
.toLowerCase()
|
|
89
94
|
.includes(e.target.value.toLowerCase().trim())));
|
|
90
|
-
}, value: tableSearchQuery, width: "
|
|
95
|
+
}, value: tableSearchQuery, width: "180px" }) }), _jsx(SchemaListComponent, { schema: displayedTableData, theme: state.theme, width: '300px', loading: false, LoadingComponent: LoadingSpinner, onClick: handleClickSchemaItem })] }), _jsxs("div", { id: "form-editor-table", style: {
|
|
91
96
|
display: 'flex',
|
|
92
97
|
flexDirection: 'column',
|
|
93
|
-
width: 'calc(100% -
|
|
98
|
+
width: 'calc(100% - 600px)',
|
|
99
|
+
minWidth: 300,
|
|
94
100
|
}, children: [_jsxs("div", { style: {
|
|
95
101
|
display: 'flex',
|
|
96
102
|
flexDirection: 'row',
|
|
@@ -111,7 +117,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
111
117
|
setAskAIButtonLoading(false);
|
|
112
118
|
}, style: { width: '90px' } })] }), _jsx(SqlTextEditor, { value: queryInfo.query, setValue: (e) => {
|
|
113
119
|
setQueryInfo({ name: queryInfo.name, query: e });
|
|
114
|
-
}, containerStyle: { paddingLeft: 16, paddingRight: 16 } }), _jsxs("div", { style: {
|
|
120
|
+
}, setEditorMounted: () => { }, containerStyle: { paddingLeft: 16, paddingRight: 16 }, schema: displayedTableData, databaseType: environmentDetails?.type, previousProvider: null }), _jsxs("div", { style: {
|
|
115
121
|
display: 'flex',
|
|
116
122
|
flexDirection: 'row',
|
|
117
123
|
justifyContent: 'space-between',
|
|
@@ -142,7 +148,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
142
148
|
}, children: [_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: {
|
|
143
149
|
height: 'calc(100vh - 589px)',
|
|
144
150
|
width: '100%',
|
|
145
|
-
}, hideCSVDownloadButton: true }), _jsxs("div", { style: {
|
|
151
|
+
}, hideCSVDownloadButton: true, isLoading: runQueryButtonLoading }), _jsxs("div", { style: {
|
|
146
152
|
width: '100%',
|
|
147
153
|
display: 'flex',
|
|
148
154
|
justifyContent: 'space-between',
|
|
@@ -153,7 +159,14 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
153
159
|
color: 'red',
|
|
154
160
|
paddingTop: '12px',
|
|
155
161
|
// textTransform: 'capitalize',
|
|
156
|
-
}, children: sqlQueryError.msg })) : (_jsx("div", {})), _jsx(ButtonPrimitive, { label: "Add SQL View", onClick: () =>
|
|
162
|
+
}, children: sqlQueryError.msg })) : (_jsx("div", {})), _jsx(ButtonPrimitive, { label: "Add SQL View", onClick: () => {
|
|
163
|
+
const duplicateColumns2 = getDuplicateColumns(tableData?.fields);
|
|
164
|
+
if (duplicateColumns2.length > 0) {
|
|
165
|
+
alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
addSqlView(false);
|
|
169
|
+
} })] })] }))] }), _jsxs("div", { style: {
|
|
157
170
|
// width: '30%',
|
|
158
171
|
background: '#fafafa',
|
|
159
172
|
borderLeft: 'solid 1px #e7e7e7',
|
|
@@ -205,7 +218,7 @@ export default function CreateSQLViews({ containerStyle, header1Style, header2St
|
|
|
205
218
|
paddingRight: 12,
|
|
206
219
|
background: 'white',
|
|
207
220
|
borderTop: 'solid 1px #e7e7e7',
|
|
208
|
-
}, children: _jsx(ButtonPrimitive, { label: "
|
|
221
|
+
}, children: _jsx(ButtonPrimitive, { label: "Looks good", onClick: () => {
|
|
209
222
|
completeOnboarding(client);
|
|
210
223
|
}, style: { width: 276 } }) })) : null] })] }), _jsx(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addSqlView, foreignKey: allSchemaInfo?.selectedFields.foreignKey, tableName: allSchemaInfo?.selectedFields.table })] }));
|
|
211
224
|
}
|
|
@@ -217,7 +230,7 @@ export function ForeignKeyModal({ isOpen, setIsOpen, override, foreignKey, table
|
|
|
217
230
|
fontWeight: 600,
|
|
218
231
|
color: '#212121',
|
|
219
232
|
paddingBottom: 14,
|
|
220
|
-
}, children: `Organization Foreign Key "${foreignKey}" Not Found` }), _jsxs("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, _jsx("strong", { children: `"${tableName}"` }), ` foreign key `, _jsx("strong", { children: `"${foreignKey}"` }), " is not present in the current query. If this query will never have organization specific data on it (this is rare), override this message.`"] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
233
|
+
}, children: `Organization Foreign Key "${foreignKey?.replaceAll('"', '')}" Not Found` }), _jsxs("div", { style: { marginBottom: '12px' }, children: [`Your organization table `, _jsx("strong", { children: `"${tableName?.replaceAll('"', '')}"` }), ` foreign key `, _jsx("strong", { children: `"${foreignKey?.replaceAll('"', '')}"` }), " is not present in the current query. If this query will never have organization specific data on it (this is rare), override this message.`"] }), _jsx("br", {}), _jsxs("div", { style: {
|
|
221
234
|
display: 'flex',
|
|
222
235
|
flexDirection: 'row',
|
|
223
236
|
gap: '12px',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ButtonComponentProps } from '@quillsql/react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
+
import { IDisposable } from 'monaco-editor';
|
|
3
4
|
import { TextInputComponentProps } from '../../components/UiComponents';
|
|
4
5
|
import { ColumnsByTable } from '../../utils/table';
|
|
5
6
|
interface CreateEditSqlViewProps {
|
|
@@ -18,9 +19,11 @@ interface CreateEditSqlViewProps {
|
|
|
18
19
|
}) => JSX.Element;
|
|
19
20
|
closeEditView: () => void;
|
|
20
21
|
addEditView: (request: string, query: string, name?: string, id?: string, columns?: any[]) => void;
|
|
22
|
+
setProvider: (provider: IDisposable | null) => void;
|
|
23
|
+
provider: IDisposable | null;
|
|
21
24
|
allTableData: ColumnsByTable[];
|
|
22
25
|
schemaIsLoading: boolean;
|
|
23
26
|
}
|
|
24
|
-
export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, SecondaryButtonComponent, LoadingComponent, Button, TextInput, Header, allTableData, schemaIsLoading, }: CreateEditSqlViewProps): JSX.Element;
|
|
27
|
+
export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, setProvider, provider, SecondaryButtonComponent, LoadingComponent, Button, TextInput, Header, allTableData, schemaIsLoading, }: CreateEditSqlViewProps): JSX.Element;
|
|
25
28
|
export {};
|
|
26
29
|
//# sourceMappingURL=CreateEditSqlView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateEditSqlView.d.ts","sourceRoot":"","sources":["../../../../src/forms/sql_views/CreateEditSqlView.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAKrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,OAAO,EAML,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQ3D,UAAU,sBAAsB;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAExE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC5D,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,GAAG,EAAE,KACZ,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,cAAc,EACd,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,gBAA2C,EAC3C,MAAuB,EACvB,SAA6B,EAC7B,MAAuB,EACvB,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAmYtC"}
|
|
@@ -7,7 +7,11 @@ import SqlTextEditor from '../../components/SqlTextEditor';
|
|
|
7
7
|
import { LoadingSpinner, MemoizedButton, MemoizedHeader, MemoizedTextInput, } from '../../components/UiComponents';
|
|
8
8
|
import { ForeignKeyModal } from '../client_onboard/CreateSqlViews';
|
|
9
9
|
import DynamicBanner from '../../components/DynamicBanner';
|
|
10
|
-
|
|
10
|
+
import { getDuplicateColumns } from '../../public_components/SQLViewManager';
|
|
11
|
+
import { processColumnReference } from '../../utils/columnProcessing';
|
|
12
|
+
import { processJoinASTWithDuplicateColumns } from '../../utils/astProcessing';
|
|
13
|
+
import { QUILL_SERVER } from '../../utils/constants';
|
|
14
|
+
export default function CreateEditSqlView({ containerStyle, initialSqlView, closeEditView, addEditView, setProvider, provider, SecondaryButtonComponent, LoadingComponent = () => _jsx(LoadingSpinner, {}), Button = MemoizedButton, TextInput = MemoizedTextInput, Header = MemoizedHeader, allTableData, schemaIsLoading, }) {
|
|
11
15
|
const [name, setName] = useState(initialSqlView?.name || '');
|
|
12
16
|
const [editViewQuery, setEditViewQuery] = useState(initialSqlView?.query || '');
|
|
13
17
|
const [ranViewQuery, setRanViewQuery] = useState(initialSqlView?.query || '');
|
|
@@ -19,6 +23,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
19
23
|
const [overrideFKCheck, setOverrideFKCheck] = useState(false);
|
|
20
24
|
const [isLoading, setIsLoading] = useState(false);
|
|
21
25
|
const [tableSearchQuery, setTableSearchQuery] = useState('');
|
|
26
|
+
const [editorMounted, setEditorMounted] = useState(false);
|
|
22
27
|
const [displayedTableData, setDisplayedTableData] = useState(allTableData);
|
|
23
28
|
const [errorInfo, setErrorInfo] = useState({ show: false, message: '' });
|
|
24
29
|
const [tableData, setTableData] = useState(undefined);
|
|
@@ -46,15 +51,17 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
46
51
|
};
|
|
47
52
|
const handleClickSchemaItem = async (event) => {
|
|
48
53
|
const name = event.target.textContent;
|
|
49
|
-
if (
|
|
50
|
-
|
|
54
|
+
if (!name) {
|
|
55
|
+
return;
|
|
51
56
|
}
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
const newQuery = `SELECT * FROM ${processColumnReference(name, state.client.databaseType)};`;
|
|
58
|
+
if (!editViewQuery || editViewQuery.length === 0) {
|
|
59
|
+
setEditViewQuery(newQuery);
|
|
54
60
|
}
|
|
61
|
+
await navigator.clipboard.writeText(newQuery);
|
|
55
62
|
};
|
|
56
|
-
const handleRunQuery = async () => {
|
|
57
|
-
const query = editViewQuery;
|
|
63
|
+
const handleRunQuery = async (overrideQuery) => {
|
|
64
|
+
const query = overrideQuery ? overrideQuery : editViewQuery;
|
|
58
65
|
// If this query has a limit at the end alert the user
|
|
59
66
|
if (/limit\s+\d+\s*;?\s*$/i.test(query)) {
|
|
60
67
|
setErrorInfo({
|
|
@@ -69,7 +76,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
69
76
|
setIsLoading(true);
|
|
70
77
|
setRunQueryButtonLoading(true);
|
|
71
78
|
setOverrideFKCheck(false);
|
|
72
|
-
if (
|
|
79
|
+
if (query.length === 0) {
|
|
73
80
|
setErrorInfo({ show: true, message: 'Error: Please enter a query.' });
|
|
74
81
|
setRunQueryButtonLoading(false);
|
|
75
82
|
return;
|
|
@@ -88,13 +95,39 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
88
95
|
// stringify all rows that are either jsonb or json
|
|
89
96
|
resp.rows = resp.rows.map((row) => {
|
|
90
97
|
for (const key in row) {
|
|
91
|
-
if (typeof row[key] === 'object') {
|
|
98
|
+
if (row[key] !== null && typeof row[key] === 'object') {
|
|
92
99
|
row[key] = JSON.stringify(row[key]);
|
|
93
100
|
}
|
|
94
101
|
}
|
|
95
102
|
return row;
|
|
96
103
|
});
|
|
97
|
-
|
|
104
|
+
const duplicateColumns = getDuplicateColumns(resp.fields);
|
|
105
|
+
if (duplicateColumns.length > 0) {
|
|
106
|
+
let parsedAST = resp.ast;
|
|
107
|
+
if (Array.isArray(resp.ast)) {
|
|
108
|
+
parsedAST = [0];
|
|
109
|
+
}
|
|
110
|
+
const tableNames = parsedAST.from.map((table) => {
|
|
111
|
+
const db = table.db ? `${table.db}.` : '';
|
|
112
|
+
return `${db}${table.table}`;
|
|
113
|
+
});
|
|
114
|
+
const newAst = processJoinASTWithDuplicateColumns(duplicateColumns, tableNames, allTableData, parsedAST);
|
|
115
|
+
const response = await fetch(`${QUILL_SERVER}/sqlify`, {
|
|
116
|
+
method: 'POST',
|
|
117
|
+
headers: {
|
|
118
|
+
'Content-Type': 'application/json',
|
|
119
|
+
},
|
|
120
|
+
body: JSON.stringify({
|
|
121
|
+
ast: { ...newAst },
|
|
122
|
+
publicKey: state.client._id,
|
|
123
|
+
}),
|
|
124
|
+
});
|
|
125
|
+
const jsonResponse = await response.json();
|
|
126
|
+
setEditViewQuery(jsonResponse.query);
|
|
127
|
+
await handleRunQuery(jsonResponse.query);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
setTableData({ fields: resp.fields, rows: resp.rows });
|
|
98
131
|
setViewAddable(true);
|
|
99
132
|
setRanViewQuery(query);
|
|
100
133
|
setIsLoading(false);
|
|
@@ -102,7 +135,7 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
102
135
|
return (_jsx("div", { style: {
|
|
103
136
|
...containerStyle,
|
|
104
137
|
gap: 6,
|
|
105
|
-
height: 'calc(100vh -
|
|
138
|
+
height: 'calc(100vh - 130px)',
|
|
106
139
|
}, children: _jsxs("div", { style: { display: 'flex', height: '100%', flexDirection: 'column' }, children: [_jsx(DynamicBanner, { header: initialSqlView
|
|
107
140
|
? `Edit "${initialSqlView.name}" view`
|
|
108
141
|
: 'Create SQL View', message: initialSqlView
|
|
@@ -138,34 +171,52 @@ export default function CreateEditSqlView({ containerStyle, initialSqlView, clos
|
|
|
138
171
|
gap: 20,
|
|
139
172
|
flexDirection: 'column',
|
|
140
173
|
width: 'calc(100% - 250px)',
|
|
141
|
-
|
|
174
|
+
maxHeight: '100%',
|
|
142
175
|
overflowX: 'hidden',
|
|
143
176
|
paddingRight: '24px',
|
|
144
177
|
}, children: [_jsxs("div", { style: {
|
|
145
|
-
|
|
146
|
-
flexDirection: 'row',
|
|
147
|
-
alignItems: 'flex-start',
|
|
148
|
-
justifyContent: 'space-between',
|
|
178
|
+
overflow: 'auto',
|
|
149
179
|
gap: 20,
|
|
150
|
-
width: '100%',
|
|
151
|
-
}, children: [_jsx(TextInput, { onChange: (e) => {
|
|
152
|
-
setAIPrompt(e.target.value);
|
|
153
|
-
}, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), _jsx(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
|
|
154
|
-
setEditViewQuery(e);
|
|
155
|
-
} }), _jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: 'Run query', isLoading: runQueryButtonLoading, onClick: handleRunQuery }) }), errorInfo.show ? (_jsx("div", { style: {
|
|
156
|
-
fontSize: 15,
|
|
157
|
-
fontWeight: '400',
|
|
158
|
-
}, children: _jsx("div", { style: {
|
|
159
|
-
padding: 30,
|
|
160
|
-
background: 'rgba(0,0,0,0.02)',
|
|
161
|
-
display: 'inline-block',
|
|
162
|
-
flex: 0,
|
|
163
|
-
borderRadius: 6,
|
|
164
|
-
}, children: errorInfo.message }) })) : null, isLoading && (_jsx("div", { style: {
|
|
165
|
-
height: 'calc(100vh - 589px)',
|
|
166
|
-
width: '100%',
|
|
167
180
|
display: 'flex',
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
181
|
+
flexDirection: 'column',
|
|
182
|
+
}, children: [_jsxs("div", { style: {
|
|
183
|
+
display: 'flex',
|
|
184
|
+
flexDirection: 'row',
|
|
185
|
+
alignItems: 'flex-start',
|
|
186
|
+
justifyContent: 'space-between',
|
|
187
|
+
gap: 20,
|
|
188
|
+
width: '100%',
|
|
189
|
+
}, children: [_jsx(TextInput, { onChange: (e) => {
|
|
190
|
+
setAIPrompt(e.target.value);
|
|
191
|
+
}, placeholder: 'Describe a query...', value: aiPrompt, id: 'ai-prompt', width: '100%' }), _jsx(Button, { label: 'Ask AI', isLoading: askAIButtonLoading, onClick: handleRunSqlPrompt })] }), _jsx(SqlTextEditor, { value: editViewQuery, setValue: (e) => {
|
|
192
|
+
setEditViewQuery(e);
|
|
193
|
+
}, setEditorMounted: (didMount) => {
|
|
194
|
+
setEditorMounted(didMount);
|
|
195
|
+
}, setPreviousProvier: (provider) => {
|
|
196
|
+
setProvider(provider);
|
|
197
|
+
}, previousProvider: provider, schema: displayedTableData, databaseType: state.client.databaseType }), editorMounted && (_jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: 'Run query', onClick: () => {
|
|
198
|
+
handleRunQuery();
|
|
199
|
+
} }) })), errorInfo.show ? (_jsx("div", { style: {
|
|
200
|
+
fontSize: 15,
|
|
201
|
+
fontWeight: '400',
|
|
202
|
+
}, children: _jsx("div", { style: {
|
|
203
|
+
padding: 30,
|
|
204
|
+
background: 'rgba(0,0,0,0.02)',
|
|
205
|
+
display: 'inline-block',
|
|
206
|
+
flex: 0,
|
|
207
|
+
borderRadius: 6,
|
|
208
|
+
}, children: errorInfo.message }) })) : null, isLoading && (_jsx("div", { style: {
|
|
209
|
+
height: 'calc(100vh - 589px)',
|
|
210
|
+
width: '100%',
|
|
211
|
+
display: 'flex',
|
|
212
|
+
justifyContent: 'center',
|
|
213
|
+
alignItems: 'center',
|
|
214
|
+
}, children: _jsx(LoadingComponent, {}) })), tableData && (_jsx(Table, { rows: tableData.rows, columns: tableData.fields, containerStyle: { height: '360px', minHeight: 250 } }))] }), viewAddable && (_jsx("div", { style: { width: '200px' }, children: _jsx(Button, { label: `${initialSqlView ? 'Save changes' : 'Create view'}`, onClick: () => {
|
|
215
|
+
const duplicateColumns2 = getDuplicateColumns(tableData?.fields);
|
|
216
|
+
if (duplicateColumns2.length > 0) {
|
|
217
|
+
alert(`Ambiguous column names found. Either use aliases or remove the column to make every column name unique: \n\n${duplicateColumns2.join('\n')}`);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
addEditSqlView(false);
|
|
221
|
+
} }) }))] })] }), _jsx(ForeignKeyModal, { isOpen: showFKModal, setIsOpen: setShowFKModal, override: addEditSqlView, foreignKey: state.client.customerFieldName, tableName: state.client.customerTableName })] }) }));
|
|
171
222
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EditFiltersModal.d.ts","sourceRoot":"","sources":["../../../src/modals/EditFiltersModal.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,kBAAkB,GACnB,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,iBAAiB,EAAE,GAAG,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC;IACpB,kBAAkB,EAAE,GAAG,CAAC;IACxB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,wBAAwB,EAAE,GAAG,CAAC;CAC/B,2CA2nBA"}
|
|
@@ -8,6 +8,7 @@ import InputLabel from '../components/InputLabel';
|
|
|
8
8
|
import CardSection from '../components/CardSection';
|
|
9
9
|
import TogglePrimitive from '../primitives/TogglePrimitive';
|
|
10
10
|
import { SegmentedControl } from '../components/SegmentedControl';
|
|
11
|
+
import { convertFieldTypeToJSType } from '../utils/columnProcessing';
|
|
11
12
|
export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }) {
|
|
12
13
|
const { state, dispatch } = useAdmin();
|
|
13
14
|
const [selectedDashboardName, setSelectedDashboardName] = useState('');
|
|
@@ -102,6 +103,12 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
|
|
|
102
103
|
filter: `${newDateFilter.label} (Date filter)`,
|
|
103
104
|
});
|
|
104
105
|
}
|
|
106
|
+
if (chart.chartType === 'pie' && isDateComparison) {
|
|
107
|
+
filterProblems.push({
|
|
108
|
+
chart: chart.name,
|
|
109
|
+
filter: `${newDateFilter.label} (Date comparison)`,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
105
112
|
});
|
|
106
113
|
}
|
|
107
114
|
updatedFilters.forEach((filter) => {
|
|
@@ -118,7 +125,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
|
|
|
118
125
|
}
|
|
119
126
|
const url = `${QUILL_SERVER}/dashfilter/${client._id}/`;
|
|
120
127
|
const body = {
|
|
121
|
-
newDashboardName: selectedDashboardName,
|
|
128
|
+
newDashboardName: selectedDashboardName.trim(),
|
|
122
129
|
filters: updatedFilters,
|
|
123
130
|
dateFilter: newDateFilter
|
|
124
131
|
? {
|
|
@@ -127,7 +134,9 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
|
|
|
127
134
|
primaryRange: initialRange,
|
|
128
135
|
}
|
|
129
136
|
: null,
|
|
130
|
-
name: selectedDashboard.name
|
|
137
|
+
name: selectedDashboard.name
|
|
138
|
+
? selectedDashboard.name.trim()
|
|
139
|
+
: selectedDashboardName.trim(),
|
|
131
140
|
databaseType: state.client.databaseType,
|
|
132
141
|
};
|
|
133
142
|
const headers = {
|
|
@@ -167,6 +176,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
|
|
|
167
176
|
body: JSON.stringify({
|
|
168
177
|
clientId: client._id,
|
|
169
178
|
databaseType: state.client.databaseType,
|
|
179
|
+
dashboardName: selectedDashboard.name,
|
|
170
180
|
}),
|
|
171
181
|
});
|
|
172
182
|
setIsOpen(false);
|
|
@@ -291,7 +301,7 @@ export function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, cli
|
|
|
291
301
|
? state.tables
|
|
292
302
|
.find((table) => table.name === filter.table)
|
|
293
303
|
?.columns.filter((column) => {
|
|
294
|
-
return column.fieldType === '
|
|
304
|
+
return (convertFieldTypeToJSType(column.fieldType) === 'string');
|
|
295
305
|
})
|
|
296
306
|
.map((column) => {
|
|
297
307
|
return {
|
|
@@ -98,14 +98,14 @@ export function NewDashboardModal({ isOpen, client, setIsOpen, onSave, ModalComp
|
|
|
98
98
|
}
|
|
99
99
|
const url = `${QUILL_SERVER}/dashfilter/${client._id}/`;
|
|
100
100
|
const body = {
|
|
101
|
-
newDashboardName: selectedDashboardName,
|
|
101
|
+
newDashboardName: selectedDashboardName.trim(),
|
|
102
102
|
filters: updatedFilters,
|
|
103
103
|
dateFilter: showDateFilter && {
|
|
104
104
|
...newDateFilter,
|
|
105
105
|
comparison: isDateComparison,
|
|
106
106
|
primaryRange: initialRange,
|
|
107
107
|
},
|
|
108
|
-
name: selectedDashboardName,
|
|
108
|
+
name: selectedDashboardName.trim(),
|
|
109
109
|
};
|
|
110
110
|
const headers = {
|
|
111
111
|
'Content-Type': 'application/json',
|
|
@@ -45,7 +45,7 @@ const createStyles = (theme) => ({
|
|
|
45
45
|
marginTop: '0px',
|
|
46
46
|
marginBottom: '4px',
|
|
47
47
|
fontWeight: theme.labelFontWeight,
|
|
48
|
-
color: theme.
|
|
48
|
+
color: theme.primaryTextColor,
|
|
49
49
|
},
|
|
50
50
|
group: {
|
|
51
51
|
display: 'flex',
|
|
@@ -105,7 +105,7 @@ export default function PromoteDashModal({ ModalComponent, isOpen, setIsOpen, cl
|
|
|
105
105
|
}), onChange: setModalSelectedDashboard, value: modalSelectedDashboard, theme: theme }) }) }), _jsxs("div", { style: styles.multiContainer, children: [_jsxs("div", { style: styles.group, children: [_jsx("h1", { style: styles.header, children: "From" }), _jsx("div", { style: styles.text, children: _jsx(DropDownMenu, { items: [client], setSelected: () => { }, selected: client, theme: theme, disabled: true }) })] }), _jsx("div", { style: styles.group, children: _jsx("div", { style: styles.text, children: _jsx(QuillSelectComponent, { label: "To", options: clients
|
|
106
106
|
.filter((c) => c.name !== client.name)
|
|
107
107
|
.map((client) => {
|
|
108
|
-
return { label: client.name, value: client
|
|
108
|
+
return { label: client.name, value: client };
|
|
109
109
|
}), onChange: setSelectedToClient, value: selectedToClient, theme: theme }) }) })] }), _jsx("div", { style: {
|
|
110
110
|
display: 'flex',
|
|
111
111
|
justifyContent: 'center',
|
|
@@ -7,7 +7,8 @@ interface PromoteViewModalProps {
|
|
|
7
7
|
client: any;
|
|
8
8
|
views: any[];
|
|
9
9
|
clients: any[];
|
|
10
|
+
parentRef: any;
|
|
10
11
|
}
|
|
11
|
-
export default function PromoteViewModal({ ModalComponent, isOpen, setIsOpen, clientId, client, clients, views, }: PromoteViewModalProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default function PromoteViewModal({ ModalComponent, isOpen, setIsOpen, clientId, client, clients, views, parentRef, }: PromoteViewModalProps): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|
|
13
14
|
//# sourceMappingURL=PromoteViewModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"PromoteViewModal.d.ts","sourceRoot":"","sources":["../../../src/modals/PromoteViewModal.tsx"],"names":[],"mappings":";AAOA,UAAU,qBAAqB;IAC7B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;CAChB;AAgED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,cAAc,EACd,MAAM,EACN,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,qBAAqB,2CAuGvB"}
|