Skip to content

Commit 0373595

Browse files
fix: Menu items are not disappearing when deleting a dashboard
1 parent 7bb9b81 commit 0373595

File tree

3 files changed

+70
-50
lines changed

3 files changed

+70
-50
lines changed

superset-frontend/src/views/CRUD/dashboard/DashboardCard.tsx

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
import React from 'react';
2020
import { Link, useHistory } from 'react-router-dom';
2121
import { t, useTheme } from '@superset-ui/core';
22-
import { handleDashboardDelete, CardStyles } from 'src/views/CRUD/utils';
22+
import { CardStyles } from 'src/views/CRUD/utils';
2323
import { isFeatureEnabled, FeatureFlag } from 'src/featureFlags';
2424
import { AntdDropdown } from 'src/components';
2525
import { Menu } from 'src/components/Menu';
26-
import ConfirmStatusChange from 'src/components/ConfirmStatusChange';
2726
import ListViewCard from 'src/components/ListViewCard';
2827
import Icons from 'src/components/Icons';
2928
import Label from 'src/components/Label';
@@ -36,33 +35,27 @@ interface DashboardCardProps {
3635
dashboard: Dashboard;
3736
hasPerm: (name: string) => boolean;
3837
bulkSelectEnabled: boolean;
39-
refreshData: () => void;
4038
loading: boolean;
41-
addDangerToast: (msg: string) => void;
42-
addSuccessToast: (msg: string) => void;
4339
openDashboardEditModal?: (d: Dashboard) => void;
4440
saveFavoriteStatus: (id: number, isStarred: boolean) => void;
4541
favoriteStatus: boolean;
46-
dashboardFilter?: string;
4742
userId?: string | number;
4843
showThumbnails?: boolean;
4944
handleBulkDashboardExport: (dashboardsToExport: Dashboard[]) => void;
45+
onDelete: (dashboard: Dashboard) => void;
5046
}
5147

5248
function DashboardCard({
5349
dashboard,
5450
hasPerm,
5551
bulkSelectEnabled,
56-
dashboardFilter,
57-
refreshData,
5852
userId,
59-
addDangerToast,
60-
addSuccessToast,
6153
openDashboardEditModal,
6254
favoriteStatus,
6355
saveFavoriteStatus,
6456
showThumbnails,
6557
handleBulkDashboardExport,
58+
onDelete,
6659
}: DashboardCardProps) {
6760
const history = useHistory();
6861
const canEdit = hasPerm('can_write');
@@ -100,37 +93,15 @@ function DashboardCard({
10093
)}
10194
{canDelete && (
10295
<Menu.Item>
103-
<ConfirmStatusChange
104-
title={t('Please confirm')}
105-
description={
106-
<>
107-
{t('Are you sure you want to delete')}{' '}
108-
<b>{dashboard.dashboard_title}</b>?
109-
</>
110-
}
111-
onConfirm={() =>
112-
handleDashboardDelete(
113-
dashboard,
114-
refreshData,
115-
addSuccessToast,
116-
addDangerToast,
117-
dashboardFilter,
118-
userId,
119-
)
120-
}
96+
<div
97+
role="button"
98+
tabIndex={0}
99+
className="action-button"
100+
onClick={() => onDelete(dashboard)}
101+
data-test="dashboard-card-option-delete-button"
121102
>
122-
{confirmDelete => (
123-
<div
124-
role="button"
125-
tabIndex={0}
126-
className="action-button"
127-
onClick={confirmDelete}
128-
data-test="dashboard-card-option-delete-button"
129-
>
130-
<Icons.Trash iconSize="l" /> {t('Delete')}
131-
</div>
132-
)}
133-
</ConfirmStatusChange>
103+
<Icons.Trash iconSize="l" /> {t('Delete')}
104+
</div>
134105
</Menu.Item>
135106
)}
136107
</Menu>

superset-frontend/src/views/CRUD/dashboard/DashboardList.tsx

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,14 @@ import Owner from 'src/types/Owner';
4242
import withToasts from 'src/components/MessageToasts/withToasts';
4343
import FacePile from 'src/components/FacePile';
4444
import Icons from 'src/components/Icons';
45+
import DeleteModal from 'src/components/DeleteModal';
4546
import FaveStar from 'src/components/FaveStar';
4647
import PropertiesModal from 'src/dashboard/components/PropertiesModal';
4748
import { Tooltip } from 'src/components/Tooltip';
4849
import ImportModelsModal from 'src/components/ImportModal/index';
4950

5051
import Dashboard from 'src/dashboard/containers/Dashboard';
52+
import { Dashboard as CRUDDashboard } from 'src/views/CRUD/types';
5153
import CertifiedBadge from 'src/components/CertifiedBadge';
5254
import getBootstrapData from 'src/utils/getBootstrapData';
5355
import DashboardCard from './DashboardCard';
@@ -131,6 +133,8 @@ function DashboardList(props: DashboardListProps) {
131133
const [dashboardToEdit, setDashboardToEdit] = useState<Dashboard | null>(
132134
null,
133135
);
136+
const [dashboardToDelete, setDashboardToDelete] =
137+
useState<CRUDDashboard | null>(null);
134138

135139
const [importingDashboard, showImportModal] = useState<boolean>(false);
136140
const [passwordFields, setPasswordFields] = useState<string[]>([]);
@@ -575,31 +579,26 @@ function DashboardList(props: DashboardListProps) {
575579
dashboard={dashboard}
576580
hasPerm={hasPerm}
577581
bulkSelectEnabled={bulkSelectEnabled}
578-
refreshData={refreshData}
579582
showThumbnails={
580583
userKey
581584
? userKey.thumbnails
582585
: isFeatureEnabled(FeatureFlag.THUMBNAILS)
583586
}
584587
userId={userId}
585588
loading={loading}
586-
addDangerToast={addDangerToast}
587-
addSuccessToast={addSuccessToast}
588589
openDashboardEditModal={openDashboardEditModal}
589590
saveFavoriteStatus={saveFavoriteStatus}
590591
favoriteStatus={favoriteStatus[dashboard.id]}
591592
handleBulkDashboardExport={handleBulkDashboardExport}
593+
onDelete={dashboard => setDashboardToDelete(dashboard)}
592594
/>
593595
),
594596
[
595-
addDangerToast,
596-
addSuccessToast,
597597
bulkSelectEnabled,
598598
favoriteStatus,
599599
hasPerm,
600600
loading,
601601
userId,
602-
refreshData,
603602
saveFavoriteStatus,
604603
userKey,
605604
],
@@ -681,6 +680,30 @@ function DashboardList(props: DashboardListProps) {
681680
onSubmit={handleDashboardEdit}
682681
/>
683682
)}
683+
{dashboardToDelete && (
684+
<DeleteModal
685+
description={
686+
<>
687+
{t('Are you sure you want to delete')}{' '}
688+
<b>{dashboardToDelete.dashboard_title}</b>?
689+
</>
690+
}
691+
onConfirm={() => {
692+
handleDashboardDelete(
693+
dashboardToDelete,
694+
refreshData,
695+
addSuccessToast,
696+
addDangerToast,
697+
undefined,
698+
userId,
699+
);
700+
setDashboardToDelete(null);
701+
}}
702+
onHide={() => setDashboardToDelete(null)}
703+
open={!!dashboardToDelete}
704+
title={t('Please confirm')}
705+
/>
706+
)}
684707
<ListView<Dashboard>
685708
bulkActions={bulkActions}
686709
bulkSelectEnabled={bulkSelectEnabled}

superset-frontend/src/views/CRUD/welcome/DashboardTable.tsx

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ import {
3434
createErrorHandler,
3535
getFilterValues,
3636
PAGE_SIZE,
37+
handleDashboardDelete,
3738
} from 'src/views/CRUD/utils';
3839
import withToasts from 'src/components/MessageToasts/withToasts';
3940
import Loading from 'src/components/Loading';
41+
import DeleteModal from 'src/components/DeleteModal';
4042
import PropertiesModal from 'src/dashboard/components/PropertiesModal';
4143
import DashboardCard from 'src/views/CRUD/dashboard/DashboardCard';
4244
import SubMenu from 'src/views/components/SubMenu';
@@ -90,6 +92,9 @@ function DashboardTable({
9092
const [activeTab, setActiveTab] = useState(defaultTab);
9193
const [preparingExport, setPreparingExport] = useState<boolean>(false);
9294
const [loaded, setLoaded] = useState<boolean>(false);
95+
const [dashboardToDelete, setDashboardToDelete] = useState<Dashboard | null>(
96+
null,
97+
);
9398

9499
const getData = (tab: TableTab) =>
95100
fetchData({
@@ -217,6 +222,30 @@ function DashboardTable({
217222
onSubmit={handleDashboardEdit}
218223
/>
219224
)}
225+
{dashboardToDelete && (
226+
<DeleteModal
227+
description={
228+
<>
229+
{t('Are you sure you want to delete')}{' '}
230+
<b>{dashboardToDelete.dashboard_title}</b>?
231+
</>
232+
}
233+
onConfirm={() => {
234+
handleDashboardDelete(
235+
dashboardToDelete,
236+
refreshData,
237+
addSuccessToast,
238+
addDangerToast,
239+
activeTab,
240+
user?.userId,
241+
);
242+
setDashboardToDelete(null);
243+
}}
244+
onHide={() => setDashboardToDelete(null)}
245+
open={!!dashboardToDelete}
246+
title={t('Please confirm')}
247+
/>
248+
)}
220249
{dashboards.length > 0 && (
221250
<CardContainer showThumbnails={showThumbnails}>
222251
{dashboards.map(e => (
@@ -226,10 +255,6 @@ function DashboardTable({
226255
hasPerm={hasPerm}
227256
bulkSelectEnabled={false}
228257
showThumbnails={showThumbnails}
229-
dashboardFilter={activeTab}
230-
refreshData={refreshData}
231-
addDangerToast={addDangerToast}
232-
addSuccessToast={addSuccessToast}
233258
userId={user?.userId}
234259
loading={loading}
235260
openDashboardEditModal={(dashboard: Dashboard) =>
@@ -238,6 +263,7 @@ function DashboardTable({
238263
saveFavoriteStatus={saveFavoriteStatus}
239264
favoriteStatus={favoriteStatus[e.id]}
240265
handleBulkDashboardExport={handleBulkDashboardExport}
266+
onDelete={dashboard => setDashboardToDelete(dashboard)}
241267
/>
242268
))}
243269
</CardContainer>

0 commit comments

Comments
 (0)