mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
utils&ui: move public utils & add upload
This commit is contained in:
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;
|
||||
|
||||
Reference in new issue
Block a user