"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { Plus } from "lucide-react"; import { accountingApi } from "@/lib/accounting-api"; import { useTenantId } from "@/hooks/useTenantId"; import { formatMoney } from "@/lib/utils"; import { PageHeader, Button, Dialog, Input, Label, FieldError, DataTable, EmptyState, LoadingState, ErrorState, Badge, } from "@/components/ds"; const schema = z.object({ code: z.string().optional(), name: z.string().min(1, "نام الزامی است"), }); export default function SuppliersPage() { const { tenantId } = useTenantId(); const qc = useQueryClient(); const [open, setOpen] = useState(false); const form = useForm>({ resolver: zodResolver(schema), defaultValues: { code: "", name: "" }, }); const listQ = useQuery({ queryKey: ["accounting", tenantId, "suppliers"], queryFn: () => accountingApi.suppliers.list(tenantId!), enabled: !!tenantId, }); const createM = useMutation({ mutationFn: (d: z.infer) => accountingApi.suppliers.create(tenantId!, d), onSuccess: async () => { toast.success("تأمین‌کننده ایجاد شد"); setOpen(false); form.reset(); await qc.invalidateQueries({ queryKey: ["accounting", tenantId, "suppliers"] }); }, onError: (e: Error) => toast.error(e.message), }); if (!tenantId || listQ.isLoading) return ; if (listQ.error) return listQ.refetch()} />; return (
setOpen(true)}> تأمین‌کننده جدید } /> formatMoney(String(r.outstanding_balance ?? "0")), }, { key: "is_active", header: "وضعیت", render: (r) => ( {r.is_active ? "فعال" : "غیرفعال"} ), }, ]} rows={(listQ.data ?? []) as unknown as Record[]} empty={ setOpen(true)}>ایجاد} /> } /> setOpen(false)} title="تأمین‌کننده جدید">
createM.mutate(d))}>
{form.formState.errors.code?.message}
{form.formState.errors.name?.message}
); }