From b5e312b6092a45e09c93e91be35aa34c7eda8662 Mon Sep 17 00:00:00 2001 From: panda Date: Wed, 11 May 2022 20:38:24 +0800 Subject: [PATCH] ui: judge_config: fix extra_files config (#355) --- .../problemconfig/ProblemConfigForm.tsx | 18 ++++++++++++++---- .../components/problemconfig/SubtaskTable.tsx | 12 +++++++++++- .../problemconfig/TestCasesTable.tsx | 2 +- .../components/problemconfig/reducer/config.ts | 5 +++-- packages/ui-default/package.json | 2 +- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/packages/ui-default/components/problemconfig/ProblemConfigForm.tsx b/packages/ui-default/components/problemconfig/ProblemConfigForm.tsx index 78bb8106..5aeb8c49 100644 --- a/packages/ui-default/components/problemconfig/ProblemConfigForm.tsx +++ b/packages/ui-default/components/problemconfig/ProblemConfigForm.tsx @@ -36,9 +36,17 @@ function FileIOConfig() { function ExtraFilesConfig() { const Files = useSelector((state: RootState) => state.testdata); - const userExtraFiles = useSelector((state: RootState) => state.config.user_extra_files); - const judgeExtraFiles = useSelector((state: RootState) => state.config.judge_extra_files); + const userExtraFiles = useSelector((state: RootState) => state.config.user_extra_files) || []; + const judgeExtraFiles = useSelector((state: RootState) => state.config.judge_extra_files) || []; const dispatch = useDispatch(); + const userRef = React.useRef(); + const judgeRef = React.useRef(); + React.useEffect(() => { + userRef.current.setSelectedKeys(userExtraFiles); + }, [JSON.stringify(userExtraFiles)]); + React.useEffect(() => { + judgeRef.current.setSelectedKeys(judgeExtraFiles); + }, [JSON.stringify(judgeExtraFiles)]); return ( @@ -47,8 +55,9 @@ function ExtraFilesConfig() { title={i18n('user_extra_files')} panel={( dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'user_extra_files', value: val.split(',') })} multi /> @@ -59,8 +68,9 @@ function ExtraFilesConfig() { title={i18n('judge_extra_files')} panel={( dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'judge_extra_files', value: val.split(',') })} multi /> diff --git a/packages/ui-default/components/problemconfig/SubtaskTable.tsx b/packages/ui-default/components/problemconfig/SubtaskTable.tsx index 94339d24..9bc1583c 100644 --- a/packages/ui-default/components/problemconfig/SubtaskTable.tsx +++ b/packages/ui-default/components/problemconfig/SubtaskTable.tsx @@ -163,12 +163,22 @@ function GlobalTaskConfig() { export function TaskConfig() { const len = useSelector((state: RootState) => state.config.subtasks?.length); + const dispatch = useDispatch(); return (
- {len && [...Array(len).keys()].map((i) => )} + {len > 0 + ? [...Array(len).keys()].map((i) => ) + : ( + <> + Subtasks # + dispatch({ type: 'CONFIG_SUBTASK_UPDATE', id: 0, key: 'add' })}> + + + + )}
diff --git a/packages/ui-default/components/problemconfig/TestCasesTable.tsx b/packages/ui-default/components/problemconfig/TestCasesTable.tsx index e587798c..689f46be 100644 --- a/packages/ui-default/components/problemconfig/TestCasesTable.tsx +++ b/packages/ui-default/components/problemconfig/TestCasesTable.tsx @@ -121,7 +121,7 @@ export function CasesTable({ index }) { - {len && [...Array(len).keys()].map((i) => )} + {len > 0 && [...Array(len).keys()].map((i) => )} ); diff --git a/packages/ui-default/components/problemconfig/reducer/config.ts b/packages/ui-default/components/problemconfig/reducer/config.ts index 5c1aa47f..711168ca 100644 --- a/packages/ui-default/components/problemconfig/reducer/config.ts +++ b/packages/ui-default/components/problemconfig/reducer/config.ts @@ -53,8 +53,9 @@ export default function reducer(state = { type: 'default', __loaded: false } as } else if (action.key === 'cases-delete') { subsubtasks.cases = subsubtasks.cases.filter((k, v) => v !== action.value); } - } else if (action.key === 'add') subtasks.push({ cases: [] }); - else if (action.key === 'delete') return { ...state, subtasks: subtasks.filter((k, v) => v !== action.id) }; + } else if (action.key === 'add') { + return { ...state, subtasks: [...subtasks, { time: state.time || '1s', memory: state.memory || '256m', cases: [] }] }; + } else if (action.key === 'delete') return { ...state, subtasks: subtasks.filter((k, v) => v !== action.id) }; else { if (action.value === '' || (action.key === 'if' && action.value.join('') === '')) delete subsubtasks[action.key]; else subsubtasks[action.key] = action.value; diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index dbac78c0..d54dd3a3 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.36.0", + "version": "4.36.1", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js",