diff --git a/messages/en.json b/messages/en.json index 3bcaa8c..6e1d5be 100644 --- a/messages/en.json +++ b/messages/en.json @@ -633,7 +633,9 @@ "REGISTER_GIFT": "Register Gift", "PURCHASE": "Purchase", "USAGE": "Usage", - "EXPIRE": "Expire" + "EXPIRE": "Expire", + "SUBSCRIPTION_RENEWAL": "Subscription Renewal", + "LIFETIME_MONTHLY": "Lifetime Monthly" }, "expired": "Expired", "never": "Never" diff --git a/messages/zh.json b/messages/zh.json index 61e67fa..6ad555f 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -634,7 +634,9 @@ "REGISTER_GIFT": "注册礼品", "PURCHASE": "购买", "USAGE": "使用", - "EXPIRE": "过期" + "EXPIRE": "过期", + "SUBSCRIPTION_RENEWAL": "订阅续费", + "LIFETIME_MONTHLY": "终身月度" }, "expired": "已过期", "never": "永不" diff --git a/src/components/settings/credits/credit-transactions-table.tsx b/src/components/settings/credits/credit-transactions-table.tsx index f9da1ad..392e7cb 100644 --- a/src/components/settings/credits/credit-transactions-table.tsx +++ b/src/components/settings/credits/credit-transactions-table.tsx @@ -23,6 +23,13 @@ import { TableHeader, TableRow, } from '@/components/ui/table'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; +import { CREDIT_TRANSACTION_TYPE } from '@/credits/types'; import { formatDate } from '@/lib/formatter'; import { type ColumnDef, @@ -43,18 +50,17 @@ import { ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, - RefreshCwIcon, - GiftIcon, - ShoppingCartIcon, - MinusCircleIcon, ClockIcon, + GiftIcon, + MinusCircleIcon, + RefreshCwIcon, + ShoppingCartIcon, } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useState } from 'react'; import { toast } from 'sonner'; import { Badge } from '../../ui/badge'; import { Label } from '../../ui/label'; -import { CREDIT_TRANSACTION_TYPE } from '@/credits/types'; // Define the credit transaction interface interface CreditTransaction { @@ -109,8 +115,6 @@ interface CreditTransactionsTableProps { onSortingChange?: (sorting: SortingState) => void; } -export { type CreditTransaction }; - export function CreditTransactionsTable({ data, total, @@ -126,7 +130,7 @@ export function CreditTransactionsTable({ const t = useTranslations('Dashboard.settings.credits.transactions'); const tTable = useTranslations('Common.table'); const [sorting, setSorting] = useState([ - { id: 'createdAt', desc: true } + { id: 'createdAt', desc: true }, ]); const [columnFilters, setColumnFilters] = useState([]); const [columnVisibility, setColumnVisibility] = useState({}); @@ -147,39 +151,42 @@ export function CreditTransactionsTable({ updatedAt: 'columns.updatedAt' as const, } as const; - // Get transaction type icon and color + // Get transaction type icon const getTransactionTypeIcon = (type: string) => { switch (type) { case CREDIT_TRANSACTION_TYPE.MONTHLY_REFRESH: - return ; + return ; case CREDIT_TRANSACTION_TYPE.REGISTER_GIFT: - return ; + return ; case CREDIT_TRANSACTION_TYPE.PURCHASE: - return ; + return ; case CREDIT_TRANSACTION_TYPE.USAGE: - return ; + return ; case CREDIT_TRANSACTION_TYPE.EXPIRE: - return ; + return ; + case CREDIT_TRANSACTION_TYPE.SUBSCRIPTION_RENEWAL: + return ; + case CREDIT_TRANSACTION_TYPE.LIFETIME_MONTHLY: + return ; default: return null; } }; - // Get transaction type color - const getTransactionTypeColor = (type: string) => { + // Get transaction type badge variant + const getTransactionTypeBadgeVariant = (type: string) => { switch (type) { - case CREDIT_TRANSACTION_TYPE.MONTHLY_REFRESH: - return 'bg-blue-100 text-blue-800 border-blue-200'; case CREDIT_TRANSACTION_TYPE.REGISTER_GIFT: - return 'bg-green-100 text-green-800 border-green-200'; case CREDIT_TRANSACTION_TYPE.PURCHASE: - return 'bg-purple-100 text-purple-800 border-purple-200'; + case CREDIT_TRANSACTION_TYPE.MONTHLY_REFRESH: + case CREDIT_TRANSACTION_TYPE.SUBSCRIPTION_RENEWAL: + case CREDIT_TRANSACTION_TYPE.LIFETIME_MONTHLY: + return 'outline' as const; case CREDIT_TRANSACTION_TYPE.USAGE: - return 'bg-red-100 text-red-800 border-red-200'; case CREDIT_TRANSACTION_TYPE.EXPIRE: - return 'bg-gray-100 text-gray-800 border-gray-200'; + return 'destructive' as const; default: - return 'bg-gray-100 text-gray-800 border-gray-200'; + return 'outline' as const; } }; @@ -196,6 +203,10 @@ export function CreditTransactionsTable({ return t('types.USAGE'); case CREDIT_TRANSACTION_TYPE.EXPIRE: return t('types.EXPIRE'); + case CREDIT_TRANSACTION_TYPE.SUBSCRIPTION_RENEWAL: + return t('types.SUBSCRIPTION_RENEWAL'); + case CREDIT_TRANSACTION_TYPE.LIFETIME_MONTHLY: + return t('types.LIFETIME_MONTHLY'); default: return type; } @@ -212,10 +223,7 @@ export function CreditTransactionsTable({ const transaction = row.original; return (
- + {getTransactionTypeIcon(transaction.type)} {getTransactionTypeDisplayName(transaction.type)} @@ -247,7 +255,10 @@ export function CreditTransactionsTable({ { accessorKey: 'remainingAmount', header: ({ column }) => ( - + ), cell: ({ row }) => { const transaction = row.original; @@ -267,15 +278,33 @@ export function CreditTransactionsTable({ { accessorKey: 'description', header: ({ column }) => ( - + ), cell: ({ row }) => { const transaction = row.original; return (
- - {transaction.description || '-'} - + {transaction.description ? ( + + + + + {transaction.description} + + + +

+ {transaction.description} +

+
+
+
+ ) : ( + - + )}
); }, @@ -310,7 +339,10 @@ export function CreditTransactionsTable({ { accessorKey: 'expirationDate', header: ({ column }) => ( - + ), cell: ({ row }) => { const transaction = row.original; @@ -330,7 +362,10 @@ export function CreditTransactionsTable({ { accessorKey: 'expirationDateProcessedAt', header: ({ column }) => ( - + ), cell: ({ row }) => { const transaction = row.original; @@ -356,9 +391,7 @@ export function CreditTransactionsTable({ const transaction = row.original; return (
- - {formatDate(transaction.createdAt)} - + {formatDate(transaction.createdAt)}
); }, @@ -372,9 +405,7 @@ export function CreditTransactionsTable({ const transaction = row.original; return (
- - {formatDate(transaction.updatedAt)} - + {formatDate(transaction.updatedAt)}
); }, @@ -514,11 +545,7 @@ export function CreditTransactionsTable({
- {total > 0 && ( - - {tTable('totalRecords', { count: total })} - - )} + {total > 0 && {tTable('totalRecords', { count: total })}}