diff --git a/messages/en.json b/messages/en.json index df82b0a..5b9d562 100644 --- a/messages/en.json +++ b/messages/en.json @@ -571,6 +571,7 @@ "createCustomerPortalFailed": "Failed to open Stripe customer portal" }, "price": "Price:", + "periodStartDate": "Period start date:", "nextBillingDate": "Next billing date:", "trialEnds": "Trial ends:", "freePlanMessage": "You are currently on the free plan with limited features", diff --git a/messages/zh.json b/messages/zh.json index d28a31d..73a7acc 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -571,6 +571,7 @@ "createCustomerPortalFailed": "打开Stripe客户界面失败" }, "price": "价格:", + "periodStartDate": "周期开始日期:", "nextBillingDate": "下次账单日期:", "trialEnds": "试用结束日期:", "freePlanMessage": "您当前使用的是功能有限的免费方案", diff --git a/src/components/layout/credits-balance-button.tsx b/src/components/layout/credits-balance-button.tsx index 1077b85..bf4c677 100644 --- a/src/components/layout/credits-balance-button.tsx +++ b/src/components/layout/credits-balance-button.tsx @@ -1,12 +1,18 @@ 'use client'; import { Button } from '@/components/ui/button'; +import { websiteConfig } from '@/config/website'; import { useCredits } from '@/hooks/use-credits'; import { useLocaleRouter } from '@/i18n/navigation'; import { Routes } from '@/routes'; import { CoinsIcon, Loader2Icon } from 'lucide-react'; export function CreditsBalanceButton() { + // If credits are not enabled, return null + if (!websiteConfig.credits.enableCredits) { + return null; + } + const router = useLocaleRouter(); // Use the new useCredits hook diff --git a/src/components/layout/credits-balance-menu.tsx b/src/components/layout/credits-balance-menu.tsx index 1b386ea..0155099 100644 --- a/src/components/layout/credits-balance-menu.tsx +++ b/src/components/layout/credits-balance-menu.tsx @@ -1,5 +1,6 @@ 'use client'; +import { websiteConfig } from '@/config/website'; import { useCredits } from '@/hooks/use-credits'; import { useLocaleRouter } from '@/i18n/navigation'; import { Routes } from '@/routes'; @@ -7,6 +8,11 @@ import { CoinsIcon, Loader2Icon } from 'lucide-react'; import { useTranslations } from 'next-intl'; export function CreditsBalanceMenu() { + // If credits are not enabled, return null + if (!websiteConfig.credits.enableCredits) { + return null; + } + const t = useTranslations('Marketing.avatar'); const router = useLocaleRouter(); diff --git a/src/components/settings/billing/billing-card.tsx b/src/components/settings/billing/billing-card.tsx index 253fefb..21bb902 100644 --- a/src/components/settings/billing/billing-card.tsx +++ b/src/components/settings/billing/billing-card.tsx @@ -20,7 +20,7 @@ import { formatDate, formatPrice } from '@/lib/formatter'; import { cn } from '@/lib/utils'; import { PlanIntervals } from '@/payment/types'; import { Routes } from '@/routes'; -import { RefreshCwIcon } from 'lucide-react'; +import { CheckCircleIcon, ClockIcon, RefreshCwIcon } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useSearchParams } from 'next/navigation'; import { useEffect, useRef } from 'react'; @@ -63,6 +63,11 @@ export default function BillingCard() { (price) => price.priceId === subscription?.priceId ); + // Get current period start date + const currentPeriodStart = subscription?.currentPeriodStart + ? formatDate(subscription.currentPeriodStart) + : null; + // Format next billing date if subscription is active const nextBillingDate = subscription?.currentPeriodEnd ? formatDate(subscription.currentPeriodEnd) @@ -178,15 +183,23 @@ export default function BillingCard() { {/* Plan name and status */}