You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2023/04/06 12:23:44 UTC
[superset] branch master updated: refactor: Moves CRUD features to src/features (#23482)
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina 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 adcb8cf0ac refactor: Moves CRUD features to src/features (#23482)
adcb8cf0ac is described below
commit adcb8cf0ac39d2402b4243fac5c03203eb7ee8c2
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Thu Apr 6 09:23:32 2023 -0300
refactor: Moves CRUD features to src/features (#23482)
---
.../Datasource/ChangeDatasourceModal.tsx | 2 +-
.../ReportModal/HeaderReportDropdown/index.tsx | 2 +-
.../dashboard/components/PropertiesModal/index.tsx | 7 +-
.../explore/components/PropertiesModal/index.tsx | 7 +-
.../alerts}/AlertReportModal.test.jsx | 2 +-
.../alerts}/AlertReportModal.test.tsx | 2 +-
.../alert => features/alerts}/AlertReportModal.tsx | 6 +-
.../components/AlertReportCronScheduler.test.tsx | 0
.../components/AlertReportCronScheduler.tsx | 2 +-
.../alerts}/components/AlertStatusIcon.tsx | 0
.../alerts}/components/NotificationMethod.tsx | 2 +-
.../alerts}/components/RecipientIcon.tsx | 0
.../{views/CRUD/alert => features/alerts}/types.ts | 0
.../allEntities}/AllEntitiesTable.tsx | 4 +-
.../AnnotationLayerModal.test.jsx | 2 +-
.../annotationLayers}/AnnotationLayerModal.tsx | 0
.../annotationLayers}/types.ts | 0
.../annotations}/AnnotationModal.test.jsx | 2 +-
.../annotations}/AnnotationModal.tsx | 0
.../annotation => features/annotations}/types.ts | 0
.../CRUD/chart => features/charts}/ChartCard.tsx | 0
.../cssTemplates}/CssTemplateModal.test.jsx | 2 +-
.../cssTemplates}/CssTemplateModal.tsx | 0
.../cssTemplates}/types.ts | 0
.../dashboards}/DashboardCard.tsx | 0
.../dashboard => features/dashboards}/types.ts | 0
.../DatabaseConnectionForm/CommonParameters.tsx | 0
.../DatabaseConnectionForm/EncryptedField.tsx | 0
.../DatabaseConnectionForm/TableCatalog.tsx | 0
.../DatabaseConnectionForm/ValidatedInputField.tsx | 0
.../DatabaseModal/DatabaseConnectionForm/index.tsx | 0
.../databases}/DatabaseModal/ExtraOptions.tsx | 0
.../databases}/DatabaseModal/ModalHeader.tsx | 0
.../databases}/DatabaseModal/SSHTunnelForm.tsx | 1 -
.../databases}/DatabaseModal/SSHTunnelSwitch.tsx | 0
.../databases}/DatabaseModal/SqlAlchemyForm.tsx | 1 -
.../databases}/DatabaseModal/index.test.tsx | 5 +-
.../databases}/DatabaseModal/index.tsx | 8 +-
.../databases}/DatabaseModal/styles.ts | 0
.../data/database => features/databases}/state.ts | 0
.../data/database => features/databases}/types.ts | 0
.../DatasetPanel/DatasetPanel.stories.tsx | 0
.../AddDataset/DatasetPanel/DatasetPanel.test.tsx | 2 +-
.../AddDataset/DatasetPanel/DatasetPanel.tsx | 2 +-
.../AddDataset/DatasetPanel/MessageContent.tsx | 0
.../datasets}/AddDataset/DatasetPanel/fixtures.ts | 2 +-
.../datasets}/AddDataset/DatasetPanel/index.tsx | 2 +-
.../datasets}/AddDataset/DatasetPanel/types.ts | 0
.../AddDataset/EditDataset/EditDataset.test.tsx | 0
.../EditDataset/UsageTab/UsageTab.test.tsx | 0
.../AddDataset/EditDataset/UsageTab/index.tsx | 0
.../datasets}/AddDataset/EditDataset/index.tsx | 2 +-
.../datasets}/AddDataset/Footer/Footer.test.tsx | 2 +-
.../datasets}/AddDataset/Footer/index.tsx | 0
.../datasets}/AddDataset/Header/Header.test.tsx | 4 +-
.../datasets}/AddDataset/Header/index.tsx | 10 +--
.../AddDataset/LeftPanel/LeftPanel.test.tsx | 4 +-
.../datasets}/AddDataset/LeftPanel/index.tsx | 2 +-
.../AddDataset/RightPanel/RightPanel.test.tsx | 2 +-
.../datasets}/AddDataset/RightPanel/index.tsx | 0
.../datasets}/AddDataset/types.tsx | 0
.../datasets}/DatasetLayout/DatasetLayout.test.tsx | 12 +--
.../datasets}/DatasetLayout/index.tsx | 2 +-
.../datasets}/DuplicateDatasetModal.tsx | 0
.../dataset => features/datasets}/constants.ts | 0
.../datasets/hooks/useDatasetLists.ts} | 93 +---------------------
.../datasets/hooks/useGetDatasetRelatedCounts.ts | 55 +++++++++++++
.../data/dataset => features/datasets}/styles.ts | 0
.../data/dataset => features/datasets}/types.ts | 0
.../home}/ActivityTable.test.tsx | 2 +-
.../welcome => features/home}/ActivityTable.tsx | 4 +-
.../welcome => features/home}/ChartTable.test.tsx | 3 +-
.../CRUD/welcome => features/home}/ChartTable.tsx | 4 +-
.../home}/DashboardTable.test.tsx | 4 +-
.../welcome => features/home}/DashboardTable.tsx | 4 +-
.../welcome => features/home}/EmptyState.test.tsx | 2 +-
.../CRUD/welcome => features/home}/EmptyState.tsx | 0
.../home}/LanguagePicker.test.tsx | 0
.../home}/LanguagePicker.tsx | 0
.../components => features/home}/Menu.test.tsx | 0
.../{views/components => features/home}/Menu.tsx | 0
.../home}/RightMenu.test.tsx | 2 +-
.../components => features/home}/RightMenu.tsx | 11 ++-
.../home}/SavedQueries.test.tsx | 5 +-
.../welcome => features/home}/SavedQueries.tsx | 6 +-
.../components => features/home}/SubMenu.test.tsx | 0
.../components => features/home}/SubMenu.tsx | 7 +-
.../common.ts => features/home/commonMenuData.ts} | 0
.../{views/components => features/home}/types.ts | 10 +++
.../queries}/QueryPreviewModal.test.tsx | 2 +-
.../queries}/QueryPreviewModal.tsx | 4 +-
.../queries}/SavedQueryPreviewModal.test.jsx | 2 +-
.../queries}/SavedQueryPreviewModal.tsx | 4 +-
.../queries/SyntaxHighlighterCopy.tsx} | 0
.../features/queries/hooks/useQueryPreviewState.ts | 76 ++++++++++++++++++
.../src/{views/CRUD => features}/tags/TagCard.tsx | 2 +-
superset-frontend/src/{ => features/tags}/tags.ts | 0
.../pages/AlertReportList/AlertReportList.test.jsx | 2 +-
.../src/pages/AlertReportList/index.tsx | 11 ++-
superset-frontend/src/pages/AllEntities/index.tsx | 2 +-
.../AnnotationLayerList.test.jsx | 4 +-
.../src/pages/AnnotationLayerList/index.tsx | 6 +-
.../pages/AnnotationList/AnnotationList.test.jsx | 2 +-
.../src/pages/AnnotationList/index.tsx | 6 +-
superset-frontend/src/pages/ChartList/index.tsx | 4 +-
.../pages/CssTemplateList/CssTemplateList.test.jsx | 2 +-
.../src/pages/CssTemplateList/index.tsx | 6 +-
.../src/pages/DashboardList/index.tsx | 6 +-
.../src/pages/DatabaseList/DatabaseList.test.jsx | 4 +-
superset-frontend/src/pages/DatabaseList/index.tsx | 8 +-
.../src/pages/DatasetCreation/index.tsx | 16 ++--
.../src/pages/DatasetList/DatasetList.test.tsx | 2 +-
superset-frontend/src/pages/DatasetList/index.tsx | 11 +--
.../src/pages/ExecutionLogList/index.tsx | 6 +-
superset-frontend/src/pages/Home/index.tsx | 12 +--
.../QueryHistoryList/QueryHistoryList.test.tsx | 4 +-
.../src/pages/QueryHistoryList/index.tsx | 6 +-
.../pages/SavedQueryList/SavedQueryList.test.jsx | 2 +-
.../src/pages/SavedQueryList/index.tsx | 9 +--
superset-frontend/src/pages/Tags/index.tsx | 6 +-
superset-frontend/src/types/bootstrapTypes.ts | 2 +-
superset-frontend/src/views/App.tsx | 2 +-
superset-frontend/src/views/CRUD/utils.test.tsx | 2 +-
superset-frontend/src/views/CRUD/utils.tsx | 2 +-
superset-frontend/src/views/CRUD/welcome/types.ts | 29 -------
superset-frontend/src/views/menu.tsx | 2 +-
superset-frontend/src/views/types.ts | 2 +-
127 files changed, 300 insertions(+), 285 deletions(-)
diff --git a/superset-frontend/src/components/Datasource/ChangeDatasourceModal.tsx b/superset-frontend/src/components/Datasource/ChangeDatasourceModal.tsx
index 5ec5926808..b5b99e1089 100644
--- a/superset-frontend/src/components/Datasource/ChangeDatasourceModal.tsx
+++ b/superset-frontend/src/components/Datasource/ChangeDatasourceModal.tsx
@@ -40,7 +40,7 @@ import { Input } from 'src/components/Input';
import {
PAGE_SIZE as DATASET_PAGE_SIZE,
SORT_BY as DATASET_SORT_BY,
-} from 'src/views/CRUD/data/dataset/constants';
+} from 'src/features/datasets/constants';
import withToasts from 'src/components/MessageToasts/withToasts';
import FacePile from '../FacePile';
diff --git a/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx b/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
index e8426641d6..6d141f941c 100644
--- a/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
+++ b/superset-frontend/src/components/ReportModal/HeaderReportDropdown/index.tsx
@@ -31,7 +31,7 @@ import {
} from '@superset-ui/core';
import Icons from 'src/components/Icons';
import { Switch } from 'src/components/Switch';
-import { AlertObject } from 'src/views/CRUD/alert/types';
+import { AlertObject } from 'src/features/alerts/types';
import { Menu } from 'src/components/Menu';
import Checkbox from 'src/components/Checkbox';
import { noOp } from 'src/utils/common';
diff --git a/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx b/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
index 22b2734761..9b044519d4 100644
--- a/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
+++ b/superset-frontend/src/dashboard/components/PropertiesModal/index.tsx
@@ -43,7 +43,12 @@ import { getClientErrorObject } from 'src/utils/getClientErrorObject';
import withToasts from 'src/components/MessageToasts/withToasts';
import { isFeatureEnabled } from 'src/featureFlags';
import TagType from 'src/types/TagType';
-import { addTag, deleteTaggedObjects, fetchTags, OBJECT_TYPES } from 'src/tags';
+import {
+ addTag,
+ deleteTaggedObjects,
+ fetchTags,
+ OBJECT_TYPES,
+} from 'src/features/tags/tags';
import { loadTags } from 'src/components/Tags/utils';
const StyledFormItem = styled(FormItem)`
diff --git a/superset-frontend/src/explore/components/PropertiesModal/index.tsx b/superset-frontend/src/explore/components/PropertiesModal/index.tsx
index 4cfd4b600b..f7763f1ff7 100644
--- a/superset-frontend/src/explore/components/PropertiesModal/index.tsx
+++ b/superset-frontend/src/explore/components/PropertiesModal/index.tsx
@@ -34,7 +34,12 @@ import Chart, { Slice } from 'src/types/Chart';
import { getClientErrorObject } from 'src/utils/getClientErrorObject';
import withToasts from 'src/components/MessageToasts/withToasts';
import { loadTags } from 'src/components/Tags/utils';
-import { addTag, deleteTaggedObjects, fetchTags, OBJECT_TYPES } from 'src/tags';
+import {
+ addTag,
+ deleteTaggedObjects,
+ fetchTags,
+ OBJECT_TYPES,
+} from 'src/features/tags/tags';
import TagType from 'src/types/TagType';
export type PropertiesModalProps = {
diff --git a/superset-frontend/src/views/CRUD/alert/AlertReportModal.test.jsx b/superset-frontend/src/features/alerts/AlertReportModal.test.jsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/alert/AlertReportModal.test.jsx
rename to superset-frontend/src/features/alerts/AlertReportModal.test.jsx
index a383c8be20..e7fb99797a 100644
--- a/superset-frontend/src/views/CRUD/alert/AlertReportModal.test.jsx
+++ b/superset-frontend/src/features/alerts/AlertReportModal.test.jsx
@@ -22,7 +22,6 @@ import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
import fetchMock from 'fetch-mock';
import { act } from 'react-dom/test-utils';
-import AlertReportModal from 'src/views/CRUD/alert/AlertReportModal';
import Modal from 'src/components/Modal';
import { Select, AsyncSelect } from 'src/components';
import { Switch } from 'src/components/Switch';
@@ -30,6 +29,7 @@ import { Radio } from 'src/components/Radio';
import TextAreaControl from 'src/explore/components/controls/TextAreaControl';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { styledMount as mount } from 'spec/helpers/theming';
+import AlertReportModal from './AlertReportModal';
const mockData = {
active: true,
diff --git a/superset-frontend/src/views/CRUD/alert/AlertReportModal.test.tsx b/superset-frontend/src/features/alerts/AlertReportModal.test.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/alert/AlertReportModal.test.tsx
rename to superset-frontend/src/features/alerts/AlertReportModal.test.tsx
index 928b2e9567..163b8e801e 100644
--- a/superset-frontend/src/views/CRUD/alert/AlertReportModal.test.tsx
+++ b/superset-frontend/src/features/alerts/AlertReportModal.test.tsx
@@ -19,7 +19,7 @@
import React from 'react';
import { render, screen, waitFor } from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
-import AlertReportModal from 'src/views/CRUD/alert/AlertReportModal';
+import AlertReportModal from './AlertReportModal';
test('allows change to None in log retention', async () => {
render(<AlertReportModal show />, { useRedux: true });
diff --git a/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx b/superset-frontend/src/features/alerts/AlertReportModal.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx
rename to superset-frontend/src/features/alerts/AlertReportModal.tsx
index b9d6223e68..ab78895a17 100644
--- a/superset-frontend/src/views/CRUD/alert/AlertReportModal.tsx
+++ b/superset-frontend/src/features/alerts/AlertReportModal.tsx
@@ -45,7 +45,8 @@ import withToasts from 'src/components/MessageToasts/withToasts';
import Owner from 'src/types/Owner';
import { AntdCheckbox, AsyncSelect, Select } from 'src/components';
import TextAreaControl from 'src/explore/components/controls/TextAreaControl';
-import { useCommonConf } from 'src/views/CRUD/data/database/state';
+import { useCommonConf } from 'src/features/databases/state';
+import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls';
import {
NotificationMethodOption,
AlertObject,
@@ -56,8 +57,7 @@ import {
Operator,
Recipient,
AlertsReportsConfig,
-} from 'src/views/CRUD/alert/types';
-import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls';
+} from 'src/features/alerts/types';
import { useSelector } from 'react-redux';
import { AlertReportCronScheduler } from './components/AlertReportCronScheduler';
import { NotificationMethod } from './components/NotificationMethod';
diff --git a/superset-frontend/src/views/CRUD/alert/components/AlertReportCronScheduler.test.tsx b/superset-frontend/src/features/alerts/components/AlertReportCronScheduler.test.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/alert/components/AlertReportCronScheduler.test.tsx
rename to superset-frontend/src/features/alerts/components/AlertReportCronScheduler.test.tsx
diff --git a/superset-frontend/src/views/CRUD/alert/components/AlertReportCronScheduler.tsx b/superset-frontend/src/features/alerts/components/AlertReportCronScheduler.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/alert/components/AlertReportCronScheduler.tsx
rename to superset-frontend/src/features/alerts/components/AlertReportCronScheduler.tsx
index 9a7fa6214b..143d1e1fb1 100644
--- a/superset-frontend/src/views/CRUD/alert/components/AlertReportCronScheduler.tsx
+++ b/superset-frontend/src/features/alerts/components/AlertReportCronScheduler.tsx
@@ -23,7 +23,7 @@ import { AntdInput, RadioChangeEvent } from 'src/components';
import { Input } from 'src/components/Input';
import { Radio } from 'src/components/Radio';
import { CronPicker, CronError } from 'src/components/CronPicker';
-import { StyledInputContainer } from 'src/views/CRUD/alert/AlertReportModal';
+import { StyledInputContainer } from '../AlertReportModal';
export interface AlertReportCronSchedulerProps {
value: string;
diff --git a/superset-frontend/src/views/CRUD/alert/components/AlertStatusIcon.tsx b/superset-frontend/src/features/alerts/components/AlertStatusIcon.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/alert/components/AlertStatusIcon.tsx
rename to superset-frontend/src/features/alerts/components/AlertStatusIcon.tsx
diff --git a/superset-frontend/src/views/CRUD/alert/components/NotificationMethod.tsx b/superset-frontend/src/features/alerts/components/NotificationMethod.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/alert/components/NotificationMethod.tsx
rename to superset-frontend/src/features/alerts/components/NotificationMethod.tsx
index 12b59a7afd..528c7011d7 100644
--- a/superset-frontend/src/views/CRUD/alert/components/NotificationMethod.tsx
+++ b/superset-frontend/src/features/alerts/components/NotificationMethod.tsx
@@ -20,7 +20,7 @@ import React, { FunctionComponent, useState } from 'react';
import { styled, t, useTheme } from '@superset-ui/core';
import { Select } from 'src/components';
import Icons from 'src/components/Icons';
-import { NotificationMethodOption } from 'src/views/CRUD/alert/types';
+import { NotificationMethodOption } from '../types';
import { StyledInputContainer } from '../AlertReportModal';
const StyledNotificationMethod = styled.div`
diff --git a/superset-frontend/src/views/CRUD/alert/components/RecipientIcon.tsx b/superset-frontend/src/features/alerts/components/RecipientIcon.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/alert/components/RecipientIcon.tsx
rename to superset-frontend/src/features/alerts/components/RecipientIcon.tsx
diff --git a/superset-frontend/src/views/CRUD/alert/types.ts b/superset-frontend/src/features/alerts/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/alert/types.ts
rename to superset-frontend/src/features/alerts/types.ts
diff --git a/superset-frontend/src/views/CRUD/allentities/AllEntitiesTable.tsx b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/allentities/AllEntitiesTable.tsx
rename to superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
index 648644ba15..79e1c11ecc 100644
--- a/superset-frontend/src/views/CRUD/allentities/AllEntitiesTable.tsx
+++ b/superset-frontend/src/features/allEntities/AllEntitiesTable.tsx
@@ -21,8 +21,8 @@ import moment from 'moment';
import { t, styled, logging } from '@superset-ui/core';
import TableView, { EmptyWrapperType } from 'src/components/TableView';
import { addDangerToast } from 'src/components/MessageToasts/actions';
-import { fetchObjects } from '../../../tags';
-import Loading from '../../../components/Loading';
+import Loading from 'src/components/Loading';
+import { fetchObjects } from '../tags/tags';
const AllEntitiesTableContainer = styled.div`
text-align: left;
diff --git a/superset-frontend/src/views/CRUD/annotationlayers/AnnotationLayerModal.test.jsx b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/annotationlayers/AnnotationLayerModal.test.jsx
rename to superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
index 878346fd60..f92220948c 100644
--- a/superset-frontend/src/views/CRUD/annotationlayers/AnnotationLayerModal.test.jsx
+++ b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
@@ -21,10 +21,10 @@ import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
import { Provider } from 'react-redux';
import fetchMock from 'fetch-mock';
-import AnnotationLayerModal from 'src/views/CRUD/annotationlayers/AnnotationLayerModal';
import Modal from 'src/components/Modal';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { styledMount as mount } from 'spec/helpers/theming';
+import AnnotationLayerModal from './AnnotationLayerModal';
const mockData = { id: 1, name: 'test', descr: 'test description' };
const FETCH_ANNOTATION_LAYER_ENDPOINT = 'glob:*/api/v1/annotation_layer/*';
diff --git a/superset-frontend/src/views/CRUD/annotationlayers/AnnotationLayerModal.tsx b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/annotationlayers/AnnotationLayerModal.tsx
rename to superset-frontend/src/features/annotationLayers/AnnotationLayerModal.tsx
diff --git a/superset-frontend/src/views/CRUD/annotationlayers/types.ts b/superset-frontend/src/features/annotationLayers/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/annotationlayers/types.ts
rename to superset-frontend/src/features/annotationLayers/types.ts
diff --git a/superset-frontend/src/views/CRUD/annotation/AnnotationModal.test.jsx b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/annotation/AnnotationModal.test.jsx
rename to superset-frontend/src/features/annotations/AnnotationModal.test.jsx
index 4ba95fe3bd..93183c7e62 100644
--- a/superset-frontend/src/views/CRUD/annotation/AnnotationModal.test.jsx
+++ b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
@@ -21,11 +21,11 @@ import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
import { Provider } from 'react-redux';
import fetchMock from 'fetch-mock';
-import AnnotationModal from 'src/views/CRUD/annotation/AnnotationModal';
import Modal from 'src/components/Modal';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { JsonEditor } from 'src/components/AsyncAceEditor';
import { styledMount as mount } from 'spec/helpers/theming';
+import AnnotationModal from './AnnotationModal';
const mockData = {
id: 1,
diff --git a/superset-frontend/src/views/CRUD/annotation/AnnotationModal.tsx b/superset-frontend/src/features/annotations/AnnotationModal.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/annotation/AnnotationModal.tsx
rename to superset-frontend/src/features/annotations/AnnotationModal.tsx
diff --git a/superset-frontend/src/views/CRUD/annotation/types.ts b/superset-frontend/src/features/annotations/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/annotation/types.ts
rename to superset-frontend/src/features/annotations/types.ts
diff --git a/superset-frontend/src/views/CRUD/chart/ChartCard.tsx b/superset-frontend/src/features/charts/ChartCard.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/chart/ChartCard.tsx
rename to superset-frontend/src/features/charts/ChartCard.tsx
diff --git a/superset-frontend/src/views/CRUD/csstemplates/CssTemplateModal.test.jsx b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/csstemplates/CssTemplateModal.test.jsx
rename to superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
index c503c709de..712e713217 100644
--- a/superset-frontend/src/views/CRUD/csstemplates/CssTemplateModal.test.jsx
+++ b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
@@ -21,11 +21,11 @@ import thunk from 'redux-thunk';
import { Provider } from 'react-redux';
import configureStore from 'redux-mock-store';
import fetchMock from 'fetch-mock';
-import CssTemplateModal from 'src/views/CRUD/csstemplates/CssTemplateModal';
import Modal from 'src/components/Modal';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { CssEditor } from 'src/components/AsyncAceEditor';
import { styledMount as mount } from 'spec/helpers/theming';
+import CssTemplateModal from './CssTemplateModal';
const mockData = { id: 1, template_name: 'test' };
const FETCH_CSS_TEMPLATE_ENDPOINT = 'glob:*/api/v1/css_template/*';
diff --git a/superset-frontend/src/views/CRUD/csstemplates/CssTemplateModal.tsx b/superset-frontend/src/features/cssTemplates/CssTemplateModal.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/csstemplates/CssTemplateModal.tsx
rename to superset-frontend/src/features/cssTemplates/CssTemplateModal.tsx
diff --git a/superset-frontend/src/views/CRUD/csstemplates/types.ts b/superset-frontend/src/features/cssTemplates/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/csstemplates/types.ts
rename to superset-frontend/src/features/cssTemplates/types.ts
diff --git a/superset-frontend/src/views/CRUD/dashboard/DashboardCard.tsx b/superset-frontend/src/features/dashboards/DashboardCard.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/dashboard/DashboardCard.tsx
rename to superset-frontend/src/features/dashboards/DashboardCard.tsx
diff --git a/superset-frontend/src/views/CRUD/dashboard/types.ts b/superset-frontend/src/features/dashboards/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/dashboard/types.ts
rename to superset-frontend/src/features/dashboards/types.ts
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx b/superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx b/superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx b/superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx b/superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/index.tsx b/superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/index.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/DatabaseConnectionForm/index.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/index.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ExtraOptions.tsx b/superset-frontend/src/features/databases/DatabaseModal/ExtraOptions.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/ExtraOptions.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/ExtraOptions.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx b/superset-frontend/src/features/databases/DatabaseModal/ModalHeader.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/ModalHeader.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/ModalHeader.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelForm.tsx b/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelForm.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelForm.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/SSHTunnelForm.tsx
index 6cc0312b52..f708761a20 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelForm.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelForm.tsx
@@ -24,7 +24,6 @@ import { Radio } from 'src/components/Radio';
import { Input, TextArea } from 'src/components/Input';
import { Input as AntdInput, Tooltip } from 'antd';
import { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons';
-
import { DatabaseObject } from '../types';
import { AuthType } from '.';
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelSwitch.tsx b/superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelSwitch.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx b/superset-frontend/src/features/databases/DatabaseModal/SqlAlchemyForm.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/SqlAlchemyForm.tsx
index 003a26c9a1..5d50625cdd 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/SqlAlchemyForm.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/SqlAlchemyForm.tsx
@@ -21,7 +21,6 @@ import { t, SupersetTheme } from '@superset-ui/core';
import SupersetText from 'src/utils/textUtils';
import Button from 'src/components/Button';
import { StyledInputContainer, wideButton } from './styles';
-
import { DatabaseObject } from '../types';
const SqlAlchemyTab = ({
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx b/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/index.test.tsx
index 32cc16b04f..bcff047be3 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx
@@ -27,13 +27,10 @@ import {
act,
waitFor,
} from 'spec/helpers/testing-library';
-import {
- DatabaseObject,
- CONFIGURATION_METHOD,
-} from 'src/views/CRUD/data/database/types';
import { getExtensionsRegistry } from '@superset-ui/core';
import setupExtensions from 'src/setup/setupExtensions';
import * as hooks from 'src/views/CRUD/hooks';
+import { DatabaseObject, CONFIGURATION_METHOD } from '../types';
import DatabaseModal, {
dbReducer,
DBReducerActionType,
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx b/superset-frontend/src/features/databases/DatabaseModal/index.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
rename to superset-frontend/src/features/databases/DatabaseModal/index.tsx
index b90fc56d0d..a14a851b60 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx
+++ b/superset-frontend/src/features/databases/DatabaseModal/index.tsx
@@ -54,7 +54,9 @@ import {
getConnectionAlert,
useImportResource,
} from 'src/views/CRUD/hooks';
-import { useCommonConf } from 'src/views/CRUD/data/database/state';
+import { useCommonConf } from 'src/features/databases/state';
+import Loading from 'src/components/Loading';
+import { isEmpty, pick } from 'lodash';
import {
DatabaseObject,
DatabaseForm,
@@ -62,9 +64,7 @@ import {
CatalogObject,
Engines,
ExtraJson,
-} from 'src/views/CRUD/data/database/types';
-import Loading from 'src/components/Loading';
-import { isEmpty, pick } from 'lodash';
+} from '../types';
import ExtraOptions from './ExtraOptions';
import SqlAlchemyForm from './SqlAlchemyForm';
import DatabaseConnectionForm from './DatabaseConnectionForm';
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts b/superset-frontend/src/features/databases/DatabaseModal/styles.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/DatabaseModal/styles.ts
rename to superset-frontend/src/features/databases/DatabaseModal/styles.ts
diff --git a/superset-frontend/src/views/CRUD/data/database/state.ts b/superset-frontend/src/features/databases/state.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/state.ts
rename to superset-frontend/src/features/databases/state.ts
diff --git a/superset-frontend/src/views/CRUD/data/database/types.ts b/superset-frontend/src/features/databases/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/database/types.ts
rename to superset-frontend/src/features/databases/types.ts
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.stories.tsx b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.stories.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.stories.tsx
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.stories.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.test.tsx b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.test.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.test.tsx
index b5a29638c6..19262c91bc 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.test.tsx
@@ -23,7 +23,7 @@ import DatasetPanel, {
ALT_LOADING,
tableColumnDefinition,
COLUMN_TITLE,
-} from 'src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel';
+} from 'src/features/datasets/AddDataset/DatasetPanel/DatasetPanel';
import { exampleColumns, exampleDataset } from './fixtures';
import {
SELECT_MESSAGE,
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.tsx b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.tsx
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.tsx
index 8d579b79b8..c49e48d3fe 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.tsx
@@ -24,7 +24,7 @@ import Table, { ColumnsType, TableSize } from 'src/components/Table';
import { alphabeticalSort } from 'src/components/Table/sorters';
// @ts-ignore
import LOADING_GIF from 'src/assets/images/loading.gif';
-import { DatasetObject } from 'src/views/CRUD/data/dataset/AddDataset/types';
+import { DatasetObject } from 'src/features/datasets/AddDataset/types';
import { ITableColumn } from './types';
import MessageContent from './MessageContent';
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/MessageContent.tsx b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/MessageContent.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/MessageContent.tsx
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/MessageContent.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/fixtures.ts b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/fixtures.ts
similarity index 94%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/fixtures.ts
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/fixtures.ts
index 5c09188c61..d3cecdd0da 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/fixtures.ts
+++ b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/fixtures.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { DatasetObject } from 'src/views/CRUD/data/dataset/AddDataset/types';
+import { DatasetObject } from 'src/features/datasets/AddDataset/types';
import { ITableColumn } from './types';
export const exampleColumns: ITableColumn[] = [
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/index.tsx b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/index.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/index.tsx
index 73bea70b41..ef5797fb30 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/index.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/index.tsx
@@ -18,7 +18,7 @@
*/
import React, { useEffect, useState, useRef } from 'react';
import { SupersetClient, logging, t } from '@superset-ui/core';
-import { DatasetObject } from 'src/views/CRUD/data/dataset/AddDataset/types';
+import { DatasetObject } from 'src/features/datasets/AddDataset/types';
import { addDangerToast } from 'src/components/MessageToasts/actions';
import DatasetPanel from './DatasetPanel';
import { ITableColumn, IDatabaseTable, isIDatabaseTable } from './types';
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/types.ts b/superset-frontend/src/features/datasets/AddDataset/DatasetPanel/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/types.ts
rename to superset-frontend/src/features/datasets/AddDataset/DatasetPanel/types.ts
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/EditDataset.test.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/EditDataset.test.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/EditDataset.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/EditDataset/EditDataset.test.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/index.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/index.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/index.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/index.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/index.tsx
similarity index 95%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/EditDataset/index.tsx
index e8853cf043..81710c7876 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/index.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/EditDataset/index.tsx
@@ -18,7 +18,7 @@
*/
import { styled, t } from '@superset-ui/core';
import React from 'react';
-import { useGetDatasetRelatedCounts } from 'src/views/CRUD/data/hooks';
+import useGetDatasetRelatedCounts from 'src/features/datasets/hooks/useGetDatasetRelatedCounts';
import Badge from 'src/components/Badge';
import Tabs from 'src/components/Tabs';
import UsageTab from './UsageTab';
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/Footer.test.tsx b/superset-frontend/src/features/datasets/AddDataset/Footer/Footer.test.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/Footer.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/Footer/Footer.test.tsx
index a1818cdf22..2e577fea9b 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/Footer.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/Footer/Footer.test.tsx
@@ -18,7 +18,7 @@
*/
import React from 'react';
import { render, screen } from 'spec/helpers/testing-library';
-import Footer from 'src/views/CRUD/data/dataset/AddDataset/Footer';
+import Footer from 'src/features/datasets/AddDataset/Footer';
const mockHistoryPush = jest.fn();
jest.mock('react-router-dom', () => ({
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/index.tsx b/superset-frontend/src/features/datasets/AddDataset/Footer/index.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/Footer/index.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/Header.test.tsx b/superset-frontend/src/features/datasets/AddDataset/Header/Header.test.tsx
similarity index 95%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/Header.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/Header/Header.test.tsx
index 5391812086..f2310ca4af 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/Header.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/Header/Header.test.tsx
@@ -18,9 +18,7 @@
*/
import React from 'react';
import { render, screen, waitFor } from 'spec/helpers/testing-library';
-import Header, {
- DEFAULT_TITLE,
-} from 'src/views/CRUD/data/dataset/AddDataset/Header';
+import Header, { DEFAULT_TITLE } from 'src/features/datasets/AddDataset/Header';
describe('Header', () => {
const mockSetDataset = jest.fn();
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/index.tsx b/superset-frontend/src/features/datasets/AddDataset/Header/index.tsx
similarity index 96%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/Header/index.tsx
index 044221c3fe..78669b2df2 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/index.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/Header/index.tsx
@@ -23,15 +23,15 @@ import Button from 'src/components/Button';
import Icons from 'src/components/Icons';
import { Menu } from 'src/components/Menu';
import { TooltipPlacement } from 'src/components/Tooltip';
+import {
+ DatasetActionType,
+ DSReducerActionType,
+} from 'src/features/datasets/AddDataset/types';
import {
HeaderComponentStyles,
disabledSaveBtnStyles,
StyledCreateDatasetTitle,
-} from 'src/views/CRUD/data/dataset/styles';
-import {
- DatasetActionType,
- DSReducerActionType,
-} from 'src/views/CRUD/data/dataset/AddDataset/types';
+} from '../../styles';
export const DEFAULT_TITLE = t('New dataset');
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/LeftPanel.test.tsx b/superset-frontend/src/features/datasets/AddDataset/LeftPanel/LeftPanel.test.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/LeftPanel.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/LeftPanel/LeftPanel.test.tsx
index f9174e1994..604e3e9d9e 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/LeftPanel.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/LeftPanel/LeftPanel.test.tsx
@@ -20,8 +20,8 @@ import React from 'react';
import fetchMock from 'fetch-mock';
import userEvent from '@testing-library/user-event';
import { render, screen, waitFor } from 'spec/helpers/testing-library';
-import LeftPanel from 'src/views/CRUD/data/dataset/AddDataset/LeftPanel';
-import { exampleDataset } from 'src/views/CRUD/data/dataset/AddDataset/DatasetPanel/fixtures';
+import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel';
+import { exampleDataset } from 'src/features/datasets/AddDataset/DatasetPanel/fixtures';
const databasesEndpoint = 'glob:*/api/v1/database/?q*';
const schemasEndpoint = 'glob:*/api/v1/database/*/schemas*';
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/index.tsx b/superset-frontend/src/features/datasets/AddDataset/LeftPanel/index.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/LeftPanel/index.tsx
index 1d1d3847a2..90ec555833 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/index.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/LeftPanel/index.tsx
@@ -51,7 +51,7 @@ import { LocalStorageKeys, getItem } from 'src/utils/localStorageHelpers';
import {
DatasetActionType,
DatasetObject,
-} from 'src/views/CRUD/data/dataset/AddDataset/types';
+} from 'src/features/datasets/AddDataset/types';
interface LeftPanelProps {
setDataset: Dispatch<SetStateAction<object>>;
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/RightPanel.test.tsx b/superset-frontend/src/features/datasets/AddDataset/RightPanel/RightPanel.test.tsx
similarity index 93%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/RightPanel.test.tsx
rename to superset-frontend/src/features/datasets/AddDataset/RightPanel/RightPanel.test.tsx
index 987d96abfa..34b6ec25de 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/RightPanel.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/RightPanel/RightPanel.test.tsx
@@ -18,7 +18,7 @@
*/
import React from 'react';
import { render, screen } from 'spec/helpers/testing-library';
-import RightPanel from 'src/views/CRUD/data/dataset/AddDataset/RightPanel';
+import RightPanel from 'src/features/datasets/AddDataset/RightPanel';
describe('RightPanel', () => {
it('renders a blank state RightPanel', () => {
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/index.tsx b/superset-frontend/src/features/datasets/AddDataset/RightPanel/index.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/index.tsx
rename to superset-frontend/src/features/datasets/AddDataset/RightPanel/index.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/AddDataset/types.tsx b/superset-frontend/src/features/datasets/AddDataset/types.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/AddDataset/types.tsx
rename to superset-frontend/src/features/datasets/AddDataset/types.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/DatasetLayout.test.tsx b/superset-frontend/src/features/datasets/DatasetLayout/DatasetLayout.test.tsx
similarity index 85%
rename from superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/DatasetLayout.test.tsx
rename to superset-frontend/src/features/datasets/DatasetLayout/DatasetLayout.test.tsx
index a1939761aa..a851b2b3bc 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/DatasetLayout.test.tsx
+++ b/superset-frontend/src/features/datasets/DatasetLayout/DatasetLayout.test.tsx
@@ -18,12 +18,12 @@
*/
import React from 'react';
import { render, screen, waitFor } from 'spec/helpers/testing-library';
-import DatasetLayout from 'src/views/CRUD/data/dataset/DatasetLayout';
-import Header from 'src/views/CRUD/data/dataset/AddDataset/Header';
-import LeftPanel from 'src/views/CRUD/data/dataset/AddDataset/LeftPanel';
-import DatasetPanel from 'src/views/CRUD/data/dataset/AddDataset/DatasetPanel';
-import RightPanel from 'src/views/CRUD/data/dataset/AddDataset/RightPanel';
-import Footer from 'src/views/CRUD/data/dataset/AddDataset/Footer';
+import DatasetLayout from 'src/features/datasets/DatasetLayout';
+import Header from 'src/features/datasets/AddDataset/Header';
+import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel';
+import DatasetPanel from 'src/features/datasets/AddDataset/DatasetPanel';
+import RightPanel from 'src/features/datasets/AddDataset/RightPanel';
+import Footer from 'src/features/datasets/AddDataset/Footer';
const mockHistoryPush = jest.fn();
jest.mock('react-router-dom', () => ({
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/index.tsx b/superset-frontend/src/features/datasets/DatasetLayout/index.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/index.tsx
rename to superset-frontend/src/features/datasets/DatasetLayout/index.tsx
index 7702efcb59..d264fab061 100644
--- a/superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/index.tsx
+++ b/superset-frontend/src/features/datasets/DatasetLayout/index.tsx
@@ -29,7 +29,7 @@ import {
StyledLayoutDatasetPanel,
StyledLayoutRightPanel,
StyledLayoutFooter,
-} from 'src/views/CRUD/data/dataset/styles';
+} from '../styles';
interface DatasetLayoutProps {
header?: ReactElement<any, string | JSXElementConstructor<any>> | null;
diff --git a/superset-frontend/src/views/CRUD/data/dataset/DuplicateDatasetModal.tsx b/superset-frontend/src/features/datasets/DuplicateDatasetModal.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/DuplicateDatasetModal.tsx
rename to superset-frontend/src/features/datasets/DuplicateDatasetModal.tsx
diff --git a/superset-frontend/src/views/CRUD/data/dataset/constants.ts b/superset-frontend/src/features/datasets/constants.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/constants.ts
rename to superset-frontend/src/features/datasets/constants.ts
diff --git a/superset-frontend/src/views/CRUD/data/hooks.ts b/superset-frontend/src/features/datasets/hooks/useDatasetLists.ts
similarity index 54%
rename from superset-frontend/src/views/CRUD/data/hooks.ts
rename to superset-frontend/src/features/datasets/hooks/useDatasetLists.ts
index 4e7a51de35..1c4b00df2d 100644
--- a/superset-frontend/src/views/CRUD/data/hooks.ts
+++ b/superset-frontend/src/features/datasets/hooks/useDatasetLists.ts
@@ -20,70 +20,13 @@ import { useState, useEffect, useCallback } from 'react';
import { SupersetClient, logging, t } from '@superset-ui/core';
import rison from 'rison';
import { addDangerToast } from 'src/components/MessageToasts/actions';
-import { DatasetObject } from 'src/views/CRUD/data/dataset/AddDataset/types';
+import { DatasetObject } from 'src/features/datasets/AddDataset/types';
import { DatabaseObject } from 'src/components/DatabaseSelector';
-type BaseQueryObject = {
- id: number;
-};
-
-export function useQueryPreviewState<D extends BaseQueryObject = any>({
- queries,
- fetchData,
- currentQueryId,
-}: {
- queries: D[];
- fetchData: (id: number) => any;
- currentQueryId: number;
-}) {
- const index = queries.findIndex(query => query.id === currentQueryId);
- const [currentIndex, setCurrentIndex] = useState(index);
- const [disablePrevious, setDisablePrevious] = useState(false);
- const [disableNext, setDisableNext] = useState(false);
-
- function checkIndex() {
- setDisablePrevious(currentIndex === 0);
- setDisableNext(currentIndex === queries.length - 1);
- }
-
- function handleDataChange(previous: boolean) {
- const offset = previous ? -1 : 1;
- const index = currentIndex + offset;
- if (index >= 0 && index < queries.length) {
- fetchData(queries[index].id);
- setCurrentIndex(index);
- checkIndex();
- }
- }
-
- function handleKeyPress(ev: any) {
- if (currentIndex >= 0 && currentIndex < queries.length) {
- if (ev.key === 'ArrowDown' || ev.key === 'k') {
- ev.preventDefault();
- handleDataChange(false);
- } else if (ev.key === 'ArrowUp' || ev.key === 'j') {
- ev.preventDefault();
- handleDataChange(true);
- }
- }
- }
-
- useEffect(() => {
- checkIndex();
- });
-
- return {
- handleKeyPress,
- handleDataChange,
- disablePrevious,
- disableNext,
- };
-}
-
/**
* Retrieves all pages of dataset results
*/
-export const useDatasetsList = (
+const useDatasetsList = (
db:
| (DatabaseObject & {
owners: [number];
@@ -145,34 +88,4 @@ export const useDatasetsList = (
return { datasets, datasetNames };
};
-export const useGetDatasetRelatedCounts = (id: string) => {
- const [usageCount, setUsageCount] = useState(0);
-
- const getDatasetRelatedObjects = useCallback(
- () =>
- SupersetClient.get({
- endpoint: `/api/v1/dataset/${id}/related_objects`,
- })
- .then(({ json }) => {
- setUsageCount(json?.charts.count);
- })
- .catch(error => {
- addDangerToast(
- t(`There was an error fetching dataset's related objects`),
- );
- logging.error(error);
- }),
- [id],
- );
-
- useEffect(() => {
- // Todo: this useEffect should be used to call all count methods conncurently
- // when we populate data for the new tabs. For right separating out this
- // api call for building the usage page.
- if (id) {
- getDatasetRelatedObjects();
- }
- }, [id, getDatasetRelatedObjects]);
-
- return { usageCount };
-};
+export default useDatasetsList;
diff --git a/superset-frontend/src/features/datasets/hooks/useGetDatasetRelatedCounts.ts b/superset-frontend/src/features/datasets/hooks/useGetDatasetRelatedCounts.ts
new file mode 100644
index 0000000000..470345b771
--- /dev/null
+++ b/superset-frontend/src/features/datasets/hooks/useGetDatasetRelatedCounts.ts
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useState, useEffect, useCallback } from 'react';
+import { SupersetClient, logging, t } from '@superset-ui/core';
+import { addDangerToast } from 'src/components/MessageToasts/actions';
+
+const useGetDatasetRelatedCounts = (id: string) => {
+ const [usageCount, setUsageCount] = useState(0);
+
+ const getDatasetRelatedObjects = useCallback(
+ () =>
+ SupersetClient.get({
+ endpoint: `/api/v1/dataset/${id}/related_objects`,
+ })
+ .then(({ json }) => {
+ setUsageCount(json?.charts.count);
+ })
+ .catch(error => {
+ addDangerToast(
+ t(`There was an error fetching dataset's related objects`),
+ );
+ logging.error(error);
+ }),
+ [id],
+ );
+
+ useEffect(() => {
+ // Todo: this useEffect should be used to call all count methods conncurently
+ // when we populate data for the new tabs. For right separating out this
+ // api call for building the usage page.
+ if (id) {
+ getDatasetRelatedObjects();
+ }
+ }, [id, getDatasetRelatedObjects]);
+
+ return { usageCount };
+};
+
+export default useGetDatasetRelatedCounts;
diff --git a/superset-frontend/src/views/CRUD/data/dataset/styles.ts b/superset-frontend/src/features/datasets/styles.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/styles.ts
rename to superset-frontend/src/features/datasets/styles.ts
diff --git a/superset-frontend/src/views/CRUD/data/dataset/types.ts b/superset-frontend/src/features/datasets/types.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/dataset/types.ts
rename to superset-frontend/src/features/datasets/types.ts
diff --git a/superset-frontend/src/views/CRUD/welcome/ActivityTable.test.tsx b/superset-frontend/src/features/home/ActivityTable.test.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/welcome/ActivityTable.test.tsx
rename to superset-frontend/src/features/home/ActivityTable.test.tsx
index 66d521f362..65ef15ee2a 100644
--- a/superset-frontend/src/views/CRUD/welcome/ActivityTable.test.tsx
+++ b/superset-frontend/src/features/home/ActivityTable.test.tsx
@@ -24,8 +24,8 @@ import { Provider } from 'react-redux';
import fetchMock from 'fetch-mock';
import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
-import ActivityTable from 'src/views/CRUD/welcome/ActivityTable';
import { TableTab } from 'src/views/CRUD/types';
+import ActivityTable from './ActivityTable';
const mockStore = configureStore([thunk]);
const store = mockStore({});
diff --git a/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx b/superset-frontend/src/features/home/ActivityTable.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx
rename to superset-frontend/src/features/home/ActivityTable.tsx
index 08c18f7655..22a6f597c6 100644
--- a/superset-frontend/src/views/CRUD/welcome/ActivityTable.tsx
+++ b/superset-frontend/src/features/home/ActivityTable.tsx
@@ -22,7 +22,6 @@ import { styled, t } from '@superset-ui/core';
import { setItem, LocalStorageKeys } from 'src/utils/localStorageHelpers';
import { Link } from 'react-router-dom';
import ListViewCard from 'src/components/ListViewCard';
-import SubMenu from 'src/views/components/SubMenu';
import { Dashboard, SavedQueryObject, TableTab } from 'src/views/CRUD/types';
import { ActivityData, LoadingCards } from 'src/pages/Home';
import {
@@ -31,9 +30,8 @@ import {
getEditedObjects,
} from 'src/views/CRUD/utils';
import { Chart } from 'src/types/Chart';
-
import Icons from 'src/components/Icons';
-
+import SubMenu from './SubMenu';
import EmptyState from './EmptyState';
import { WelcomeTable } from './types';
diff --git a/superset-frontend/src/views/CRUD/welcome/ChartTable.test.tsx b/superset-frontend/src/features/home/ChartTable.test.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/welcome/ChartTable.test.tsx
rename to superset-frontend/src/features/home/ChartTable.test.tsx
index 45e3483026..ee6160bc23 100644
--- a/superset-frontend/src/views/CRUD/welcome/ChartTable.test.tsx
+++ b/superset-frontend/src/features/home/ChartTable.test.tsx
@@ -21,11 +21,10 @@ import { styledMount as mount } from 'spec/helpers/theming';
import thunk from 'redux-thunk';
import fetchMock from 'fetch-mock';
import configureStore from 'redux-mock-store';
-
import { act } from 'react-dom/test-utils';
-import ChartTable from 'src/views/CRUD/welcome/ChartTable';
import { ReactWrapper } from 'enzyme';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
+import ChartTable from './ChartTable';
const mockStore = configureStore([thunk]);
const store = mockStore({});
diff --git a/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx b/superset-frontend/src/features/home/ChartTable.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/welcome/ChartTable.tsx
rename to superset-frontend/src/features/home/ChartTable.tsx
index d0d4db4105..c84a0c81c2 100644
--- a/superset-frontend/src/views/CRUD/welcome/ChartTable.tsx
+++ b/superset-frontend/src/features/home/ChartTable.tsx
@@ -40,14 +40,14 @@ import {
PAGE_SIZE,
} from 'src/views/CRUD/utils';
import { LoadingCards } from 'src/pages/Home';
-import ChartCard from 'src/views/CRUD/chart/ChartCard';
+import ChartCard from 'src/features/charts/ChartCard';
import Chart from 'src/types/Chart';
import handleResourceExport from 'src/utils/export';
import Loading from 'src/components/Loading';
import ErrorBoundary from 'src/components/ErrorBoundary';
-import SubMenu from 'src/views/components/SubMenu';
import EmptyState from './EmptyState';
import { WelcomeTable } from './types';
+import SubMenu from './SubMenu';
interface ChartTableProps {
addDangerToast: (message: string) => void;
diff --git a/superset-frontend/src/views/CRUD/welcome/DashboardTable.test.tsx b/superset-frontend/src/features/home/DashboardTable.test.tsx
similarity index 95%
rename from superset-frontend/src/views/CRUD/welcome/DashboardTable.test.tsx
rename to superset-frontend/src/features/home/DashboardTable.test.tsx
index 79f88e3128..3e2a33d561 100644
--- a/superset-frontend/src/views/CRUD/welcome/DashboardTable.test.tsx
+++ b/superset-frontend/src/features/home/DashboardTable.test.tsx
@@ -24,8 +24,8 @@ import fetchMock from 'fetch-mock';
import { act } from 'react-dom/test-utils';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
-import DashboardTable from 'src/views/CRUD/welcome/DashboardTable';
-import DashboardCard from 'src/views/CRUD/dashboard/DashboardCard';
+import DashboardCard from 'src/features/dashboards/DashboardCard';
+import DashboardTable from './DashboardTable';
// store needed for withToasts(DashboardTable)
const mockStore = configureStore([thunk]);
diff --git a/superset-frontend/src/views/CRUD/welcome/DashboardTable.tsx b/superset-frontend/src/features/home/DashboardTable.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/welcome/DashboardTable.tsx
rename to superset-frontend/src/features/home/DashboardTable.tsx
index b38b0b8477..36ea29e955 100644
--- a/superset-frontend/src/views/CRUD/welcome/DashboardTable.tsx
+++ b/superset-frontend/src/features/home/DashboardTable.tsx
@@ -40,9 +40,9 @@ import withToasts from 'src/components/MessageToasts/withToasts';
import Loading from 'src/components/Loading';
import DeleteModal from 'src/components/DeleteModal';
import PropertiesModal from 'src/dashboard/components/PropertiesModal';
-import DashboardCard from 'src/views/CRUD/dashboard/DashboardCard';
-import SubMenu from 'src/views/components/SubMenu';
+import DashboardCard from 'src/features/dashboards/DashboardCard';
import EmptyState from './EmptyState';
+import SubMenu from './SubMenu';
import { WelcomeTable } from './types';
function DashboardTable({
diff --git a/superset-frontend/src/views/CRUD/welcome/EmptyState.test.tsx b/superset-frontend/src/features/home/EmptyState.test.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/welcome/EmptyState.test.tsx
rename to superset-frontend/src/features/home/EmptyState.test.tsx
index fb8ae48ee1..14b9cba4ed 100644
--- a/superset-frontend/src/views/CRUD/welcome/EmptyState.test.tsx
+++ b/superset-frontend/src/features/home/EmptyState.test.tsx
@@ -19,7 +19,7 @@
import React from 'react';
import { styledMount as mount } from 'spec/helpers/theming';
import { TableTab } from 'src/views/CRUD/types';
-import EmptyState, { EmptyStateProps } from 'src/views/CRUD/welcome/EmptyState';
+import EmptyState, { EmptyStateProps } from './EmptyState';
import { WelcomeTable } from './types';
describe('EmptyState', () => {
diff --git a/superset-frontend/src/views/CRUD/welcome/EmptyState.tsx b/superset-frontend/src/features/home/EmptyState.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/welcome/EmptyState.tsx
rename to superset-frontend/src/features/home/EmptyState.tsx
diff --git a/superset-frontend/src/views/components/LanguagePicker.test.tsx b/superset-frontend/src/features/home/LanguagePicker.test.tsx
similarity index 100%
rename from superset-frontend/src/views/components/LanguagePicker.test.tsx
rename to superset-frontend/src/features/home/LanguagePicker.test.tsx
diff --git a/superset-frontend/src/views/components/LanguagePicker.tsx b/superset-frontend/src/features/home/LanguagePicker.tsx
similarity index 100%
rename from superset-frontend/src/views/components/LanguagePicker.tsx
rename to superset-frontend/src/features/home/LanguagePicker.tsx
diff --git a/superset-frontend/src/views/components/Menu.test.tsx b/superset-frontend/src/features/home/Menu.test.tsx
similarity index 100%
rename from superset-frontend/src/views/components/Menu.test.tsx
rename to superset-frontend/src/features/home/Menu.test.tsx
diff --git a/superset-frontend/src/views/components/Menu.tsx b/superset-frontend/src/features/home/Menu.tsx
similarity index 100%
rename from superset-frontend/src/views/components/Menu.tsx
rename to superset-frontend/src/features/home/Menu.tsx
diff --git a/superset-frontend/src/views/components/RightMenu.test.tsx b/superset-frontend/src/features/home/RightMenu.test.tsx
similarity index 99%
rename from superset-frontend/src/views/components/RightMenu.test.tsx
rename to superset-frontend/src/features/home/RightMenu.test.tsx
index 907c305ff6..95d61def4c 100644
--- a/superset-frontend/src/views/components/RightMenu.test.tsx
+++ b/superset-frontend/src/features/home/RightMenu.test.tsx
@@ -29,7 +29,7 @@ jest.mock('react-redux', () => ({
useSelector: jest.fn(),
}));
-jest.mock('src/views/CRUD/data/database/DatabaseModal', () => () => <span />);
+jest.mock('src/features/databases/DatabaseModal', () => () => <span />);
const dropdownItems = [
{
diff --git a/superset-frontend/src/views/components/RightMenu.tsx b/superset-frontend/src/features/home/RightMenu.tsx
similarity index 98%
rename from superset-frontend/src/views/components/RightMenu.tsx
rename to superset-frontend/src/features/home/RightMenu.tsx
index e245096f43..d0b8e44ab7 100644
--- a/superset-frontend/src/views/components/RightMenu.tsx
+++ b/superset-frontend/src/features/home/RightMenu.tsx
@@ -44,9 +44,9 @@ import {
MenuObjectChildProps,
} from 'src/types/bootstrapTypes';
import { RootState } from 'src/dashboard/types';
+import DatabaseModal from 'src/features/databases/DatabaseModal';
+import { uploadUserPerms } from 'src/views/CRUD/utils';
import LanguagePicker from './LanguagePicker';
-import DatabaseModal from '../CRUD/data/database/DatabaseModal';
-import { uploadUserPerms } from '../CRUD/utils';
import {
ExtensionConfigs,
GlobalMenuDataOptions,
@@ -67,10 +67,9 @@ const StyledI = styled.div`
`;
const styledDisabled = (theme: SupersetTheme) => css`
- color: ${theme.colors.grayscale.base};
- backgroundColor: ${theme.colors.grayscale.light2}};
- .ant-menu-item:hover {
- color: ${theme.colors.grayscale.base};
+ color: ${theme.colors.grayscale.light1};
+ .ant-menu-item-active {
+ color: ${theme.colors.grayscale.light1};
cursor: default;
}
`;
diff --git a/superset-frontend/src/views/CRUD/welcome/SavedQueries.test.tsx b/superset-frontend/src/features/home/SavedQueries.test.tsx
similarity index 96%
rename from superset-frontend/src/views/CRUD/welcome/SavedQueries.test.tsx
rename to superset-frontend/src/features/home/SavedQueries.test.tsx
index f656a9e8e1..3d9c16f80c 100644
--- a/superset-frontend/src/views/CRUD/welcome/SavedQueries.test.tsx
+++ b/superset-frontend/src/features/home/SavedQueries.test.tsx
@@ -22,10 +22,9 @@ import { styledMount as mount } from 'spec/helpers/theming';
import fetchMock from 'fetch-mock';
import configureStore from 'redux-mock-store';
import { act } from 'react-dom/test-utils';
-
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
-import SubMenu from 'src/views/components/SubMenu';
-import SavedQueries from 'src/views/CRUD/welcome/SavedQueries';
+import SubMenu from './SubMenu';
+import SavedQueries from './SavedQueries';
// store needed for withToasts(DashboardTable)
const mockStore = configureStore([thunk]);
diff --git a/superset-frontend/src/views/CRUD/welcome/SavedQueries.tsx b/superset-frontend/src/features/home/SavedQueries.tsx
similarity index 99%
rename from superset-frontend/src/views/CRUD/welcome/SavedQueries.tsx
rename to superset-frontend/src/features/home/SavedQueries.tsx
index c7d43b0e4b..9417f03bea 100644
--- a/superset-frontend/src/views/CRUD/welcome/SavedQueries.tsx
+++ b/superset-frontend/src/features/home/SavedQueries.tsx
@@ -30,16 +30,16 @@ import { copyQueryLink, useListViewResource } from 'src/views/CRUD/hooks';
import ListViewCard from 'src/components/ListViewCard';
import DeleteModal from 'src/components/DeleteModal';
import Icons from 'src/components/Icons';
-import SubMenu from 'src/views/components/SubMenu';
import { User } from 'src/types/bootstrapTypes';
-import EmptyState from './EmptyState';
import {
CardContainer,
createErrorHandler,
getFilterValues,
PAGE_SIZE,
shortenSQL,
-} from '../utils';
+} from 'src/views/CRUD/utils';
+import SubMenu from './SubMenu';
+import EmptyState from './EmptyState';
import { WelcomeTable } from './types';
SyntaxHighlighter.registerLanguage('sql', sql);
diff --git a/superset-frontend/src/views/components/SubMenu.test.tsx b/superset-frontend/src/features/home/SubMenu.test.tsx
similarity index 100%
rename from superset-frontend/src/views/components/SubMenu.test.tsx
rename to superset-frontend/src/features/home/SubMenu.test.tsx
diff --git a/superset-frontend/src/views/components/SubMenu.tsx b/superset-frontend/src/features/home/SubMenu.tsx
similarity index 98%
rename from superset-frontend/src/views/components/SubMenu.tsx
rename to superset-frontend/src/features/home/SubMenu.tsx
index 4d21c0f3a4..e5b9f70900 100644
--- a/superset-frontend/src/views/components/SubMenu.tsx
+++ b/superset-frontend/src/features/home/SubMenu.tsx
@@ -161,11 +161,10 @@ const StyledHeader = styled.div`
`;
const styledDisabled = (theme: SupersetTheme) => css`
- color: ${theme.colors.grayscale.base};
- backgroundColor: ${theme.colors.grayscale.light2}};
+ color: ${theme.colors.grayscale.light1};
- .ant-menu-item:hover {
- color: ${theme.colors.grayscale.base};
+ .ant-menu-item-active {
+ color: ${theme.colors.grayscale.light1};
cursor: default;
}
`;
diff --git a/superset-frontend/src/views/CRUD/data/common.ts b/superset-frontend/src/features/home/commonMenuData.ts
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/common.ts
rename to superset-frontend/src/features/home/commonMenuData.ts
diff --git a/superset-frontend/src/views/components/types.ts b/superset-frontend/src/features/home/types.ts
similarity index 85%
rename from superset-frontend/src/views/components/types.ts
rename to superset-frontend/src/features/home/types.ts
index 2cdc3ae924..59a3c2668f 100644
--- a/superset-frontend/src/views/components/types.ts
+++ b/superset-frontend/src/features/home/types.ts
@@ -17,8 +17,18 @@
* under the License.
*/
+import { Filter } from 'src/views/CRUD/types';
import { NavBarProps, MenuObjectProps } from 'src/types/bootstrapTypes';
+export enum WelcomeTable {
+ Charts = 'CHARTS',
+ Dashboards = 'DASHBOARDS',
+ Recents = 'RECENTS',
+ SavedQueries = 'SAVED_QUERIES',
+}
+
+export type WelcomePageLastTab = 'examples' | 'all' | [string, Filter[]];
+
export interface ExtensionConfigs {
ALLOWED_EXTENSIONS: Array<any>;
CSV_EXTENSIONS: Array<any>;
diff --git a/superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.test.tsx b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.test.tsx
rename to superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
index 96498f6e69..f6501877c7 100644
--- a/superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.test.tsx
+++ b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
@@ -23,11 +23,11 @@ import configureStore from 'redux-mock-store';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { styledMount as mount } from 'spec/helpers/theming';
-import QueryPreviewModal from 'src/views/CRUD/data/query/QueryPreviewModal';
import { QueryObject } from 'src/views/CRUD/types';
import SyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/light';
import { act } from 'react-dom/test-utils';
import { QueryState } from '@superset-ui/core';
+import QueryPreviewModal from './QueryPreviewModal';
// store needed for withToasts
const mockStore = configureStore([thunk]);
diff --git a/superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.tsx b/superset-frontend/src/features/queries/QueryPreviewModal.tsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.tsx
rename to superset-frontend/src/features/queries/QueryPreviewModal.tsx
index e8d7b5e201..fccdeb7b9d 100644
--- a/superset-frontend/src/views/CRUD/data/query/QueryPreviewModal.tsx
+++ b/superset-frontend/src/features/queries/QueryPreviewModal.tsx
@@ -24,8 +24,8 @@ import Button from 'src/components/Button';
import withToasts, {
ToastProps,
} from 'src/components/MessageToasts/withToasts';
-import SyntaxHighlighterCopy from 'src/views/CRUD/data/components/SyntaxHighlighterCopy';
-import { useQueryPreviewState } from 'src/views/CRUD/data/hooks';
+import SyntaxHighlighterCopy from 'src/features/queries/SyntaxHighlighterCopy';
+import useQueryPreviewState from 'src/features/queries/hooks/useQueryPreviewState';
import { QueryObject } from 'src/views/CRUD/types';
const QueryTitle = styled.div`
diff --git a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.test.jsx b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
similarity index 97%
rename from superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.test.jsx
rename to superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
index e6f17f4eae..66e388bc16 100644
--- a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.test.jsx
+++ b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
@@ -21,11 +21,11 @@ import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
import fetchMock from 'fetch-mock';
import { styledMount as mount } from 'spec/helpers/theming';
-import SavedQueryPreviewModal from 'src/views/CRUD/data/savedquery/SavedQueryPreviewModal';
import Button from 'src/components/Button';
import Modal from 'src/components/Modal';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { act } from 'react-dom/test-utils';
+import SavedQueryPreviewModal from './SavedQueryPreviewModal';
// store needed for withToasts(DatabaseList)
const mockStore = configureStore([thunk]);
diff --git a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.tsx b/superset-frontend/src/features/queries/SavedQueryPreviewModal.tsx
similarity index 96%
rename from superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.tsx
rename to superset-frontend/src/features/queries/SavedQueryPreviewModal.tsx
index 29efb634a4..d46212b938 100644
--- a/superset-frontend/src/views/CRUD/data/savedquery/SavedQueryPreviewModal.tsx
+++ b/superset-frontend/src/features/queries/SavedQueryPreviewModal.tsx
@@ -20,11 +20,11 @@ import React, { FunctionComponent } from 'react';
import { styled, t } from '@superset-ui/core';
import Modal from 'src/components/Modal';
import Button from 'src/components/Button';
-import SyntaxHighlighterCopy from 'src/views/CRUD/data/components/SyntaxHighlighterCopy';
+import SyntaxHighlighterCopy from 'src/features/queries/SyntaxHighlighterCopy';
import withToasts, {
ToastProps,
} from 'src/components/MessageToasts/withToasts';
-import { useQueryPreviewState } from 'src/views/CRUD/data/hooks';
+import useQueryPreviewState from 'src/features/queries/hooks/useQueryPreviewState';
const QueryTitle = styled.div`
color: ${({ theme }) => theme.colors.secondary.light2};
diff --git a/superset-frontend/src/views/CRUD/data/components/SyntaxHighlighterCopy/index.tsx b/superset-frontend/src/features/queries/SyntaxHighlighterCopy.tsx
similarity index 100%
rename from superset-frontend/src/views/CRUD/data/components/SyntaxHighlighterCopy/index.tsx
rename to superset-frontend/src/features/queries/SyntaxHighlighterCopy.tsx
diff --git a/superset-frontend/src/features/queries/hooks/useQueryPreviewState.ts b/superset-frontend/src/features/queries/hooks/useQueryPreviewState.ts
new file mode 100644
index 0000000000..898b6a68a6
--- /dev/null
+++ b/superset-frontend/src/features/queries/hooks/useQueryPreviewState.ts
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { useState, useEffect } from 'react';
+
+type BaseQueryObject = {
+ id: number;
+};
+
+export default function useQueryPreviewState<D extends BaseQueryObject = any>({
+ queries,
+ fetchData,
+ currentQueryId,
+}: {
+ queries: D[];
+ fetchData: (id: number) => any;
+ currentQueryId: number;
+}) {
+ const index = queries.findIndex(query => query.id === currentQueryId);
+ const [currentIndex, setCurrentIndex] = useState(index);
+ const [disablePrevious, setDisablePrevious] = useState(false);
+ const [disableNext, setDisableNext] = useState(false);
+
+ function checkIndex() {
+ setDisablePrevious(currentIndex === 0);
+ setDisableNext(currentIndex === queries.length - 1);
+ }
+
+ function handleDataChange(previous: boolean) {
+ const offset = previous ? -1 : 1;
+ const index = currentIndex + offset;
+ if (index >= 0 && index < queries.length) {
+ fetchData(queries[index].id);
+ setCurrentIndex(index);
+ checkIndex();
+ }
+ }
+
+ function handleKeyPress(ev: any) {
+ if (currentIndex >= 0 && currentIndex < queries.length) {
+ if (ev.key === 'ArrowDown' || ev.key === 'k') {
+ ev.preventDefault();
+ handleDataChange(false);
+ } else if (ev.key === 'ArrowUp' || ev.key === 'j') {
+ ev.preventDefault();
+ handleDataChange(true);
+ }
+ }
+ }
+
+ useEffect(() => {
+ checkIndex();
+ });
+
+ return {
+ handleKeyPress,
+ handleDataChange,
+ disablePrevious,
+ disableNext,
+ };
+}
diff --git a/superset-frontend/src/views/CRUD/tags/TagCard.tsx b/superset-frontend/src/features/tags/TagCard.tsx
similarity index 98%
rename from superset-frontend/src/views/CRUD/tags/TagCard.tsx
rename to superset-frontend/src/features/tags/TagCard.tsx
index 7ed8c1df0d..869678545c 100644
--- a/superset-frontend/src/views/CRUD/tags/TagCard.tsx
+++ b/superset-frontend/src/features/tags/TagCard.tsx
@@ -27,7 +27,7 @@ import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import ListViewCard from 'src/components/ListViewCard';
import Icons from 'src/components/Icons';
import { Tag } from 'src/views/CRUD/types';
-import { deleteTags } from 'src/tags';
+import { deleteTags } from 'src/features/tags/tags';
interface TagCardProps {
tag: Tag;
diff --git a/superset-frontend/src/tags.ts b/superset-frontend/src/features/tags/tags.ts
similarity index 100%
rename from superset-frontend/src/tags.ts
rename to superset-frontend/src/features/tags/tags.ts
diff --git a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
index 492b63aa34..67fbcbd2d2 100644
--- a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
+++ b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
@@ -25,7 +25,7 @@ import { styledMount as mount } from 'spec/helpers/theming';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { Switch } from 'src/components/Switch';
import ListView from 'src/components/ListView';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import AlertList from 'src/pages/AlertReportList';
import IndeterminateCheckbox from 'src/components/IndeterminateCheckbox';
import { act } from 'react-dom/test-utils';
diff --git a/superset-frontend/src/pages/AlertReportList/index.tsx b/superset-frontend/src/pages/AlertReportList/index.tsx
index c4a35435a0..45504eb3c7 100644
--- a/superset-frontend/src/pages/AlertReportList/index.tsx
+++ b/superset-frontend/src/pages/AlertReportList/index.tsx
@@ -35,16 +35,15 @@ import ListView, {
Filters,
ListViewProps,
} from 'src/components/ListView';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import { Switch } from 'src/components/Switch';
import { DATETIME_WITH_TIME_ZONE } from 'src/constants';
import withToasts from 'src/components/MessageToasts/withToasts';
-import AlertStatusIcon from 'src/views/CRUD/alert/components/AlertStatusIcon';
-import RecipientIcon from 'src/views/CRUD/alert/components/RecipientIcon';
+import AlertStatusIcon from 'src/features/alerts/components/AlertStatusIcon';
+import RecipientIcon from 'src/features/alerts/components/RecipientIcon';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import DeleteModal from 'src/components/DeleteModal';
import LastUpdated from 'src/components/LastUpdated';
-
import {
useListViewResource,
useSingleViewResource,
@@ -52,8 +51,8 @@ import {
import { createErrorHandler, createFetchRelated } from 'src/views/CRUD/utils';
import { isUserAdmin } from 'src/dashboard/util/permissionUtils';
import Owner from 'src/types/Owner';
-import AlertReportModal from 'src/views/CRUD/alert/AlertReportModal';
-import { AlertObject, AlertState } from 'src/views/CRUD/alert/types';
+import AlertReportModal from 'src/features/alerts/AlertReportModal';
+import { AlertObject, AlertState } from 'src/features/alerts/types';
const extensionsRegistry = getExtensionsRegistry();
diff --git a/superset-frontend/src/pages/AllEntities/index.tsx b/superset-frontend/src/pages/AllEntities/index.tsx
index de9df56e9f..7dfef8eb96 100644
--- a/superset-frontend/src/pages/AllEntities/index.tsx
+++ b/superset-frontend/src/pages/AllEntities/index.tsx
@@ -24,7 +24,7 @@ import AsyncSelect from 'src/components/Select/AsyncSelect';
import { SelectValue } from 'antd/lib/select';
import { loadTags } from 'src/components/Tags/utils';
import { getValue } from 'src/components/Select/utils';
-import AllEntitiesTable from 'src/views/CRUD/allentities/AllEntitiesTable';
+import AllEntitiesTable from 'src/features/allEntities/AllEntitiesTable';
const AllEntitiesContainer = styled.div`
${({ theme }) => `
diff --git a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
index d3efb1f8be..09e1301dcc 100644
--- a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
@@ -24,8 +24,8 @@ import { Provider } from 'react-redux';
import { styledMount as mount } from 'spec/helpers/theming';
import AnnotationLayersList from 'src/pages/AnnotationLayerList';
-import AnnotationLayerModal from 'src/views/CRUD/annotationlayers/AnnotationLayerModal';
-import SubMenu from 'src/views/components/SubMenu';
+import AnnotationLayerModal from 'src/features/annotationLayers/AnnotationLayerModal';
+import SubMenu from 'src/features/home/SubMenu';
import ListView from 'src/components/ListView';
import Filters from 'src/components/ListView/Filters';
import DeleteModal from 'src/components/DeleteModal';
diff --git a/superset-frontend/src/pages/AnnotationLayerList/index.tsx b/superset-frontend/src/pages/AnnotationLayerList/index.tsx
index 9b30934ce4..47981a206c 100644
--- a/superset-frontend/src/pages/AnnotationLayerList/index.tsx
+++ b/superset-frontend/src/pages/AnnotationLayerList/index.tsx
@@ -25,7 +25,7 @@ import moment from 'moment';
import { useListViewResource } from 'src/views/CRUD/hooks';
import { createFetchRelated, createErrorHandler } from 'src/views/CRUD/utils';
import withToasts from 'src/components/MessageToasts/withToasts';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import ActionsBar, { ActionProps } from 'src/components/ListView/ActionsBar';
import ListView, {
ListViewProps,
@@ -34,8 +34,8 @@ import ListView, {
} from 'src/components/ListView';
import DeleteModal from 'src/components/DeleteModal';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
-import AnnotationLayerModal from 'src/views/CRUD/annotationlayers/AnnotationLayerModal';
-import { AnnotationLayerObject } from 'src/views/CRUD/annotationlayers/types';
+import AnnotationLayerModal from 'src/features/annotationLayers/AnnotationLayerModal';
+import { AnnotationLayerObject } from 'src/features/annotationLayers/types';
const PAGE_SIZE = 25;
const MOMENT_FORMAT = 'MMM DD, YYYY';
diff --git a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
index 26cd063d57..49e7775232 100644
--- a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
@@ -27,7 +27,7 @@ import AnnotationList from 'src/pages/AnnotationList';
import DeleteModal from 'src/components/DeleteModal';
import IndeterminateCheckbox from 'src/components/IndeterminateCheckbox';
import ListView from 'src/components/ListView';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { act } from 'react-dom/test-utils';
diff --git a/superset-frontend/src/pages/AnnotationList/index.tsx b/superset-frontend/src/pages/AnnotationList/index.tsx
index dead2fc726..ee25502169 100644
--- a/superset-frontend/src/pages/AnnotationList/index.tsx
+++ b/superset-frontend/src/pages/AnnotationList/index.tsx
@@ -27,14 +27,14 @@ import ActionsBar, { ActionProps } from 'src/components/ListView/ActionsBar';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import DeleteModal from 'src/components/DeleteModal';
import ListView, { ListViewProps } from 'src/components/ListView';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import { getClientErrorObject } from 'src/utils/getClientErrorObject';
import withToasts from 'src/components/MessageToasts/withToasts';
import { useListViewResource } from 'src/views/CRUD/hooks';
import { createErrorHandler } from 'src/views/CRUD/utils';
-import { AnnotationObject } from 'src/views/CRUD/annotation/types';
-import AnnotationModal from 'src/views/CRUD/annotation/AnnotationModal';
+import { AnnotationObject } from 'src/features/annotations/types';
+import AnnotationModal from 'src/features/annotations/AnnotationModal';
const PAGE_SIZE = 25;
diff --git a/superset-frontend/src/pages/ChartList/index.tsx b/superset-frontend/src/pages/ChartList/index.tsx
index 8265604556..5a869e3c4f 100644
--- a/superset-frontend/src/pages/ChartList/index.tsx
+++ b/superset-frontend/src/pages/ChartList/index.tsx
@@ -43,7 +43,7 @@ import {
import handleResourceExport from 'src/utils/export';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import { TagsList } from 'src/components/Tags';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import FaveStar from 'src/components/FaveStar';
import { Link, useHistory } from 'react-router-dom';
import ListView, {
@@ -71,7 +71,7 @@ import { GenericLink } from 'src/components/GenericLink/GenericLink';
import getBootstrapData from 'src/utils/getBootstrapData';
import Owner from 'src/types/Owner';
import { loadTags } from 'src/components/Tags/utils';
-import ChartCard from 'src/views/CRUD/chart/ChartCard';
+import ChartCard from 'src/features/charts/ChartCard';
const FlexRowContainer = styled.div`
align-items: center;
diff --git a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
index d513523a7e..c437247048 100644
--- a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
+++ b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
@@ -24,7 +24,7 @@ import fetchMock from 'fetch-mock';
import { styledMount as mount } from 'spec/helpers/theming';
import CssTemplatesList from 'src/pages/CssTemplateList';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import ListView from 'src/components/ListView';
import Filters from 'src/components/ListView/Filters';
import DeleteModal from 'src/components/DeleteModal';
diff --git a/superset-frontend/src/pages/CssTemplateList/index.tsx b/superset-frontend/src/pages/CssTemplateList/index.tsx
index 4d678b0a32..7e2882d211 100644
--- a/superset-frontend/src/pages/CssTemplateList/index.tsx
+++ b/superset-frontend/src/pages/CssTemplateList/index.tsx
@@ -25,7 +25,7 @@ import moment from 'moment';
import { useListViewResource } from 'src/views/CRUD/hooks';
import { createFetchRelated, createErrorHandler } from 'src/views/CRUD/utils';
import withToasts from 'src/components/MessageToasts/withToasts';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import DeleteModal from 'src/components/DeleteModal';
import { Tooltip } from 'src/components/Tooltip';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
@@ -35,8 +35,8 @@ import ListView, {
Filters,
FilterOperator,
} from 'src/components/ListView';
-import CssTemplateModal from 'src/views/CRUD/csstemplates/CssTemplateModal';
-import { TemplateObject } from 'src/views/CRUD/csstemplates/types';
+import CssTemplateModal from 'src/features/cssTemplates/CssTemplateModal';
+import { TemplateObject } from 'src/features/cssTemplates/types';
const PAGE_SIZE = 25;
diff --git a/superset-frontend/src/pages/DashboardList/index.tsx b/superset-frontend/src/pages/DashboardList/index.tsx
index e0f81e0bf4..22e7b6c12f 100644
--- a/superset-frontend/src/pages/DashboardList/index.tsx
+++ b/superset-frontend/src/pages/DashboardList/index.tsx
@@ -31,7 +31,7 @@ import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import { TagsList } from 'src/components/Tags';
import handleResourceExport from 'src/utils/export';
import Loading from 'src/components/Loading';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import ListView, {
ListViewProps,
Filter,
@@ -55,8 +55,8 @@ import { Dashboard as CRUDDashboard } from 'src/views/CRUD/types';
import CertifiedBadge from 'src/components/CertifiedBadge';
import { loadTags } from 'src/components/Tags/utils';
import getBootstrapData from 'src/utils/getBootstrapData';
-import DashboardCard from 'src/views/CRUD/dashboard/DashboardCard';
-import { DashboardStatus } from 'src/views/CRUD/dashboard/types';
+import DashboardCard from 'src/features/dashboards/DashboardCard';
+import { DashboardStatus } from 'src/features/dashboards/types';
const PAGE_SIZE = 25;
const PASSWORDS_NEEDED_MESSAGE = t(
diff --git a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
index 42cf1491d2..2ab5d067bf 100644
--- a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
+++ b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
@@ -25,9 +25,9 @@ import { Provider } from 'react-redux';
import { styledMount as mount } from 'spec/helpers/theming';
import DatabaseList from 'src/pages/DatabaseList';
-import DatabaseModal from 'src/views/CRUD/data/database/DatabaseModal';
+import DatabaseModal from 'src/features/databases/DatabaseModal';
import DeleteModal from 'src/components/DeleteModal';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import ListView from 'src/components/ListView';
import Filters from 'src/components/ListView/Filters';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
diff --git a/superset-frontend/src/pages/DatabaseList/index.tsx b/superset-frontend/src/pages/DatabaseList/index.tsx
index a9ae567c60..0a59ccc3b2 100644
--- a/superset-frontend/src/pages/DatabaseList/index.tsx
+++ b/superset-frontend/src/pages/DatabaseList/index.tsx
@@ -28,7 +28,7 @@ import { isFeatureEnabled } from 'src/featureFlags';
import { useListViewResource } from 'src/views/CRUD/hooks';
import { createErrorHandler, uploadUserPerms } from 'src/views/CRUD/utils';
import withToasts from 'src/components/MessageToasts/withToasts';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import DeleteModal from 'src/components/DeleteModal';
import { getUrlParam } from 'src/utils/urlUtils';
import { URL_PARAMS } from 'src/constants';
@@ -37,11 +37,11 @@ import Icons from 'src/components/Icons';
import { isUserAdmin } from 'src/dashboard/util/permissionUtils';
import ListView, { FilterOperator, Filters } from 'src/components/ListView';
import handleResourceExport from 'src/utils/export';
-import { ExtensionConfigs } from 'src/views/components/types';
+import { ExtensionConfigs } from 'src/features/home/types';
import { UserWithPermissionsAndRoles } from 'src/types/bootstrapTypes';
import type { MenuObjectProps } from 'src/types/bootstrapTypes';
-import DatabaseModal from 'src/views/CRUD/data/database/DatabaseModal';
-import { DatabaseObject } from 'src/views/CRUD/data/database/types';
+import DatabaseModal from 'src/features/databases/DatabaseModal';
+import { DatabaseObject } from 'src/features/databases/types';
const PAGE_SIZE = 25;
diff --git a/superset-frontend/src/pages/DatasetCreation/index.tsx b/superset-frontend/src/pages/DatasetCreation/index.tsx
index 18c180b2d3..baeaa01e30 100644
--- a/superset-frontend/src/pages/DatasetCreation/index.tsx
+++ b/superset-frontend/src/pages/DatasetCreation/index.tsx
@@ -18,18 +18,18 @@
*/
import React, { useReducer, Reducer, useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
-import { useDatasetsList } from 'src/views/CRUD/data/hooks';
-import Header from 'src/views/CRUD/data/dataset/AddDataset/Header';
-import EditPage from 'src/views/CRUD/data/dataset/AddDataset/EditDataset';
-import DatasetPanel from 'src/views/CRUD/data/dataset/AddDataset/DatasetPanel';
-import LeftPanel from 'src/views/CRUD/data/dataset/AddDataset/LeftPanel';
-import Footer from 'src/views/CRUD/data/dataset/AddDataset/Footer';
+import useDatasetsList from 'src/features/datasets/hooks/useDatasetLists';
+import Header from 'src/features/datasets/AddDataset/Header';
+import EditPage from 'src/features/datasets/AddDataset/EditDataset';
+import DatasetPanel from 'src/features/datasets/AddDataset/DatasetPanel';
+import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel';
+import Footer from 'src/features/datasets/AddDataset/Footer';
import {
DatasetActionType,
DatasetObject,
DSReducerActionType,
-} from 'src/views/CRUD/data/dataset/AddDataset/types';
-import DatasetLayout from 'src/views/CRUD/data/dataset/DatasetLayout';
+} from 'src/features/datasets/AddDataset/types';
+import DatasetLayout from 'src/features/datasets/DatasetLayout';
type Schema = {
schema: string;
diff --git a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
index c061d1ab25..861624716e 100644
--- a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
+++ b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
@@ -34,7 +34,7 @@ import Button from 'src/components/Button';
import IndeterminateCheckbox from 'src/components/IndeterminateCheckbox';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { act } from 'react-dom/test-utils';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
// store needed for withToasts(DatasetList)
const mockStore = configureStore([thunk]);
diff --git a/superset-frontend/src/pages/DatasetList/index.tsx b/superset-frontend/src/pages/DatasetList/index.tsx
index 68f6c11348..28b9a522be 100644
--- a/superset-frontend/src/pages/DatasetList/index.tsx
+++ b/superset-frontend/src/pages/DatasetList/index.tsx
@@ -30,7 +30,7 @@ import {
createFetchDistinct,
createErrorHandler,
} from 'src/views/CRUD/utils';
-import { ColumnObject } from 'src/views/CRUD/data/dataset/types';
+import { ColumnObject } from 'src/features/datasets/types';
import { useListViewResource } from 'src/views/CRUD/hooks';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import { DatasourceModal } from 'src/components/Datasource';
@@ -42,10 +42,7 @@ import ListView, {
FilterOperator,
} from 'src/components/ListView';
import Loading from 'src/components/Loading';
-import SubMenu, {
- SubMenuProps,
- ButtonProps,
-} from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps, ButtonProps } from 'src/features/home/SubMenu';
import Owner from 'src/types/Owner';
import withToasts from 'src/components/MessageToasts/withToasts';
import { Tooltip } from 'src/components/Tooltip';
@@ -64,8 +61,8 @@ import {
SORT_BY,
PASSWORDS_NEEDED_MESSAGE,
CONFIRM_OVERWRITE_MESSAGE,
-} from 'src/views/CRUD/data/dataset/constants';
-import DuplicateDatasetModal from 'src/views/CRUD/data/dataset/DuplicateDatasetModal';
+} from 'src/features/datasets/constants';
+import DuplicateDatasetModal from 'src/features/datasets/DuplicateDatasetModal';
const FlexRowContainer = styled.div`
align-items: center;
diff --git a/superset-frontend/src/pages/ExecutionLogList/index.tsx b/superset-frontend/src/pages/ExecutionLogList/index.tsx
index 48c1bde788..2e32fe01c4 100644
--- a/superset-frontend/src/pages/ExecutionLogList/index.tsx
+++ b/superset-frontend/src/pages/ExecutionLogList/index.tsx
@@ -23,15 +23,15 @@ import React, { useEffect, useMemo } from 'react';
import { Link, useParams } from 'react-router-dom';
import ListView from 'src/components/ListView';
import { Tooltip } from 'src/components/Tooltip';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import withToasts from 'src/components/MessageToasts/withToasts';
import { fDuration } from 'src/utils/dates';
-import AlertStatusIcon from 'src/views/CRUD/alert/components/AlertStatusIcon';
+import AlertStatusIcon from 'src/features/alerts/components/AlertStatusIcon';
import {
useListViewResource,
useSingleViewResource,
} from 'src/views/CRUD/hooks';
-import { AlertObject, LogObject } from 'src/views/CRUD/alert/types';
+import { AlertObject, LogObject } from 'src/features/alerts/types';
const PAGE_SIZE = 25;
diff --git a/superset-frontend/src/pages/Home/index.tsx b/superset-frontend/src/pages/Home/index.tsx
index 6018b38bfa..21217ae3b1 100644
--- a/superset-frontend/src/pages/Home/index.tsx
+++ b/superset-frontend/src/pages/Home/index.tsx
@@ -49,13 +49,13 @@ import { isFeatureEnabled } from 'src/featureFlags';
import { AntdSwitch } from 'src/components';
import getBootstrapData from 'src/utils/getBootstrapData';
import { TableTab } from 'src/views/CRUD/types';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import { canUserAccessSqlLab } from 'src/dashboard/util/permissionUtils';
-import { WelcomePageLastTab } from 'src/views/CRUD/welcome/types';
-import ActivityTable from 'src/views/CRUD/welcome/ActivityTable';
-import ChartTable from 'src/views/CRUD/welcome/ChartTable';
-import SavedQueries from 'src/views/CRUD/welcome/SavedQueries';
-import DashboardTable from 'src/views/CRUD/welcome/DashboardTable';
+import { WelcomePageLastTab } from 'src/features/home/types';
+import ActivityTable from 'src/features/home/ActivityTable';
+import ChartTable from 'src/features/home/ChartTable';
+import SavedQueries from 'src/features/home/SavedQueries';
+import DashboardTable from 'src/features/home/DashboardTable';
const extensionsRegistry = getExtensionsRegistry();
diff --git a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
index 540dd47ad8..e39c279a53 100644
--- a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
+++ b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
@@ -27,12 +27,12 @@ import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { styledMount as mount } from 'spec/helpers/theming';
import QueryList from 'src/pages/QueryHistoryList';
-import QueryPreviewModal from 'src/views/CRUD/data/query/QueryPreviewModal';
+import QueryPreviewModal from 'src/features/queries/QueryPreviewModal';
import { QueryObject } from 'src/views/CRUD/types';
import ListView from 'src/components/ListView';
import Filters from 'src/components/ListView/Filters';
import SyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/light';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import { QueryState } from '@superset-ui/core';
// store needed for withToasts
diff --git a/superset-frontend/src/pages/QueryHistoryList/index.tsx b/superset-frontend/src/pages/QueryHistoryList/index.tsx
index ffed99d3ff..95944dd32a 100644
--- a/superset-frontend/src/pages/QueryHistoryList/index.tsx
+++ b/superset-frontend/src/pages/QueryHistoryList/index.tsx
@@ -33,9 +33,9 @@ import {
} from 'src/views/CRUD/utils';
import withToasts from 'src/components/MessageToasts/withToasts';
import { useListViewResource } from 'src/views/CRUD/hooks';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import Popover from 'src/components/Popover';
-import { commonMenuData } from 'src/views/CRUD/data/common';
+import { commonMenuData } from 'src/features/home/commonMenuData';
import ListView, {
Filters,
FilterOperator,
@@ -49,7 +49,7 @@ import { DATETIME_WITH_TIME_ZONE, TIME_WITH_MS } from 'src/constants';
import { QueryObject, QueryObjectColumns } from 'src/views/CRUD/types';
import Icons from 'src/components/Icons';
-import QueryPreviewModal from 'src/views/CRUD/data/query/QueryPreviewModal';
+import QueryPreviewModal from 'src/features/queries/QueryPreviewModal';
const PAGE_SIZE = 25;
const SQL_PREVIEW_MAX_LINES = 4;
diff --git a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
index 8882d81491..5d9b35a4a3 100644
--- a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
+++ b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
@@ -29,7 +29,7 @@ import { QueryParamProvider } from 'use-query-params';
import { act } from 'react-dom/test-utils';
import * as featureFlags from 'src/featureFlags';
import SavedQueryList from 'src/pages/SavedQueryList';
-import SubMenu from 'src/views/components/SubMenu';
+import SubMenu from 'src/features/home/SubMenu';
import ListView from 'src/components/ListView';
import Filters from 'src/components/ListView/Filters';
import ActionsBar from 'src/components/ListView/ActionsBar';
diff --git a/superset-frontend/src/pages/SavedQueryList/index.tsx b/superset-frontend/src/pages/SavedQueryList/index.tsx
index 71eedc1de1..a985bd8ea8 100644
--- a/superset-frontend/src/pages/SavedQueryList/index.tsx
+++ b/superset-frontend/src/pages/SavedQueryList/index.tsx
@@ -31,10 +31,7 @@ import withToasts from 'src/components/MessageToasts/withToasts';
import { useListViewResource } from 'src/views/CRUD/hooks';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
import handleResourceExport from 'src/utils/export';
-import SubMenu, {
- SubMenuProps,
- ButtonProps,
-} from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps, ButtonProps } from 'src/features/home/SubMenu';
import ListView, {
ListViewProps,
Filters,
@@ -45,7 +42,7 @@ import DeleteModal from 'src/components/DeleteModal';
import ActionsBar, { ActionProps } from 'src/components/ListView/ActionsBar';
import { TagsList } from 'src/components/Tags';
import { Tooltip } from 'src/components/Tooltip';
-import { commonMenuData } from 'src/views/CRUD/data/common';
+import { commonMenuData } from 'src/features/home/commonMenuData';
import { SavedQueryObject } from 'src/views/CRUD/types';
import copyTextToClipboard from 'src/utils/copy';
import Tag from 'src/types/TagType';
@@ -53,7 +50,7 @@ import { isFeatureEnabled } from 'src/featureFlags';
import ImportModelsModal from 'src/components/ImportModal/index';
import Icons from 'src/components/Icons';
import { BootstrapUser } from 'src/types/bootstrapTypes';
-import SavedQueryPreviewModal from 'src/views/CRUD/data/savedquery/SavedQueryPreviewModal';
+import SavedQueryPreviewModal from 'src/features/queries/SavedQueryPreviewModal';
const PAGE_SIZE = 25;
const PASSWORDS_NEEDED_MESSAGE = t(
diff --git a/superset-frontend/src/pages/Tags/index.tsx b/superset-frontend/src/pages/Tags/index.tsx
index 13c3e8ec49..87cf7c787b 100644
--- a/superset-frontend/src/pages/Tags/index.tsx
+++ b/superset-frontend/src/pages/Tags/index.tsx
@@ -26,7 +26,7 @@ import {
} from 'src/views/CRUD/utils';
import { useListViewResource } from 'src/views/CRUD/hooks';
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
-import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
+import SubMenu, { SubMenuProps } from 'src/features/home/SubMenu';
import ListView, {
ListViewProps,
Filters,
@@ -38,10 +38,10 @@ import Icons from 'src/components/Icons';
import { Tooltip } from 'src/components/Tooltip';
import FacePile from 'src/components/FacePile';
import { Link } from 'react-router-dom';
-import { deleteTags } from 'src/tags';
+import { deleteTags } from 'src/features/tags/tags';
import { Tag as AntdTag } from 'antd';
import { Tag } from 'src/views/CRUD/types';
-import TagCard from 'src/views/CRUD/tags/TagCard';
+import TagCard from 'src/features/tags/TagCard';
const PAGE_SIZE = 25;
diff --git a/superset-frontend/src/types/bootstrapTypes.ts b/superset-frontend/src/types/bootstrapTypes.ts
index db646b84a7..971012f2f0 100644
--- a/superset-frontend/src/types/bootstrapTypes.ts
+++ b/superset-frontend/src/types/bootstrapTypes.ts
@@ -7,8 +7,8 @@ import {
SequentialSchemeConfig,
} from '@superset-ui/core';
import { isPlainObject } from 'lodash';
+import { Languages } from 'src/features/home/LanguagePicker';
import { FlashMessage } from '../components/FlashProvider';
-import { Languages } from '../views/components/LanguagePicker';
/**
* Licensed to the Apache Software Foundation (ASF) under one
diff --git a/superset-frontend/src/views/App.tsx b/superset-frontend/src/views/App.tsx
index cacfaa1455..3443e336e5 100644
--- a/superset-frontend/src/views/App.tsx
+++ b/superset-frontend/src/views/App.tsx
@@ -28,7 +28,7 @@ import { bindActionCreators } from 'redux';
import { GlobalStyles } from 'src/GlobalStyles';
import ErrorBoundary from 'src/components/ErrorBoundary';
import Loading from 'src/components/Loading';
-import Menu from 'src/views/components/Menu';
+import Menu from 'src/features/home/Menu';
import getBootstrapData from 'src/utils/getBootstrapData';
import ToastContainer from 'src/components/MessageToasts/ToastContainer';
import setupApp from 'src/setup/setupApp';
diff --git a/superset-frontend/src/views/CRUD/utils.test.tsx b/superset-frontend/src/views/CRUD/utils.test.tsx
index b9b8047f43..28d3a175d6 100644
--- a/superset-frontend/src/views/CRUD/utils.test.tsx
+++ b/superset-frontend/src/views/CRUD/utils.test.tsx
@@ -33,8 +33,8 @@ import {
isNeedsSSHPrivateKeyPassword,
} from 'src/views/CRUD/utils';
import { User } from 'src/types/bootstrapTypes';
+import { WelcomeTable } from 'src/features/home/types';
import { Filter, TableTab } from './types';
-import { WelcomeTable } from './welcome/types';
const terminalErrors = {
errors: [
diff --git a/superset-frontend/src/views/CRUD/utils.tsx b/superset-frontend/src/views/CRUD/utils.tsx
index f12f13e027..514a39964e 100644
--- a/superset-frontend/src/views/CRUD/utils.tsx
+++ b/superset-frontend/src/views/CRUD/utils.tsx
@@ -34,8 +34,8 @@ import { FetchDataConfig, FilterValue } from 'src/components/ListView';
import SupersetText from 'src/utils/textUtils';
import { findPermission } from 'src/utils/findPermission';
import { User } from 'src/types/bootstrapTypes';
+import { WelcomeTable } from 'src/features/home/types';
import { Dashboard, Filter, TableTab } from './types';
-import { WelcomeTable } from './welcome/types';
// Modifies the rison encoding slightly to match the backend's rison encoding/decoding. Applies globally.
// Code pulled from rison.js (https://github.com/Nanonid/rison), rison is licensed under the MIT license.
diff --git a/superset-frontend/src/views/CRUD/welcome/types.ts b/superset-frontend/src/views/CRUD/welcome/types.ts
deleted file mode 100644
index b6e34e8b57..0000000000
--- a/superset-frontend/src/views/CRUD/welcome/types.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { Filter } from '../types';
-
-export enum WelcomeTable {
- Charts = 'CHARTS',
- Dashboards = 'DASHBOARDS',
- Recents = 'RECENTS',
- SavedQueries = 'SAVED_QUERIES',
-}
-
-export type WelcomePageLastTab = 'examples' | 'all' | [string, Filter[]];
diff --git a/superset-frontend/src/views/menu.tsx b/superset-frontend/src/views/menu.tsx
index 88de0cc419..fed5782a56 100644
--- a/superset-frontend/src/views/menu.tsx
+++ b/superset-frontend/src/views/menu.tsx
@@ -27,7 +27,7 @@ import { CacheProvider } from '@emotion/react';
import { QueryParamProvider } from 'use-query-params';
import createCache from '@emotion/cache';
import { ThemeProvider } from '@superset-ui/core';
-import Menu from 'src/views/components/Menu';
+import Menu from 'src/features/home/Menu';
import { theme } from 'src/preamble';
import getBootstrapData from 'src/utils/getBootstrapData';
import { setupStore } from './store';
diff --git a/superset-frontend/src/views/types.ts b/superset-frontend/src/views/types.ts
index c0ffead6a5..437e7d77ef 100644
--- a/superset-frontend/src/views/types.ts
+++ b/superset-frontend/src/views/types.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { NotificationMethodOption } from './CRUD/alert/types';
+import { NotificationMethodOption } from 'src/features/alerts/types';
export interface ViewState {
common: {