"use client"; import { Suspense, useState } from "react"; import { useSearchParams } from "next/navigation"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { Button, Dialog, FormField, Input, PageHeader, Card, CardContent, EmptyState, Textarea, } from "@/components/ds"; import { loyaltyApi } from "@/modules/loyalty/services/loyalty-api"; import { useTenantId } from "@/hooks/useTenantId"; import { LoyaltyBreadcrumbs } from "@/modules/loyalty/components/LoyaltyBreadcrumbs"; import { LoyaltyPageLoader, LoyaltyPageError } from "@/modules/loyalty/pages/shared"; import { LoyaltyStatusChip, LoyaltyTablePage } from "@/modules/loyalty/design-system"; const ACTIONS = [ { id: "enroll", label: "ثبت‌نام" }, { id: "activate", label: "فعال‌سازی" }, { id: "renew", label: "تمدید" }, { id: "freeze", label: "مسدود" }, { id: "resume", label: "ازسرگیری" }, { id: "cancel", label: "لغو" }, { id: "expire", label: "انقضا" }, ] as const; function CustomerProfileInner() { const { tenantId } = useTenantId(); const sp = useSearchParams(); const [memberId, setMemberId] = useState(sp.get("memberId") ?? ""); const [activeId, setActiveId] = useState(memberId); const [action, setAction] = useState<(typeof ACTIONS)[number]["id"] | null>(null); const [reason, setReason] = useState(""); const qc = useQueryClient(); const memberQ = useQuery({ queryKey: ["loyalty", tenantId, "member", activeId], queryFn: () => loyaltyApi.members.get(tenantId!, activeId), enabled: !!tenantId && !!activeId, }); const lifeQ = useQuery({ queryKey: ["loyalty", tenantId, "member-lifecycle", activeId], queryFn: () => loyaltyApi.members.lifecycle(tenantId!, activeId), enabled: !!tenantId && !!activeId, }); const actionM = useMutation({ mutationFn: async () => { const body: Record = {}; if (reason) body.reason = reason; const fn = { enroll: () => loyaltyApi.members.enroll(tenantId!, activeId, body), activate: () => loyaltyApi.members.activate(tenantId!, activeId, body), renew: () => loyaltyApi.members.renew(tenantId!, activeId, body), freeze: () => loyaltyApi.members.freeze(tenantId!, activeId, { reason: reason || "freeze" }), resume: () => loyaltyApi.members.resume(tenantId!, activeId, body), cancel: () => loyaltyApi.members.cancel(tenantId!, activeId, { reason: reason || "cancel" }), expire: () => loyaltyApi.members.expire(tenantId!, activeId, body), }[action!]; return fn(); }, onSuccess: async () => { toast.success("عملیات چرخه عمر انجام شد"); setAction(null); setReason(""); await qc.invalidateQueries({ queryKey: ["loyalty", tenantId, "member"] }); await qc.invalidateQueries({ queryKey: ["loyalty", tenantId, "member-lifecycle"] }); }, onError: (e: Error) => toast.error(e.message), }); if (!tenantId) return ; return (
setMemberId(e.target.value)} />
{!activeId ? : null} {activeId && memberQ.isLoading ? : null} {memberQ.error ? ( memberQ.refetch()} /> ) : null} {memberQ.data ? ( <>

نام

{memberQ.data.display_name}

شماره عضویت

{memberQ.data.membership_number}

وضعیت

ایمیل

{memberQ.data.email || "—"}

موبایل

{memberQ.data.mobile || "—"}

برنامه

{memberQ.data.program_id}

{ACTIONS.map((a) => ( ))}
[]} empty={} /> ) : null} setAction(null)} title="تأیید عملیات">