import { Button, ControlGroup, Dialog, DialogBody, DialogFooter, Icon, InputGroup, } from '@blueprintjs/core'; import { readSubtasksFromFiles } from '@hydrooj/utils/lib/common'; import React, { useEffect } from 'react'; import { useSelector, useStore } from 'react-redux'; import { RootState } from '../reducer'; export function AddTestcase() { const [open, setOpen] = React.useState(false); const [input, setInput] = React.useState(''); const [output, setOutput] = React.useState(''); const [valid, setValid] = React.useState(false); const testdata = useSelector((state: RootState) => state.testdata); const store = useStore(); useEffect(() => { setValid(testdata.find((i) => i.name === input) && testdata.find((i) => i.name === output)); }, [input, output]); function onConfirm() { store.dispatch({ type: 'problemconfig/addTestcases', cases: [{ input, output }], }); setOpen(false); } function auto() { const state = store.getState(); const subtasks = readSubtasksFromFiles(state.testdata.map((i) => i.name), {}); const current = state.config.subtasks.flatMap((i) => i.cases).concat(state.config.__cases); const pending = []; for (const c of subtasks.flatMap((s) => s.cases)) { if (!current.find((i) => i.input === c.input && i.output === c.output)) { pending.push({ input: c.input, output: c.output, }); } } store.dispatch({ type: 'problemconfig/addTestcases', cases: pending, }); } return (<>
  •   Auto detect
  • setOpen(true)} >
      Add testcase
  • setOpen(false)}> {/* TODO: autocomplete */} } onChange={(e) => setInput(e.target.value)} placeholder="Input" value={input || ''} /> } onChange={(e) => setOutput(e.target.value)} placeholder="Output" value={output || ''} /> } /> ); }