import React, { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; import { EyeIcon } from '@heroicons/react/24/outline'; import { api } from '../lib/api'; import type { PaginatedResponse } from '../lib/api'; import type { Payment } from '../types'; import { formatDate, formatRial, maskMobile } from '../lib/utils'; import PageHeader from '../components/ui/PageHeader'; import DataTable, { Column } from '../components/ui/DataTable'; import StatusBadge from '../components/ui/StatusBadge'; import Pagination from '../components/ui/Pagination'; const STATUS_FILTERS = [ { value: '', label: 'همه' }, { value: 'pending', label: 'در انتظار' }, { value: 'received', label: 'موفق' }, { value: 'canceled', label: 'لغو شده' }, { value: 'refund', label: 'استرداد' }, ]; export default function PaymentsPage() { const navigate = useNavigate(); const [page, setPage] = useState(1); const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState(''); const limit = 15; const { data, isLoading } = useQuery({ queryKey: ['payments', page, search, statusFilter], queryFn: () => { const params = new URLSearchParams({ page: String(page), limit: String(limit) }); if (search) params.set('search', search); if (statusFilter) params.set('status', statusFilter); return api.get>(`/api/v1/admin/payments?${params}`); }, }); const columns: Column[] = [ { key: 'patient_mobile', header: 'موبایل', render: (p) => {maskMobile(p.patient_mobile)}, }, { key: 'amount', header: 'مبلغ', render: (p) => {formatRial(p.amount)}, }, { key: 'status', header: 'وضعیت', render: (p) => , }, { key: 'gateway', header: 'درگاه', render: (p) => ( {p.gateway} ), }, { key: 'ref_id', header: 'شماره مرجع', render: (p) => p.ref_id ? {p.ref_id} : '—', }, { key: 'paid_at', header: 'تاریخ پرداخت', render: (p) => formatDate(p.paid_at), }, { key: 'created_at', header: 'تاریخ ثبت', render: (p) => formatDate(p.created_at), }, ]; const items = data?.data ?? []; const total = data?.meta?.totalRecords ?? 0; return (
{STATUS_FILTERS.map((f) => ( ))}
columns={columns} data={items} loading={isLoading} searchValue={search} onSearchChange={(v) => { setSearch(v); setPage(1); }} searchPlaceholder="جستجو بر اساس موبایل یا شماره مرجع..." emptyMessage="هیچ پرداختی یافت نشد" actions={(payment) => ( )} />
); }