Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-23 21:34:04 +00:00
co-authored by renee-png
parent 98e5265ae6
commit 3c6ba2b316
+41 -1
View File
@@ -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;