Merge remote-tracking branch 'origin/main' into cloudflare

This commit is contained in:
javayhu 2025-07-24 01:17:23 +08:00
commit d7cc9b956d
3 changed files with 25 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import {
CardTitle,
} from '@/components/ui/card';
import { useCurrentUser } from '@/hooks/use-current-user';
import { useMounted } from '@/hooks/use-mounted';
import { useLocalePathname } from '@/i18n/navigation';
import { formatPrice } from '@/lib/formatter';
import { cn } from '@/lib/utils';
@ -79,6 +80,7 @@ export function PricingCard({
const price = getPriceForPlan(plan, interval, paymentType);
const currentUser = useCurrentUser();
const currentPath = useLocalePathname();
const mounted = useMounted();
// console.log('pricing card, currentPath', currentPath);
// generate formatted price and price label
@ -152,7 +154,7 @@ export function PricingCard({
{/* show action buttons based on plans */}
{plan.isFree ? (
currentUser ? (
mounted && currentUser ? (
<Button variant="outline" className="mt-4 w-full disabled">
{t('getStartedForFree')}
</Button>
@ -172,7 +174,7 @@ export function PricingCard({
{t('yourCurrentPlan')}
</Button>
) : isPaidPlan ? (
currentUser ? (
mounted && currentUser ? (
<CheckoutButton
userId={currentUser.id}
planId={plan.id}

View File

@ -1,3 +1,4 @@
import { websiteConfig } from '@/config/website';
import { authClient } from '@/lib/auth-client';
import { useCreditsStore } from '@/stores/credits-store';
import { useCallback, useEffect } from 'react';
@ -7,8 +8,21 @@ import { useCallback, useEffect } from 'react';
*
* This hook provides access to the credits state and methods to manage it.
* It also automatically fetches credits information when the user changes.
* Only works when credits are enabled in the website configuration.
*/
export function useCredits() {
// Return default values if credits are disabled
if (!websiteConfig.credits.enableCredits) {
return {
balance: 0,
isLoading: false,
error: null,
fetchCredits: () => Promise.resolve(),
consumeCredits: () => Promise.resolve(false),
hasEnoughCredits: () => false,
};
}
const {
balance,
isLoading,

View File

@ -1,5 +1,6 @@
'use client';
import { websiteConfig } from '@/config/website';
import { authClient } from '@/lib/auth-client';
import { useCreditsStore } from '@/stores/credits-store';
import { useEffect } from 'react';
@ -9,8 +10,14 @@ import { useEffect } from 'react';
*
* This component initializes the credits store when the user is authenticated
* and handles cleanup when the user logs out.
* Only renders when credits are enabled in the website configuration.
*/
export function CreditsProvider({ children }: { children: React.ReactNode }) {
// Only initialize credits store if credits are enabled
if (!websiteConfig.credits.enableCredits) {
return <>{children}</>;
}
const { fetchCredits } = useCreditsStore();
const { data: session } = authClient.useSession();