From b18e7364d316948fb95a1c1fde44548e6db0954a Mon Sep 17 00:00:00 2001 From: Chris Veleris Date: Mon, 7 Jul 2025 07:06:02 +0300 Subject: [PATCH] Fix all modal styles --- frontend/Layout.tsx | 10 + frontend/components/Area/AreaModal.tsx | 175 ++++--- frontend/components/Areas.tsx | 23 +- frontend/components/Note/NoteModal.tsx | 6 +- frontend/components/Project/ProjectModal.tsx | 509 +++++++++++++------ frontend/components/Projects.tsx | 10 + frontend/components/Tag/TagModal.tsx | 115 +++-- frontend/components/Tags.tsx | 69 ++- 8 files changed, 629 insertions(+), 288 deletions(-) diff --git a/frontend/Layout.tsx b/frontend/Layout.tsx index fa20bcd..3197bbd 100644 --- a/frontend/Layout.tsx +++ b/frontend/Layout.tsx @@ -538,6 +538,16 @@ const Layout: React.FC = ({ isOpen={isProjectModalOpen} onClose={closeProjectModal} onSave={handleSaveProject} + onDelete={async (projectId) => { + try { + const { deleteProject } = await import('./utils/projectsService'); + await deleteProject(projectId); + loadProjects(); + closeProjectModal(); + } catch (error) { + console.error('Error deleting project:', error); + } + }} areas={areas} /> )} diff --git a/frontend/components/Area/AreaModal.tsx b/frontend/components/Area/AreaModal.tsx index 72b264f..8ecafbd 100644 --- a/frontend/components/Area/AreaModal.tsx +++ b/frontend/components/Area/AreaModal.tsx @@ -2,15 +2,17 @@ import React, { useState, useEffect, useRef } from 'react'; import { Area } from '../../entities/Area'; import { useToast } from '../Shared/ToastContext'; import { useTranslation } from 'react-i18next'; +import { TrashIcon } from '@heroicons/react/24/outline'; interface AreaModalProps { isOpen: boolean; onClose: () => void; - onSave: (areaData: Partial) => Promise; + onSave: (areaData: Partial) => Promise; + onDelete?: (areaId: number) => Promise; area?: Area | null; } -const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) => { +const AreaModal: React.FC = ({ isOpen, onClose, area, onSave, onDelete }) => { const { t } = useTranslation(); const [formData, setFormData] = useState({ id: area?.id || 0, @@ -108,80 +110,117 @@ const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) }, 300); }; + const handleDeleteArea = async () => { + if (formData.id && formData.id !== 0 && onDelete) { + try { + await onDelete(formData.id); + showSuccessToast(t('success.areaDeleted', 'Area deleted successfully!')); + handleClose(); + } catch (err) { + setError((err as Error).message); + showErrorToast(t('errors.failedToDeleteArea', 'Failed to delete area.')); + } + } + }; + if (!isOpen) return null; return (
-
-
-
-
- {/* Area Name */} -
- +
+
+
+ {/* Main Form Section */} +
+
+
+ +
+ {/* Area Title Section - Always Visible */} +
+ +
+ + {/* Description Section - Always Visible */} +
+ -
- -
- - - {imagePreview ? ( -
-
- Project preview + {/* Main Form Section */} +
+
+
+ +
+ {/* Project Title Section - Always Visible */} +
+ - + {error && ( +
+ {error} +
+ )}
-
- ) : null} - - - -

- {t('project.uploadImageHint', 'Upload an image for your project (max 5MB)')} -

-
-
- - -
+ {/* Description Section - Always Visible */} +
+