diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx index 93b4f3f0c3052..1470cf6b74e8a 100644 --- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx +++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx @@ -83,7 +83,11 @@ const ModalHeader = ({ Enter Primary Credentials Need help? Learn how to connect your database{' '} - + 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 85ce5a502bb68..55ffec9c979af 100644 --- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx +++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx @@ -353,6 +353,10 @@ const DatabaseModal: FunctionComponent = ({ addDangerToast, ); + const isDynamic = (engine: string | undefined) => + availableDbs?.databases.filter( + (DB: DatabaseObject) => DB.backend === engine || DB.engine === engine, + )[0].parameters !== undefined; const showDBError = validationErrors || dbErrors; const isEmpty = (data?: Object | null) => data && Object.keys(data).length === 0; @@ -398,13 +402,13 @@ const DatabaseModal: FunctionComponent = ({ // Clone DB object const dbToUpdate = JSON.parse(JSON.stringify(update)); - // Validate DB before saving - await getValidation(dbToUpdate, true); - if (validationErrors && !isEmpty(validationErrors)) { - return; - } - if (dbToUpdate.configuration_method === CONFIGURATION_METHOD.DYNAMIC_FORM) { + // Validate DB before saving + await getValidation(dbToUpdate, true); + if (validationErrors && !isEmpty(validationErrors)) { + return; + } + if (dbToUpdate?.parameters?.query) { // convert query params into dictionary dbToUpdate.parameters.query = JSON.parse( @@ -426,27 +430,29 @@ const DatabaseModal: FunctionComponent = ({ } } + if (dbToUpdate?.extra_json) { + // convert extra_json to back to string + dbToUpdate.extra = JSON.stringify({ + ...dbToUpdate.extra_json, + metadata_params: JSON.parse( + (dbToUpdate?.extra_json?.metadata_params as string) || '{}', + ), + engine_params: JSON.parse( + (dbToUpdate?.extra_json?.engine_params as string) || '{}', + ), + schemas_allowed_for_csv_upload: + (dbToUpdate?.extra_json?.schemas_allowed_for_csv_upload as string) || + '[]', + }); + } + console.log(dbToUpdate.extra); + if (db?.id) { - if (dbToUpdate?.extra_json) { - // convert extra_json to back to string - dbToUpdate.extra = JSON.stringify({ - ...dbToUpdate.extra_json, - metadata_params: JSON.parse( - dbToUpdate?.extra_json?.metadata_params as string, - ), - engine_params: JSON.parse( - dbToUpdate?.extra_json?.engine_params as string, - ), - schemas_allowed_for_csv_upload: JSON.parse( - dbToUpdate?.extra_json?.schemas_allowed_for_csv_upload as string, - ), - }); - } setLoading(true); const result = await updateResource( db.id as number, dbToUpdate as DatabaseObject, - true, + dbToUpdate.configuration_method === CONFIGURATION_METHOD.DYNAMIC_FORM, // onShow toast on SQLA Forms ); if (result) { if (onDatabaseAdd) { @@ -458,23 +464,11 @@ const DatabaseModal: FunctionComponent = ({ } } else if (db) { // Create - if (dbToUpdate?.extra_json) { - // convert extra_json to back to string - dbToUpdate.extra = JSON.stringify({ - ...dbToUpdate.extra_json, - metadata_params: JSON.parse( - dbToUpdate?.extra_json?.metadata_params as string, - ), - engine_params: JSON.parse( - dbToUpdate?.extra_json?.engine_params as string, - ), - schemas_allowed_for_csv_upload: JSON.parse( - dbToUpdate?.extra_json?.schemas_allowed_for_csv_upload as string, - ), - }); - } setLoading(true); - const dbId = await createResource(dbToUpdate as DatabaseObject, true); + const dbId = await createResource( + dbToUpdate as DatabaseObject, + dbToUpdate.configuration_method === CONFIGURATION_METHOD.DYNAMIC_FORM, // onShow toast on SQLA Forms + ); if (dbId) { setHasConnectedDb(true); if (onDatabaseAdd) { @@ -804,11 +798,6 @@ const DatabaseModal: FunctionComponent = ({ ); }; - const isDynamic = (engine: string | undefined) => - availableDbs?.databases.filter( - (DB: DatabaseObject) => DB.backend === engine || DB.engine === engine, - )[0].parameters !== undefined; - return useTabLayout ? ( [