From cdd4f6da0bc35d55fbcf2c8b41b0f4884ab01f5c Mon Sep 17 00:00:00 2001 From: Chris Veleris Date: Thu, 13 Feb 2025 01:15:04 +0200 Subject: [PATCH] Replace areas --- app/frontend/Layout.tsx | 10 +- app/frontend/components/Area/AreaModal.tsx | 167 +++++++++++---------- app/frontend/components/Areas.tsx | 27 ++-- app/frontend/contexts/DataContext.tsx | 8 - app/frontend/hooks/useManageAreas.ts | 71 --------- app/frontend/store/useStore.ts | 166 ++++++++++++++++++++ package-lock.json | 37 ++++- package.json | 3 +- public/js/bundle.js | 56 ++++--- 9 files changed, 347 insertions(+), 198 deletions(-) delete mode 100644 app/frontend/hooks/useManageAreas.ts create mode 100644 app/frontend/store/useStore.ts diff --git a/app/frontend/Layout.tsx b/app/frontend/Layout.tsx index ccb43d6..ecb4a94 100644 --- a/app/frontend/Layout.tsx +++ b/app/frontend/Layout.tsx @@ -15,6 +15,7 @@ import { Project } from "./entities/Project"; import { Task } from "./entities/Task"; import { useDataContext } from "./contexts/DataContext"; import { User } from "./entities/User"; +import { useStore } from "./store/useStore"; interface LayoutProps { currentUser: User; @@ -42,6 +43,8 @@ const Layout: React.FC = ({ const [selectedTag, setSelectedTag] = useState(null); const [newTask, setNewTask] = useState(null); + const { areasStore: { create, update }} = useStore(); + const { tags, areas, @@ -52,9 +55,6 @@ const Layout: React.FC = ({ createNote, updateNote, deleteNote, - createArea, - updateArea, - deleteArea, createTag, updateTag, deleteTag, @@ -186,9 +186,9 @@ const Layout: React.FC = ({ const handleSaveArea = async (areaData: Area) => { try { if (areaData.id) { - await updateArea(areaData.id, areaData); + await update(areaData.id, areaData); } else { - await createArea(areaData); + await create(areaData); } } catch (error) { console.error("Error saving area:", error); diff --git a/app/frontend/components/Area/AreaModal.tsx b/app/frontend/components/Area/AreaModal.tsx index 4959b4c..dffcd6d 100644 --- a/app/frontend/components/Area/AreaModal.tsx +++ b/app/frontend/components/Area/AreaModal.tsx @@ -1,7 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { Area } from '../../entities/Area'; -import { useDataContext } from '../../contexts/DataContext'; -import { XMarkIcon } from '@heroicons/react/24/outline'; +import { useStore } from '../../store/useStore'; // Import Zustad store import { useToast } from '../Shared/ToastContext'; interface AreaModalProps { @@ -12,18 +11,21 @@ interface AreaModalProps { } const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) => { - const { createArea, updateArea } = useDataContext(); + const { + areasStore: { create, update } + } = useStore(); // Use Zustand store const [formData, setFormData] = useState({ id: area?.id || 0, name: area?.name || '', description: area?.description || '', }); + const [error, setError] = useState(null); const modalRef = useRef(null); const [isSubmitting, setIsSubmitting] = useState(false); const [isClosing, setIsClosing] = useState(false); - const { showSuccessToast, showErrorToast } = useToast(); + const { showSuccessToast, showErrorToast } = useToast(); // Toast for notifications useEffect(() => { if (isOpen) { @@ -60,6 +62,7 @@ const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) handleClose(); } }; + if (isOpen) { document.addEventListener('keydown', handleKeyDown); } @@ -89,13 +92,13 @@ const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) try { if (formData.id && formData.id !== 0) { - await updateArea(formData.id, formData); + await update(formData.id, formData); showSuccessToast('Area updated successfully!'); } else { - await createArea(formData); + await create(formData); showSuccessToast('Area created successfully!'); } - onSave(formData); + onSave(formData); // Callback to update parent component handleClose(); } catch (err) { setError((err as Error).message); @@ -116,88 +119,86 @@ const AreaModal: React.FC = ({ isOpen, onClose, area, onSave }) if (!isOpen) return null; return ( - <> +
-
-
-
-
- {/* Area Name */} -
- -
- - {/* Area Description */} -
- -