You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2021/06/18 00:43:20 UTC
[superset] 01/01: fix edit for dynamic forms
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a commit to branch hugh/fix-bg-edit
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 74334986b7a339aeb8ca26352d13c98a08c83f5c
Author: hughhhh <hu...@gmail.com>
AuthorDate: Thu Jun 17 20:41:58 2021 -0400
fix edit for dynamic forms
---
.../DatabaseModal/DatabaseConnectionForm.tsx | 5 ++-
.../CRUD/data/database/DatabaseModal/index.tsx | 52 +++++++++++++---------
2 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm.tsx b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm.tsx
index db2d4ae..e809060 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm.tsx
@@ -94,12 +94,13 @@ const CredentialsInfo = ({ changeMethods, isEditMode, db }: FieldPropTypes) => {
</>
)}
{uploadOption === CredentialInfoOptions.copyPaste || isEditMode ? (
- <div className="input-container" onChange={changeMethods.onChange}>
+ <div className="input-container">
<span className="label-select">Service Account</span>
<textarea
className="input-form"
- name="encrypted_extra"
+ name="credentials_info"
value={db?.parameters?.credentials_info}
+ onChange={changeMethods.onParametersChange}
/>
<span className="label-paste">
Copy and paste the entire service account .json file here
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
index 2c9c49d..8c73135 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
@@ -192,13 +192,6 @@ function dbReducer(
[action.payload.name]: action.payload.value,
};
case ActionType.parametersChange:
- if (action.payload.name === 'encrypted_extra') {
- return {
- ...trimmedState,
- encrypted_extra: action.payload.value,
- parameters: {},
- };
- }
return {
...trimmedState,
parameters: {
@@ -242,6 +235,21 @@ function dbReducer(
).toString();
}
+ if (action.payload.backend === 'bigquery') {
+ return {
+ ...action.payload,
+ engine: trimmedState.engine,
+ configuration_method: action.payload.configuration_method,
+ extra_json: deserializeExtraJSON,
+ parameters: {
+ query,
+ credentials_info: JSON.stringify(
+ action.payload?.parameters?.credentials_info || '',
+ ),
+ },
+ };
+ }
+
return {
...action.payload,
engine: trimmedState.engine,
@@ -250,9 +258,6 @@ function dbReducer(
parameters: {
...action.payload.parameters,
query,
- credentials_info: JSON.stringify(
- action.payload?.parameters?.credentials_info || '',
- ),
},
};
case ActionType.dbSelected:
@@ -346,7 +351,7 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({
const onSave = async () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { id, ...update } = db || {};
- if (update?.parameters?.query) {
+ if (update?.parameters?.query || update?.parameters?.query) {
// convert query params into dictionary
update.parameters.query = JSON.parse(
`{"${decodeURI((update?.parameters?.query as string) || '')
@@ -354,6 +359,20 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({
.replace(/&/g, '","')
.replace(/=/g, '":"')}"}`,
);
+ } else {
+ update.parameters.query = {};
+ }
+
+ const engine = update.backend || update.engine;
+ if (
+ engine === 'bigquery' &&
+ update.configuration_method === CONFIGURATION_METHOD.DYNAMIC_FORM &&
+ update.parameters?.credentials_info
+ ) {
+ // wrap encrypted_extra in credentials_info only for BigQuery
+ update.encrypted_extra = JSON.stringify({
+ credentials_info: JSON.parse(update.parameters?.credentials_info),
+ });
}
if (db?.id) {
@@ -385,17 +404,6 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({
}
} else if (db) {
// Create
- if (
- update.engine === 'bigquery' &&
- update.configuration_method === CONFIGURATION_METHOD.DYNAMIC_FORM &&
- update.encrypted_extra
- ) {
- // wrap encrypted_extra in credentials_info only for BigQuery
- update.encrypted_extra = JSON.stringify({
- credentials_info: JSON.parse(update.encrypted_extra),
- });
- }
-
if (update?.extra_json) {
// convert extra_json to back to string
update.extra = JSON.stringify({