add contests
This commit is contained in:
@@ -1,25 +1,18 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useAppDispatch, useAppSelector } from '../../../../redux/hooks';
|
||||
import { setMenuActiveProfilePage } from '../../../../redux/slices/store';
|
||||
import {
|
||||
fetchMyContests,
|
||||
fetchRegisteredContests,
|
||||
} from '../../../../redux/slices/contests';
|
||||
import ContestsBlock from './ContestsBlock';
|
||||
|
||||
const Contests = () => {
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
// Redux-состояния
|
||||
const myContestsState = useAppSelector(
|
||||
(state) => state.contests.fetchMyContests,
|
||||
const { data: constestData } = useAppSelector(
|
||||
(state) => state.profile.contests,
|
||||
);
|
||||
|
||||
// При загрузке страницы — выставляем вкладку и подгружаем контесты
|
||||
useEffect(() => {
|
||||
dispatch(setMenuActiveProfilePage('contests'));
|
||||
dispatch(fetchMyContests());
|
||||
dispatch(fetchRegisteredContests({}));
|
||||
}, []);
|
||||
|
||||
return (
|
||||
@@ -29,30 +22,38 @@ const Contests = () => {
|
||||
<ContestsBlock
|
||||
className="mb-[20px]"
|
||||
title="Предстоящие контесты"
|
||||
type="reg"
|
||||
// contests={regContestsState.contests}
|
||||
contests={[]}
|
||||
type="upcoming"
|
||||
contests={constestData?.upcoming.items
|
||||
.filter((v) => v.role != 'Organizer')
|
||||
.filter((v) => v.scheduleType != 'AlwaysOpen')}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ContestsBlock
|
||||
className="mb-[20px]"
|
||||
title="Прошедшие контесты"
|
||||
type="past"
|
||||
contests={[
|
||||
...(constestData?.past.items.filter(
|
||||
(v) => v.role != 'Organizer',
|
||||
) ?? []),
|
||||
...(constestData?.upcoming.items
|
||||
.filter((v) => v.role != 'Organizer')
|
||||
.filter((v) => v.scheduleType == 'AlwaysOpen') ??
|
||||
[]),
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Контесты, которые я создал */}
|
||||
<div>
|
||||
{myContestsState.status === 'loading' ? (
|
||||
<div className="text-liquid-white p-4 text-[24px]">
|
||||
Загрузка ваших контестов...
|
||||
</div>
|
||||
) : myContestsState.error ? (
|
||||
<div className="text-red-500 p-4 text-[24px]">
|
||||
Ошибка: {myContestsState.error}
|
||||
</div>
|
||||
) : (
|
||||
<ContestsBlock
|
||||
className="mb-[20px]"
|
||||
title="Мои контесты"
|
||||
type="my"
|
||||
contests={myContestsState.contests}
|
||||
/>
|
||||
)}
|
||||
<ContestsBlock
|
||||
className="mb-[20px]"
|
||||
title="Созданные контесты"
|
||||
type="edit"
|
||||
contests={constestData?.mine.items}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user