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:
@@ -44,6 +44,13 @@ export class SupabaseAuthService implements AuthService {
|
|||||||
return
|
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') {
|
if (event === 'SIGNED_IN') {
|
||||||
// Primer login: upsert del usuario en la tabla users
|
// Primer login: upsert del usuario en la tabla users
|
||||||
const email = session.user.email ?? ''
|
const email = session.user.email ?? ''
|
||||||
|
|||||||
@@ -23,7 +23,10 @@ export function ProfileSheet({ open, onOpenChange }: ProfileSheetProps) {
|
|||||||
setName(user.name)
|
setName(user.name)
|
||||||
setCompany(user.company ?? '')
|
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() {
|
async function handleSave() {
|
||||||
if (!user || !name.trim()) return
|
if (!user || !name.trim()) return
|
||||||
|
|||||||
Reference in New Issue
Block a user