From e33575343c097834eb5430253a068935e642e82e Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 19 Oct 2025 11:35:00 +0800 Subject: [PATCH] core: move permission constants to common --- packages/common/index.ts | 1 + packages/common/permission.ts | 189 +++++++++++++++++ packages/hydrooj/src/model/builtin.ts | 193 +----------------- .../ScratchpadRecordsRowContainer.jsx | 18 +- packages/ui-default/constant/record.js | 103 ++++------ 5 files changed, 237 insertions(+), 267 deletions(-) create mode 100644 packages/common/permission.ts diff --git a/packages/common/index.ts b/packages/common/index.ts index eda2728de..9df320aa6 100644 --- a/packages/common/index.ts +++ b/packages/common/index.ts @@ -1,4 +1,5 @@ export * from './lang'; +export * from './permission'; export * from './status'; export * from './subtask'; export * from './types'; diff --git a/packages/common/permission.ts b/packages/common/permission.ts new file mode 100644 index 000000000..2e2c5bd10 --- /dev/null +++ b/packages/common/permission.ts @@ -0,0 +1,189 @@ +export const PERM = { + PERM_NONE: 0n, + + // Domain Settings + PERM_VIEW: 1n << 0n, + PERM_EDIT_DOMAIN: 1n << 1n, + /** @deprecated use PERM_VIEW_USER_PRIVATE_INFO instead */ + PERM_VIEW_DISPLAYNAME: 1n << 67n, + PERM_VIEW_USER_PRIVATE_INFO: 1n << 67n, + PERM_MOD_BADGE: 1n << 2n, + + // Problem + PERM_CREATE_PROBLEM: 1n << 4n, + PERM_EDIT_PROBLEM: 1n << 5n, + PERM_EDIT_PROBLEM_SELF: 1n << 6n, + PERM_VIEW_PROBLEM: 1n << 7n, + PERM_VIEW_PROBLEM_HIDDEN: 1n << 8n, + PERM_SUBMIT_PROBLEM: 1n << 9n, + PERM_READ_PROBLEM_DATA: 1n << 10n, + + // Record + PERM_VIEW_RECORD: 1n << 70n, + PERM_READ_RECORD_CODE: 1n << 12n, + PERM_READ_RECORD_CODE_ACCEPT: 1n << 66n, + PERM_REJUDGE_PROBLEM: 1n << 13n, + PERM_REJUDGE: 1n << 14n, + + // Problem Solution + PERM_VIEW_PROBLEM_SOLUTION: 1n << 15n, + PERM_VIEW_PROBLEM_SOLUTION_ACCEPT: 1n << 65n, + PERM_CREATE_PROBLEM_SOLUTION: 1n << 16n, + PERM_VOTE_PROBLEM_SOLUTION: 1n << 17n, + PERM_EDIT_PROBLEM_SOLUTION: 1n << 18n, + PERM_EDIT_PROBLEM_SOLUTION_SELF: 1n << 19n, + PERM_DELETE_PROBLEM_SOLUTION: 1n << 20n, + PERM_DELETE_PROBLEM_SOLUTION_SELF: 1n << 21n, + PERM_REPLY_PROBLEM_SOLUTION: 1n << 22n, + PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF: 1n << 24n, + PERM_DELETE_PROBLEM_SOLUTION_REPLY: 1n << 25n, + PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF: 1n << 26n, + + // Discussion + PERM_VIEW_DISCUSSION: 1n << 27n, + PERM_CREATE_DISCUSSION: 1n << 28n, + PERM_HIGHLIGHT_DISCUSSION: 1n << 29n, + PERM_PIN_DISCUSSION: 1n << 61n, + PERM_EDIT_DISCUSSION: 1n << 30n, + PERM_EDIT_DISCUSSION_SELF: 1n << 31n, + PERM_DELETE_DISCUSSION: 1n << 32n, + PERM_DELETE_DISCUSSION_SELF: 1n << 33n, + PERM_REPLY_DISCUSSION: 1n << 34n, + PERM_ADD_REACTION: 1n << 62n, + PERM_EDIT_DISCUSSION_REPLY_SELF: 1n << 36n, + PERM_DELETE_DISCUSSION_REPLY: 1n << 38n, + PERM_DELETE_DISCUSSION_REPLY_SELF: 1n << 39n, + PERM_DELETE_DISCUSSION_REPLY_SELF_DISCUSSION: 1n << 40n, + PERM_LOCK_DISCUSSION: 1n << 64n, + + // Contest + PERM_VIEW_CONTEST: 1n << 41n, + PERM_VIEW_CONTEST_SCOREBOARD: 1n << 42n, + PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD: 1n << 43n, + PERM_CREATE_CONTEST: 1n << 44n, + PERM_ATTEND_CONTEST: 1n << 45n, + PERM_EDIT_CONTEST: 1n << 50n, + PERM_EDIT_CONTEST_SELF: 1n << 51n, + PERM_VIEW_HIDDEN_CONTEST: 1n << 68n, + + // Homework + PERM_VIEW_HOMEWORK: 1n << 52n, + PERM_VIEW_HOMEWORK_SCOREBOARD: 1n << 53n, + PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD: 1n << 54n, + PERM_CREATE_HOMEWORK: 1n << 55n, + PERM_ATTEND_HOMEWORK: 1n << 56n, + PERM_EDIT_HOMEWORK: 1n << 57n, + PERM_EDIT_HOMEWORK_SELF: 1n << 58n, + PERM_VIEW_HIDDEN_HOMEWORK: 1n << 69n, + + // Training + PERM_VIEW_TRAINING: 1n << 46n, + PERM_CREATE_TRAINING: 1n << 47n, + PERM_EDIT_TRAINING: 1n << 48n, + PERM_PIN_TRAINING: 1n << 63n, + PERM_EDIT_TRAINING_SELF: 1n << 49n, + + // Ranking + PERM_VIEW_RANKING: 1n << 59n, + + // Placeholder + PERM_ALL: -1n, + PERM_BASIC: 0n, + PERM_DEFAULT: 0n, + PERM_ADMIN: -1n, + + PERM_NEVER: 1n << 60n, +}; + +PERM.PERM_BASIC = PERM.PERM_VIEW + | PERM.PERM_VIEW_PROBLEM + | PERM.PERM_VIEW_PROBLEM_SOLUTION + | PERM.PERM_VIEW_PROBLEM_SOLUTION_ACCEPT + | PERM.PERM_VIEW_DISCUSSION + | PERM.PERM_VIEW_CONTEST + | PERM.PERM_VIEW_CONTEST_SCOREBOARD + | PERM.PERM_VIEW_HOMEWORK + | PERM.PERM_VIEW_HOMEWORK_SCOREBOARD + | PERM.PERM_VIEW_TRAINING + | PERM.PERM_VIEW_RANKING + | PERM.PERM_VIEW_RECORD; + +PERM.PERM_DEFAULT = PERM.PERM_VIEW + | PERM.PERM_VIEW_USER_PRIVATE_INFO + | PERM.PERM_VIEW_PROBLEM + | PERM.PERM_EDIT_PROBLEM_SELF + | PERM.PERM_SUBMIT_PROBLEM + | PERM.PERM_VIEW_PROBLEM_SOLUTION + | PERM.PERM_VIEW_PROBLEM_SOLUTION_ACCEPT + | PERM.PERM_CREATE_PROBLEM_SOLUTION + | PERM.PERM_VOTE_PROBLEM_SOLUTION + | PERM.PERM_EDIT_PROBLEM_SOLUTION_SELF + | PERM.PERM_DELETE_PROBLEM_SOLUTION_SELF + | PERM.PERM_REPLY_PROBLEM_SOLUTION + | PERM.PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF + | PERM.PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF + | PERM.PERM_VIEW_DISCUSSION + | PERM.PERM_CREATE_DISCUSSION + | PERM.PERM_EDIT_DISCUSSION_SELF + | PERM.PERM_REPLY_DISCUSSION + | PERM.PERM_ADD_REACTION + | PERM.PERM_EDIT_DISCUSSION_REPLY_SELF + | PERM.PERM_DELETE_DISCUSSION_REPLY_SELF + | PERM.PERM_DELETE_DISCUSSION_REPLY_SELF_DISCUSSION + | PERM.PERM_VIEW_CONTEST + | PERM.PERM_VIEW_CONTEST_SCOREBOARD + | PERM.PERM_ATTEND_CONTEST + | PERM.PERM_EDIT_CONTEST_SELF + | PERM.PERM_VIEW_HOMEWORK + | PERM.PERM_VIEW_HOMEWORK_SCOREBOARD + | PERM.PERM_ATTEND_HOMEWORK + | PERM.PERM_EDIT_HOMEWORK_SELF + | PERM.PERM_VIEW_TRAINING + | PERM.PERM_CREATE_TRAINING + | PERM.PERM_EDIT_TRAINING_SELF + | PERM.PERM_SUBMIT_PROBLEM + | PERM.PERM_CREATE_PROBLEM_SOLUTION + | PERM.PERM_VOTE_PROBLEM_SOLUTION + | PERM.PERM_REPLY_PROBLEM_SOLUTION + | PERM.PERM_CREATE_DISCUSSION + | PERM.PERM_REPLY_DISCUSSION + | PERM.PERM_ATTEND_CONTEST + | PERM.PERM_CREATE_TRAINING + | PERM.PERM_ATTEND_HOMEWORK + | PERM.PERM_VIEW_RANKING + | PERM.PERM_VIEW_RECORD; + +PERM.PERM_ADMIN = PERM.PERM_ALL; + +export const PRIV = { + PRIV_NONE: 0, + PRIV_MOD_BADGE: 1 << 25, + PRIV_EDIT_SYSTEM: 1 << 0, // renamed from PRIV_SET_PRIV + PRIV_SET_PERM: 1 << 1, + PRIV_USER_PROFILE: 1 << 2, + PRIV_REGISTER_USER: 1 << 3, + PRIV_READ_PROBLEM_DATA: 1 << 4, + PRIV_READ_RECORD_CODE: 1 << 7, + PRIV_VIEW_HIDDEN_RECORD: 1 << 8, + PRIV_JUDGE: 1 << 9, // (renamed) + PRIV_CREATE_DOMAIN: 1 << 10, + PRIV_VIEW_ALL_DOMAIN: 1 << 11, + PRIV_MANAGE_ALL_DOMAIN: 1 << 12, + PRIV_REJUDGE: 1 << 13, + PRIV_VIEW_USER_SECRET: 1 << 14, + PRIV_VIEW_JUDGE_STATISTICS: 1 << 15, + PRIV_UNLIMITED_ACCESS: 1 << 22, + PRIV_VIEW_SYSTEM_NOTIFICATION: 1 << 23, + PRIV_SEND_MESSAGE: 1 << 24, + PRIV_CREATE_FILE: 1 << 16, + PRIV_UNLIMITED_QUOTA: 1 << 17, + PRIV_DELETE_FILE: 1 << 18, + + PRIV_ALL: -1, + PRIV_DEFAULT: 0, + PRIV_NEVER: 1 << 20, +}; + +PRIV.PRIV_DEFAULT = PRIV.PRIV_USER_PROFILE + + PRIV.PRIV_CREATE_FILE + + PRIV.PRIV_SEND_MESSAGE; diff --git a/packages/hydrooj/src/model/builtin.ts b/packages/hydrooj/src/model/builtin.ts index f02c73761..913134025 100644 --- a/packages/hydrooj/src/model/builtin.ts +++ b/packages/hydrooj/src/model/builtin.ts @@ -1,108 +1,12 @@ import { - getScoreColor, NORMAL_STATUS, STATUS, STATUS_CODES, STATUS_SHORT_TEXTS, + getScoreColor, NORMAL_STATUS, PERM, PRIV, STATUS, STATUS_CODES, STATUS_SHORT_TEXTS, STATUS_TEXTS, USER_GENDER_FEMALE, USER_GENDER_ICONS, USER_GENDER_MALE, USER_GENDER_OTHER, USER_GENDER_RANGE, USER_GENDERS, } from '@hydrooj/common'; +export * from '@hydrooj/common/permission'; export * from '@hydrooj/common/status'; -export const PERM = { - PERM_NONE: 0n, - - // Domain Settings - PERM_VIEW: 1n << 0n, - PERM_EDIT_DOMAIN: 1n << 1n, - /** @deprecated use PERM_VIEW_USER_PRIVATE_INFO instead */ - PERM_VIEW_DISPLAYNAME: 1n << 67n, - PERM_VIEW_USER_PRIVATE_INFO: 1n << 67n, - PERM_MOD_BADGE: 1n << 2n, - - // Problem - PERM_CREATE_PROBLEM: 1n << 4n, - PERM_EDIT_PROBLEM: 1n << 5n, - PERM_EDIT_PROBLEM_SELF: 1n << 6n, - PERM_VIEW_PROBLEM: 1n << 7n, - PERM_VIEW_PROBLEM_HIDDEN: 1n << 8n, - PERM_SUBMIT_PROBLEM: 1n << 9n, - PERM_READ_PROBLEM_DATA: 1n << 10n, - - // Record - PERM_VIEW_RECORD: 1n << 70n, - PERM_READ_RECORD_CODE: 1n << 12n, - PERM_READ_RECORD_CODE_ACCEPT: 1n << 66n, - PERM_REJUDGE_PROBLEM: 1n << 13n, - PERM_REJUDGE: 1n << 14n, - - // Problem Solution - PERM_VIEW_PROBLEM_SOLUTION: 1n << 15n, - PERM_VIEW_PROBLEM_SOLUTION_ACCEPT: 1n << 65n, - PERM_CREATE_PROBLEM_SOLUTION: 1n << 16n, - PERM_VOTE_PROBLEM_SOLUTION: 1n << 17n, - PERM_EDIT_PROBLEM_SOLUTION: 1n << 18n, - PERM_EDIT_PROBLEM_SOLUTION_SELF: 1n << 19n, - PERM_DELETE_PROBLEM_SOLUTION: 1n << 20n, - PERM_DELETE_PROBLEM_SOLUTION_SELF: 1n << 21n, - PERM_REPLY_PROBLEM_SOLUTION: 1n << 22n, - PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF: 1n << 24n, - PERM_DELETE_PROBLEM_SOLUTION_REPLY: 1n << 25n, - PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF: 1n << 26n, - - // Discussion - PERM_VIEW_DISCUSSION: 1n << 27n, - PERM_CREATE_DISCUSSION: 1n << 28n, - PERM_HIGHLIGHT_DISCUSSION: 1n << 29n, - PERM_PIN_DISCUSSION: 1n << 61n, - PERM_EDIT_DISCUSSION: 1n << 30n, - PERM_EDIT_DISCUSSION_SELF: 1n << 31n, - PERM_DELETE_DISCUSSION: 1n << 32n, - PERM_DELETE_DISCUSSION_SELF: 1n << 33n, - PERM_REPLY_DISCUSSION: 1n << 34n, - PERM_ADD_REACTION: 1n << 62n, - PERM_EDIT_DISCUSSION_REPLY_SELF: 1n << 36n, - PERM_DELETE_DISCUSSION_REPLY: 1n << 38n, - PERM_DELETE_DISCUSSION_REPLY_SELF: 1n << 39n, - PERM_DELETE_DISCUSSION_REPLY_SELF_DISCUSSION: 1n << 40n, - PERM_LOCK_DISCUSSION: 1n << 64n, - - // Contest - PERM_VIEW_CONTEST: 1n << 41n, - PERM_VIEW_CONTEST_SCOREBOARD: 1n << 42n, - PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD: 1n << 43n, - PERM_CREATE_CONTEST: 1n << 44n, - PERM_ATTEND_CONTEST: 1n << 45n, - PERM_EDIT_CONTEST: 1n << 50n, - PERM_EDIT_CONTEST_SELF: 1n << 51n, - PERM_VIEW_HIDDEN_CONTEST: 1n << 68n, - - // Homework - PERM_VIEW_HOMEWORK: 1n << 52n, - PERM_VIEW_HOMEWORK_SCOREBOARD: 1n << 53n, - PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD: 1n << 54n, - PERM_CREATE_HOMEWORK: 1n << 55n, - PERM_ATTEND_HOMEWORK: 1n << 56n, - PERM_EDIT_HOMEWORK: 1n << 57n, - PERM_EDIT_HOMEWORK_SELF: 1n << 58n, - PERM_VIEW_HIDDEN_HOMEWORK: 1n << 69n, - - // Training - PERM_VIEW_TRAINING: 1n << 46n, - PERM_CREATE_TRAINING: 1n << 47n, - PERM_EDIT_TRAINING: 1n << 48n, - PERM_PIN_TRAINING: 1n << 63n, - PERM_EDIT_TRAINING_SELF: 1n << 49n, - - // Ranking - PERM_VIEW_RANKING: 1n << 59n, - - // Placeholder - PERM_ALL: -1n, - PERM_BASIC: 0n, - PERM_DEFAULT: 0n, - PERM_ADMIN: -1n, - - PERM_NEVER: 1n << 60n, -}; - export const Permission = (family: string, key: bigint, desc: string) => ({ family, key, desc }); export const PERMS = [ @@ -179,99 +83,6 @@ for (const p of PERMS) { else PERMS_BY_FAMILY[p.family].push(p); } -PERM.PERM_BASIC = PERM.PERM_VIEW - | PERM.PERM_VIEW_PROBLEM - | PERM.PERM_VIEW_PROBLEM_SOLUTION - | PERM.PERM_VIEW_PROBLEM_SOLUTION_ACCEPT - | PERM.PERM_VIEW_DISCUSSION - | PERM.PERM_VIEW_CONTEST - | PERM.PERM_VIEW_CONTEST_SCOREBOARD - | PERM.PERM_VIEW_HOMEWORK - | PERM.PERM_VIEW_HOMEWORK_SCOREBOARD - | PERM.PERM_VIEW_TRAINING - | PERM.PERM_VIEW_RANKING - | PERM.PERM_VIEW_RECORD; - -PERM.PERM_DEFAULT = PERM.PERM_VIEW - | PERM.PERM_VIEW_USER_PRIVATE_INFO - | PERM.PERM_VIEW_PROBLEM - | PERM.PERM_EDIT_PROBLEM_SELF - | PERM.PERM_SUBMIT_PROBLEM - | PERM.PERM_VIEW_PROBLEM_SOLUTION - | PERM.PERM_VIEW_PROBLEM_SOLUTION_ACCEPT - | PERM.PERM_CREATE_PROBLEM_SOLUTION - | PERM.PERM_VOTE_PROBLEM_SOLUTION - | PERM.PERM_EDIT_PROBLEM_SOLUTION_SELF - | PERM.PERM_DELETE_PROBLEM_SOLUTION_SELF - | PERM.PERM_REPLY_PROBLEM_SOLUTION - | PERM.PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF - | PERM.PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF - | PERM.PERM_VIEW_DISCUSSION - | PERM.PERM_CREATE_DISCUSSION - | PERM.PERM_EDIT_DISCUSSION_SELF - | PERM.PERM_REPLY_DISCUSSION - | PERM.PERM_ADD_REACTION - | PERM.PERM_EDIT_DISCUSSION_REPLY_SELF - | PERM.PERM_DELETE_DISCUSSION_REPLY_SELF - | PERM.PERM_DELETE_DISCUSSION_REPLY_SELF_DISCUSSION - | PERM.PERM_VIEW_CONTEST - | PERM.PERM_VIEW_CONTEST_SCOREBOARD - | PERM.PERM_ATTEND_CONTEST - | PERM.PERM_EDIT_CONTEST_SELF - | PERM.PERM_VIEW_HOMEWORK - | PERM.PERM_VIEW_HOMEWORK_SCOREBOARD - | PERM.PERM_ATTEND_HOMEWORK - | PERM.PERM_EDIT_HOMEWORK_SELF - | PERM.PERM_VIEW_TRAINING - | PERM.PERM_CREATE_TRAINING - | PERM.PERM_EDIT_TRAINING_SELF - | PERM.PERM_SUBMIT_PROBLEM - | PERM.PERM_CREATE_PROBLEM_SOLUTION - | PERM.PERM_VOTE_PROBLEM_SOLUTION - | PERM.PERM_REPLY_PROBLEM_SOLUTION - | PERM.PERM_CREATE_DISCUSSION - | PERM.PERM_REPLY_DISCUSSION - | PERM.PERM_ATTEND_CONTEST - | PERM.PERM_CREATE_TRAINING - | PERM.PERM_ATTEND_HOMEWORK - | PERM.PERM_VIEW_RANKING - | PERM.PERM_VIEW_RECORD; - -PERM.PERM_ADMIN = PERM.PERM_ALL; - -export const PRIV = { - PRIV_NONE: 0, - PRIV_MOD_BADGE: 1 << 25, - PRIV_EDIT_SYSTEM: 1 << 0, // renamed from PRIV_SET_PRIV - PRIV_SET_PERM: 1 << 1, - PRIV_USER_PROFILE: 1 << 2, - PRIV_REGISTER_USER: 1 << 3, - PRIV_READ_PROBLEM_DATA: 1 << 4, - PRIV_READ_RECORD_CODE: 1 << 7, - PRIV_VIEW_HIDDEN_RECORD: 1 << 8, - PRIV_JUDGE: 1 << 9, // (renamed) - PRIV_CREATE_DOMAIN: 1 << 10, - PRIV_VIEW_ALL_DOMAIN: 1 << 11, - PRIV_MANAGE_ALL_DOMAIN: 1 << 12, - PRIV_REJUDGE: 1 << 13, - PRIV_VIEW_USER_SECRET: 1 << 14, - PRIV_VIEW_JUDGE_STATISTICS: 1 << 15, - PRIV_UNLIMITED_ACCESS: 1 << 22, - PRIV_VIEW_SYSTEM_NOTIFICATION: 1 << 23, - PRIV_SEND_MESSAGE: 1 << 24, - PRIV_CREATE_FILE: 1 << 16, - PRIV_UNLIMITED_QUOTA: 1 << 17, - PRIV_DELETE_FILE: 1 << 18, - - PRIV_ALL: -1, - PRIV_DEFAULT: 0, - PRIV_NEVER: 1 << 20, -}; - -PRIV.PRIV_DEFAULT = PRIV.PRIV_USER_PROFILE - + PRIV.PRIV_CREATE_FILE - + PRIV.PRIV_SEND_MESSAGE; - // people whose rank is less than 1% will get Level 10 export const LEVELS = [100, 90, 70, 55, 40, 30, 20, 10, 5, 2, 1]; diff --git a/packages/ui-default/components/scratchpad/ScratchpadRecordsRowContainer.jsx b/packages/ui-default/components/scratchpad/ScratchpadRecordsRowContainer.jsx index 456917340..2cd42c39b 100644 --- a/packages/ui-default/components/scratchpad/ScratchpadRecordsRowContainer.jsx +++ b/packages/ui-default/components/scratchpad/ScratchpadRecordsRowContainer.jsx @@ -4,30 +4,30 @@ import moment from 'moment'; import React from 'react'; import { connect } from 'react-redux'; import TimeAgo from 'timeago-react'; -import * as recordEnum from 'vj/constant/record'; +import { STATUS_CODES, STATUS_SCRATCHPAD_SHORT_TEXTS, STATUS_SCRATCHPAD_SHOW_DETAIL_FLAGS, STATUS_TEXTS } from 'vj/constant/record'; import { emulateAnchorClick, i18n, mongoId, substitute, } from 'vj/utils'; -const shouldShowDetail = (data) => recordEnum.STATUS_SCRATCHPAD_SHOW_DETAIL_FLAGS[data.status] && data.testCases?.length; +const shouldShowDetail = (data) => STATUS_SCRATCHPAD_SHOW_DETAIL_FLAGS[data.status] && data.testCases?.length; const getRecordDetail = (data) => { if (!shouldShowDetail(data)) { return ( - - {recordEnum.STATUS_TEXTS[data.status]} + + {STATUS_TEXTS[data.status]} ); } const stat = _.pick( _.groupBy(data.testCases || [], 'status'), - _.keys(recordEnum.STATUS_SCRATCHPAD_SHORT_TEXTS), + _.keys(STATUS_SCRATCHPAD_SHORT_TEXTS), ); - return _.map(recordEnum.STATUS_SCRATCHPAD_SHORT_TEXTS, (text, status) => { + return _.map(STATUS_SCRATCHPAD_SHORT_TEXTS, (text, status) => { const count = (stat[status] && stat[status].length) || 0; const cn = classNames('icol icol--stat', { 'record-status--text': count > 0, - [recordEnum.STATUS_CODES[data.status]]: count > 0, + [STATUS_CODES[data.status]]: count > 0, }); return ( @@ -62,8 +62,8 @@ export default connect(mapStateToProps, null, mergeProps)(class ScratchpadRecord // Is pretest return data.contest?.toString() === '000000000000000000000000' ? null : ( this.handleRowClick(ev, data._id)}> - - + + {getRecordDetail(data)} diff --git a/packages/ui-default/constant/record.js b/packages/ui-default/constant/record.js index bbd95b2be..bbb7471bd 100644 --- a/packages/ui-default/constant/record.js +++ b/packages/ui-default/constant/record.js @@ -1,83 +1,52 @@ // Please note that accepted < others, rp system uses this feature. -export const STATUS_WAITING = 0; -export const STATUS_ACCEPTED = 1; -export const STATUS_WRONG_ANSWER = 2; -export const STATUS_TIME_LIMIT_EXCEEDED = 3; -export const STATUS_MEMORY_LIMIT_EXCEEDED = 4; -export const STATUS_OUTPUT_LIMIT_EXCEEDED = 5; -export const STATUS_RUNTIME_ERROR = 6; -export const STATUS_COMPILE_ERROR = 7; -export const STATUS_SYSTEM_ERROR = 8; -export const STATUS_CANCELED = 9; -export const STATUS_ETC = 10; -export const STATUS_JUDGING = 20; -export const STATUS_COMPILING = 21; -export const STATUS_FETCHED = 22; -export const STATUS_IGNORED = 30; - -export const STATUS_TEXTS = { - [STATUS_WAITING]: 'Waiting', - [STATUS_ACCEPTED]: 'Accepted', - [STATUS_WRONG_ANSWER]: 'Wrong Answer', - [STATUS_TIME_LIMIT_EXCEEDED]: 'Time Exceeded', - [STATUS_MEMORY_LIMIT_EXCEEDED]: 'Memory Exceeded', - [STATUS_OUTPUT_LIMIT_EXCEEDED]: 'Output Exceeded', - [STATUS_RUNTIME_ERROR]: 'Runtime Error', - [STATUS_COMPILE_ERROR]: 'Compile Error', - [STATUS_SYSTEM_ERROR]: 'System Error', - [STATUS_CANCELED]: 'Cancelled', - [STATUS_ETC]: 'Unknown Error', - [STATUS_JUDGING]: 'Running', - [STATUS_COMPILING]: 'Compiling', - [STATUS_FETCHED]: 'Fetched', - [STATUS_IGNORED]: 'Ignored', -}; +import { STATUS } from '@hydrooj/common'; +export { STATUS, STATUS_TEXTS } from '@hydrooj/common'; export const STATUS_CODES = { - [STATUS_WAITING]: 'pending', - [STATUS_ACCEPTED]: 'pass', - [STATUS_WRONG_ANSWER]: 'fail', - [STATUS_TIME_LIMIT_EXCEEDED]: 'fail', - [STATUS_MEMORY_LIMIT_EXCEEDED]: 'fail', - [STATUS_OUTPUT_LIMIT_EXCEEDED]: 'fail', - [STATUS_RUNTIME_ERROR]: 'fail', - [STATUS_COMPILE_ERROR]: 'fail', - [STATUS_SYSTEM_ERROR]: 'fail', - [STATUS_CANCELED]: 'ignored', - [STATUS_ETC]: 'fail', - [STATUS_JUDGING]: 'progress', - [STATUS_COMPILING]: 'progress', - [STATUS_FETCHED]: 'progress', - [STATUS_IGNORED]: 'ignored', + [STATUS.STATUS_WAITING]: 'pending', + [STATUS.STATUS_ACCEPTED]: 'pass', + [STATUS.STATUS_WRONG_ANSWER]: 'fail', + [STATUS.STATUS_TIME_LIMIT_EXCEEDED]: 'fail', + [STATUS.STATUS_MEMORY_LIMIT_EXCEEDED]: 'fail', + [STATUS.STATUS_OUTPUT_LIMIT_EXCEEDED]: 'fail', + [STATUS.STATUS_RUNTIME_ERROR]: 'fail', + [STATUS.STATUS_COMPILE_ERROR]: 'fail', + [STATUS.STATUS_SYSTEM_ERROR]: 'fail', + [STATUS.STATUS_CANCELED]: 'ignored', + [STATUS.STATUS_ETC]: 'fail', + [STATUS.STATUS_JUDGING]: 'progress', + [STATUS.STATUS_COMPILING]: 'progress', + [STATUS.STATTUS_FETCHED]: 'progress', + [STATUS.STATUS_IGNORED]: 'ignored', }; /** * Whether to show detail about each test case for a submission status */ export const STATUS_SCRATCHPAD_SHOW_DETAIL_FLAGS = { - [STATUS_WAITING]: false, - [STATUS_ACCEPTED]: true, - [STATUS_WRONG_ANSWER]: true, - [STATUS_TIME_LIMIT_EXCEEDED]: true, - [STATUS_MEMORY_LIMIT_EXCEEDED]: true, - [STATUS_RUNTIME_ERROR]: true, - [STATUS_COMPILE_ERROR]: false, - [STATUS_SYSTEM_ERROR]: false, - [STATUS_CANCELED]: false, - [STATUS_ETC]: false, - [STATUS_JUDGING]: false, - [STATUS_COMPILING]: false, - [STATUS_FETCHED]: false, - [STATUS_IGNORED]: false, + [STATUS.STATUS_WAITING]: false, + [STATUS.STATUS_ACCEPTED]: true, + [STATUS.STATUS_WRONG_ANSWER]: true, + [STATUS.STATUS_TIME_LIMIT_EXCEEDED]: true, + [STATUS.STATUS_MEMORY_LIMIT_EXCEEDED]: true, + [STATUS.STATUS_RUNTIME_ERROR]: true, + [STATUS.STATUS_COMPILE_ERROR]: false, + [STATUS.STATUS_SYSTEM_ERROR]: false, + [STATUS.STATUS_CANCELED]: false, + [STATUS.STATUS_ETC]: false, + [STATUS.STATUS_JUDGING]: false, + [STATUS.STATUS_COMPILING]: false, + [STATUS.STATUS_FETCHED]: false, + [STATUS.STATUS_IGNORED]: false, }; /** * Short text to show in Scratchpad mode */ export const STATUS_SCRATCHPAD_SHORT_TEXTS = { - [STATUS_ACCEPTED]: 'AC', - [STATUS_WRONG_ANSWER]: 'WA', - [STATUS_TIME_LIMIT_EXCEEDED]: 'TLE', - [STATUS_MEMORY_LIMIT_EXCEEDED]: 'MLE', - [STATUS_RUNTIME_ERROR]: 'RTE', + [STATUS.STATUS_ACCEPTED]: 'AC', + [STATUS.STATUS_WRONG_ANSWER]: 'WA', + [STATUS.STATUS_TIME_LIMIT_EXCEEDED]: 'TLE', + [STATUS.STATUS_MEMORY_LIMIT_EXCEEDED]: 'MLE', + [STATUS.STATUS_RUNTIME_ERROR]: 'RTE', };