diff --git a/src/components/drop-down-list/DropDownList.tsx b/src/components/filters/DropDownList.tsx similarity index 100% rename from src/components/drop-down-list/DropDownList.tsx rename to src/components/filters/DropDownList.tsx diff --git a/src/components/drop-down-list/Filter.tsx b/src/components/filters/Filter.tsx similarity index 100% rename from src/components/drop-down-list/Filter.tsx rename to src/components/filters/Filter.tsx diff --git a/src/components/drop-down-list/Sorter.tsx b/src/components/filters/Sorter.tsx similarity index 100% rename from src/components/drop-down-list/Sorter.tsx rename to src/components/filters/Sorter.tsx diff --git a/src/components/input/NumberInput.tsx b/src/components/input/NumberInput.tsx new file mode 100644 index 0000000..947b3e6 --- /dev/null +++ b/src/components/input/NumberInput.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { cn } from '../../lib/cn'; + +interface NumberInputProps { + name?: string; + error?: string; + disabled?: boolean; + required?: boolean; + label?: string; + placeholder?: string; + className?: string; + minValue?: number; + maxValue?: number; + onChange: (state: number) => void; + defaultState?: number; +} + +export const NumberInput: React.FC = ({ + error = '', + // disabled = false, + // required = false, + label = '', + placeholder = '', + className = '', + onChange, + defaultState = 0, + minValue = 0, + maxValue = 365 * 24, + name = '', +}) => { + const [value, setValue] = React.useState(defaultState); + + React.useEffect(() => onChange(value), [value]); + React.useEffect(() => setValue(defaultState), [defaultState]); + + return ( +
+
+ {label} +
+
+ { + setValue(Number(e.target.value)); + }} + /> +
+ +
+ {error} +
+
+ ); +}; diff --git a/src/views/home/articles/Filter.tsx b/src/views/home/articles/Filter.tsx index d56a78b..efc1181 100644 --- a/src/views/home/articles/Filter.tsx +++ b/src/views/home/articles/Filter.tsx @@ -1,8 +1,8 @@ import { FilterDropDown, FilterItem, -} from '../../../components/drop-down-list/Filter'; -import { SorterDropDown } from '../../../components/drop-down-list/Sorter'; +} from '../../../components/filters/Filter'; +import { SorterDropDown } from '../../../components/filters/Sorter'; import { SearchInput } from '../../../components/input/SearchInput'; const Filters = () => { diff --git a/src/views/home/contests/Contests.tsx b/src/views/home/contests/Contests.tsx index 0bf1055..9fe37bf 100644 --- a/src/views/home/contests/Contests.tsx +++ b/src/views/home/contests/Contests.tsx @@ -15,7 +15,7 @@ import Filters from './Filter'; const Contests = () => { const dispatch = useAppDispatch(); - const [modalActive, setModalActive] = useState(false); + const [modalActive, setModalActive] = useState(true); const { contests, status } = useAppSelector( (state) => state.contests.fetchContests, diff --git a/src/views/home/contests/Filter.tsx b/src/views/home/contests/Filter.tsx index d56a78b..efc1181 100644 --- a/src/views/home/contests/Filter.tsx +++ b/src/views/home/contests/Filter.tsx @@ -1,8 +1,8 @@ import { FilterDropDown, FilterItem, -} from '../../../components/drop-down-list/Filter'; -import { SorterDropDown } from '../../../components/drop-down-list/Sorter'; +} from '../../../components/filters/Filter'; +import { SorterDropDown } from '../../../components/filters/Sorter'; import { SearchInput } from '../../../components/input/SearchInput'; const Filters = () => { diff --git a/src/views/home/contests/ModalCreate.tsx b/src/views/home/contests/ModalCreate.tsx index bca1465..8eabd37 100644 --- a/src/views/home/contests/ModalCreate.tsx +++ b/src/views/home/contests/ModalCreate.tsx @@ -11,6 +11,8 @@ import { import { CreateContestBody } from '../../../redux/slices/contests'; import DateRangeInput from '../../../components/input/DateRangeInput'; import { useNavigate } from 'react-router-dom'; +import { NumberInput } from '../../../components/input/NumberInput'; +import { DropDownListItem } from '../../../components/filters/DropDownList'; function toUtc(localDateTime?: string): string { if (!localDateTime) return ''; @@ -37,6 +39,12 @@ const ModalCreateContest: FC = ({ (state) => state.contests.createContest.status, ); + const scheduleTypeItems: DropDownListItem[] = [ + {value: "", text: ""}, + {value: "", text: ""}, + {value: "", text: ""}, + ] + const [form, setForm] = useState({ name: '', description: '', @@ -110,8 +118,11 @@ const ModalCreateContest: FC = ({ onChange={(v) => handleChange('description', v)} /> + +
+ @@ -167,18 +178,16 @@ const ModalCreateContest: FC = ({ {/* Продолжительность и лимиты */}
- handleChange('attemptDurationMinutes', Number(v)) } /> - handleChange('maxAttempts', Number(v))} @@ -186,7 +195,7 @@ const ModalCreateContest: FC = ({
{/* Разрешить раннее завершение */} -
+ {/*
= ({ -
+
*/} {/* Кнопки */}
diff --git a/src/views/home/missions/Filter.tsx b/src/views/home/missions/Filter.tsx index d56a78b..efc1181 100644 --- a/src/views/home/missions/Filter.tsx +++ b/src/views/home/missions/Filter.tsx @@ -1,8 +1,8 @@ import { FilterDropDown, FilterItem, -} from '../../../components/drop-down-list/Filter'; -import { SorterDropDown } from '../../../components/drop-down-list/Sorter'; +} from '../../../components/filters/Filter'; +import { SorterDropDown } from '../../../components/filters/Sorter'; import { SearchInput } from '../../../components/input/SearchInput'; const Filters = () => { diff --git a/src/views/home/rightpanel/group/ModalUpdate.tsx b/src/views/home/rightpanel/group/ModalUpdate.tsx index 1892a77..b21f191 100644 --- a/src/views/home/rightpanel/group/ModalUpdate.tsx +++ b/src/views/home/rightpanel/group/ModalUpdate.tsx @@ -11,7 +11,7 @@ import { setGroupsStatus, } from '../../../../redux/slices/groups'; import ConfirmModal from '../../../../components/modal/ConfirmModal'; -import { DropDownList } from '../../../../components/drop-down-list/DropDownList'; +import { DropDownList } from '../../../../components/filters/DropDownList'; import { ReverseButton } from '../../../../components/button/ReverseButton'; interface ModalUpdateProps { diff --git a/src/views/mission/codeeditor/CodeEditor.tsx b/src/views/mission/codeeditor/CodeEditor.tsx index c3c7f4a..768cbe6 100644 --- a/src/views/mission/codeeditor/CodeEditor.tsx +++ b/src/views/mission/codeeditor/CodeEditor.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'; import Editor from '@monaco-editor/react'; import { upload } from '../../../assets/icons/input'; import { cn } from '../../../lib/cn'; -import { DropDownList } from '../../../components/drop-down-list/DropDownList'; +import { DropDownList } from '../../../components/filters/DropDownList'; const languageMap: Record = { c: 'cpp',