import React, { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { CheckCircle, XCircle, ExternalLink, Calendar, Tag, FileText } from 'lucide-react'; import { apiClient, type Article } from '../lib/api'; const Articles: React.FC = () => { const [page, setPage] = useState(1); const queryClient = useQueryClient(); const { data, isLoading, error } = useQuery({ queryKey: ['articles', page], queryFn: () => apiClient.getArticles(page), }); const approveMutation = useMutation({ mutationFn: (articleId: number) => apiClient.approveArticle(articleId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['articles'] }); }, }); const rejectMutation = useMutation({ mutationFn: (articleId: number) => apiClient.rejectArticle(articleId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['articles'] }); }, }); const handleApprove = (articleId: number) => { approveMutation.mutate(articleId); }; const handleReject = (articleId: number) => { rejectMutation.mutate(articleId); }; const getStatusBadge = (status: string) => { switch (status) { case 'approved': return ( Approved ); case 'rejected': return ( Rejected ); default: return ( Pending ); } }; if (isLoading) { return (
{[...Array(5)].map((_, i) => (
))}
); } if (error) { return (

Failed to load articles

); } const articles = data?.articles || []; const pagination = data?.pagination; const settings = data?.settings; return (

Articles

Manage and review articles from your feeds

{settings?.publishing_approvals_enabled && (
Approval system enabled
)}
{articles.map((article: Article) => (

{article.title || 'Untitled Article'}

{article.description || 'No description available'}

Feed: {article.feed?.name || 'Unknown'} {new Date(article.created_at).toLocaleDateString()} {article.is_valid !== null && ( <> {article.is_valid ? 'Valid' : 'Invalid'} )} {article.is_duplicate && ( <> Duplicate )}
{getStatusBadge(article.approval_status)}
{article.approval_status === 'pending' && settings?.publishing_approvals_enabled && (
)}
))} {articles.length === 0 && (

No articles

No articles have been fetched yet.

)} {/* Pagination */} {pagination && pagination.last_page > 1 && (

Showing{' '} {pagination.from} to{' '} {pagination.to} of{' '} {pagination.total} results

)}
); }; export default Articles;