From 4516fd400ae0e139f415706aa841aaf68131da11 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 18:24:24 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/components/cases/status-tab.tsx | 57 +++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/components/cases/status-tab.tsx b/src/components/cases/status-tab.tsx index 7fd49d9..ea79d19 100644 --- a/src/components/cases/status-tab.tsx +++ b/src/components/cases/status-tab.tsx @@ -6,7 +6,7 @@ import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { supabase } from "@/integrations/supabase/client"; import { useAuth } from "@/lib/auth"; -import { Plus, Trash2, Loader2, FileDown } from "lucide-react"; +import { Plus, Trash2, Loader2, FileDown, Pencil } from "lucide-react"; import { formatDateTime } from "@/lib/format"; import { toast } from "sonner"; import { downloadStatusReport } from "@/lib/status-pdf"; @@ -16,11 +16,18 @@ export function CaseStatusTab({ caseId, caseLabel }: { caseId: string; caseLabel const [items, setItems] = useState([]); const [showForm, setShowForm] = useState(false); const [submitting, setSubmitting] = useState(false); + const [editingId, setEditingId] = useState(null); const nowLocal = () => { const d = new Date(); d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); return d.toISOString().slice(0, 16); }; + const toLocalInput = (iso: string) => { + const d = new Date(iso); + if (isNaN(d.getTime())) return nowLocal(); + d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); + return d.toISOString().slice(0, 16); + }; const [form, setForm] = useState({ title: nowLocal(), body: "" }); const load = async () => { @@ -41,19 +48,29 @@ export function CaseStatusTab({ caseId, caseLabel }: { caseId: string; caseLabel useEffect(() => { load(); }, [caseId]); + const resetForm = () => { + setEditingId(null); + setShowForm(false); + setForm({ title: nowLocal(), body: "" }); + }; + + const startEdit = (item: any) => { + setEditingId(item.id); + setForm({ title: toLocalInput(item.title), body: item.body }); + setShowForm(true); + }; + const submit = async (e: React.FormEvent) => { e.preventDefault(); if (!form.title.trim() || !form.body.trim()) { toast.error("Date/time and details required"); return; } setSubmitting(true); - const { error } = await supabase.from("status_updates").insert({ - case_id: caseId, - title: form.title.trim(), - body: form.body.trim(), - created_by: user?.id, - }); + const payload = { title: form.title.trim(), body: form.body.trim() }; + const { error } = editingId + ? await supabase.from("status_updates").update(payload).eq("id", editingId) + : await supabase.from("status_updates").insert({ case_id: caseId, created_by: user?.id, ...payload }); setSubmitting(false); if (error) toast.error(error.message); - else { toast.success("Update logged"); setShowForm(false); setForm({ title: nowLocal(), body: "" }); load(); } + else { toast.success(editingId ? "Update saved" : "Update logged"); resetForm(); load(); } }; const del = async (item: any) => { @@ -83,7 +100,7 @@ export function CaseStatusTab({ caseId, caseLabel }: { caseId: string; caseLabel - @@ -105,10 +122,13 @@ export function CaseStatusTab({ caseId, caseLabel }: { caseId: string; caseLabel