import { useEffect } from 'react'; import { SecondaryButton } from '../../../components/button/SecondaryButton'; import { useAppDispatch, useAppSelector } from '../../../redux/hooks'; import ArticleItem from './ArticleItem'; import { setArticlesNameFilter, setArticlesTagFilter, setMenuActivePage, } from '../../../redux/slices/store'; import { useNavigate } from 'react-router-dom'; import { fetchArticles } from '../../../redux/slices/articles'; import Filters from './Filter'; const Articles = () => { const dispatch = useAppDispatch(); const navigate = useNavigate(); // ✅ Берём данные из нового состояния const articles = useAppSelector( (state) => state.articles.fetchArticles.articles, ); const tagsFilter = useAppSelector( (state) => state.store.articles.articleTagFilter, ); const nameFilter = useAppSelector( (state) => state.store.articles.filterName, ); useEffect(() => { dispatch(setMenuActivePage('articles')); dispatch(fetchArticles({ tags: tagsFilter })); }, []); const filterTagsHandler = (value: string[]) => { dispatch(setArticlesTagFilter(value)); dispatch(fetchArticles({ tags: value })); }; // ======================== // Основной контент // ======================== return (
{/* Заголовок */}
Статьи
navigate('/article/create')} text="Создать статью" className="absolute right-0" />
{/* Фильтры */} { filterTagsHandler(value); }} onChangeName={(value: string) => { dispatch(setArticlesNameFilter(value)); }} /> {/* Список статей */}
{articles.length === 0 ? (
Пока нет статей
) : ( articles .filter((v) => v.name .toLocaleLowerCase() .includes(nameFilter.toLocaleLowerCase()), ) .map((v) => ) )}
); }; export default Articles;