From 260ac40b23e99a49be70781e56bc037e5f952090 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 | 26 ++- .../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, 237 insertions(+), 376 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 eedc2fb101..95258f443e 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 fee2eb941f..dbbc8fe948 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 4aeb7aeed4..bea530fd3a 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 744edb51b1..0e3642493a 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 5d58060155..8f2e4cda37 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 6e374f85c8..72d3ddfd90 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 = () => (