From c5cd9fe0515f024a6f442e6b7eca614a38aa6deb Mon Sep 17 00:00:00 2001 From: soryu Date: Thu, 22 Jan 2026 13:16:01 +0000 Subject: Add dismiss functionality for completed standalone tasks ## Changes ### Backend - Add 'hidden' field to Task model (models.rs) - Add database migration for hidden column (20250122000000_add_task_hidden.sql) - Update task listing queries to include hidden field and filter out hidden tasks - Update update_task_for_owner to handle hidden field ### Frontend - Add hidden field to TaskSummary interface (api.ts) - Add dismissTask API function (api.ts) - Add hideTask function to useTasks hook - Add Dismiss button to TaskList for completed standalone tasks - Wire up onDismiss handler in mesh.tsx route ## Behavior - Completed standalone tasks (tasks without a contract) show a "Dismiss" button - Dismissing a task sets hidden=true and removes it from the task list - Hidden tasks are filtered out by default in all task listing queries Co-Authored-By: Claude Opus 4.5 --- makima/frontend/src/routes/mesh.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'makima/frontend/src/routes') diff --git a/makima/frontend/src/routes/mesh.tsx b/makima/frontend/src/routes/mesh.tsx index 453bdff..d3ca84e 100644 --- a/makima/frontend/src/routes/mesh.tsx +++ b/makima/frontend/src/routes/mesh.tsx @@ -81,7 +81,7 @@ export default function MeshPage() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const { isAuthenticated, isAuthConfigured, isLoading: authLoading } = useAuth(); - const { tasks, loading, error, conflict, clearConflict, fetchTask, fetchTasks, editTask, removeTask, saveTask } = useTasks(); + const { tasks, loading, error, conflict, clearConflict, fetchTask, fetchTasks, editTask, removeTask, hideTask, saveTask } = useTasks(); const { pendingQuestions, submitAnswer } = useSupervisorQuestions(); // Memoize pending question IDs for efficient lookup @@ -373,6 +373,13 @@ export default function MeshPage() { [removeTask, id, taskDetail, navigate] ); + const handleDismiss = useCallback( + async (taskId: string) => { + await hideTask(taskId); + }, + [hideTask] + ); + const handleStart = useCallback( async (taskId: string) => { try { @@ -830,6 +837,7 @@ export default function MeshPage() { loading={loading || creating} onSelect={handleSelectTask} onDelete={handleDelete} + onDismiss={handleDismiss} onCreate={handleCreate} /> -- cgit v1.2.3