This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch pexdax/db-connection-ui
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/pexdax/db-connection-ui by 
this push:
     new 9cecb8b  feat: Added Dynamic form link to SQL Alchemy Form (#15208)
9cecb8b is described below

commit 9cecb8b5c1af3d1885f9cd14eee95cad686c8a1e
Author: AAfghahi <[email protected]>
AuthorDate: Wed Jun 16 21:07:38 2021 -0400

    feat: Added Dynamic form link to SQL Alchemy Form (#15208)
    
    * fix: add icons (#15122)
    
    * added alerts
    
    * revisions
    
    * added icon
    
    * added dynamic form link
---
 .../data/database/DatabaseModal/SqlAlchemyForm.tsx |  4 +-
 .../CRUD/data/database/DatabaseModal/index.tsx     | 61 +++++++++++++++++-----
 .../CRUD/data/database/DatabaseModal/styles.ts     |  7 +++
 3 files changed, 57 insertions(+), 15 deletions(-)

diff --git 
a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
 
b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
index 57105eb..786aeac 100644
--- 
a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
+++ 
b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
@@ -28,11 +28,13 @@ const SqlAlchemyTab = ({
   onInputChange,
   testConnection,
   conf,
+  isEditMode = false,
 }: {
   db: DatabaseObject | null;
   onInputChange: EventHandler<ChangeEvent<HTMLInputElement>>;
   testConnection: EventHandler<MouseEvent<HTMLElement>>;
   conf: { SQLALCHEMY_DOCS_URL: string; SQLALCHEMY_DISPLAY_TEXT: string };
+  isEditMode?: boolean;
 }) => (
   <>
     <StyledInputContainer>
@@ -45,7 +47,7 @@ const SqlAlchemyTab = ({
           type="text"
           name="database_name"
           data-test="database-name-input"
-          value={db?.database_name || ''}
+          value={isEditMode ? db?.database_name : ''}
           placeholder={t('Name your database')}
           onChange={onInputChange}
         />
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 f1b8662..a2f3145 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
@@ -58,6 +58,7 @@ import {
   antDModalStyles,
   antDTabsStyles,
   buttonLinkStyles,
+  alchemyButtonLinkStyles,
   TabHeader,
   formHelperStyles,
   formStyles,
@@ -126,7 +127,11 @@ type DBReducerActionType =
     }
   | {
       type: ActionType.configMethodChange;
-      payload: { configuration_method: CONFIGURATION_METHOD };
+      payload: {
+        database_name?: string;
+        engine?: string;
+        configuration_method: CONFIGURATION_METHOD;
+      };
     };
 
 function dbReducer(
@@ -594,6 +599,11 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> 
= ({
     setTabKey(key);
   };
 
+  const isDynamic = (engine: string | undefined) =>
+    availableDbs?.databases.filter(
+      (DB: DatabaseObject) => DB.engine === engine,
+    )[0].parameters !== undefined;
+
   return useTabLayout ? (
     <Modal
       css={(theme: SupersetTheme) => [
@@ -635,19 +645,40 @@ const DatabaseModal: 
FunctionComponent<DatabaseModalProps> = ({
       >
         <StyledBasicTab tab={<span>{t('Basic')}</span>} key="1">
           {useSqlAlchemyForm ? (
-            <SqlAlchemyForm
-              db={db as DatabaseObject}
-              onInputChange={({ target }: { target: HTMLInputElement }) =>
-                onChange(ActionType.inputChange, {
-                  type: target.type,
-                  name: target.name,
-                  checked: target.checked,
-                  value: target.value,
-                })
-              }
-              conf={conf}
-              testConnection={testConnection}
-            />
+            <>
+              <SqlAlchemyForm
+                db={db as DatabaseObject}
+                onInputChange={({ target }: { target: HTMLInputElement }) =>
+                  onChange(ActionType.inputChange, {
+                    type: target.type,
+                    name: target.name,
+                    checked: target.checked,
+                    value: target.value,
+                  })
+                }
+                conf={conf}
+                testConnection={testConnection}
+                isEditMode={isEditMode}
+              />
+              {isDynamic(db?.engine) && (
+                <Button
+                  buttonStyle="link"
+                  onClick={() =>
+                    setDB({
+                      type: ActionType.configMethodChange,
+                      payload: {
+                        database_name: db?.database_name,
+                        configuration_method: 
CONFIGURATION_METHOD.DYNAMIC_FORM,
+                        engine: db?.engine,
+                      },
+                    })
+                  }
+                  css={theme => alchemyButtonLinkStyles(theme)}
+                >
+                  Connect this database using the dynamic form instead
+                </Button>
+              )}
+            </>
           ) : (
             <DatabaseConnectionForm
               isEditMode
@@ -863,8 +894,10 @@ const DatabaseModal: FunctionComponent<DatabaseModalProps> 
= ({
                     setDB({
                       type: ActionType.configMethodChange,
                       payload: {
+                        engine: db.engine,
                         configuration_method:
                           CONFIGURATION_METHOD.SQLALCHEMY_URI,
+                        database_name: db.database_name,
                       },
                     })
                   }
diff --git 
a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts 
b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
index d293b74..082cd82 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
@@ -339,6 +339,13 @@ export const buttonLinkStyles = css`
   text-transform: initial;
 `;
 
+export const alchemyButtonLinkStyles = (theme: SupersetTheme) => css`
+  font-weight: 400;
+  text-transform: initial;
+  padding: ${theme.gridUnit * 8}px 0 0;
+  margin-left: 0px;
+`;
+
 export const TabHeader = styled.div`
   display: flex;
   flex-direction: column;

Reply via email to