import { Icon, TreeNode } from '@blueprintjs/core'; import { normalizeSubtasks, readSubtasksFromFiles } from '@hydrooj/utils/lib/common'; import { TestCaseConfig } from 'hydrooj'; import { isEqual } from 'lodash'; import React from 'react'; import { DndProvider, useDrop } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; import { useDispatch, useSelector, useStore } from 'react-redux'; import { RootState } from './reducer'; import { AddTestcase } from './tree/AddTestcase'; import { SelectionManager } from './tree/SelectionManager'; import { GlobalSettings, SubtaskSettings } from './tree/SubtaskSettings'; interface TestcasesDndItem { cases: TestCaseConfig[]; subtaskId: number; } export function SubtaskNode(props: { subtaskId: number }) { const { subtaskId } = props; const subtaskIds = useSelector((s: RootState) => Object.values(s.config?.subtasks || []).map((i) => i.id), isEqual); const clen = useSelector((state: RootState) => (subtaskId === -1 ? state.config.__cases.length : state.config.subtasks.find((i) => i.id === subtaskId).cases?.length || 0)); const time = useSelector((s: RootState) => s.config?.time); const memory = useSelector((s: RootState) => s.config?.memory); const dispatch = useDispatch(); const [expand, setExpand] = React.useState(true); const [, drop] = useDrop(() => ({ accept: 'cases', canDrop(item) { return item.subtaskId !== subtaskId; }, drop(item) { dispatch({ type: 'problemconfig/moveTestcases', payload: { target: subtaskId, source: item.subtaskId, cases: item.cases, }, }); }, })); return (
  • {subtaskId !== -1 &&
    setExpand((e) => !e)}>   Subtask {subtaskId}
    }
  • ); } export function SubtaskConfigTree() { const ids = useSelector((s: RootState) => Object.values(s.config?.subtasks || []).map((i) => i.id), isEqual); const dispatch = useDispatch(); const store = useStore(); function autoConfigure() { const state = store.getState(); const subtasks = readSubtasksFromFiles(state.testdata, state.config); dispatch({ type: 'CONFIG_AUTOCASES_UPDATE', subtasks: normalizeSubtasks(subtasks, (i) => i, state.config.time, state.config.memory, true), }); } return (
    •   Auto Configure
    • {ids.map((id) => )}
    • dispatch({ type: 'CONFIG_SUBTASK_UPDATE', id: 0, key: 'add' })} >
        Add New Subtask
    ); } export function ProblemConfigTree() { return (
    ); }