From 3c6ba2b316c82b53e52ea61a17ae3b711402f846 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:34:04 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/components/tasks/task-detail-panel.tsx | 42 +++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/components/tasks/task-detail-panel.tsx b/src/components/tasks/task-detail-panel.tsx index cead925..6315bbb 100644 --- a/src/components/tasks/task-detail-panel.tsx +++ b/src/components/tasks/task-detail-panel.tsx @@ -129,13 +129,14 @@ export function TaskDetailPanel({ const load = useCallback(async () => { if (!taskId) return; setLoading(true); - const [t, a, s, c, h, pr] = await Promise.all([ + const [t, a, s, c, h, pr, rem] = await Promise.all([ supabase.from("tasks").select("*").eq("id", taskId).maybeSingle(), supabase.from("task_assignees").select("user_id").eq("task_id", taskId), supabase.from("tasks").select("*").eq("parent_task_id", taskId).order("sort_order"), supabase.from("task_comments").select("*").eq("task_id", taskId).order("created_at"), supabase.from("task_history").select("*").eq("task_id", taskId).order("created_at", { ascending: false }).limit(50), supabase.from("profiles").select("id, full_name, email").order("full_name"), + supabase.from("task_reminders").select("*").eq("task_id", taskId).order("remind_at"), ]); if (t.data) { setTask(t.data as TaskRow); @@ -158,6 +159,7 @@ export function TaskDetailPanel({ setHistory((h.data ?? []) as HistoryRow[]); setAllProfiles((pr.data ?? []) as Profile[]); setProfiles((pr.data ?? []) as Profile[]); + setReminders((rem.data ?? []) as any[]); setLoading(false); }, [taskId]); @@ -363,6 +365,44 @@ export function TaskDetailPanel({ await supabase.from("task_comments").delete().eq("id", id); }; + const openReminderDialog = () => { + setReminderDate(format(new Date(), "yyyy-MM-dd")); + setReminderTime("09:00"); + setReminderEmail(user?.email || ""); + setReminderNote(""); + setReminderOpen(true); + }; + + const saveReminder = async () => { + if (!task || !user) return; + if (!reminderDate || !reminderTime || !reminderEmail.trim()) { + toast.error("Date, time, and email are required"); + return; + } + setSavingReminder(true); + const remindAt = new Date(`${reminderDate}T${reminderTime}:00`).toISOString(); + const { error } = await supabase.from("task_reminders").insert({ + task_id: task.id, + recipient_email: reminderEmail.trim(), + remind_at: remindAt, + note: reminderNote.trim() || null, + created_by: user.id, + }); + setSavingReminder(false); + if (error) { + toast.error(error.message); + return; + } + toast.success("Reminder scheduled"); + setReminderOpen(false); + load(); + }; + + const deleteReminder = async (id: string) => { + await supabase.from("task_reminders").delete().eq("id", id); + load(); + }; + if (!task && !loading) return null; const completedSubtasks = subtasks.filter((s) => s.status === "complete").length;