import { useState } from "react"; import { Eye, EyeOff, Trash2 } from "lucide-react"; import { useAdminComments, useAdminChatMessages, useAdminCommentModerate, useAdminCommentDelete, type AdminCommentRow, type AdminChatMessageRow, } from "~/requestHandler/use-admin-hooks"; import { AdminTable, AdminPagination, AdminToolbar, AdminSearch, AdminSelect, AdminPageTitle, StatusBadge, faDate, useDebouncedValue, type Column, } from "~/components/admin/DataTable"; import { cn } from "~/lib/utils"; const PAGE_SIZE = 25; export default function AdminModeration() { const [tab, setTab] = useState<"comments" | "chat">("comments"); return (
مدیریت محتوا
{(["comments", "chat"] as const).map((t) => ( ))}
{tab === "comments" ? : }
); } function CommentsTab() { const [page, setPage] = useState(1); const [search, setSearch] = useState(""); const [hidden, setHidden] = useState(""); const [kind, setKind] = useState(""); const debouncedSearch = useDebouncedValue(search); const { data, isLoading } = useAdminComments({ page, page_size: PAGE_SIZE, search: debouncedSearch, is_hidden: hidden, kind, }); const moderate = useAdminCommentModerate(); const del = useAdminCommentDelete(); const reset = (fn: () => void) => { fn(); setPage(1); }; const onDelete = (r: AdminCommentRow) => { if (confirm("حذف این نظر؟ این عمل بازگشت‌پذیر نیست.")) del.mutate(r.id); }; const columns: Column[] = [ { header: "نظر", render: (r) => (

{r.comment}

{r.productTitle || "—"} {r.isReply && · پاسخ} {!r.isReply && r.repliesCount > 0 && · {r.repliesCount} پاسخ}

), }, { header: "کاربر", render: (r) => ( {r.userPhone || "—"} ), }, { header: "وضعیت", render: (r) => r.isHidden ? ( ) : ( ), }, { header: "تاریخ", render: (r) => {faDate(r.createdAt)} }, { header: "", render: (r) => (
), }, ]; return (
reset(() => setSearch(v))} placeholder="جستجوی متن نظر / کاربر…" /> reset(() => setHidden(v))} options={[ { value: "", label: "همه" }, { value: "false", label: "نمایش‌داده‌شده" }, { value: "true", label: "پنهان‌شده" }, ]} /> reset(() => setKind(v))} options={[ { value: "", label: "همه" }, { value: "top", label: "نظر اصلی" }, { value: "reply", label: "پاسخ" }, ]} /> r.id} emptyText="نظری ثبت نشده است" />
); } function ChatTab() { const [page, setPage] = useState(1); const [search, setSearch] = useState(""); const [deleted, setDeleted] = useState(""); const debouncedSearch = useDebouncedValue(search); const { data, isLoading } = useAdminChatMessages({ page, page_size: PAGE_SIZE, search: debouncedSearch, is_deleted: deleted, }); const reset = (fn: () => void) => { fn(); setPage(1); }; const columns: Column[] = [ { header: "پیام", render: (r) => (

{r.content || (r.imageUrl ? "🖼 تصویر" : "—")}

), }, { header: "فرستنده", render: (r) => ( {r.senderPhone || "—"} ), }, { header: "وضعیت", render: (r) => r.isDeleted ? : , }, { header: "تاریخ", render: (r) => {faDate(r.createdAt)} }, ]; return (
reset(() => setSearch(v))} placeholder="جستجوی متن پیام / فرستنده…" /> reset(() => setDeleted(v))} options={[ { value: "", label: "همه" }, { value: "false", label: "فعال" }, { value: "true", label: "حذف‌شده" }, ]} />

مشاهده‌ی فقط‌خواندنی گفتگوها.

r.id} emptyText="پیامی یافت نشد" />
); }