import { FC, useEffect, useState } from 'react'; import { useAppSelector, useAppDispatch } from '../../../../redux/hooks'; import { fetchGroupPosts } from '../../../../redux/slices/groupfeed'; import { setMenuActiveGroupPage } from '../../../../redux/slices/store'; import { fetchGroupById } from '../../../../redux/slices/groups'; import { SecondaryButton } from '../../../../components/button/SecondaryButton'; import ModalCreate from './ModalCreate'; import { PostItem } from './PostItem'; import ModalUpdate from './ModalUpdate'; interface PostsProps { groupId: number; } export const Posts: FC = ({ groupId }) => { const dispatch = useAppDispatch(); const [modalCreateActive, setModalCreateActive] = useState(false); const [modalUpdateActive, setModalUpdateActive] = useState(false); const [updatePostId, setUpdatePostId] = useState(0); const [isAdmin, setIsAdmin] = useState(false); const { pages, status } = useAppSelector( (state) => state.groupfeed.fetchPosts, ); const { id: userId } = useAppSelector((state) => state.auth); const { group } = useAppSelector((state) => state.groups.fetchGroupById); // Загружаем только первую страницу useEffect(() => { dispatch(fetchGroupPosts({ groupId, page: 0, pageSize: 20 })); dispatch(fetchGroupById(groupId)); }, [groupId]); useEffect(() => { dispatch(setMenuActiveGroupPage('home')); }, []); useEffect(() => { if (!group) return; const isUserAdmin = group.members?.some( (m) => Number(m.userId) === Number(userId) && m.role.includes('Administrator'), ) || false; setIsAdmin(isUserAdmin); }, [group, userId]); const page0 = pages[0]; return (
{isAdmin && (
{ setModalCreateActive(true); }} text="Создать пост" />
)}
<> {status === 'loading' &&
Загрузка...
} {status === 'failed' &&
Ошибка загрузки постов
} {status == 'successful' && page0?.items && page0.items.length > 0 ? (
{page0.items.map((post, i) => ( ))}
) : status === 'successful' ? (
Постов пока нет
) : null}
); };