From 735294db0644cc24068975d4f1364454f6fe6efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Ben=C3=ADtez?= Date: Sat, 20 Jun 2026 00:35:01 -0300 Subject: [PATCH] fix(sprint-5/etapa-4b): prevenir loop en onAuthStateChange al guardar perfil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SupabaseAuthService: solo leer company/name de DB en INITIAL_SESSION y SIGNED_IN; ignorar TOKEN_REFRESHED y USER_UPDATED para no sobreescribir ediciones locales - ProfileSheet: useEffect con solo [open] como dep — inicializa el form al abrir el sheet, sin resetearlo en cada cambio del objeto user durante la edición Co-Authored-By: Claude Sonnet 4.6 --- src/auth/SupabaseAuthService.ts | 7 +++++++ src/components/ProfileSheet.tsx | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/auth/SupabaseAuthService.ts b/src/auth/SupabaseAuthService.ts index 43ab55a..1b8f1ba 100644 --- a/src/auth/SupabaseAuthService.ts +++ b/src/auth/SupabaseAuthService.ts @@ -44,6 +44,13 @@ export class SupabaseAuthService implements AuthService { return } + // Solo procesar eventos genuinos de inicio de sesión. + // TOKEN_REFRESHED, USER_UPDATED y similares son eventos internos — ignorarlos + // previene sobreescribir ediciones locales (nombre, empresa) con datos re-leídos de DB. + if (event !== 'INITIAL_SESSION' && event !== 'SIGNED_IN') { + return + } + if (event === 'SIGNED_IN') { // Primer login: upsert del usuario en la tabla users const email = session.user.email ?? '' diff --git a/src/components/ProfileSheet.tsx b/src/components/ProfileSheet.tsx index c45c399..f664042 100644 --- a/src/components/ProfileSheet.tsx +++ b/src/components/ProfileSheet.tsx @@ -23,7 +23,10 @@ export function ProfileSheet({ open, onOpenChange }: ProfileSheetProps) { setName(user.name) setCompany(user.company ?? '') } - }, [open, user]) + // Intencional: solo inicializar cuando el sheet se abre, no en cada cambio de `user` + // (evita resetear el formulario mientras el usuario está editando). + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]) async function handleSave() { if (!user || !name.trim()) return