95 lines
2.7 KiB
TypeScript
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,
|
|
};
|
|
};
|