diff --git a/src/components/ProfileSheet.tsx b/src/components/ProfileSheet.tsx index fe59f82..263f442 100644 --- a/src/components/ProfileSheet.tsx +++ b/src/components/ProfileSheet.tsx @@ -48,12 +48,15 @@ export function ProfileSheet({ open, onOpenChange }: ProfileSheetProps) { const savedName = name.trim() const savedCompany = company.trim() || undefined - // Actualización optimista: aplicar cambios localmente y cerrar el Sheet de inmediato. - // El Sheet nunca queda abierto esperando la respuesta del servidor. - // La modal de Radix bloquea todo el UI mientras está abierta, así que cerramos - // ANTES del fetch para que el usuario pueda seguir trabajando sin demora. - updateUser({ name: savedName, company: savedCompany }) + // 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. onOpenChange(false) + setTimeout(() => { + updateUser({ name: savedName, company: savedCompany }) + }, 0) // Persistir en Supabase en background — fire & forget. // Usamos raw fetch (no el cliente Supabase) para evitar contención con processLock.