From 2e8ed5ce1e415188004b8857bf06329c84f1dbee Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 23 Dec 2025 10:45:04 +0330 Subject: [PATCH] transaction change --- .../components/TransactionsTable.tsx | 37 +-------------- .../[name]/(Main)/transactions/enum/Enum.ts | 6 +++ src/app/[name]/(Main)/transactions/page.tsx | 45 +++---------------- src/components/utils/Status.tsx | 43 ++++++++++++++++++ 4 files changed, 56 insertions(+), 75 deletions(-) create mode 100644 src/app/[name]/(Main)/transactions/enum/Enum.ts create mode 100644 src/components/utils/Status.tsx diff --git a/src/app/[name]/(Main)/transactions/components/TransactionsTable.tsx b/src/app/[name]/(Main)/transactions/components/TransactionsTable.tsx index 16557da..9a6d28d 100644 --- a/src/app/[name]/(Main)/transactions/components/TransactionsTable.tsx +++ b/src/app/[name]/(Main)/transactions/components/TransactionsTable.tsx @@ -23,10 +23,10 @@ import { TableHeader, TableRow } from '@/components/ui/table' -import clsx from 'clsx' import { ArrowLeft2, ArrowRight2 } from 'iconsax-react' import { ef } from '@/lib/helpers/utfNumbers' import { Transaction } from '../types/Types' +import Status from '@/components/utils/Status' interface TransactionsTableProps { transactions: Transaction[] @@ -41,26 +41,6 @@ const formatDate = (dateString: string): string => { }); }; -const getStatusText = (status: string): string => { - const statusMap: Record = { - 'SUCCESS': 'موفق', - 'FAILED': 'ناموفق', - 'PENDING': 'در انتظار', - 'CANCELLED': 'لغو شده', - }; - return statusMap[status] || status; -}; - -const getStatusColor = (status: string): string => { - const colorMap: Record = { - 'SUCCESS': 'bg-[#00BA4B]', - 'FAILED': 'bg-red-500', - 'PENDING': 'bg-yellow-500', - 'CANCELLED': 'bg-gray-500', - }; - return colorMap[status] || 'bg-transparent border border-primary'; -}; - export const columns: ColumnDef[] = [ { accessorKey: 'order.orderNumber', @@ -102,20 +82,7 @@ export const columns: ColumnDef[] = [ header: () =>
وضعیت
, cell: ({ row }) => { const status = row.original.status; - const statusText = getStatusText(status); - const statusColor = getStatusColor(status); - - return ( -
- - {statusText} -
- ) + return } } ] diff --git a/src/app/[name]/(Main)/transactions/enum/Enum.ts b/src/app/[name]/(Main)/transactions/enum/Enum.ts new file mode 100644 index 0000000..ee4930d --- /dev/null +++ b/src/app/[name]/(Main)/transactions/enum/Enum.ts @@ -0,0 +1,6 @@ +export const enum PaymentStatusEnum { + Pending = "pending", + Paid = "paid", + Failed = "failed", + Refunded = "refunded", +} diff --git a/src/app/[name]/(Main)/transactions/page.tsx b/src/app/[name]/(Main)/transactions/page.tsx index f86578b..c68ff66 100644 --- a/src/app/[name]/(Main)/transactions/page.tsx +++ b/src/app/[name]/(Main)/transactions/page.tsx @@ -1,50 +1,15 @@ 'use client'; -import { ef } from '@/lib/helpers/utfNumbers' -import { - MoneyRecive, - MoneySend, - Wallet -} from 'iconsax-react' -import React, { useMemo } from 'react' -import { useGetTransactions, useGetUserWallet } from './hooks/useTransactionData'; -import { Transaction } from './types/Types'; +import React from 'react' +import { useGetTransactions } from './hooks/useTransactionData'; import { TransactionsTable } from './components/TransactionsTable'; import LoadingOverlay from '@/components/overlays/LoadingOverlay'; function TransactionsReviewIndex() { const { data: transactionsResponse, isLoading: isLoadingTransactions } = useGetTransactions(); - const { data: walletResponse, isLoading: isLoadingWallet } = useGetUserWallet(); const transactions = transactionsResponse?.data || []; - const walletAmount = walletResponse?.data?.wallet || 0; - const stats = useMemo(() => { - if (!transactions.length) { - return { - totalDeposits: 0, - totalWithdrawals: 0, - }; - } - - const deposits = transactions - .filter((t: Transaction) => t.status === 'SUCCESS' && t.amount > 0) - .reduce((sum: number, t: Transaction) => sum + t.amount, 0); - - const withdrawals = transactions - .filter((t: Transaction) => t.status === 'SUCCESS' && t.amount < 0) - .reduce((sum: number, t: Transaction) => sum + Math.abs(t.amount), 0); - - return { - totalDeposits: deposits, - totalWithdrawals: withdrawals, - }; - }, [transactions]); - - const formatPrice = (amount: number) => { - return ef(amount.toLocaleString('fa-IR')); - }; - - const isLoading = isLoadingTransactions || isLoadingWallet; + const isLoading = isLoadingTransactions; return (
@@ -52,7 +17,7 @@ function TransactionsReviewIndex() {

لیست تراکنش ها

-
+ {/*
-
+
*/}
diff --git a/src/components/utils/Status.tsx b/src/components/utils/Status.tsx new file mode 100644 index 0000000..90ef215 --- /dev/null +++ b/src/components/utils/Status.tsx @@ -0,0 +1,43 @@ +'use client'; + +import React from 'react'; +import clsx from 'clsx'; + +type Props = { + status: string; + className?: string; +}; + +const getStatusConfig = (status: string): { text: string; color: string } => { + const statusUpper = status.toUpperCase(); + + const statusMap: Record = { + 'SUCCESS': { text: 'موفق', color: 'bg-[#00BA4B]' }, + 'FAILED': { text: 'ناموفق', color: 'bg-red-500' }, + 'PENDING': { text: 'در انتظار', color: 'bg-yellow-500' }, + 'CANCELLED': { text: 'لغو شده', color: 'bg-gray-500' }, + 'PAID': { text: 'پرداخت شده', color: 'bg-[#00BA4B]' }, + 'REFUNDED': { text: 'بازگشت شده', color: 'bg-gray-500' }, + }; + + return statusMap[statusUpper] || { text: status, color: 'bg-transparent border border-primary' }; +}; + +function Status({ status, className = '' }: Props) { + const { text, color } = getStatusConfig(status); + + return ( +
+ + {text} +
+ ); +} + +export default Status; +