From 83fd85f0597551d1f4feefaaecd7aab003595305 Mon Sep 17 00:00:00 2001 From: Neil <55785687+carkom@users.noreply.github.com> Date: Tue, 2 Apr 2024 20:30:12 +0100 Subject: [PATCH] Custom Reports: Confirm delete report (#2521) * confirm delete report * notes * card confirm --- .../src/components/reports/SaveReport.tsx | 20 ++++++-- .../components/reports/SaveReportDelete.tsx | 51 +++++++++++++++++++ .../reports/reports/CustomReportListCards.tsx | 31 ++++++++++- upcoming-release-notes/2521.md | 6 +++ 4 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 packages/desktop-client/src/components/reports/SaveReportDelete.tsx create mode 100644 upcoming-release-notes/2521.md diff --git a/packages/desktop-client/src/components/reports/SaveReport.tsx b/packages/desktop-client/src/components/reports/SaveReport.tsx index 0e10df084..af27b31e1 100644 --- a/packages/desktop-client/src/components/reports/SaveReport.tsx +++ b/packages/desktop-client/src/components/reports/SaveReport.tsx @@ -10,6 +10,7 @@ import { Text } from '../common/Text'; import { View } from '../common/View'; import { SaveReportChoose } from './SaveReportChoose'; +import { SaveReportDelete } from './SaveReportDelete'; import { SaveReportMenu } from './SaveReportMenu'; import { SaveReportName } from './SaveReportName'; @@ -33,6 +34,7 @@ export function SaveReport({ onReportChange, }: SaveReportProps) { const listReports = useReports(); + const [deleteMenuOpen, setDeleteMenuOpen] = useState(false); const [nameMenuOpen, setNameMenuOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const [chooseMenuOpen, setChooseMenuOpen] = useState(false); @@ -97,6 +99,13 @@ export function SaveReport({ }); }; + const onDelete = async () => { + setName(''); + await send('report/delete', report.id); + onReportChange({ type: 'reset' }); + setDeleteMenuOpen(false); + }; + const onMenuSelect = async (item: string) => { setMenuItem(item); switch (item) { @@ -107,9 +116,7 @@ export function SaveReport({ break; case 'delete-report': setMenuOpen(false); - setName(''); - await send('report/delete', report.id); - onReportChange({ type: 'reset' }); + setDeleteMenuOpen(true); break; case 'update-report': setErr(''); @@ -191,6 +198,13 @@ export function SaveReport({ onClose={() => setChooseMenuOpen(false)} /> )} + {deleteMenuOpen && ( + <SaveReportDelete + onDelete={onDelete} + onClose={() => setDeleteMenuOpen(false)} + name={report.name} + /> + )} </View> ); } diff --git a/packages/desktop-client/src/components/reports/SaveReportDelete.tsx b/packages/desktop-client/src/components/reports/SaveReportDelete.tsx new file mode 100644 index 000000000..a18a68ede --- /dev/null +++ b/packages/desktop-client/src/components/reports/SaveReportDelete.tsx @@ -0,0 +1,51 @@ +import React from 'react'; + +import { theme } from '../../style/theme'; +import { Button } from '../common/Button'; +import { Stack } from '../common/Stack'; +import { Text } from '../common/Text'; +import { View } from '../common/View'; +import { Tooltip } from '../tooltips'; + +type SaveReportDeleteProps = { + onDelete: () => void; + onClose: () => void; + name: string; +}; + +export function SaveReportDelete({ + onDelete, + onClose, + name, +}: SaveReportDeleteProps) { + return ( + <Tooltip + position="bottom-right" + style={{ padding: 15, color: theme.menuItemText }} + width={275} + onClose={onClose} + > + <View style={{ align: 'center' }}> + <Text style={{ color: theme.errorText, marginBottom: 5 }}> + Do you want to delete report: + </Text> + <View>{name}</View> + </View> + + <Stack + direction="row" + justify="flex-end" + align="center" + style={{ marginTop: 15 }} + > + <View style={{ flex: 1 }} /> + <Button type="primary" onClick={onDelete}> + Yes + </Button> + <Button type="primary" onClick={onClose}> + No + </Button> + </Stack> + </Tooltip> + ); +} diff --git a/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx b/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx index 9fabce524..292352d18 100644 --- a/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx +++ b/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx @@ -16,6 +16,7 @@ import { Text } from '../../common/Text'; import { View } from '../../common/View'; import { DateRange } from '../DateRange'; import { ReportCard } from '../ReportCard'; +import { SaveReportDelete } from '../SaveReportDelete'; import { SaveReportName } from '../SaveReportName'; import { GetCardData } from './GetCardData'; @@ -66,6 +67,7 @@ export function CustomReportListCards({ }) { const result: { [key: string]: boolean }[] = index(reports); const [reportMenu, setReportMenu] = useState(result); + const [deleteMenuOpen, setDeleteMenuOpen] = useState(result); const [nameMenuOpen, setNameMenuOpen] = useState(result); const [err, setErr] = useState(''); const [name, setName] = useState(''); @@ -77,6 +79,12 @@ export function CustomReportListCards({ const [isCardHovered, setIsCardHovered] = useState(''); + const onDelete = async (reportData: string) => { + setName(''); + await send('report/delete', reportData); + onDeleteMenuOpen(reportData === undefined ? '' : reportData, false); + }; + const onAddUpdate = async ({ reportData, }: { @@ -105,7 +113,8 @@ export function CustomReportListCards({ const onMenuSelect = async (item: string, report: CustomReportEntity) => { if (item === 'delete') { onMenuOpen(report.id, false); - await send('report/delete', report.id); + onDeleteMenuOpen(report.id, true); + setErr(''); } if (item === 'rename') { onMenuOpen(report.id, false); @@ -119,6 +128,10 @@ export function CustomReportListCards({ setReportMenu({ ...reportMenu, [item]: state }); }; + const onDeleteMenuOpen = (item: string, state: boolean) => { + setDeleteMenuOpen({ ...deleteMenuOpen, [item]: state }); + }; + const onNameMenuOpen = (item: string, state: boolean) => { setNameMenuOpen({ ...nameMenuOpen, [item]: state }); }; @@ -257,6 +270,22 @@ export function CustomReportListCards({ report={report} /> )} + {report.id === undefined + ? null + : deleteMenuOpen[ + report.id as keyof typeof deleteMenuOpen + ] && ( + <SaveReportDelete + onDelete={() => onDelete(report.id)} + onClose={() => + onDeleteMenuOpen( + report.id === undefined ? '' : report.id, + false, + ) + } + name={report.name} + /> + )} </View> </View> ))} diff --git a/upcoming-release-notes/2521.md b/upcoming-release-notes/2521.md new file mode 100644 index 000000000..b2f6f3ce6 --- /dev/null +++ b/upcoming-release-notes/2521.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [carkom] +--- + +A simple delete confirmation for custom reports. -- GitLab