Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-18 20:59:51 +00:00
co-authored by renee-png
parent 7a71f73fda
commit 5371698cd4
+45 -4
View File
@@ -341,6 +341,7 @@ function CalendarPage() {
};
const openCreate = (presetDate?: Date) => {
setEditingId(null);
setFTitle("");
setFType("client_meeting");
setFStart(presetDate ?? selected);
@@ -348,12 +349,33 @@ function CalendarPage() {
setFEndTime("10:00");
setFAllDay(false);
setFCase("none");
setFClient("none");
setFLocation("");
setFNotes("");
setFAssignee("self");
setDialogOpen(true);
};
const openEdit = (evt: Evt) => {
if (evt.source !== "event") return; // tasks/hearings edit elsewhere
setEditingId(evt.id);
setFTitle(evt.title);
setFType((EVENT_TYPE_MAP[evt.event_type] ? evt.event_type : "other") as EventTypeKey);
const dt = parseISO(evt.start);
setFStart(dt);
setFAllDay(evt.all_day);
if (!evt.all_day) {
setFStartTime(format(dt, "HH:mm"));
setFEndTime(evt.end ? format(parseISO(evt.end), "HH:mm") : format(dt, "HH:mm"));
}
setFCase(evt.case_id ?? "none");
setFClient(evt.client_id ?? "none");
setFLocation(evt.location ?? "");
setFNotes(evt.description ?? "");
setFAssignee(evt.owner_id ?? "self");
setDialogOpen(true);
};
const handleCreate = async () => {
if (!user || !fTitle.trim() || !fStart) {
toast.error("Title and date are required");
@@ -365,23 +387,42 @@ function CalendarPage() {
const endISO = fAllDay ? null : `${dateStr}T${fEndTime}:00`;
const ownerId = fAssignee === "self" ? user.id : fAssignee;
const { error } = await supabase.from("events").insert({
const payload = {
title: fTitle.trim(),
event_type: fType,
start_at: startISO,
end_at: endISO,
all_day: fAllDay,
case_id: fCase === "none" ? null : fCase,
client_id: fClient === "none" ? null : fClient,
location: fLocation.trim() || null,
description: fNotes.trim() || null,
created_by: ownerId,
});
};
const { error } = editingId
? await supabase.from("events").update(payload).eq("id", editingId)
: await supabase.from("events").insert({ ...payload, created_by: ownerId });
setSaving(false);
if (error) {
toast.error(error.message);
return;
}
toast.success("Event scheduled");
toast.success(editingId ? "Event updated" : "Event scheduled");
setDialogOpen(false);
reload();
};
const handleDelete = async () => {
if (!editingId) return;
if (!confirm("Delete this event?")) return;
setSaving(true);
const { error } = await supabase.from("events").delete().eq("id", editingId);
setSaving(false);
if (error) {
toast.error(error.message);
return;
}
toast.success("Event deleted");
setDialogOpen(false);
reload();
};