Amba-Agent-App/lib/hooks/useAuthWithProfile.ts
2026-01-16 00:22:35 +03:00

95 lines
2.7 KiB
TypeScript

import { useEffect } from 'react';
import { useAuthStore } from '../stores/authStore';
import { useUserProfile } from './useUserProfile';
import { useUserWallet } from './useUserWallet';
/**
* Custom hook that integrates the auth store with profile and wallet hooks
* This maintains the existing functionality while using Zustand for state management
*/
export const useAuthWithProfile = () => {
const {
user,
loading,
phoneSessionInfo,
phoneConfirmationResult,
phoneLoading,
phoneError,
setProfile,
setWallet,
setProfileLoading,
setWalletLoading,
setProfileError,
setWalletError,
setFormattedBalance,
setPhoneSessionInfo,
setPhoneConfirmationResult,
setPhoneLoading,
setPhoneError,
clearPhoneAuth,
signOut,
} = useAuthStore();
// Use the existing profile hook
const profileHook = useUserProfile(user);
const walletHook = useUserWallet(user);
// Sync profile hook data with store - batch updates to reduce re-renders
useEffect(() => {
// Batch state updates to avoid multiple re-renders
setProfile(profileHook.profile);
setProfileLoading(profileHook.loading);
setProfileError(profileHook.error);
}, [profileHook.profile, profileHook.loading, profileHook.error, setProfile, setProfileLoading, setProfileError]);
// Sync wallet hook data with store - batch updates to reduce re-renders
useEffect(() => {
// Batch state updates to avoid multiple re-renders
setWallet(walletHook.wallet);
setWalletLoading(walletHook.loading);
setWalletError(walletHook.error);
setFormattedBalance(walletHook.formattedBalance);
}, [walletHook.wallet, walletHook.loading, walletHook.error, walletHook.formattedBalance, setWallet, setWalletLoading, setWalletError, setFormattedBalance]);
return {
// Auth state
user,
loading,
// Profile state - use hook values directly
profile: profileHook.profile,
profileLoading: profileHook.loading,
profileError: profileHook.error,
// Wallet state - use hook values directly
wallet: walletHook.wallet,
walletLoading: walletHook.loading,
walletError: walletHook.error,
formattedBalance: walletHook.formattedBalance,
// Phone auth state
phoneSessionInfo,
phoneConfirmationResult,
phoneLoading,
phoneError,
// Actions
signOut,
refreshProfile: profileHook.refreshProfile,
refreshWallet: walletHook.refreshWallet,
// Phone auth actions
setPhoneSessionInfo,
setPhoneConfirmationResult,
setPhoneLoading,
setPhoneError,
clearPhoneAuth,
// Wallet actions
addCreditCard: walletHook.addCreditCard,
removeCreditCard: walletHook.removeCreditCard,
balanceInDollars: walletHook.balanceInDollars,
};
};