import { Link, useParams } from "@remix-run/react"; import { Loader2, ArrowRight, BadgeCheck } from "lucide-react"; import { useLedgerSellerDetail } from "~/requestHandler/use-admin-hooks"; import { AdminTable, StatusBadge, faToman, faNum, faDate, type Column, } from "~/components/admin/DataTable"; import type { LedgerPayoutRow } from "~/requestHandler/use-admin-hooks"; import { cn } from "~/lib/utils"; const PAYOUT_STATUS: Record = { pending: { label: "در انتظار", tone: "yellow" }, completed: { label: "پرداخت‌شده", tone: "green" }, rejected: { label: "ردشده", tone: "red" }, }; function Stat({ label, value, accent, }: { label: string; value: string; accent?: "red" | "green"; }) { return (

{label}

{value}

); } export default function LedgerSellerDetail() { const { id } = useParams(); const { data, isLoading, isError } = useLedgerSellerDetail(id); if (isLoading) return (
); if (isError || !data) return

خطا در بارگذاری اطلاعات فروشنده

; const discrepant = Math.abs(data.discrepancy) > 1; const payoutColumns: Column[] = [ { header: "مبلغ", render: (p) => {faToman(p.amount)} }, { header: "وضعیت", render: (p) => { const s = PAYOUT_STATUS[p.status] || { label: p.status, tone: "yellow" as const }; return ; }, }, { header: "درخواست", render: (p) => {faDate(p.requestedAt)} }, { header: "پرداخت", render: (p) => {faDate(p.processedAt)} }, ]; return (

{data.seller.storeName}

@{data.seller.username} · کمیسیون {faNum(data.seller.platformFee)}٪

{discrepant && (

مانده ثبت‌شده با مقدار محاسبه‌شده مغایرت دارد (به‌احتمال زیاد به‌دلیل عدم کسر برداشت‌های پرداخت‌شده از مانده).

)} {/* Bank accounts */}

حساب‌های بانکی

{data.bankAccounts.length === 0 ? (

حساب بانکی ثبت نشده است.

) : (
{data.bankAccounts.map((b) => (

{b.accountHolder}

{b.iban} · {b.bankName}

{b.isVerified ? ( تأییدشده ) : ( )}
))}
)} {/* Payout history */}

تاریخچه برداشت

p.id} emptyText="برداشتی ثبت نشده است" />
); }