import { useState } from 'react' import { createFileRoute } from '@tanstack/react-router' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import { toast } from '@/shared/ui/toast-store' import { Button } from '@/shared/ui/button' import { listAdminNews, deletePost } from '@/features/admin/news/api' import { NewsFormDialog } from '@/features/admin/news/NewsFormDialog' import type { NewsPostDto } from '@/shared/api/types' export const Route = createFileRoute('/admin/news')({ component: AdminNewsPage }) const PAGE_SIZE = 20 function AdminNewsPage() { const { t } = useTranslation() const queryClient = useQueryClient() const [page, setPage] = useState(1) const [editing, setEditing] = useState(null) const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['admin-news', page], queryFn: () => listAdminNews(page, PAGE_SIZE), }) const deleteMutation = useMutation({ mutationFn: deletePost, onSuccess: async () => { toast.success(t('admin.news.deleted')) await queryClient.invalidateQueries({ queryKey: ['admin-news'] }) }, onError: () => toast.error(t('auth.genericError')), }) return (
{isLoading &&

} {isError && (

{t('auth.genericError')}

)} {data?.items.length === 0 &&

{t('admin.news.empty')}

} {data && data.items.length > 0 && ( <>
{data.items.map((post) => (
{post.title} {new Date(post.createdAt).toLocaleString()}
))}
{t('admin.users.total', { count: data.total })}
)} {editing && !open && setEditing(null)} />}
) }