"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 { beautyBusinessApi } from "@/modules/beauty/services/beauty-business-api"; import { useTenantId } from "@/hooks/useTenantId"; import { PageHeader, Button, Dialog, Input, DataTable, EmptyState, LoadingState, ErrorState, Badge, FormField, Select, } from "@/components/ds"; const createSchema = z.object({ organization_id: z.string().min(1, "سازمان الزامی است"), code: z.string().min(1, "کد الزامی است"), display_name: z.string().min(1, "نام الزامی است"), mobile: z.string().optional(), email: z.string().optional(), }); const statusLabel: Record = { draft: "پیش‌نویس", active: "فعال", inactive: "غیرفعال", suspended: "معلق", archived: "آرشیو", }; export default function CustomersPage() { const { tenantId } = useTenantId(); const qc = useQueryClient(); const [createOpen, setCreateOpen] = useState(false); const orgsQ = useQuery({ queryKey: ["beauty", tenantId, "organizations"], queryFn: () => beautyBusinessApi.organizations.list(tenantId!), enabled: !!tenantId, }); const listQ = useQuery({ queryKey: ["beauty", tenantId, "customers"], queryFn: () => beautyBusinessApi.customers.list(tenantId!), enabled: !!tenantId, }); const createForm = useForm>({ resolver: zodResolver(createSchema), defaultValues: { organization_id: "", code: "", display_name: "", mobile: "", email: "" }, }); const invalidate = () => qc.invalidateQueries({ queryKey: ["beauty", tenantId, "customers"] }); const createM = useMutation({ mutationFn: (d: z.infer) => beautyBusinessApi.customers.create(tenantId!, { ...d, mobile: d.mobile || undefined, email: d.email || undefined, }), onSuccess: async () => { toast.success("مشتری ایجاد شد"); setCreateOpen(false); createForm.reset(); await invalidate(); }, onError: (e: Error) => toast.error(e.message), }); if (!tenantId || listQ.isLoading) return ; if (listQ.error) { return listQ.refetch()} />; } return (
setCreateOpen(true)}> مشتری جدید } /> ( {statusLabel[String(r.status)] ?? String(r.status)} ), }, ]} rows={(listQ.data ?? []) as unknown as Record[]} empty={ setCreateOpen(true)}>ایجاد مشتری} />} /> setCreateOpen(false)} title="مشتری جدید">
createM.mutate(d))}>
); }