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 { useNavigate } from 'react-router-dom'; export interface ArticleItemProps { id: number; name: string; createdAt: string; } export const formatDate = (isoDate?: string): string => { if (!isoDate) return ''; const date = new Date(isoDate); const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); return `${day}.${month}.${year}`; }; const ArticleItem: FC = ({ id, name, createdAt }) => { const navigate = useNavigate(); return (
navigate(`/article/${id}?back=/home/account/articles`) } >
#{id}
{name}
{`Опубликована ${formatDate(createdAt)}`}
Редактировать { 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 { data: articleData } = useAppSelector( (state) => state.profile.articles, ); useEffect(() => { dispatch(setMenuActiveProfilePage('articles')); }, [dispatch]); return (
{/* Заголовок */}
setActive(!active)} > Мои статьи toggle
{/* Контент */}
{status === 'loading' && (
Загрузка статей...
)} {status === 'failed' && (
Ошибка:
)} {status === 'successful' && articleData?.articles.items.length === 0 && (
У вас пока нет статей
)} {articleData?.articles.items.map((v, i) => ( ))}
); }; export default ArticlesBlock;