"use client"; import { useQuery } from "@tanstack/react-query"; import { useTenantId } from "@/hooks/useTenantId"; import { paymentApi } from "@/modules/payment/services/payment-api"; import { usePaymentMetrics } from "@/modules/payment/hooks/usePaymentCapabilities"; import { PaymentPageLoader, PaymentPageError } from "@/modules/payment/pages/shared"; import { PageHeader, Card, CardContent } from "@/components/ds"; import { PaymentBarChart, PaymentDonutChart, PaymentStatCards, } from "@/modules/payment/components/PaymentCharts"; export const PaymentKpis = function PaymentKpisPage() { const { tenantId } = useTenantId(); const metrics = usePaymentMetrics(); const kpiQ = useQuery({ queryKey: ["payment", tenantId, "kpis"], queryFn: async () => { const [requests, transactions] = await Promise.all([ paymentApi.requests.list(tenantId!), paymentApi.transactions.list(tenantId!), ]); const byStatus: Record = {}; for (const r of requests) { const s = String(r.status ?? "unknown"); byStatus[s] = (byStatus[s] ?? 0) + 1; } const totalAmount = requests.reduce((sum, r) => sum + Number(r.amount_minor ?? 0), 0); const paidCount = requests.filter((r) => r.status === "paid").length; const successRate = requests.length ? Math.round((paidCount / requests.length) * 100) : 0; return { totalRequests: requests.length, totalTransactions: transactions.length, totalAmount, successRate, statusChart: Object.entries(byStatus).map(([name, value]) => ({ name, value })), sourceChart: Object.entries( requests.reduce>((acc, r) => { const k = String(r.payment_source ?? "unknown"); acc[k] = (acc[k] ?? 0) + 1; return acc; }, {}) ).map(([name, value]) => ({ name, value })), }; }, enabled: !!tenantId, }); if (!tenantId || kpiQ.isLoading || metrics.isLoading) return ; if (kpiQ.error) return kpiQ.refetch()} />; const k = kpiQ.data!; return (

توزیع وضعیت

منبع پرداخت

{metrics.data?.metrics ? (

متریک‌های سرویس

{JSON.stringify(metrics.data.metrics, null, 2)}
) : null}
); }; export default PaymentKpis;