From aaf1f79519aa981d3356b6b57f164b6497d6e1b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Ben=C3=ADtez?= Date: Tue, 23 Jun 2026 10:17:47 +0000 Subject: [PATCH] =?UTF-8?q?fix(sprint-5/etapa-4g):=20defer=20updateUser=20?= =?UTF-8?q?350ms=20=E2=80=94=20espera=20fin=20de=20animacion=20Radix=20ant?= =?UTF-8?q?es=20de=20re-render=20AuthContext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ProfileSheet.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/ProfileSheet.tsx b/src/components/ProfileSheet.tsx index 263f442..8622a20 100644 --- a/src/components/ProfileSheet.tsx +++ b/src/components/ProfileSheet.tsx @@ -48,15 +48,16 @@ export function ProfileSheet({ open, onOpenChange }: ProfileSheetProps) { const savedName = name.trim() const savedCompany = company.trim() || undefined - // Cerramos el Sheet PRIMERO para que Radix inicie la animación de cierre en un - // render limpio. updateUser() se difiere al siguiente macrotask para evitar que - // el re-render de AuthContext (ancestor) interfiera con la animación: si ambas - // actualizaciones ocurren en el mismo tick, React las batchea pero Radix puede - // recibir un render intermedio con open=true que deja el overlay en el DOM. + // Cerramos el Sheet primero. updateUser() se difiere 350ms — más que la animación + // de cierre de Radix (duration-300 = 300ms) — para que el cleanup de + // @radix-ui/react-remove-scroll restaure pointer-events:none del body ANTES + // de que el re-render de AuthContext vuelva a procesar el Sheet. Si updateUser + // corre durante la animación, Radix no ejecuta el cleanup y body queda con + // pointer-events:none permanente, bloqueando toda interacción fuera del canvas BPMN. onOpenChange(false) setTimeout(() => { updateUser({ name: savedName, company: savedCompany }) - }, 0) + }, 350) // Persistir en Supabase en background — fire & forget. // Usamos raw fetch (no el cliente Supabase) para evitar contención con processLock.