import { FC, useEffect, useState } from 'react'; import { useAppDispatch, useAppSelector } from '../../../../redux/hooks'; import { setMenuActiveProfilePage } from '../../../../redux/slices/store'; import { cn } from '../../../../lib/cn'; import { ChevroneDown, Edit } from '../../../../assets/icons/groups'; import { fetchMyArticles } from '../../../../redux/slices/articles'; import { useNavigate } from 'react-router-dom'; export interface ArticleItemProps { id: number; name: string; tags: string[]; } const ArticleItem: FC = ({ id, name, tags }) => { const navigate = useNavigate(); return (
navigate(`/article/${id}?back=/home/account/articles`) } >
#{id}
{name}
{tags.map((v, i) => (
{v}
))}
Редактировать { e.stopPropagation(); navigate( `/article/create?back=/home/account/articles&articleId=${id}`, ); }} />
); }; interface ArticlesBlockProps { className?: string; } const ArticlesBlock: FC = ({ className = '' }) => { const dispatch = useAppDispatch(); const [active, setActive] = useState(true); // ✅ Берём только "мои статьи" const articles = useAppSelector( (state) => state.articles.fetchMyArticles.articles, ); const status = useAppSelector( (state) => state.articles.fetchMyArticles.status, ); const error = useAppSelector( (state) => state.articles.fetchMyArticles.error, ); useEffect(() => { dispatch(setMenuActiveProfilePage('articles')); dispatch(fetchMyArticles()); }, [dispatch]); return (
{/* Заголовок */}
setActive(!active)} > Мои статьи toggle
{/* Контент */}
{status === 'loading' && (
Загрузка статей...
)} {status === 'failed' && (
Ошибка:{' '} {error || 'Не удалось загрузить статьи'}
)} {status === 'successful' && articles.length === 0 && (
У вас пока нет статей
)} {articles.map((v) => ( ))}
); }; export default ArticlesBlock;