From 280d314b5dafd74bdf455b6cdeebaf9c122afdd0 Mon Sep 17 00:00:00 2001 From: Jonas Francisco Date: Thu, 6 Nov 2025 17:30:53 -0300 Subject: [PATCH] =?UTF-8?q?WeekView:=20limita=20renderiza=C3=A7=C3=A3o=20?= =?UTF-8?q?=C3=A0s=20horas=20do=20menor/maior=20hor=C3=A1rio=20da=20semana?= =?UTF-8?q?=20vis=C3=ADvel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(main-routes)/calendar/page.tsx | 40 +++++++++++++- .../features/general/event-manager.tsx | 54 ++++++++++++++++--- 2 files changed, 87 insertions(+), 7 deletions(-) diff --git a/susconecta/app/(main-routes)/calendar/page.tsx b/susconecta/app/(main-routes)/calendar/page.tsx index 519ba4b..f6f4b68 100644 --- a/susconecta/app/(main-routes)/calendar/page.tsx +++ b/susconecta/app/(main-routes)/calendar/page.tsx @@ -121,6 +121,40 @@ export default function AgendamentoPage() { } }; + // Mapeia cor do calendário -> status da API + const statusFromColor = (color?: string) => { + switch ((color || "").toLowerCase()) { + case "green": return "confirmed"; + case "orange": return "pending"; + case "red": return "canceled"; + default: return "requested"; + } + }; + + // Envia atualização para a API e atualiza UI + const handleEventUpdate = async (id: string, partial: Partial) => { + try { + const payload: any = {}; + if (partial.startTime) payload.scheduled_at = partial.startTime.toISOString(); + if (partial.startTime && partial.endTime) { + const minutes = Math.max(1, Math.round((partial.endTime.getTime() - partial.startTime.getTime()) / 60000)); + payload.duration_minutes = minutes; + } + if (partial.color) payload.status = statusFromColor(partial.color); + if (typeof partial.description === "string") payload.notes = partial.description; + + if (Object.keys(payload).length) { + const api = await import('@/lib/api'); + await api.atualizarAgendamento(id, payload); + } + + // Otimista: reflete mudanças locais + setManagerEvents((prev) => prev.map((e) => (e.id === id ? { ...e, ...partial } : e))); + } catch (e) { + console.warn("[Calendário] Falha ao atualizar agendamento na API:", e); + } + }; + return (
@@ -164,7 +198,11 @@ export default function AgendamentoPage() {
) : (
- +
)}
diff --git a/susconecta/components/features/general/event-manager.tsx b/susconecta/components/features/general/event-manager.tsx index 697b2e6..e974ca9 100644 --- a/susconecta/components/features/general/event-manager.tsx +++ b/susconecta/components/features/general/event-manager.tsx @@ -515,7 +515,7 @@ export function EventManager({ {/* Event Dialog */} - + {isCreating ? "Criar Evento" : "Detalhes do Evento"} @@ -528,7 +528,7 @@ export function EventManager({ isCreating ? setNewEvent((prev) => ({ ...prev, title: e.target.value })) @@ -542,7 +542,7 @@ export function EventManager({