fix(sprint-5/etapa-4g): defer updateUser 350ms — espera fin de animacion Radix antes de re-render AuthContext

This commit is contained in:
2026-06-23 10:17:47 +00:00
parent 985c655f6a
commit aaf1f79519

View File

@@ -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.