"use client"; import { useQuery } from "@tanstack/react-query"; import Link from "next/link"; import { useTenantId } from "@/hooks/useTenantId"; import { paymentApi } from "@/modules/payment/services/payment-api"; import { usePaymentCapabilities, usePaymentMetrics, } from "@/modules/payment/hooks/usePaymentCapabilities"; import { PaymentPageLoader, PaymentPageError } from "@/modules/payment/pages/shared"; import { PageHeader, Card, CardContent, Button, Badge } from "@/components/ds"; import { PaymentBarChart, PaymentStatCards, } from "@/modules/payment/components/PaymentCharts"; export const PaymentDashboard = function PaymentExecutiveDashboard() { const { tenantId } = useTenantId(); const caps = usePaymentCapabilities(); const metrics = usePaymentMetrics(); const countsQ = useQuery({ queryKey: ["payment", tenantId, "dashboard-counts"], queryFn: async () => { const [requests, transactions, merchants, connections, audit] = await Promise.all([ paymentApi.requests.list(tenantId!), paymentApi.transactions.list(tenantId!), paymentApi.merchants.list(tenantId!).catch(() => []), paymentApi.pspConnections.list(tenantId!).catch(() => []), paymentApi.audit.list(tenantId!), ]); return { requests: requests.length, transactions: transactions.length, merchants: merchants.length, connections: connections.length, paid: requests.filter((r) => r.status === "paid").length, pending: requests.filter((r) => ["pending", "redirect_issued"].includes(String(r.status)) ).length, recentRequests: requests.slice(0, 5), recentAudit: audit.slice(0, 8), }; }, enabled: !!tenantId, }); if (!tenantId || countsQ.isLoading || caps.isLoading) return ; if (countsQ.error) return countsQ.refetch()} />; const c = countsQ.data!; const chartData = [ { name: "درخواست", value: c.requests }, { name: "تراکنش", value: c.transactions }, { name: "پذیرنده", value: c.merchants }, { name: "درگاه", value: c.connections }, ]; return (
Torbat Pay v{caps.data?.version}} />

توزیع منابع

اقدامات سریع

آخرین درخواست‌ها

    {c.recentRequests.map((r) => (
  • {String(r.amount_minor)} {String(r.currency)} — {String(r.status)}
  • ))} {c.recentRequests.length === 0 ?
  • درخواستی نیست
  • : null}

فعالیت اخیر (حسابرسی)

    {c.recentAudit.map((a) => (
  • {String(a.action)} — {String(a.entity_type)} —{" "} {a.created_at ? new Date(String(a.created_at)).toLocaleString("fa-IR") : "—"}
  • ))} {c.recentAudit.length === 0 ?
  • فعالیتی ثبت نشده
  • : null}
{metrics.data ? ( فاز {metrics.data.phase} — سرویس {metrics.data.service} ) : null}
); }; export default PaymentDashboard;