utils&ui: move public utils & add upload

This commit is contained in:
panda committed 2022-05-10 01:51:29 +08:00
1 parent 1f498484d2
commit 4ccb838a06
13 files changed
+703 -397

No files matched your search

@@ -1,13 +1,11 @@
import yaml from 'js-yaml';
import type { ProblemConfigFile } from 'hydrooj/src/interface';
let autocases = { subtasks: [] };
import { cloneDeep } from 'lodash';
export default function reducer(state = { type: 'default' } as ProblemConfigFile, action): ProblemConfigFile {
switch (action.type) {
case 'CONFIG_LOAD_FULFILLED': {
// TODO set yaml schema
autocases = action.payload.autocases;
return { ...state, ...yaml.load(action.payload.config) as object };
}
case 'CONFIG_FORM_UPDATE': {
@@ -30,7 +28,9 @@ export default function reducer(state = { type: 'default' } as ProblemConfigFile
}
case 'CONFIG_AUTOCASES_UPDATE': {
const next = { ...state };
if (autocases.subtasks.length === 1) {
const autocases = action.value;
if (autocases.subtasks.length === 0) next.cases = [];
else if (autocases.subtasks.length === 1) {
next.score = autocases.subtasks[0].score;
next.cases = [];
autocases.subtasks[0].cases.map((i) => next.cases.push({
@@ -50,21 +50,32 @@ export default function reducer(state = { type: 'default' } as ProblemConfigFile
return next;
}
case 'CONFIG_CASES_UPDATE': {
const next = { ...state };
if (action.key === 'cases-add') next.cases.push(action.value);
else if (action.key === 'cases-delete') {
next.cases = next.cases.filter((k, v) => v !== action.value);
if (action.key === 'cases-add') return { ...state, cases: [...state.cases, action.value] };
if (action.key === 'cases-edit') {
const cases = cloneDeep(state.cases);
cases[action.casesId][action.casesKey] = action.value;
return { ...state, cases };
} if (action.key === 'cases-delete') {
return { ...state, cases: state.cases.filter((k, v) => v !== action.value) };
}
return next;
return state;
}
case 'CONFIG_SUBTASK_UPDATE': {
if (action.key.split('-')[0] === 'cases') {
const subtasks = cloneDeep(state.subtasks);
const subsubtasks = cloneDeep(state.subtasks[action.id]);
if (action.key === 'cases-add') subsubtasks.cases.push(action.value);
else if (action.key === 'cases-edit') subsubtasks.cases[action.casesId][action.casesKey] = action.value;
else if (action.key === 'cases-delete') {
subsubtasks.cases = subsubtasks[action.id].cases.filter((k, v) => v !== action.value);
}
subtasks[action.id] = subsubtasks;
return { ...state, subtasks };
}
const next = { ...state };
if (action.key === 'add') next.subtasks.splice(action.id, 0, { id: 0 });
else if (action.key === 'delete') delete next.subtasks[action.key];
else if (action.key === 'cases-add') next.subtasks[action.id].cases.push(action.value);
else if (action.key === 'cases-delete') {
next.subtasks[action.id].cases = next.subtasks[action.id].cases.filter((k, v) => v !== action.value);
} else next.subtasks[action.id][action.key] = action.value;
else next.subtasks[action.id][action.key] = action.value;
return next;
}
default:
@@ -4,11 +4,11 @@ export default function reducer(state = [], action) {
return state.concat(action.payload.testdata);
}
case 'CONFIG_DELETE_TESTDATA': {
return state.filter((i) => i.name !== action.payload.name);
const next = state.filter((i) => i.name !== action.value[0]);
return next;
}
case 'CONFIG_ADD_TESTDATA': {
state.push(action.payload);
return state;
return state.concat([action.value]);
}
default:
return state;