From d5c5167116416b66a1919e5be00d46c01890c037 Mon Sep 17 00:00:00 2001 From: "Hugh A. Miles II" Date: Tue, 1 Jun 2021 14:00:46 -0400 Subject: [PATCH] feat(db-connection-ui): Allow users to pick engine (#14884) * poc picker for db selection * working select * setup is loading for available dbs and step1 view * fix on close * update on fetch * remove unneeded code * add some styls --- .../data/database/DatabaseModal/index.tsx | 49 +++++++++++++++---- .../data/database/DatabaseModal/styles.ts | 4 ++ 2 files changed, 44 insertions(+), 9 deletions(-) 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 265a8561923c7..e73ea12908d6a 100644 --- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx +++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx @@ -25,7 +25,7 @@ import React, { Reducer, } from 'react'; import Tabs from 'src/components/Tabs'; -import { Alert } from 'src/common/components'; +import { Alert, Select } from 'src/common/components'; import Modal from 'src/components/Modal'; import Button from 'src/components/Button'; import withToasts from 'src/messageToasts/enhancers/withToasts'; @@ -59,6 +59,7 @@ import { formHelperStyles, formStyles, StyledBasicTab, + SelectDatabaseStyles, } from './styles'; const DOCUMENTATION_LINK = @@ -119,7 +120,7 @@ type DBReducerActionType = | { type: ActionType.configMethodChange; payload: { configuration_method: CONFIGURATION_METHOD }; - }; + } function dbReducer( state: Partial | null, @@ -166,13 +167,16 @@ function dbReducer( ...action.payload, }; case ActionType.dbSelected: + return { + ...action.payload, + }; case ActionType.configMethodChange: return { ...action.payload, }; case ActionType.reset: default: - return {}; + return null; } } @@ -195,6 +199,7 @@ const DatabaseModal: FunctionComponent = ({ const [validationErrors, getValidation] = useDatabaseValidation(); const [hasConnectedDb, setHasConnectedDb] = useState(false); const [dbName, setDbName] = useState(''); + const [isLoading, setLoading] = useState(false); const conf = useCommonConf(); const isEditMode = !!databaseId; @@ -298,12 +303,7 @@ const DatabaseModal: FunctionComponent = ({ if (show) { setTabKey(DEFAULT_TAB_KEY); getAvailableDbs(); - setDB({ - type: ActionType.dbSelected, - payload: { - configuration_method: CONFIGURATION_METHOD.SQLALCHEMY_URI, - }, // todo hook this up to step 1 - }); + setLoading(true); } if (databaseId && show) { fetchDB(); @@ -322,6 +322,12 @@ const DatabaseModal: FunctionComponent = ({ } }, [dbFetched]); + useEffect(() => { + if (isLoading) { + setLoading(false); + } + }, [availableDbs, isLoading]); + const tabChange = (key: string) => { setTabKey(key); }; @@ -518,6 +524,31 @@ const DatabaseModal: FunctionComponent = ({ getValidation={() => getValidation(db)} validationErrors={validationErrors} /> + {!isLoading && !db && ( + + + + + )}