import { FC, useEffect, useState } from 'react'; import { Modal } from '../../../components/modal/Modal'; import { PrimaryButton } from '../../../components/button/PrimaryButton'; import { SecondaryButton } from '../../../components/button/SecondaryButton'; import { Input } from '../../../components/input/Input'; import { useAppDispatch, useAppSelector } from '../../../redux/hooks'; import { createContest, setContestStatus, } from '../../../redux/slices/contests'; import { CreateContestBody } from '../../../redux/slices/contests'; import DateRangeInput from '../../../components/input/DateRangeInput'; import { useNavigate } from 'react-router-dom'; interface ModalCreateContestProps { active: boolean; setActive: (value: boolean) => void; } const ModalCreateContest: FC = ({ active, setActive, }) => { const dispatch = useAppDispatch(); const navigate = useNavigate(); const status = useAppSelector( (state) => state.contests.createContest.status, ); const [form, setForm] = useState({ name: '', description: '', scheduleType: 'AlwaysOpen', visibility: 'Public', startsAt: '', endsAt: '', attemptDurationMinutes: 0, maxAttempts: 0, allowEarlyFinish: false, missionIds: [], articleIds: [], }); const contest = useAppSelector( (state) => state.contests.createContest.contest, ); useEffect(() => { if (status === 'successful') { dispatch( setContestStatus({ key: 'createContest', status: 'idle' }), ); navigate( `/contest/create?back=/home/account/contests&contestId=${contest.id}`, ); } }, [status]); const handleChange = (key: keyof CreateContestBody, value: any) => { setForm((prev) => ({ ...prev, [key]: value })); }; const handleSubmit = () => { dispatch(createContest(form)); }; return (
Создать контест
handleChange('name', v)} /> handleChange('description', v)} />
{/* Даты начала и конца */}
{/* Продолжительность и лимиты */}
handleChange('attemptDurationMinutes', Number(v)) } /> handleChange('maxAttempts', Number(v))} />
{/* Разрешить раннее завершение */}
handleChange('allowEarlyFinish', e.target.checked) } />
{/* Кнопки */}
{ handleSubmit(); }} text="Создать" disabled={status === 'loading'} /> setActive(false)} text="Отмена" />
); }; export default ModalCreateContest;