From 768e5cbcf84bf8be80e3645b481ce4c01f92f131 Mon Sep 17 00:00:00 2001 From: Chris Veleris Date: Wed, 27 Nov 2024 16:55:56 +0200 Subject: [PATCH] Add project priorities --- .../components/Project/ProjectModal.tsx | 49 ++++++++++++++----- app/frontend/components/Shared/Switch.tsx | 30 ++++++++++++ app/frontend/entities/Project.ts | 2 + app/models/project.rb | 2 + app/routes/projects_routes.rb | 8 ++- ...20241126095028_add_priority_to_projects.rb | 5 ++ db/schema.rb | 3 +- public/js/bundle.js | 23 ++++++--- 8 files changed, 101 insertions(+), 21 deletions(-) create mode 100644 app/frontend/components/Shared/Switch.tsx create mode 100644 db/migrate/20241126095028_add_priority_to_projects.rb diff --git a/app/frontend/components/Project/ProjectModal.tsx b/app/frontend/components/Project/ProjectModal.tsx index e4727d9..6e014cc 100644 --- a/app/frontend/components/Project/ProjectModal.tsx +++ b/app/frontend/components/Project/ProjectModal.tsx @@ -5,6 +5,9 @@ import ConfirmDialog from "../Shared/ConfirmDialog"; import { useToast } from "../Shared/ToastContext"; import TagInput from "../Tag/TagInput"; import useFetchTags from "../../hooks/useFetchTags"; +import PriorityDropdown from "../Shared/PriorityDropdown"; +import { PriorityType } from "../../entities/Task"; +import Switch from "../Shared/Switch"; interface ProjectModalProps { isOpen: boolean; @@ -30,12 +33,19 @@ const ProjectModal: React.FC = ({ area_id: null, active: true, tags: [], + priority: "low", } ); - const [tags, setTags] = useState(project?.tags?.map(tag => tag.name) || []); + const [tags, setTags] = useState( + project?.tags?.map((tag) => tag.name) || [] + ); - const { tags: availableTags, isLoading: isTagsLoading, isError: isTagsError } = useFetchTags(); + const { + tags: availableTags, + isLoading: isTagsLoading, + isError: isTagsError, + } = useFetchTags(); const modalRef = useRef(null); const [isClosing, setIsClosing] = useState(false); @@ -49,7 +59,7 @@ const ProjectModal: React.FC = ({ ...project, tags: project.tags || [], }); - setTags(project.tags?.map(tag => tag.name) || []); + setTags(project.tags?.map((tag) => tag.name) || []); } else { setFormData({ name: "", @@ -127,7 +137,7 @@ const ProjectModal: React.FC = ({ }, []); const handleSubmit = () => { - onSave({ ...formData, tags: tags.map(name => ({ name })) }); + onSave({ ...formData, tags: tags.map((name) => ({ name })) }); showSuccessToast( project ? "Project updated successfully!" @@ -154,7 +164,14 @@ const ProjectModal: React.FC = ({ setTimeout(() => { onClose(); setIsClosing(false); - }, 300); + }, 300); + }; + + const handleToggleActive = () => { + setFormData((prev) => ({ + ...prev, + active: !prev.active, + })); }; if (!isOpen) return null; @@ -232,6 +249,18 @@ const ProjectModal: React.FC = ({ > +
+ + + setFormData({ ...formData, priority: value }) + } + /> +
+ {/* Tags */}