import React, { useState, useMemo } from 'react'; import { CurrentView, ResearchPaper } from '../types'; import { SECTION_IDS, RESEARCH_ALL_CONTENT } from '../constants'; import Button from './Button'; import { ArrowUturnLeftIcon } from './icons'; import ResearchCard from './ResearchCard'; import FilterSortBar, { ViewMode, SortOptionKey, SortOption } from './FilterSortBar'; interface ResearchAllSectionProps { researchPapers: ResearchPaper[]; setCurrentView: (view: CurrentView) => void; setSelectedItemId: (id: string | null) => void; } const sortOptions: SortOption[] = [ { key: 'newest', label: 'Сначала новые' }, { key: 'oldest', label: 'Сначала старые' }, { key: 'alphabetical', label: 'По алфавиту (А-Я)' }, ]; const ResearchAllSection: React.FC = ({ researchPapers, setCurrentView, setSelectedItemId }) => { const [viewMode, setViewMode] = useState('grid'); const [selectedCategories, setSelectedCategories] = useState([]); const [selectedSort, setSelectedSort] = useState('newest'); const handleBackClick = () => { setCurrentView('main'); setSelectedItemId(null); setTimeout(() => { document.getElementById(SECTION_IDS.latestResearch)?.scrollIntoView({ behavior: 'smooth' }); }, 0); }; const availableCategories = useMemo(() => { if (!researchPapers) return []; return Array.from(new Set(researchPapers.map(p => p.category))).sort(); }, [researchPapers]); const handleCategoryChange = (category: string) => { setSelectedCategories(prev => prev.includes(category) ? prev.filter(c => c !== category) : [...prev, category] ); }; const filteredAndSortedPapers = useMemo(() => { if (!researchPapers) return []; const filtered = selectedCategories.length > 0 ? researchPapers.filter(p => selectedCategories.includes(p.category)) : researchPapers; return [...filtered].sort((a, b) => { switch (selectedSort) { case 'newest': return new Date(b.publishedAt || 0).getTime() - new Date(a.publishedAt || 0).getTime(); case 'oldest': return new Date(a.publishedAt || 0).getTime() - new Date(b.publishedAt || 0).getTime(); case 'alphabetical': return a.title.localeCompare(b.title); default: return 0; } }); }, [researchPapers, selectedCategories, selectedSort]); if (!researchPapers) { return (

Загрузка исследований...

); } const layoutClasses = viewMode === 'grid' ? "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 md:gap-8" : "flex flex-col gap-4"; return (

{RESEARCH_ALL_CONTENT.title}

{RESEARCH_ALL_CONTENT.subtitle}

setSelectedCategories([])} sortOptions={sortOptions} selectedSort={selectedSort} onSortChange={setSelectedSort} /> {filteredAndSortedPapers.length > 0 ? (
{filteredAndSortedPapers.map(paper => ( ))}
) : (

{RESEARCH_ALL_CONTENT.emptyStateTitle}

{RESEARCH_ALL_CONTENT.emptyStateMessage}

)}
); }; export default ResearchAllSection;