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

pkdotson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 9da7c1f7b8 feat: hack db connection modal  ctabtns (#20017)
9da7c1f7b8 is described below

commit 9da7c1f7b83abea20e3620d5461a47dc4a2ab019
Author: Phillip Kelley-Dotson <[email protected]>
AuthorDate: Tue Jul 5 08:56:12 2022 -0700

    feat: hack db connection modal  ctabtns (#20017)
    
    * add flow for dbconnmodal to datasetmodal
    
    * fix bug
    
    * second part
    
    * fix dataset to sql lab
    
    * fix lint
    
    * more lint
    
    * add key value
    
    * fix type
    
    * add new styling
    
    * remove undefined from types
---
 .../SqlLab/components/SqlEditorLeftBar/index.tsx   | 26 ++++++++++++--
 .../src/components/DatabaseSelector/index.tsx      |  2 +-
 .../src/components/TableSelector/index.tsx         |  9 +++--
 superset-frontend/src/utils/localStorageHelpers.ts |  2 ++
 .../data/database/DatabaseModal/ModalHeader.tsx    |  4 +--
 .../CRUD/data/database/DatabaseModal/index.tsx     | 40 ++++++++++++++++++++++
 .../CRUD/data/database/DatabaseModal/styles.ts     |  2 --
 .../views/CRUD/data/dataset/AddDatasetModal.tsx    | 14 ++++++++
 .../src/views/CRUD/data/dataset/DatasetList.tsx    |  7 ++++
 9 files changed, 96 insertions(+), 10 deletions(-)

diff --git a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx 
b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx
index f742494654..ed0d99cfa1 100644
--- a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx
+++ b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx
@@ -25,6 +25,7 @@ import React, {
   Dispatch,
   SetStateAction,
 } from 'react';
+import querystring from 'query-string';
 import Button from 'src/components/Button';
 import { t, styled, css, SupersetTheme } from '@superset-ui/core';
 import Collapse from 'src/components/Collapse';
@@ -34,6 +35,11 @@ import { IconTooltip } from 'src/components/IconTooltip';
 import { QueryEditor } from 'src/SqlLab/types';
 import { DatabaseObject } from 'src/components/DatabaseSelector';
 import { EmptyStateSmall } from 'src/components/EmptyState';
+import {
+  getItem,
+  LocalStorageKeys,
+  setItem,
+} from 'src/utils/localStorageHelpers';
 import TableElement, { Table, TableElementProps } from '../TableElement';
 
 interface ExtendedTable extends Table {
@@ -105,10 +111,26 @@ export default function SqlEditorLeftBar({
   // that require and modify the queryEditor
   const queryEditorRef = useRef<QueryEditor>(queryEditor);
   const [emptyResultsWithSearch, setEmptyResultsWithSearch] = useState(false);
+  const [userSelectedDb, setUserSelected] = useState<DatabaseObject | null>(
+    null,
+  );
+
+  useEffect(() => {
+    const bool = querystring.parse(window.location.search).db;
+    const userSelected = getItem(
+      LocalStorageKeys.db,
+      null,
+    ) as DatabaseObject | null;
+
+    if (bool && userSelected) {
+      setUserSelected(userSelected);
+      setItem(LocalStorageKeys.db, null);
+    } else setUserSelected(database);
+  }, []);
 
   useEffect(() => {
     queryEditorRef.current = queryEditor;
-  }, [queryEditor]);
+  }, [queryEditor, database]);
 
   const onEmptyResults = (searchText?: string) => {
     setEmptyResultsWithSearch(!!searchText);
@@ -222,7 +244,7 @@ export default function SqlEditorLeftBar({
       <TableSelectorMultiple
         onEmptyResults={onEmptyResults}
         emptyState={emptyStateComponent}
-        database={database}
+        database={userSelectedDb}
         getDbList={actions.setDatabases}
         handleError={actions.addDangerToast}
         onDbChange={onDbChange}
diff --git a/superset-frontend/src/components/DatabaseSelector/index.tsx 
b/superset-frontend/src/components/DatabaseSelector/index.tsx
index 718177a139..4a5e94b2bc 100644
--- a/superset-frontend/src/components/DatabaseSelector/index.tsx
+++ b/superset-frontend/src/components/DatabaseSelector/index.tsx
@@ -87,7 +87,7 @@ export type DatabaseObject = {
 type SchemaValue = { label: string; value: string };
 
 export interface DatabaseSelectorProps {
-  db?: DatabaseObject;
+  db?: DatabaseObject | null;
   emptyState?: ReactNode;
   formMode?: boolean;
   getDbList?: (arg0: any) => {};
diff --git a/superset-frontend/src/components/TableSelector/index.tsx 
b/superset-frontend/src/components/TableSelector/index.tsx
index fcc5dbe10d..d7b867347a 100644
--- a/superset-frontend/src/components/TableSelector/index.tsx
+++ b/superset-frontend/src/components/TableSelector/index.tsx
@@ -81,7 +81,7 @@ const TableLabel = styled.span`
 
 interface TableSelectorProps {
   clearable?: boolean;
-  database?: DatabaseObject;
+  database?: DatabaseObject | null;
   emptyState?: ReactNode;
   formMode?: boolean;
   getDbList?: (arg0: any) => {};
@@ -166,12 +166,11 @@ const TableSelector: 
FunctionComponent<TableSelectorProps> = ({
   onTableSelectChange,
 }) => {
   const [currentDatabase, setCurrentDatabase] = useState<
-    DatabaseObject | undefined
+    DatabaseObject | null | undefined
   >(database);
   const [currentSchema, setCurrentSchema] = useState<string | undefined>(
     schema,
   );
-
   const [tableOptions, setTableOptions] = useState<TableOption[]>([]);
   const [tableSelectValue, setTableSelectValue] = useState<
     SelectValue | undefined
@@ -190,6 +189,10 @@ const TableSelector: FunctionComponent<TableSelectorProps> 
= ({
     }
   }, [database, tableSelectMode]);
 
+  useEffect(() => {
+    setCurrentDatabase(database);
+  }, [database]);
+
   useEffect(() => {
     if (tableSelectMode === 'single') {
       setTableSelectValue(
diff --git a/superset-frontend/src/utils/localStorageHelpers.ts 
b/superset-frontend/src/utils/localStorageHelpers.ts
index 482f413372..28de043200 100644
--- a/superset-frontend/src/utils/localStorageHelpers.ts
+++ b/superset-frontend/src/utils/localStorageHelpers.ts
@@ -31,6 +31,7 @@ export enum LocalStorageKeys {
    * and therefore should be done in a major release.
    */
   filter_box_transition_snoozed_at = 'filter_box_transition_snoozed_at',
+  db = 'db',
   chart_split_sizes = 'chart_split_sizes',
   controls_width = 'controls_width',
   datasource_width = 'datasource_width',
@@ -54,6 +55,7 @@ export enum LocalStorageKeys {
 
 export type LocalStorageValues = {
   filter_box_transition_snoozed_at: Record<number, number>;
+  db: object | null;
   chart_split_sizes: [number, number];
   controls_width: number;
   datasource_width: number;
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 7cdcbaba28..2ec124c341 100644
--- 
a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx
+++ 
b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx
@@ -109,8 +109,8 @@ const ModalHeader = ({
       <StyledFormHeader>
         <p className="helper-top"> STEP 3 OF 3 </p>
         <h4 className="step-3-text">
-          Your database was successfully connected! Here are some optional
-          settings for your database
+          Your database was successfully connected! Create a dataset to begin
+          visualizing your data as a chart or go to SQL Lab to query your data.
         </h4>
         <p className="helper-bottom">
           Need help? Learn more about{' '}
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 fbe05ad318..3e681243a0 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
@@ -31,6 +31,7 @@ import React, {
   useReducer,
   Reducer,
 } from 'react';
+import { setItem, LocalStorageKeys } from 'src/utils/localStorageHelpers';
 import { UploadChangeParam, UploadFile } from 'antd/lib/upload/interface';
 import Tabs from 'src/components/Tabs';
 import { AntdSelect, Upload } from 'src/components';
@@ -191,6 +192,11 @@ type DBReducerActionType =
       };
     };
 
+const StyledBtns = styled.div`
+  margin-bottom: ${({ theme }) => theme.gridUnit * 3}px;
+  margin-left: ${({ theme }) => theme.gridUnit * 3}px;
+`;
+
 function dbReducer(
   state: Partial<DatabaseObject> | null,
   action: DBReducerActionType,
@@ -1109,6 +1115,39 @@ const DatabaseModal: 
FunctionComponent<DatabaseModalProps> = ({
     return <></>;
   };
 
+  const fetchAndSetDB = () => {
+    setLoading(true);
+    fetchResource(dbFetched?.id as number).then(r => {
+      setItem(LocalStorageKeys.db, r);
+    });
+  };
+
+  const renderCTABtns = () => (
+    <StyledBtns>
+      <Button
+        // eslint-disable-next-line no-return-assign
+        buttonStyle="default"
+        onClick={() => {
+          fetchAndSetDB();
+          window.location.href = '/tablemodelview/list';
+        }}
+      >
+        {' '}
+        {t('CREATE A DATASET')}{' '}
+      </Button>
+      <Button
+        buttonStyle="default"
+        // eslint-disable-next-line no-return-assign
+        onClick={() => {
+          fetchAndSetDB();
+          window.location.href = `/superset/sqllab/?db=true`;
+        }}
+      >
+        {t('QUERY DATA IN SQL LAB')}{' '}
+      </Button>
+    </StyledBtns>
+  );
+
   const renderFinishState = () => {
     if (!editNewDb) {
       return (
@@ -1440,6 +1479,7 @@ const DatabaseModal: 
FunctionComponent<DatabaseModalProps> = ({
             dbModel={dbModel}
             editNewDb={editNewDb}
           />
+          {renderCTABtns()}
           {renderFinishState()}
         </>
       ) : (
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 d3d0b11dd7..de482a7eef 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
@@ -40,8 +40,6 @@ export const marginBottom = (theme: SupersetTheme) => css`
 `;
 
 export const StyledFormHeader = styled.header`
-  border-bottom: ${({ theme }) => `${theme.gridUnit * 0.25}px solid
-    ${theme.colors.grayscale.light2};`}
   padding: ${({ theme }) => theme.gridUnit * 2}px
     ${({ theme }) => theme.gridUnit * 4}px;
   line-height: ${({ theme }) => theme.gridUnit * 6}px;
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx 
b/superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx
index 10a3b7bb77..dd05e25a9e 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx
+++ b/superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx
@@ -23,6 +23,11 @@ import Modal from 'src/components/Modal';
 import TableSelector from 'src/components/TableSelector';
 import withToasts from 'src/components/MessageToasts/withToasts';
 import { DatabaseObject } from 'src/components/DatabaseSelector';
+import {
+  getItem,
+  LocalStorageKeys,
+  setItem,
+} from 'src/utils/localStorageHelpers';
 
 type DatasetAddObject = {
   id: number;
@@ -69,6 +74,14 @@ const DatasetModal: FunctionComponent<DatasetModalProps> = ({
     setDisableSave(currentDatabase === undefined || currentTableName === '');
   }, [currentTableName, currentDatabase]);
 
+  useEffect(() => {
+    const currentUserSelectedDb = getItem(
+      LocalStorageKeys.db,
+      null,
+    ) as DatabaseObject;
+    if (currentUserSelectedDb) setCurrentDatabase(currentUserSelectedDb);
+  }, []);
+
   const onDbChange = (db: DatabaseObject) => {
     setCurrentDatabase(db);
   };
@@ -89,6 +102,7 @@ const DatasetModal: FunctionComponent<DatasetModalProps> = ({
   };
 
   const hide = () => {
+    setItem(LocalStorageKeys.db, null);
     clearModal();
     onHide();
   };
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx 
b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
index 7dd59271e2..c5b182871f 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
+++ b/superset-frontend/src/views/CRUD/data/dataset/DatasetList.tsx
@@ -31,6 +31,7 @@ import {
   createFetchDistinct,
   createErrorHandler,
 } from 'src/views/CRUD/utils';
+import { getItem, LocalStorageKeys } from 'src/utils/localStorageHelpers';
 import { ColumnObject } from 'src/views/CRUD/data/dataset/types';
 import { useListViewResource } from 'src/views/CRUD/hooks';
 import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
@@ -180,6 +181,12 @@ const DatasetList: FunctionComponent<DatasetListProps> = ({
     hasPerm('can_export') && isFeatureEnabled(FeatureFlag.VERSIONED_EXPORT);
 
   const initialSort = SORT_BY;
+  useEffect(() => {
+    const db = getItem(LocalStorageKeys.db, null);
+    if (!loading && db) {
+      setDatasetAddModalOpen(true);
+    }
+  }, [loading]);
 
   const openDatasetEditModal = useCallback(
     ({ id }: Dataset) => {

Reply via email to