ui: judge_config: fix extra_files config (#355)

pull/356/head
panda 2 years ago committed by GitHub
parent a9a7b3a451
commit b5e312b609
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -36,9 +36,17 @@ function FileIOConfig() {
function ExtraFilesConfig() { function ExtraFilesConfig() {
const Files = useSelector((state: RootState) => state.testdata); const Files = useSelector((state: RootState) => state.testdata);
const userExtraFiles = useSelector((state: RootState) => state.config.user_extra_files); const userExtraFiles = useSelector((state: RootState) => state.config.user_extra_files) || [];
const judgeExtraFiles = useSelector((state: RootState) => state.config.judge_extra_files); const judgeExtraFiles = useSelector((state: RootState) => state.config.judge_extra_files) || [];
const dispatch = useDispatch(); const dispatch = useDispatch();
const userRef = React.useRef<any>();
const judgeRef = React.useRef<any>();
React.useEffect(() => {
userRef.current.setSelectedKeys(userExtraFiles);
}, [JSON.stringify(userExtraFiles)]);
React.useEffect(() => {
judgeRef.current.setSelectedKeys(judgeExtraFiles);
}, [JSON.stringify(judgeExtraFiles)]);
return ( return (
<FormItem columns={12} label="ExtraFilesTabs" disableLabel> <FormItem columns={12} label="ExtraFilesTabs" disableLabel>
<Tabs id="ExtraFilesTabs"> <Tabs id="ExtraFilesTabs">
@ -47,8 +55,9 @@ function ExtraFilesConfig() {
title={i18n('user_extra_files')} title={i18n('user_extra_files')}
panel={( panel={(
<FileSelectAutoComplete <FileSelectAutoComplete
ref={userRef}
data={Files} data={Files}
selectedKeys={userExtraFiles || []} selectedKeys={userExtraFiles}
onChange={(val) => dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'user_extra_files', value: val.split(',') })} onChange={(val) => dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'user_extra_files', value: val.split(',') })}
multi multi
/> />
@ -59,8 +68,9 @@ function ExtraFilesConfig() {
title={i18n('judge_extra_files')} title={i18n('judge_extra_files')}
panel={( panel={(
<FileSelectAutoComplete <FileSelectAutoComplete
ref={judgeRef}
data={Files} data={Files}
selectedKeys={judgeExtraFiles || []} selectedKeys={judgeExtraFiles}
onChange={(val) => dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'judge_extra_files', value: val.split(',') })} onChange={(val) => dispatch({ type: 'CONFIG_FORM_UPDATE', key: 'judge_extra_files', value: val.split(',') })}
multi multi
/> />

@ -163,12 +163,22 @@ function GlobalTaskConfig() {
export function TaskConfig() { export function TaskConfig() {
const len = useSelector((state: RootState) => state.config.subtasks?.length); const len = useSelector((state: RootState) => state.config.subtasks?.length);
const dispatch = useDispatch();
return ( return (
<FormItem columns={12} label="Task Settings"> <FormItem columns={12} label="Task Settings">
<div className="row"> <div className="row">
<GlobalTaskConfig /> <GlobalTaskConfig />
<FormItem columns={12} label="TestCases" disableLabel> <FormItem columns={12} label="TestCases" disableLabel>
{len && [...Array(len).keys()].map((i) => <SubtasksTable index={i} key={i} />)} {len > 0
? [...Array(len).keys()].map((i) => <SubtasksTable index={i} key={i} />)
: (
<>
<span>Subtasks # </span>
<a onClick={() => dispatch({ type: 'CONFIG_SUBTASK_UPDATE', id: 0, key: 'add' })}>
<span className="icon icon-add"></span>
</a>
</>
)}
</FormItem> </FormItem>
</div> </div>
</FormItem> </FormItem>

@ -121,7 +121,7 @@ export function CasesTable({ index }) {
</a> </a>
</td> </td>
</tr> </tr>
{len && [...Array(len).keys()].map((i) => <TestCaseEntry index={index} subindex={i} key={i} />)} {len > 0 && [...Array(len).keys()].map((i) => <TestCaseEntry index={index} subindex={i} key={i} />)}
</tbody> </tbody>
</table> </table>
); );

@ -53,8 +53,9 @@ export default function reducer(state = { type: 'default', __loaded: false } as
} else if (action.key === 'cases-delete') { } else if (action.key === 'cases-delete') {
subsubtasks.cases = subsubtasks.cases.filter((k, v) => v !== action.value); subsubtasks.cases = subsubtasks.cases.filter((k, v) => v !== action.value);
} }
} else if (action.key === 'add') subtasks.push({ cases: [] }); } else if (action.key === 'add') {
else if (action.key === 'delete') return { ...state, subtasks: subtasks.filter((k, v) => v !== action.id) }; 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 { else {
if (action.value === '' || (action.key === 'if' && action.value.join('') === '')) delete subsubtasks[action.key]; if (action.value === '' || (action.key === 'if' && action.value.join('') === '')) delete subsubtasks[action.key];
else subsubtasks[action.key] = action.value; else subsubtasks[action.key] = action.value;

@ -1,6 +1,6 @@
{ {
"name": "@hydrooj/ui-default", "name": "@hydrooj/ui-default",
"version": "4.36.0", "version": "4.36.1",
"author": "undefined <i@undefined.moe>", "author": "undefined <i@undefined.moe>",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"main": "hydro.js", "main": "hydro.js",

Loading…
Cancel
Save