"use client"; import { Suspense, useMemo, useState } from "react"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import { useQuery } from "@tanstack/react-query"; import { Plus } from "lucide-react"; import { accountingApi } from "@/lib/accounting-api"; import { useTenantId } from "@/hooks/useTenantId"; import { formatMoney } from "@/lib/utils"; import { PageHeader, Button, DataTable, EmptyState, LoadingState, ErrorState, Badge, JalaliDateText, Pagination, } from "@/components/ds"; const STATUS_FA: Record = { draft: "پیش‌نویس", validated: "اعتبارسنجی‌شده", posted: "ثبت قطعی", reversed: "برگشتی", cancelled: "لغو شده", }; const STATUS_TITLES: Record = { draft: "اسناد پیش‌نویس", reversed: "اسناد برگشتی", posted: "تأیید و ثبت اسناد", }; function VouchersList() { const { tenantId } = useTenantId(); const sp = useSearchParams(); const statusFilter = sp.get("status") || ""; const [page, setPage] = useState(1); const pageSize = 50; const listQ = useQuery({ queryKey: ["accounting", tenantId, "vouchers", page, pageSize], queryFn: () => accountingApi.vouchers.list(tenantId!, page, pageSize), enabled: !!tenantId, }); const rows = useMemo(() => { const all = listQ.data ?? []; if (!statusFilter) return all; return all.filter((v) => String(v.status) === statusFilter); }, [listQ.data, statusFilter]); if (!tenantId || listQ.isLoading) return ; if (listQ.error) return listQ.refetch()} />; const title = STATUS_TITLES[statusFilter] || "لیست اسناد حسابداری"; return (
} /> ( {String(r.voucher_number)} ), }, { key: "voucher_date", header: "تاریخ", render: (r) => , }, { key: "status", header: "وضعیت", render: (r) => ( {STATUS_FA[String(r.status)] ?? String(r.status)} ), }, { key: "total_debit", header: "بدهکار", render: (r) => formatMoney(String(r.total_debit)) }, { key: "total_credit", header: "بستانکار", render: (r) => formatMoney(String(r.total_credit)) }, { key: "description", header: "شرح" }, ]} rows={rows as unknown as Record[]} empty={ } /> } />
); } export default function VouchersPage() { return ( }> ); }