contest update form fix

This commit is contained in:
Виталий Лавшонок
2025-12-09 17:09:11 +03:00
parent 6675bd871e
commit 14d2f5cbf1
3 changed files with 47 additions and 12 deletions

View File

@@ -27,6 +27,16 @@ interface Mission {
name: string;
}
function toUtc(localDateTime?: string): string {
if (!localDateTime) return '';
// Создаём дату (она автоматически считается как локальная)
const date = new Date(localDateTime);
// Возвращаем ISO-строку с 'Z' (всегда в UTC)
return date.toISOString();
}
/**
* Страница создания / редактирования контеста
*/
@@ -117,7 +127,14 @@ const ContestEditor = () => {
};
const handleUpdateContest = () => {
dispatch(updateContest({ ...contest, contestId }));
dispatch(
updateContest({
...contest,
endsAt: toUtc(contest.endsAt),
startsAt: toUtc(contest.startsAt),
contestId,
}),
);
};
const handleDeleteContest = () => {

View File

@@ -79,7 +79,7 @@ const EditContestItem: React.FC<EditContestItemProps> = ({
: 'grid-cols-[1fr,150px,190px,110px,130px]',
)}
onClick={() => {
if (!started) {
if (!started && username != myname) {
toastWarning('Контест еще не начался');
return;
}

View File

@@ -11,7 +11,10 @@ import {
setGroupsStatus,
} from '../../../../redux/slices/groups';
import ConfirmModal from '../../../../components/modal/ConfirmModal';
import { DropDownList } from '../../../../components/filters/DropDownList';
import {
DropDownList,
DropDownListItem,
} from '../../../../components/filters/DropDownList';
import { ReverseButton } from '../../../../components/button/ReverseButton';
interface ModalUpdateProps {
@@ -79,11 +82,20 @@ const ModalUpdate: FC<ModalUpdateProps> = ({
}
}, [user]);
const roles = [
'Member',
'Administrator',
...(adminUser?.role.includes('Creator') ? ['Creator'] : []),
const roles: DropDownListItem[] = [
{ value: 'Member', text: 'Участник' },
{ value: 'Administrator', text: 'Администратор' },
];
if (adminUser?.role.includes('Creator')) {
roles.push({ value: 'Creator', text: 'Владелец' });
}
const casrtRoleMap: Record<'Member' | 'Administrator' | 'Creator', string> =
{
Member: 'Участник',
Administrator: 'Администратор',
Creator: 'Владелец',
};
return (
<Modal
@@ -100,15 +112,21 @@ const ModalUpdate: FC<ModalUpdateProps> = ({
"{groupName}" #{groupId}
</div>
<div className="my-[5px]">Пользователь: {user?.username}</div>
<div>Текущая роль: {user?.role}</div>
<div>
Текущая роль:{' '}
{casrtRoleMap[user?.role as keyof typeof casrtRoleMap]}
</div>
<div className="flex flex-row w-full items-center justify-between mt-[20px] gap-[20px]">
<div>
<DropDownList
defaultState={{ value: userRole, text: userRole }}
defaultState={{
value: userRole,
text: casrtRoleMap[
userRole as keyof typeof casrtRoleMap
],
}}
weight="w-[230px]"
items={roles.map((v) => {
return { text: v, value: v };
})}
items={roles}
onChange={(v) => {
setUserRole(v);
}}