import $ from 'jquery'; import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoComplete'; import { ActionDialog, confirm } from 'vj/components/dialog'; import Notification from 'vj/components/notification'; import { NamedPage } from 'vj/misc/Page'; import { i18n, pjax, request, tpl, } from 'vj/utils'; const page = new NamedPage('contest_user', () => { const addUserDialogContent = $(tpl`

${i18n('Add User')}

`); addUserDialogContent.appendTo(document.body); const userSelect = UserSelectAutoComplete.getOrConstruct>( addUserDialogContent.find('[name="add_user_users"]'), { multi: true, height: 'auto' }, ); const addUserDialog = new ActionDialog({ $body: addUserDialogContent, onDispatch(action) { if (action === 'ok' && !userSelect.value()) { userSelect.focus(); return false; } return true; }, }); addUserDialog.clear = function () { userSelect.clear(); addUserDialog.$dom.find('[name="unrank"]').prop('checked', false); return this; }; async function handlePostRequest(params, successMessage) { try { const res = await request.post('', params); if (res.url && res.url !== window.location.href) window.location.href = res.url; else { Notification.success(successMessage); pjax.request({ push: false }); } } catch (error) { Notification.error([error.message, ...error.params].join(' ')); } } async function handleClickAddUser() { const action = await addUserDialog.clear().open(); if (action !== 'ok') return; const unrank = addUserDialog.$dom.find('[name="unrank"]').prop('checked'); const uids = userSelect.value(); await handlePostRequest({ operation: 'add_user', uids: uids.join(','), unrank, }, i18n('User added.')); } async function handleEditRank(ev) { const uid = $(ev.target).data('uid'); await handlePostRequest({ operation: 'rank', uid, }, i18n('Ranking status updated.')); } async function handleResume(ev) { const uid = $(ev.target).data('uid'); await handlePostRequest({ operation: 'resume', uid, }, i18n('Contest resumed.')); } async function handleCancelRegistration(ev) { const uid = $(ev.target).data('uid'); const yes = await confirm(i18n('Are you sure to cancel the registration of this user?')); if (!yes) return; await handlePostRequest({ operation: 'remove_user', uid, }, i18n('Registration cancelled.')); } $('[name="add_user"]').on('click', () => handleClickAddUser()); $(document).on('click', '[name="edit_rank"]', handleEditRank); $(document).on('click', '[name="resume_contest"]', handleResume); $(document).on('click', '[name="cancel_registration"]', handleCancelRegistration); }); export default page;