fix(sprint-5/etapa-4g): defer updateUser — evita overlay Radix stuck en DOM
Some checks failed
/ Deploy to Cloudflare Pages (push) Has been cancelled
Some checks failed
/ Deploy to Cloudflare Pages (push) Has been cancelled
This commit is contained in:
@@ -48,12 +48,15 @@ export function ProfileSheet({ open, onOpenChange }: ProfileSheetProps) {
|
|||||||
const savedName = name.trim()
|
const savedName = name.trim()
|
||||||
const savedCompany = company.trim() || undefined
|
const savedCompany = company.trim() || undefined
|
||||||
|
|
||||||
// Actualización optimista: aplicar cambios localmente y cerrar el Sheet de inmediato.
|
// Cerramos el Sheet PRIMERO para que Radix inicie la animación de cierre en un
|
||||||
// El Sheet nunca queda abierto esperando la respuesta del servidor.
|
// render limpio. updateUser() se difiere al siguiente macrotask para evitar que
|
||||||
// La modal de Radix bloquea todo el UI mientras está abierta, así que cerramos
|
// el re-render de AuthContext (ancestor) interfiera con la animación: si ambas
|
||||||
// ANTES del fetch para que el usuario pueda seguir trabajando sin demora.
|
// actualizaciones ocurren en el mismo tick, React las batchea pero Radix puede
|
||||||
updateUser({ name: savedName, company: savedCompany })
|
// recibir un render intermedio con open=true que deja el overlay en el DOM.
|
||||||
onOpenChange(false)
|
onOpenChange(false)
|
||||||
|
setTimeout(() => {
|
||||||
|
updateUser({ name: savedName, company: savedCompany })
|
||||||
|
}, 0)
|
||||||
|
|
||||||
// Persistir en Supabase en background — fire & forget.
|
// Persistir en Supabase en background — fire & forget.
|
||||||
// Usamos raw fetch (no el cliente Supabase) para evitar contención con processLock.
|
// Usamos raw fetch (no el cliente Supabase) para evitar contención con processLock.
|
||||||
|
|||||||
Reference in New Issue
Block a user