refactor: enhance fetch logic in useCredits and usePayment hooks for improved clarity and consistency

This commit is contained in:
javayhu 2025-07-13 14:31:35 +08:00
parent c960738133
commit 2d2a85cd26
2 changed files with 49 additions and 46 deletions

View File

@ -13,39 +13,33 @@ export function useCredits() {
balance,
isLoading,
error,
fetchCredits,
fetchCredits: fetchCreditsFromStore,
consumeCredits,
refreshCredits,
} = useCreditsStore();
const { data: session } = authClient.useSession();
// Stable refetch function using useCallback
const refetch = useCallback(() => {
const currentUser = session?.user;
if (currentUser) {
console.log('refetching credits info for user', currentUser.id);
fetchCredits(currentUser);
}
}, [session?.user, fetchCredits]);
// Stable refresh function using useCallback
const refresh = useCallback(() => {
const currentUser = session?.user;
if (currentUser) {
console.log('refreshing credits info for user', currentUser.id);
refreshCredits(currentUser);
}
}, [session?.user, refreshCredits]);
const fetchCredits = useCallback(
(force = false) => {
const currentUser = session?.user;
if (currentUser) {
console.log(
`${force ? 'force fetch' : 'fetch'} credits for user`,
currentUser.id
);
fetchCreditsFromStore(currentUser, force);
}
},
[session?.user, fetchCreditsFromStore]
);
useEffect(() => {
const currentUser = session?.user;
// Fetch credits data whenever the user session changes
if (currentUser) {
console.log('fetching credits info for user', currentUser.id);
fetchCredits(currentUser);
console.log('fetch credits info for user', currentUser.id);
fetchCreditsFromStore(currentUser);
}
}, [session?.user, fetchCredits]);
}, [session?.user, fetchCreditsFromStore]);
return {
// State
@ -54,12 +48,9 @@ export function useCredits() {
error,
// Methods
fetchCredits,
consumeCredits,
// Utility methods
refetch,
refresh,
// Helper methods
hasEnoughCredits: (amount: number) => balance >= amount,
};

View File

@ -1,6 +1,6 @@
import { authClient } from '@/lib/auth-client';
import { usePaymentStore } from '@/stores/payment-store';
import { useEffect } from 'react';
import { useCallback, useEffect } from 'react';
/**
* Hook for accessing and managing payment state
@ -9,31 +9,43 @@ import { useEffect } from 'react';
* It also automatically fetches payment information when the user changes.
*/
export function usePayment() {
const { currentPlan, subscription, isLoading, error, fetchPayment } =
usePaymentStore();
const { data: session } = authClient.useSession();
useEffect(() => {
const currentUser = session?.user;
// Fetch payment data whenever the user session changes
if (currentUser) {
console.log('fetching payment info for user', currentUser.id);
fetchPayment(currentUser);
}
}, [session, fetchPayment]);
return {
const {
currentPlan,
subscription,
isLoading,
error,
refetch: () => {
fetchPayment: fetchPaymentFromStore,
} = usePaymentStore();
const { data: session } = authClient.useSession();
const fetchPayment = useCallback(
(force = false) => {
const currentUser = session?.user;
if (currentUser) {
console.log('refetching payment info for user', currentUser.id);
fetchPayment(currentUser);
console.log('fetch payment info for user', currentUser.id);
fetchPaymentFromStore(currentUser);
}
},
[session?.user, fetchPaymentFromStore]
);
useEffect(() => {
const currentUser = session?.user;
if (currentUser) {
console.log('fetch payment info for user', currentUser.id);
fetchPaymentFromStore(currentUser);
}
}, [session?.user, fetchPaymentFromStore]);
return {
// State
currentPlan,
subscription,
isLoading,
error,
// Methods
fetchPayment,
};
}