import { useEffect, useState } from 'react'; import { SecondaryButton } from '../../../components/button/SecondaryButton'; import { cn } from '../../../lib/cn'; import { useAppDispatch, useAppSelector } from '../../../redux/hooks'; import ContestsBlock from './ContestsBlock'; import { setContestsNameFilter, setMenuActivePage, } from '../../../redux/slices/store'; import { fetchContests, fetchMyContests, fetchParticipatingContests, } from '../../../redux/slices/contests'; import ModalCreateContest from './ModalCreate'; import Filters from './Filter'; const Contests = () => { const dispatch = useAppDispatch(); const [modalActive, setModalActive] = useState(false); const { contests, status } = useAppSelector( (state) => state.contests.fetchContests, ); const nameFilter = useAppSelector( (state) => state.store.contests.filterName, ); // При загрузке страницы — выставляем активную вкладку и подгружаем контесты useEffect(() => { dispatch(setMenuActivePage('contests')); dispatch(fetchContests({})); dispatch(fetchParticipatingContests({ pageSize: 100 })); dispatch(fetchMyContests()); }, []); return (
Контесты
{ setModalActive(true); }} text="Создать контест" className="absolute right-0" />
{ dispatch(setContestsNameFilter(v)); }} /> {status == 'loading' && (
Загрузка контестов...
)} {status == 'successful' && ( <> v.name .toLocaleLowerCase() .includes( nameFilter.toLocaleLowerCase(), ), ) .filter((c) => c.scheduleType != 'AlwaysOpen')} type="upcoming" /> v.name .toLocaleLowerCase() .includes( nameFilter.toLocaleLowerCase(), ), ) .filter((c) => c.scheduleType == 'AlwaysOpen')} type="past" /> )}
); }; export default Contests;