'use client' import * as React from 'react' import { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table' import { Button } from '@/components/ui/button' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table' 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[] } const formatDate = (dateString: string): string => { const date = new Date(dateString); return date.toLocaleDateString('fa-IR', { year: 'numeric', month: '2-digit', day: '2-digit' }); }; export const columns: ColumnDef[] = [ { accessorKey: 'order.orderNumber', header: () =>
شماره سفارش
, cell: ({ row }) => { const orderNumber = row.original.order?.orderNumber; return (
{ef(orderNumber?.toString() || '-')}
) } }, { accessorKey: 'type', header: () =>
نوع تراکنش
, cell: ({ row }) => { const type = row.original.order?.paymentMethod?.description || '-'; return
{type}
} }, { accessorKey: 'amount', header: () =>
مبلغ
, cell: ({ row }) => { const amount = row.original.amount; const formatted = Math.abs(amount).toLocaleString('fa-IR'); return
{ef(formatted)} ریال
} }, { accessorKey: 'createdAt', header: () =>
تاریخ
, cell: ({ row }) => { const date = formatDate(row.original.createdAt); return
{ef(date)}
} }, { accessorKey: 'status', header: () =>
وضعیت
, cell: ({ row }) => { const status = row.original.status; return } } ] export function TransactionsTable({ transactions }: TransactionsTableProps) { const [sorting, setSorting] = React.useState([]) const [columnFilters, setColumnFilters] = React.useState( [] ) const [columnVisibility, setColumnVisibility] = React.useState({}) const [rowSelection, setRowSelection] = React.useState({}) const table = useReactTable({ data: transactions, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, columnVisibility, rowSelection }, initialState: { pagination: { pageSize: 8 } } }) return (
{table.getHeaderGroups().map(headerGroup => ( {headerGroup.headers.map(header => { return ( {header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext() )} ) })} ))} {table.getRowModel().rows?.length ? ( table.getRowModel().rows.map(row => ( {row.getVisibleCells().map(cell => ( {flexRender( cell.column.columnDef.cell, cell.getContext() )} ))} )) ) : ( تراکنشی یافت نشد. )}
نمایش:{' '} {ef(table.getRowModel().rows.length)} {' '} از {ef(table.getFilteredRowModel().rows.length)}
) }