diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 7a7aa28b1..04c666977 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.29.26", + "version": "2.29.27", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/manage.ts b/packages/hydrooj/src/handler/manage.ts index f553d7663..eb0492b4c 100644 --- a/packages/hydrooj/src/handler/manage.ts +++ b/packages/hydrooj/src/handler/manage.ts @@ -191,35 +191,36 @@ class SystemUserImportHandler extends SystemHandler { @param('users', Types.Content) @param('draft', Types.Boolean) - async post(domainId: string, _users: string, draft: boolean) { + async post(domainId: string, _users: string, draft = true) { const users = _users.split('\n'); const udocs = []; - const tasks = []; const messages = []; for (const i in users) { const u = users[i]; + if (!u.trim()) continue; const [email, username, password, displayName] = u.split(',').map((t) => t.trim()); if (email && username && password) { - if (!isEmail(email)) messages.push(`Line ${i + 1}: Invalid email.`); - else if (!isUname(username)) messages.push(`Line ${i + 1}: Invalid username`); - else if (!isPassword(password)) messages.push(`Line ${i + 1}: Invalid password`); + if (!isEmail(email)) messages.push(`Line ${+i + 1}: Invalid email.`); + else if (!isUname(username)) messages.push(`Line ${+i + 1}: Invalid username`); + else if (!isPassword(password)) messages.push(`Line ${+i + 1}: Invalid password`); else { udocs.push({ email, username, password, displayName, }); - if (!draft) { - tasks.push( - (async () => { - const uid = await user.create(email, username, password); - if (displayName) await domain.setUserInDomain(domainId, uid, { displayName }); - })(), - ); - } } - } else messages.push(`Line ${i + 1}: Input invalid.`); + } else messages.push(`Line ${+i + 1}: Input invalid.`); } messages.push(`${udocs.length} users found.`); - await Promise.all(tasks); + if (!draft) { + for (const { + email, username, password, displayName, + } of udocs) { + // eslint-disable-next-line no-await-in-loop + const uid = await user.create(email, username, password); + // eslint-disable-next-line no-await-in-loop + if (displayName) await domain.setUserInDomain(domainId, uid, { displayName }); + } + } this.response.body.path.push(['manage_user_import']); this.response.body.users = udocs; this.response.body.messages = messages; diff --git a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx index 3977e7c83..eb7698d54 100644 --- a/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx +++ b/packages/ui-default/components/scratchpad/ScratchpadToolbarContainer.jsx @@ -65,7 +65,7 @@ const mapDispatchToProps = (dispatch) => ({ }); }, handleClickRefresh() { - this.loadSubmissions(); + if (this.props.recordsVisible) this.loadSubmissions(); }, }); @@ -75,7 +75,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(class ScratchpadTool }; componentDidMount() { - this.props.loadSubmissions(); + if (this.props.recordsVisible) this.props.loadSubmissions(); } render() { diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 54d1c49bf..2d9a14ecd 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.12.23", + "version": "4.12.24", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/pages/manage_user_import.page.js b/packages/ui-default/pages/manage_user_import.page.js index 7b1ce027a..b73492481 100644 --- a/packages/ui-default/pages/manage_user_import.page.js +++ b/packages/ui-default/pages/manage_user_import.page.js @@ -23,8 +23,8 @@ const page = new NamedPage('manage_user_import', () => { } } - $('[name="preview"]').click(() => post(true)); - $('[name="submit"]').click(() => post(false)); + $('[name="preview"]').on('click', () => post(true)); + $('[name="submit"]').on('click', () => post(false)); }); export default page;