fix(sprint-5/etapa-4b): prevenir loop en onAuthStateChange al guardar perfil

- 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 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 00:35:01 -03:00
parent 7ffab83caf
commit 735294db06
2 changed files with 11 additions and 1 deletions

View File

@@ -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 ?? ''

View File

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