import { useEffect, useMemo, useState } from 'react'; import { SecondaryButton } from '../../../components/button/SecondaryButton'; import { cn } from '../../../lib/cn'; import { useAppDispatch, useAppSelector } from '../../../redux/hooks'; import GroupsBlock from './GroupsBlock'; import { setMenuActivePage } from '../../../redux/slices/store'; import { fetchMyGroups } from '../../../redux/slices/groups'; import ModalCreate from './ModalCreate'; import ModalUpdate from './ModalUpdate'; export interface GroupUpdate { id: number; name: string; description: string; } const Groups = () => { const [modalActive, setModalActive] = useState(false); const [modelUpdateActive, setModalUpdateActive] = useState(false); const [updateGroup, setUpdateGroup] = useState({ id: 0, name: '', description: '', }); const dispatch = useAppDispatch(); // Берём группы из стора const groups = useAppSelector((store) => store.groups.groups); // Берём текущего пользователя const currentUserName = useAppSelector((store) => store.auth.username); useEffect(() => { dispatch(setMenuActivePage('groups')); dispatch(fetchMyGroups()); }, [dispatch]); // Разделяем группы const { managedGroups, currentGroups, hiddenGroups } = useMemo(() => { if (!groups || !currentUserName) { return { managedGroups: [], currentGroups: [], hiddenGroups: [] }; } const managed: typeof groups = []; const current: typeof groups = []; const hidden: typeof groups = []; // пока пустые, без логики groups.forEach((group) => { const me = group.members.find( (m) => m.username === currentUserName, ); if (!me) return; if (me.role === 'Administrator') { managed.push(group); } else { current.push(group); } }); return { managedGroups: managed, currentGroups: current, hiddenGroups: hidden, }; }, [groups, currentUserName]); return (
Группы
{ setModalActive(true); }} text="Создать группу" className="absolute right-0" />
); }; export default Groups;