import { useState } from 'react'; import { useNavigate } from 'react-router'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { api } from '../lib/api'; import type { ApiResponse, PaginatedResponse } from '../lib/api'; import type { Blog } from '../types'; import { formatDate } from '../lib/utils'; import PageHeader from '../components/ui/PageHeader'; import DataTable, { Column } from '../components/ui/DataTable'; import Pagination from '../components/ui/Pagination'; import ConfirmDialog from '../components/ui/ConfirmDialog'; const limit = 15; const STATUS_LABEL: Record = { draft: 'پیش‌نویس', published: 'منتشر شده', archived: 'آرشیو' }; export default function RepresentationBlogsPage() { const navigate = useNavigate(); const qc = useQueryClient(); const [page, setPage] = useState(1); const [deleteTarget, setDeleteTarget] = useState(null); const { data, isLoading } = useQuery({ queryKey: ['rep-blogs', page], queryFn: () => { const params = new URLSearchParams({ page: String(page), limit: String(limit) }); return api.get>(`/api/v1/representation/blogs?${params}`); }, }); const items = data?.data ?? []; const total = data?.meta?.totalRecords ?? 0; const deleteMutation = useMutation({ mutationFn: (b: Blog) => api.delete>(`/api/v1/representation/blog/${b.uuid}`), onSuccess: () => { toast.success('مقاله حذف شد'); setDeleteTarget(null); qc.invalidateQueries({ queryKey: ['rep-blogs'] }); }, onError: (err: Error) => toast.error(err.message), }); const columns: Column[] = [ { key: 'title', header: 'عنوان', render: (b) => {b.title} }, { key: 'status', header: 'وضعیت', render: (b) => {STATUS_LABEL[b.status] ?? b.status} }, { key: 'city', header: 'شهر', render: (b) => b.city?.name ?? '—' }, { key: 'scheduled_at', header: 'زمان‌بندی', render: (b) => (b.scheduled_at ? formatDate(b.scheduled_at) : '—') }, { key: 'created_at', header: 'تاریخ', render: (b) => formatDate(b.created_at) }, ]; return (
navigate('/admin/representation-blogs/new')}>مقالهٔ جدید} />
columns={columns} data={items} loading={isLoading} emptyMessage="هنوز مقاله‌ای ننوشته‌اید" actions={(b) => (
)} />
deleteTarget && deleteMutation.mutate(deleteTarget)} onCancel={() => setDeleteTarget(null)} />
); }