import { useState, useMemo, useEffect } from 'react'; import { categories } from '@/data/mockNews'; import { useRealArticles } from '@/hooks/useRealArticles'; import { useAuth } from '@/hooks/useAuth'; import { useIsMobile } from '@/hooks/use-mobile'; import { NewsItem } from '@/types/news'; import Header from '@/components/Header'; import CategoryFilter from '@/components/CategoryFilter'; import NewsCard from '@/components/NewsCard'; import AddFeedModal from '@/components/AddFeedModal'; import ArticleModal from '@/components/ArticleModal'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer'; import { RefreshCw, Filter, User, Rss, Plus } from 'lucide-react'; import { toast } from 'sonner'; import { Link } from 'react-router-dom'; const Index = () => { const { user } = useAuth(); const [dateFilter, setDateFilter] = useState<'today' | 'yesterday' | null>(null); const [showFollowedOnly, setShowFollowedOnly] = useState(false); const [showReadArticles, setShowReadArticles] = useState(false); // Reset date filter when switching to "All articles" mode const handleShowFollowedOnlyChange = (value: boolean) => { setShowFollowedOnly(value); if (!value) { // When switching to "All articles", reset date filter setDateFilter(null); } }; const { articles, loading, togglePin, markAsRead, deleteArticle, refetch } = useRealArticles(dateFilter, showFollowedOnly, showReadArticles); const isMobile = useIsMobile(); const [selectedCategory, setSelectedCategory] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [showFilters, setShowFilters] = useState(true); const [isAddFeedModalOpen, setIsAddFeedModalOpen] = useState(false); const [selectedArticle, setSelectedArticle] = useState(null); const [isArticleModalOpen, setIsArticleModalOpen] = useState(false); console.log('🏠 Index page - Articles count:', articles.length, 'Loading:', loading, 'User:', !!user); const filteredNews = useMemo(() => { let filtered = articles; if (selectedCategory) { const category = categories.find(c => c.id === selectedCategory); if (category) { filtered = filtered.filter(item => item.category === category.type); } } if (searchQuery) { filtered = filtered.filter(item => item.title.toLowerCase().includes(searchQuery.toLowerCase()) || item.description.toLowerCase().includes(searchQuery.toLowerCase()) || item.source.toLowerCase().includes(searchQuery.toLowerCase())); } return filtered.sort((a, b) => { if (a.isPinned && !b.isPinned) return -1; if (!a.isPinned && b.isPinned) return 1; return new Date(b.publishedAt).getTime() - new Date(a.publishedAt).getTime(); }); }, [articles, selectedCategory, searchQuery]); // Separate pinned and regular articles const pinnedArticles = useMemo(() => { return filteredNews.filter(article => article.isPinned); }, [filteredNews]); const regularArticles = useMemo(() => { return filteredNews.filter(article => !article.isPinned); }, [filteredNews]); const pinnedCount = articles.filter(item => item.isPinned).length; const unreadCount = articles.filter(item => !item.isRead).length; // Update document title with unread count useEffect(() => { const baseTitle = 'Feeds.Duhaz.fr'; if (unreadCount > 0) { document.title = `(${unreadCount}) ${baseTitle}`; } else { document.title = baseTitle; } }, [unreadCount]); const handleRefresh = () => { refetch(); toast.success("Flux actualisés"); }; const handleAddFeed = (feedData: any) => { console.log('Nouveau flux ajouté:', feedData); toast.success(`Flux "${feedData.name}" ajouté avec succès!`); }; const handleOpenArticle = (article: NewsItem) => { setSelectedArticle(article); setIsArticleModalOpen(true); }; const handleCloseArticleModal = () => { setIsArticleModalOpen(false); setSelectedArticle(null); }; if (loading) { return

Chargement des articles...

; } return
setIsAddFeedModalOpen(true)} />
{/* Message pour les utilisateurs non connectés */} {!user && (

Vous consultez les articles en mode visiteur. Connectez-vous pour gérer vos flux et marquer vos articles préférés.

)} {/* Message pour les utilisateurs connectés sans articles suivis */} {user && articles.length === 0 && (

Vous ne suivez aucun flux RSS pour le moment. Ajoutez des flux pour commencer Ă  voir des articles.

)}
{/* Sidebar - Desktop only */} {!isMobile && (

Statistiques

Articles non lus {unreadCount}
Articles totaux {articles.length}
{user &&
Épinglés {pinnedCount}
}
)} {/* Main content */}

{showReadArticles ? 'Tous les articles' : (user ? 'Articles non lus' : 'Derniers articles')}

{/* Mobile Filter Drawer */} {isMobile && (

Statistiques

Articles non lus {unreadCount}
Articles totaux {articles.length}
{user &&
Épinglés {pinnedCount}
}
)} {/* Desktop Filter Toggle - keep existing logic */} {!isMobile && ( )}
{regularArticles.length === 0 && articles.length > 0 ?

Aucun article trouvé avec ces filtres

Essayez de modifier vos filtres ou votre recherche

{pinnedArticles.length > 0 && (

({pinnedArticles.length} article{pinnedArticles.length > 1 ? 's' : ''} épinglé{pinnedArticles.length > 1 ? 's' : ''} dans la sidebar)

)}
: regularArticles.length === 0 ?

Aucun article non lu disponible

{user ? 'Bravo ! Tous vos articles sont lus ou suivez des flux RSS pour voir des articles ici' : 'Aucun article public disponible pour le moment'}

{pinnedArticles.length > 0 && (

({pinnedArticles.length} article{pinnedArticles.length > 1 ? 's' : ''} épinglé{pinnedArticles.length > 1 ? 's' : ''} dans la sidebar)

)} {user &&
}
:
{regularArticles.map(item => )}
}
{/* Modals */} {user && setIsAddFeedModalOpen(false)} onAddFeed={handleAddFeed} categories={categories} />}
; }; export default Index;