From edac72eb23b6e2c7c98e9a702013b67a82564427 Mon Sep 17 00:00:00 2001
From: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Date: Wed, 1 Feb 2023 09:49:25 -0600
Subject: [PATCH] feat: Enable new dataset creation flow II (#22835)
---
.../DatasourcePanel/DatasourcePanel.test.tsx | 21 ---
.../ColumnSelectPopover.tsx | 4 +-
.../src/pages/ChartCreation/index.tsx | 5 +-
.../views/CRUD/data/database/DatabaseList.tsx | 4 +
.../database/DatabaseModal/index.test.tsx | 8 +
.../data/database/DatabaseModal/index.tsx | 18 +-
.../dataset/AddDataset/AddDataset.test.tsx | 8 +
.../AddDataset/DatasetPanel/fixtures.ts | 1 +
.../dataset/AddDataset/DatasetPanel/index.tsx | 17 +-
.../dataset/AddDataset/Footer/Footer.test.tsx | 8 +
.../data/dataset/AddDataset/Footer/index.tsx | 14 +-
.../AddDataset/LeftPanel/LeftPanel.test.tsx | 24 ++-
.../dataset/AddDataset/LeftPanel/index.tsx | 106 +++++++----
.../CRUD/data/dataset/AddDataset/index.tsx | 54 +++---
.../CRUD/data/dataset/AddDataset/types.tsx | 8 +-
.../CRUD/data/dataset/AddDatasetModal.tsx | 172 ------------------
.../DatasetLayout/DatasetLayout.test.tsx | 8 +
.../views/CRUD/data/dataset/DatasetList.tsx | 45 +----
.../src/views/CRUD/data/dataset/styles.ts | 1 +
.../src/views/CRUD/data/hooks.ts | 48 ++++-
.../src/views/components/RightMenu.test.tsx | 3 -
.../src/views/components/RightMenu.tsx | 29 +--
superset/views/datasource/views.py | 5 +-
23 files changed, 236 insertions(+), 375 deletions(-)
delete mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx
diff --git a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
index eedc2fb10117e..95258f443ec45 100644
--- a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
+++ b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
@@ -186,27 +186,6 @@ test('should render a create dataset infobox', async () => {
expect(infoboxText).toBeVisible();
});
-test('should render a save dataset modal when "Create a dataset" is clicked', async () => {
- const newProps = {
- ...props,
- datasource: {
- ...datasource,
- type: DatasourceType.Query,
- },
- };
- render(, { useRedux: true, useDnd: true });
-
- const createButton = await screen.findByRole('button', {
- name: /create a dataset/i,
- });
-
- userEvent.click(createButton);
-
- const saveDatasetModalTitle = screen.getByText(/save or overwrite dataset/i);
-
- expect(saveDatasetModalTitle).toBeVisible();
-});
-
test('should not render a save dataset modal when datasource is not query or dataset', async () => {
const newProps = {
...props,
diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.tsx
index fee2eb941ff60..dbbc8fe948432 100644
--- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.tsx
+++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.tsx
@@ -231,7 +231,9 @@ const ColumnSelectPopover = ({
}, []);
const setDatasetAndClose = () => {
- if (setDatasetModal) setDatasetModal(true);
+ if (setDatasetModal) {
+ setDatasetModal(true);
+ }
onClose();
};
diff --git a/superset-frontend/src/pages/ChartCreation/index.tsx b/superset-frontend/src/pages/ChartCreation/index.tsx
index 4aeb7aeed4df8..bea530fd3ad5e 100644
--- a/superset-frontend/src/pages/ChartCreation/index.tsx
+++ b/superset-frontend/src/pages/ChartCreation/index.tsx
@@ -337,10 +337,7 @@ export class ChartCreation extends React.PureComponent<
const isButtonDisabled = this.isBtnDisabled();
const datasetHelpText = this.state.canCreateDataset ? (
-
+
{t('Add a dataset')}
{` ${t('or')} `}
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx b/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
index 744edb51b18e6..0e3642493ad07 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
@@ -21,6 +21,7 @@ import React, { useState, useMemo, useEffect } from 'react';
import rison from 'rison';
import { useSelector } from 'react-redux';
import { useQueryParams, BooleanParam } from 'use-query-params';
+import { LocalStorageKeys, setItem } from 'src/utils/localStorageHelpers';
import Loading from 'src/components/Loading';
import { isFeatureEnabled, FeatureFlag } from 'src/featureFlags';
@@ -157,6 +158,9 @@ function DatabaseList({ addDangerToast, addSuccessToast }: DatabaseListProps) {
refreshData();
addSuccessToast(t('Deleted: %s', dbName));
+ // Delete user-selected db from local storage
+ setItem(LocalStorageKeys.db, null);
+
// Close delete modal
setDatabaseCurrentlyDeleting(null);
},
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
index 5d58060155f70..8f2e4cda37af5 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
@@ -62,6 +62,14 @@ jest.mock('src/components/Icons/Icon', () => ({
StyledIcon: () => ,
}));
+const mockHistoryPush = jest.fn();
+jest.mock('react-router-dom', () => ({
+ ...jest.requireActual('react-router-dom'),
+ useHistory: () => ({
+ push: mockHistoryPush,
+ }),
+}));
+
const dbProps = {
show: true,
database_name: 'my database',
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 6e374f85c8955..72d3ddfd90a27 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
@@ -137,6 +137,7 @@ interface DatabaseModalProps {
show: boolean;
databaseId: number | undefined; // If included, will go into edit mode
dbEngine: string | undefined; // if included goto step 2 with engine already set
+ history?: any;
}
export enum ActionType {
@@ -521,6 +522,7 @@ const DatabaseModal: FunctionComponent = ({
show,
databaseId,
dbEngine,
+ history,
}) => {
const [db, setDB] = useReducer<
Reducer | null, DBReducerActionType>
@@ -653,6 +655,16 @@ const DatabaseModal: FunctionComponent = ({
onHide();
};
+ const redirectURL = (url: string) => {
+ /* TODO (lyndsiWilliams): This check and passing history
+ as a prop can be removed once SQL Lab is in the SPA */
+ if (!isEmpty(history)) {
+ history?.push(url);
+ } else {
+ window.location.href = url;
+ }
+ };
+
// Database import logic
const {
state: {
@@ -1345,23 +1357,21 @@ const DatabaseModal: FunctionComponent = ({
const renderCTABtns = () => (
{loadTables && !refresh && Loader(TABLE_LOADING_TEXT)}
- {schema && !loadTables && !tableOptions.length && !searchVal && (
+ {dataset?.schema && !loadTables && !tableOptions.length && !searchVal && (
)}
- {schema && (tableOptions.length > 0 || searchVal.length > 0) && (
+ {dataset?.schema && (tableOptions.length > 0 || searchVal.length > 0) && (
<>