diff --git a/frontend/src/pages/Reports/ReportDetailPage.tsx b/frontend/src/pages/Reports/ReportDetailPage.tsx index d30f0db..2eefbec 100644 --- a/frontend/src/pages/Reports/ReportDetailPage.tsx +++ b/frontend/src/pages/Reports/ReportDetailPage.tsx @@ -86,9 +86,11 @@ const ReportDetailPage: React.FC = () => { }; // Handle action buttons - const handleDiscard = async () => { + const handleDiscard = async (setIsProcessing: (isProcessing: boolean) => void) => { try { + setIsProcessing(true); await axios.delete(`${API_URL}/api/reports/${reportId}`, await getAuthConfig()); + setIsProcessing(false); // Show toast notification createToast({ @@ -102,6 +104,8 @@ const ReportDetailPage: React.FC = () => { // Navigate back history.push('/tabs/home'); } catch (error) { + setIsProcessing(false); + console.error('Error discarding report:', error); createToast({ message: t('report.discard.error', { @@ -114,8 +118,17 @@ const ReportDetailPage: React.FC = () => { } }; - const handleNewUpload = () => { - history.push('/tabs/upload'); + const handleNewUpload = async (setIsProcessing: (isProcessing: boolean) => void) => { + try { + setIsProcessing(true); + await axios.delete(`${API_URL}/api/reports/${reportId}`, await getAuthConfig()); + setIsProcessing(false); + + history.push('/tabs/upload'); + } catch (error) { + setIsProcessing(false); + console.error('Error deleting report before new upload:', error); + } }; return ( @@ -142,8 +155,7 @@ const ReportDetailPage: React.FC = () => { diff --git a/frontend/src/pages/Reports/components/ActionButtons.tsx b/frontend/src/pages/Reports/components/ActionButtons.tsx index 1141097..578fbcb 100644 --- a/frontend/src/pages/Reports/components/ActionButtons.tsx +++ b/frontend/src/pages/Reports/components/ActionButtons.tsx @@ -1,14 +1,10 @@ import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; -import axios from 'axios'; -import { getAuthConfig } from 'common/api/reportService'; import ConfirmationModal from '../../../common/components/Modal/ConfirmationModal'; -const API_URL = import.meta.env.VITE_BASE_URL_API || ''; - interface ActionButtonsProps { - onDiscard: () => void; - onNewUpload: () => void; + onDiscard: (setIsProcessing: (isProcessing: boolean) => void) => Promise; + onNewUpload: (setIsProcessing: (isProcessing: boolean) => void) => Promise; reportTitle?: string; reportId?: string; } @@ -16,21 +12,21 @@ interface ActionButtonsProps { const ActionButtons: React.FC = ({ onDiscard, onNewUpload, - reportTitle = '', - reportId, + reportTitle, }) => { const { t } = useTranslation(); const [showConfirmDiscard, setShowConfirmDiscard] = useState(false); const [showConfirmNewUpload, setShowConfirmNewUpload] = useState(false); - const [isDeleting, setIsDeleting] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); const handleDiscardClick = () => { setShowConfirmDiscard(true); }; - const handleConfirmDiscard = () => { + const handleConfirmDiscard = async () => { setShowConfirmDiscard(false); - onDiscard(); + + await onDiscard(setIsProcessing); }; const handleCancelDiscard = () => { @@ -44,22 +40,7 @@ const ActionButtons: React.FC = ({ const handleConfirmNewUpload = async () => { setShowConfirmNewUpload(false); - // If we have a reportId, delete the current report before going to upload screen - if (reportId) { - try { - setIsDeleting(true); - await axios.delete(`${API_URL}/api/reports/${reportId}`, await getAuthConfig()); - } catch (error) { - console.error('Error deleting report before new upload:', error); - } finally { - setIsDeleting(false); - // Even if delete failed, still go to upload screen - onNewUpload(); - } - } else { - // If no reportId, just navigate to upload - onNewUpload(); - } + await onNewUpload(setIsProcessing); }; const handleCancelNewUpload = () => { @@ -72,14 +53,14 @@ const ActionButtons: React.FC = ({