diff --git a/src/pages/ContestEditor.tsx b/src/pages/ContestEditor.tsx index 6dba45a..e18a91b 100644 --- a/src/pages/ContestEditor.tsx +++ b/src/pages/ContestEditor.tsx @@ -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 = () => { diff --git a/src/views/home/account/contests/EditContestItem.tsx b/src/views/home/account/contests/EditContestItem.tsx index 1f337e4..eab249f 100644 --- a/src/views/home/account/contests/EditContestItem.tsx +++ b/src/views/home/account/contests/EditContestItem.tsx @@ -79,7 +79,7 @@ const EditContestItem: React.FC = ({ : 'grid-cols-[1fr,150px,190px,110px,130px]', )} onClick={() => { - if (!started) { + if (!started && username != myname) { toastWarning('Контест еще не начался'); return; } diff --git a/src/views/home/rightpanel/group/ModalUpdate.tsx b/src/views/home/rightpanel/group/ModalUpdate.tsx index b21f191..4830d23 100644 --- a/src/views/home/rightpanel/group/ModalUpdate.tsx +++ b/src/views/home/rightpanel/group/ModalUpdate.tsx @@ -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 = ({ } }, [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 ( = ({ "{groupName}" #{groupId}
Пользователь: {user?.username}
-
Текущая роль: {user?.role}
+
+ Текущая роль:{' '} + {casrtRoleMap[user?.role as keyof typeof casrtRoleMap]} +
{ - return { text: v, value: v }; - })} + items={roles} onChange={(v) => { setUserRole(v); }}