From 434cadeb99a80900b20221a4863eaa35341725bb Mon Sep 17 00:00:00 2001
From: Vasist10 <155972527+Vasist10@users.noreply.github.com>
Date: Fri, 5 Dec 2025 01:26:30 +0530
Subject: [PATCH 1/2] feat: implement project selector dropdown and inline new
project creation (#240)
* feat: implement project selector dropdown and inline new project creation
* fix: add test for task components
* fix: use flag approach for project creation state
---
.../components/HomeComponents/Tasks/Tasks.tsx | 104 ++++++++++++++----
.../Tasks/__tests__/Tasks.test.tsx | 64 +++++++++++
2 files changed, 149 insertions(+), 19 deletions(-)
diff --git a/frontend/src/components/HomeComponents/Tasks/Tasks.tsx b/frontend/src/components/HomeComponents/Tasks/Tasks.tsx
index 7229bfc2..3a27b3f0 100644
--- a/frontend/src/components/HomeComponents/Tasks/Tasks.tsx
+++ b/frontend/src/components/HomeComponents/Tasks/Tasks.tsx
@@ -104,6 +104,7 @@ export const Tasks = (
due: '',
tags: [] as string[],
});
+ const [isCreatingNewProject, setIsCreatingNewProject] = useState(false);
const [isAddTaskOpen, setIsAddTaskOpen] = useState(false);
const [_isDialogOpen, setIsDialogOpen] = useState(false);
const [tagInput, setTagInput] = useState('');
@@ -286,6 +287,12 @@ export const Tasks = (
fetchTasksForEmail();
}, [props.email]);
+ useEffect(() => {
+ if (!isAddTaskOpen) {
+ setIsCreatingNewProject(false);
+ }
+ }, [isAddTaskOpen]);
+
syncTasksWithTwAndDb = useCallback(async () => {
try {
const { email: user_email, encryptionSecret, UUID } = props;
@@ -308,8 +315,16 @@ export const Tasks = (
.where('email')
.equals(user_email)
.toArray();
- setTasks(sortTasksById(updatedTasks, 'desc'));
- setTempTasks(sortTasksById(updatedTasks, 'desc'));
+ const sortedTasks = sortTasksById(updatedTasks, 'desc');
+ setTasks(sortedTasks);
+ setTempTasks(sortedTasks);
+
+ // Update unique projects after a successful sync so the Project dropdown is populated
+ const projectsSet = new Set(sortedTasks.map((task) => task.project));
+ const filteredProjects = Array.from(projectsSet)
+ .filter((project) => project !== '')
+ .sort((a, b) => (a > b ? 1 : -1));
+ setUniqueProjects(filteredProjects);
});
// Store last sync timestamp using hashed key
@@ -1075,25 +1090,76 @@ export const Tasks = (